From 2c3e562ddeebf1ebe6495ca15bd0d9b0594dde34 Mon Sep 17 00:00:00 2001 From: Mihai Fekete Date: Wed, 8 Jul 2020 10:37:24 +0300 Subject: [PATCH 1/9] [MIG] [13.0] Migrate base_comment_template from account_invoic_reporting. --- base_comment_template/README.rst | 72 ++++-- base_comment_template/__manifest__.py | 11 +- .../migrations/14.0.1.0.0/pre-migration.py | 26 +++ base_comment_template/models/__init__.py | 4 +- .../models/base_comment_template.py | 207 ++++++++++++++++++ base_comment_template/models/comment.py | 48 ---- base_comment_template/models/ir_model.py | 33 +++ base_comment_template/models/res_partner.py | 15 +- base_comment_template/readme/CONFIGURE.rst | 8 + base_comment_template/readme/CONTRIBUTORS.rst | 4 + base_comment_template/readme/DESCRIPTION.rst | 18 +- base_comment_template/readme/USAGE.rst | 31 +++ .../security/ir.model.access.csv | 1 + base_comment_template/security/security.xml | 5 +- base_comment_template/tests/fake_models.py | 34 +++ .../tests/test_base_comment_template.py | 145 +++++++++--- ...iew.xml => base_comment_template_view.xml} | 74 ++++--- .../views/res_partner_view.xml | 21 ++ 18 files changed, 607 insertions(+), 150 deletions(-) create mode 100644 base_comment_template/migrations/14.0.1.0.0/pre-migration.py create mode 100644 base_comment_template/models/base_comment_template.py delete mode 100644 base_comment_template/models/comment.py create mode 100644 base_comment_template/models/ir_model.py create mode 100644 base_comment_template/readme/CONFIGURE.rst create mode 100644 base_comment_template/readme/USAGE.rst create mode 100644 base_comment_template/tests/fake_models.py rename base_comment_template/views/{comment_view.xml => base_comment_template_view.xml} (64%) create mode 100644 base_comment_template/views/res_partner_view.xml diff --git a/base_comment_template/README.rst b/base_comment_template/README.rst index cfb55db7c..edc149ed7 100644 --- a/base_comment_template/README.rst +++ b/base_comment_template/README.rst @@ -13,24 +13,30 @@ Base Comments Templates .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github - :target: https://github.com/OCA/reporting-engine/tree/14.0/base_comment_template +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting-engine-lightgray.png?logo=github + :target: https://github.com/OCA/reporting-engine/tree/13.0/base_comment_template :alt: OCA/reporting-engine .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-base_comment_template + :target: https://translation.odoo-community.org/projects/reporting-engine-13-0/reporting-engine-13-0-base_comment_template :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/143/14.0 + :target: https://runbot.odoo-community.org/runbot/143/13.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| -Add a new model to define templates of comments to print on -documents. +**Table of contents** -Two positions are available for the comments: -* above document lines -* below document lines +.. contents:: + :local: + +Configuration +============= + +Go to *Settings > Technical > Reporting > Comment Templates* and start designing you comment templates. + +The template are general, and can be attached to any Model and based on some domain defined in the template. +You can define one default template per Model and domain, which can be overwritten for any partner. This module is the base module for following modules: @@ -39,10 +45,40 @@ This module is the base module for following modules: * invoice_comment_template * stock_picking_comment_template -**Table of contents** +Usage +===== + +#. Go to *Settings > Technical > Reporting > Comment Templates*. +#. Create a new record. +#. Define the Company the template is linked or leave default for all companies. +#. Define the Partner the template is linked or leave default for all partners. +#. Define the Model, Domain the template is linked. +#. Define the Position where the template will be printed: + + * above document lines + * below document lines + +You should have at least one template with Default field set, if you choose a Partner the template is deselected as a Default one. +If you create a new template with the same configuration (Model, Domain, Position) and set it as Default, the previous one will be deselected as a default one. + +The template is a html field which will be rendered just a mail template, so you can use variables like ${object}, ${user}, ${ctx} to add dynamic content. + +Change the report related to the model from configuration and add a statement like: + +

+ + + +

+ +

+ + + +

+ +You should always use t-if since the method returns False if no template is found. -.. contents:: - :local: Bug Tracker =========== @@ -50,7 +86,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -77,7 +113,11 @@ Contributors * `Druidoo `_: * Iván Todorovich -* Pierre Verkest + +* `NextERP Romania `_: + + * Fekete Mihai + Maintainers ~~~~~~~~~~~ @@ -92,6 +132,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/reporting-engine `_ project on GitHub. +This module is part of the `OCA/reporting-engine `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_comment_template/__manifest__.py b/base_comment_template/__manifest__.py index 9a4af1bfc..7765b277d 100644 --- a/base_comment_template/__manifest__.py +++ b/base_comment_template/__manifest__.py @@ -3,18 +3,19 @@ { "name": "Base Comments Templates", - "summary": "Comments templates on documents", + "summary": "Add conditional mako template to any report " + "on models that inherits comment.template.", "version": "14.0.1.0.0", - "category": "Sale", + "category": "Reporting", "website": "https://github.com/OCA/reporting-engine", "author": "Camptocamp, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, - "depends": ["base"], + "depends": ["base", "mail"], "data": [ "security/ir.model.access.csv", "security/security.xml", - "views/comment_view.xml", - "views/res_partner.xml", + "views/base_comment_template_view.xml", + "views/res_partner_view.xml", ], } diff --git a/base_comment_template/migrations/14.0.1.0.0/pre-migration.py b/base_comment_template/migrations/14.0.1.0.0/pre-migration.py new file mode 100644 index 000000000..fd5a0c1cb --- /dev/null +++ b/base_comment_template/migrations/14.0.1.0.0/pre-migration.py @@ -0,0 +1,26 @@ +# Copyright 2020 NextERP Romania SRL +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + # Not tested + properties = env["ir.property"].search( + [ + ( + "fields_id", + "=", + env.ref("base.field_res_partner_property_comment_template_id").id, + ) + ] + ) + if properties: + for template in properties.mapped("value_reference"): + template_id = template.value_reference.split(",")[-1] + if template_id: + template = env["base.comment.template"].browse(template_id) + part_prop = properties.filtered(lambda p: p.value_reference == template) + template.partner_ids = [ + (prop["res_id"] or "").split(",")[-1] for prop in part_prop + ] diff --git a/base_comment_template/models/__init__.py b/base_comment_template/models/__init__.py index b62fbec11..4d140780f 100644 --- a/base_comment_template/models/__init__.py +++ b/base_comment_template/models/__init__.py @@ -1,3 +1,3 @@ -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import comment +from . import base_comment_template from . import res_partner +from . import ir_model diff --git a/base_comment_template/models/base_comment_template.py b/base_comment_template/models/base_comment_template.py new file mode 100644 index 000000000..58136b8c4 --- /dev/null +++ b/base_comment_template/models/base_comment_template.py @@ -0,0 +1,207 @@ +# Copyright 2014 Guewen Baconnier (Camptocamp SA) +# Copyright 2013-2014 Nicolas Bessi (Camptocamp SA) +# Copyright 2020 NextERP Romania SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from lxml import etree + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.tools.safe_eval import safe_eval + + +class CommentTemplate(models.AbstractModel): + _name = "comment.template" + _description = ( + "base.comment.template to put header and footer " + "in reports based on created comment templates" + ) + + base_comment_template_ids = fields.Many2many( + comodel_name="base.comment.template", + string="Comment templates", + compute="_compute_base_comment_template_ids", + search="_search_follower_partners", + help="Templates that can be included in your reports", + ) + + def _compute_base_comment_template_ids(self): + company_id = self.env.company.id + present_model_id = self.env["ir.model"].search([("name", "=", self._name)]) + templates = ( + self.env["base.comment.template"] + .sudo() + .search( + [ + ("model_ids", "in", present_model_id.id), + "|", + ("company_id", "=", company_id), + ("company_id", "=", False), + ] + ) + ) + # using read() below is much faster than followers.mapped('res_id') + model_mako_templates_ids = templates.mapped("id") + for record in self: + record.base_comment_template_ids = record.id in model_mako_templates_ids + + def get_comment_template( + self, position="before_lines", company_id=False, partner_id=False + ): + """ Method that is called from report xml and is returning the + position template as a html if exists + """ + self.ensure_one() + if not company_id: + company_id = self.env.company.id + present_model_id = self.env["ir.model"].search([("model", "=", self._name)]) + default_dom = [ + ("model_ids", "in", present_model_id.id), + ("position", "=", position), + ] + lang = False + if partner_id and "partner_id" in self._fields: + default_dom += [ + "|", + ("partner_ids", "=", False), + ("partner_ids", "in", partner_id), + ] + lang = self.env["res.partner"].browse(partner_id).lang + if company_id and "company_id" in self._fields: + if partner_id and "partner_id" in self._fields: + default_dom.insert(-3, "&") + default_dom += [ + "|", + ("company_id", "=", company_id), + ("company_id", "=", False), + ] + templates = self.env["base.comment.template"].search( + default_dom, order="priority" + ) + if lang: + templates = templates.with_context({"lang": lang}) + template = False + if templates: + for templ in templates: + if self in self.search(safe_eval(templ.domain or "[]")): + template = templ + break + if not template: + return "" + return self.env["mail.template"]._render_template( + template.text, self._name, self.id, post_process=True + ) + + +class BaseCommentTemplate(models.Model): + """Comment templates printed on reports""" + + _name = "base.comment.template" + _description = "Comments Template" + + active = fields.Boolean(default=True) + position = fields.Selection( + selection=[("before_lines", "Before lines"), ("after_lines", "After lines")], + required=True, + default="before_lines", + help="Position on document", + ) + name = fields.Char( + string="Name", + translate=True, + required=True, + help="Name/description of this mako comment template", + ) + text = fields.Html( + string="Template", + translate=True, + required=True, + sanitize=False, + help="This is the mako template that will be inserted into reports.", + ) + company_id = fields.Many2one( + "res.company", + string="Company", + ondelete="cascade", + index=True, + help="If set, it'll only be available for this company" + "(if the model_id has company_id)", + ) + partner_ids = fields.Many2many( + comodel_name="res.partner", + string="Partner", + ondelete="cascade", + help="If set, the comment template will be available only for this " + "partner (if the model_id has a partner_id field).", + ) + + model_ids = fields.Many2many( + comodel_name="ir.model", + string="IR Model", + ondelete="cascade", + required=True, + help="This comment template will be available on this models." + "You can see here only models that have report on them " + "and have inherited comment.template", + ) + + domain = fields.Char( + "Filter Domain", + required=True, + default="[]", + help="This comment template will be available only for objects " + "that satisfy the condition", + ) + + priority = fields.Integer( + default=10, copy=False, help="the highest priority = the smallest number", + ) + + @api.constrains("domain", "priority", "model_ids", "position") + def _check_partners_in_company_id(self): + templates = self.search([]) + for record in self: + other_template_same_models_and_priority = templates.filtered( + lambda t: t.priority == record.priority + and set(record.model_ids).intersection(record.model_ids) + and t.domain == record.domain + and t.position == record.position + and t.id != record.id + ) + if other_template_same_models_and_priority: + raise ValidationError( + _( + "The are other records with same models, priority, " + "domain and position." + ) + ) + + @api.model + def fields_view_get( + self, view_id=None, view_type="form", toolbar=False, submenu=False + ): + # modify the form view of base_commnent_template + # Add domain on model_id to get only models that have a report set + # and those whom have inherited this model + res = super().fields_view_get( + view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu + ) + if view_type == "form": + doc = etree.XML(res["arch"]) + for node in doc.xpath("//field[@name='model_ids']"): + report_models = self.env["ir.actions.report"].search([]).mapped("model") + model_ids = ( + self.env["ir.model"] + .search( + [ + ("model", "in", report_models), + ("is_comment_template", "=", True), + "!", + ("name", "=like", "ir.%"), + ] + ) + .ids + ) + model_filter = "[('id','in'," + str(model_ids) + ")]" + node.set("domain", model_filter) + res["arch"] = etree.tostring(doc, encoding="unicode") + return res diff --git a/base_comment_template/models/comment.py b/base_comment_template/models/comment.py deleted file mode 100644 index a8b6c85b0..000000000 --- a/base_comment_template/models/comment.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2014 Guewen Baconnier (Camptocamp SA) -# Copyright 2013-2014 Nicolas Bessi (Camptocamp SA) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from odoo import fields, models - - -class BaseCommentTemplate(models.Model): - _name = "base.comment.template" - _description = "Base comment template" - - active = fields.Boolean(default=True) - - name = fields.Char( - string="Comment summary", - required=True, - ) - - position = fields.Selection( - selection=[ - ("before_lines", "Before lines"), - ("after_lines", "After lines"), - ], - required=True, - default="before_lines", - help="Position on document", - ) - - text = fields.Html( - string="Comment", - translate=True, - required=True, - ) - - company_id = fields.Many2one( - "res.company", - string="Company", - help="If set, it'll only be available for this company", - ondelete="cascade", - index=True, - ) - - def get_value(self, partner_id=False): - self.ensure_one() - lang = None - if partner_id: - lang = self.env["res.partner"].browse(partner_id).lang - return self.with_context(lang=lang).text diff --git a/base_comment_template/models/ir_model.py b/base_comment_template/models/ir_model.py new file mode 100644 index 000000000..49150a119 --- /dev/null +++ b/base_comment_template/models/ir_model.py @@ -0,0 +1,33 @@ +# Copyright 2020 NextERP Romania SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class IrModel(models.Model): + _inherit = "ir.model" + + is_comment_template = fields.Boolean( + string="Comment Template", + default=False, + help="Whether this model supports in reports to add " "comment templates.", + ) + + def _reflect_model_params(self, model): + vals = super(IrModel, self)._reflect_model_params(model) + vals["is_comment_template"] = issubclass( + type(model), self.pool["comment.template"] + ) + return vals + + @api.model + def _instanciate(self, model_data): + model_class = super(IrModel, self)._instanciate(model_data) + if ( + model_data.get("is_comment_template") + and model_class._name != "comment.template" + ): + parents = model_class._inherit or [] + parents = [parents] if isinstance(parents, str) else parents + model_class._inherit = parents + ["comment.template"] + return model_class diff --git a/base_comment_template/models/res_partner.py b/base_comment_template/models/res_partner.py index 0a4cc9cc4..0f6124961 100644 --- a/base_comment_template/models/res_partner.py +++ b/base_comment_template/models/res_partner.py @@ -1,19 +1,14 @@ +# Copyright 2020 NextERP Romania SRL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import fields, models class ResPartner(models.Model): _inherit = "res.partner" - property_comment_template_id = fields.Many2one( + base_comment_template_ids = fields.Many2many( comodel_name="base.comment.template", - string="Conditions template", - company_dependent=True, + string="Comment Templates", + help="Specific partner comments that can be included in reports", ) - - @api.model - def _commercial_fields(self): - res = super(ResPartner, self)._commercial_fields() - res += ["property_comment_template_id"] - return res diff --git a/base_comment_template/readme/CONFIGURE.rst b/base_comment_template/readme/CONFIGURE.rst new file mode 100644 index 000000000..aa45ae16b --- /dev/null +++ b/base_comment_template/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ +Go to *Settings > Technical > Reporting > Comment Templates* and start designing you comment templates. + +This module is the base module for following modules: + +* sale_comment_template +* purchase_comment_template +* invoice_comment_template +* stock_picking_comment_template diff --git a/base_comment_template/readme/CONTRIBUTORS.rst b/base_comment_template/readme/CONTRIBUTORS.rst index b53942768..7d6d8d13a 100644 --- a/base_comment_template/readme/CONTRIBUTORS.rst +++ b/base_comment_template/readme/CONTRIBUTORS.rst @@ -11,3 +11,7 @@ * Iván Todorovich * Pierre Verkest + +* `NextERP Romania `_: + + * Fekete Mihai diff --git a/base_comment_template/readme/DESCRIPTION.rst b/base_comment_template/readme/DESCRIPTION.rst index 4b538a9f8..6909ad5d5 100644 --- a/base_comment_template/readme/DESCRIPTION.rst +++ b/base_comment_template/readme/DESCRIPTION.rst @@ -1,9 +1,19 @@ -Add a new model to define templates of comments to print on -documents. +Add a new mixin class to define templates of comments to print on documents. +The comment templates can be defined like make templates, so you can use variables from linked models. Two positions are available for the comments: -* above document lines -* below document lines + +* above document lines (before_lines) +* below document lines (after_lines) + +The template are general, and can be attached to any Model and based on some domain defined in the template. +You can define one default template per Model and domain, which can be overwritten for any company and partners. +It has a priority field (smaller number = higher priority) + +In existing reports, if you add this line will get the comment template if you created one like + +* ( or without any parameter) + This module is the base module for following modules: diff --git a/base_comment_template/readme/USAGE.rst b/base_comment_template/readme/USAGE.rst new file mode 100644 index 000000000..2be8054ac --- /dev/null +++ b/base_comment_template/readme/USAGE.rst @@ -0,0 +1,31 @@ +#. Go to *Settings* and activate the developer mode. +#. Go to *Settings > Technical > Reporting > Comment Templates*. +#. Create a new record. +#. Define the Company the template is linked or leave default for all companies. +#. Define the Partner the template is linked or leave default for all partners. +#. Define the Model, Domain the template is linked. +#. Define the Position where the template will be printed: + + * above document lines + * below document lines + +You should have at least one template with Default field set, if you choose a Partner the template is deselected as a Default one. +If you create a new template with the same configuration (Model, Domain, Position) and set it as Default, the previous one will be deselected as a default one. + +The template is a html field which will be rendered just like a mail template, so you can use variables like ${object}, ${user}, ${ctx} to add dynamic content. + +Change the report related to the model from configuration and add a statement like: + +

+ + + +

+ +

+ + + +

+ +You should always use t-if since the method returns False if no template is found. diff --git a/base_comment_template/security/ir.model.access.csv b/base_comment_template/security/ir.model.access.csv index 7485600f7..d2db39e34 100644 --- a/base_comment_template/security/ir.model.access.csv +++ b/base_comment_template/security/ir.model.access.csv @@ -1,2 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_base_comment_template_user,access_base_comment_template_user,model_base_comment_template,,1,0,0,0 access_base_comment_template,access_base_comment_template no one,model_base_comment_template,base.group_no_one,1,1,1,1 diff --git a/base_comment_template/security/security.xml b/base_comment_template/security/security.xml index e8fa2692b..3b6c70041 100644 --- a/base_comment_template/security/security.xml +++ b/base_comment_template/security/security.xml @@ -5,9 +5,8 @@ Base comment multi-company - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] diff --git a/base_comment_template/tests/fake_models.py b/base_comment_template/tests/fake_models.py new file mode 100644 index 000000000..02ee0ca23 --- /dev/null +++ b/base_comment_template/tests/fake_models.py @@ -0,0 +1,34 @@ +# Copyright 2017 LasLabs Inc. +# Copyright 2018 ACSONE +# Copyright 2018 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo import models + + +def setup_test_model(env, model_cls): + """Pass a test model class and initialize it. + + Courtesy of SBidoul from https://github.com/OCA/mis-builder :) + """ + model_cls._build_model(env.registry, env.cr) + env.registry.setup_models(env.cr) + env.registry.init_models( + env.cr, [model_cls._name], dict(env.context, update_custom_fields=True) + ) + + +def teardown_test_model(env, model_cls): + """Pass a test model class and deinitialize it. + + Courtesy of SBidoul from https://github.com/OCA/mis-builder :) + """ + if not getattr(model_cls, "_teardown_no_delete", False): + del env.registry.models[model_cls._name] + env.registry.setup_models(env.cr) + + +class ResUsers(models.Model): + _name = "res.users" + _inherit = ["res.users", "comment.template"] + _teardown_no_delete = True diff --git a/base_comment_template/tests/test_base_comment_template.py b/base_comment_template/tests/test_base_comment_template.py index a803974c1..b273250f6 100644 --- a/base_comment_template/tests/test_base_comment_template.py +++ b/base_comment_template/tests/test_base_comment_template.py @@ -1,37 +1,128 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +# Copyright 2020 NextERP Romania SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo.tests import common + +from .fake_models import ResUsers, setup_test_model, teardown_test_model -class TestResPartner(TransactionCase): - def setUp(self): - super(TestResPartner, self).setUp() - self.template_id = self.env["base.comment.template"].create( +class TestCommentTemplate(common.SavepointCase): + at_install = False + post_install = True + + @classmethod + def setUpClass(cls): + super().setUpClass() + setup_test_model(cls.env, ResUsers) + cls.user_obj = cls.env["ir.model"].search([("model", "=", "res.users")]) + + cls.user = cls.env.ref("base.user_demo") + cls.user2 = cls.env.ref("base.demo_user0") + cls.partner_id = cls.env.ref("base.res_partner_12") + cls.partner2_id = cls.env.ref("base.res_partner_10") + cls.company = cls.env["res.company"].create({"name": "Test Company 1"}) + cls.before_template_id = cls.env["base.comment.template"].create( { - "name": "Comment before lines", - "position": "before_lines", - "text": "

Text before lines

", + "name": "before_lines", + "text": "Text before lines", + "model_ids": [(6, 0, cls.user_obj.ids)], + "priority": 5, + } + ) + cls.after_template_id = cls.env["base.comment.template"].create( + { + "name": "after_lines", + "position": "after_lines", + "text": "Text after lines", + "model_ids": [(6, 0, cls.user_obj.ids)], + "priority": 6, } ) - def test_commercial_partner_fields(self): - # Azure Interior - partner_id = self.env.ref("base.res_partner_12") - partner_id.property_comment_template_id = self.template_id.id - # Test childs propagation of commercial partner field - for child_id in partner_id.child_ids: - self.assertEqual(child_id.property_comment_template_id, self.template_id) + @classmethod + def tearDownClass(cls): + teardown_test_model(cls.env, ResUsers) + super(TestCommentTemplate, cls).tearDownClass() - def test_get_value_without_partner(self): - self.assertEqual(self.template_id.get_value(), "

Text before lines

") + def test_general_template(self): + # Check getting default comment template + templ = self.user.get_comment_template("before_lines") + self.assertEqual(templ, "Text before lines") + templ = self.user.get_comment_template("after_lines") + self.assertEqual(templ, "Text after lines") - def test_get_value_with_partner(self): - self.env["res.lang"]._activate_lang("fr_BE") - partner = self.env.ref("base.res_partner_12") - partner.write({"lang": "fr_BE"}) - self.template_id.with_context(lang="fr_BE").write( - {"text": "

Testing translated fr_BE

"} + def test_company_general_template(self): + # Check getting default comment template company + self.before_template_id.company_id = self.company + templ = self.user.get_comment_template("before_lines") + self.assertEqual(templ, "") + templ = self.user.get_comment_template( + "before_lines", company_id=self.company.id ) - self.assertEqual( - self.template_id.get_value(partner_id=partner.id), - "

Testing translated fr_BE

", + self.assertEqual(templ, "Text before lines") + templ = self.user.get_comment_template("after_lines") + self.assertEqual(templ, "Text after lines") + + def test_partner_template(self): + # Check getting the comment template if partner is set + self.before_template_id.partner_ids = self.partner2_id.ids + templ = self.user.get_comment_template( + "before_lines", partner_id=self.partner2_id.id ) + self.assertEqual(templ, "Text before lines") + templ = self.user.get_comment_template( + "before_lines", partner_id=self.partner_id.id + ) + self.assertEqual(templ, "") + templ = self.user.get_comment_template("after_lines") + self.assertEqual(templ, "Text after lines") + + def test_partner_template_domain(self): + # Check getting the comment template if domain is set + self.before_template_id.partner_ids = self.partner2_id.ids + self.before_template_id.domain = "[('id', 'in', %s)]" % self.user.ids + templ = self.user.get_comment_template( + "before_lines", partner_id=self.partner2_id.id + ) + self.assertEqual(templ, "Text before lines") + templ = self.user2.get_comment_template( + "before_lines", partner_id=self.partner_id.id + ) + self.assertEqual(templ, "") + + def test_company_partner_template_domain(self): + # Check getting the comment template with company and if domain is set + self.before_template_id.company_id = self.company + templ = self.user.get_comment_template("before_lines") + self.assertEqual(templ, "") + templ = self.user.get_comment_template( + "before_lines", company_id=self.company.id + ) + self.assertEqual(templ, "Text before lines") + self.before_template_id.partner_ids = self.partner2_id.ids + self.before_template_id.domain = "[('id', 'in', %s)]" % self.user.ids + templ = self.user.get_comment_template( + "before_lines", partner_id=self.partner2_id.id + ) + self.assertEqual(templ, "") + self.before_template_id.company_id = self.env.user.company_id + templ = self.user.get_comment_template( + "before_lines", partner_id=self.partner2_id.id + ) + self.assertEqual(templ, "Text before lines") + templ = self.user2.get_comment_template( + "before_lines", partner_id=self.partner2_id.id + ) + self.assertEqual(templ, "") + + def test_priority(self): + # Check setting default template will change previous record default + new_template = self.env["base.comment.template"].create( + { + "name": "before_lines", + "text": "Text before lines 1", + "model_ids": [(6, 0, self.user_obj.ids)], + "priority": 2, + } + ) + + self.assertEqual(new_template.text, "Text before lines 1") diff --git a/base_comment_template/views/comment_view.xml b/base_comment_template/views/base_comment_template_view.xml similarity index 64% rename from base_comment_template/views/comment_view.xml rename to base_comment_template/views/base_comment_template_view.xml index 6f46d7198..ab5b97321 100644 --- a/base_comment_template/views/comment_view.xml +++ b/base_comment_template/views/base_comment_template_view.xml @@ -1,6 +1,20 @@ - + + base.comment.template.search + base.comment.template + + + + + + + + + + + + base.comment.template.search base.comment.template @@ -9,6 +23,10 @@ + + + + @@ -20,18 +38,12 @@
- +

@@ -40,17 +52,15 @@

- - - + + + + + @@ -62,20 +72,6 @@
- - - account.comment.template.list - base.comment.template - - - - - - - - - - Comment Templates ir.actions.act_window @@ -83,5 +79,13 @@ tree,form - + + diff --git a/base_comment_template/views/res_partner_view.xml b/base_comment_template/views/res_partner_view.xml new file mode 100644 index 000000000..74b19e528 --- /dev/null +++ b/base_comment_template/views/res_partner_view.xml @@ -0,0 +1,21 @@ + + + res.partner + + + + + + + + + + From e1011fa5195623f6fab4bda8e80c66bd582a21b4 Mon Sep 17 00:00:00 2001 From: "teodoralexandru@nexterp.ro" Date: Sun, 4 Oct 2020 21:49:53 +0300 Subject: [PATCH 2/9] [IMP] base_comment_template: Code refactorization --- .../models/base_comment_template.py | 28 ------------- .../tests/test_base_comment_template.py | 42 ++++++++++++++++++- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/base_comment_template/models/base_comment_template.py b/base_comment_template/models/base_comment_template.py index 58136b8c4..489d73534 100644 --- a/base_comment_template/models/base_comment_template.py +++ b/base_comment_template/models/base_comment_template.py @@ -16,34 +16,6 @@ class CommentTemplate(models.AbstractModel): "in reports based on created comment templates" ) - base_comment_template_ids = fields.Many2many( - comodel_name="base.comment.template", - string="Comment templates", - compute="_compute_base_comment_template_ids", - search="_search_follower_partners", - help="Templates that can be included in your reports", - ) - - def _compute_base_comment_template_ids(self): - company_id = self.env.company.id - present_model_id = self.env["ir.model"].search([("name", "=", self._name)]) - templates = ( - self.env["base.comment.template"] - .sudo() - .search( - [ - ("model_ids", "in", present_model_id.id), - "|", - ("company_id", "=", company_id), - ("company_id", "=", False), - ] - ) - ) - # using read() below is much faster than followers.mapped('res_id') - model_mako_templates_ids = templates.mapped("id") - for record in self: - record.base_comment_template_ids = record.id in model_mako_templates_ids - def get_comment_template( self, position="before_lines", company_id=False, partner_id=False ): diff --git a/base_comment_template/tests/test_base_comment_template.py b/base_comment_template/tests/test_base_comment_template.py index b273250f6..1655d5d37 100644 --- a/base_comment_template/tests/test_base_comment_template.py +++ b/base_comment_template/tests/test_base_comment_template.py @@ -1,5 +1,7 @@ # Copyright 2020 NextERP Romania SRL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from lxml import etree + from odoo.tests import common from .fake_models import ResUsers, setup_test_model, teardown_test_model @@ -19,7 +21,7 @@ class TestCommentTemplate(common.SavepointCase): cls.user2 = cls.env.ref("base.demo_user0") cls.partner_id = cls.env.ref("base.res_partner_12") cls.partner2_id = cls.env.ref("base.res_partner_10") - cls.company = cls.env["res.company"].create({"name": "Test Company 1"}) + cls.company = cls.env["res.company"].search([], limit=1) cls.before_template_id = cls.env["base.comment.template"].create( { "name": "before_lines", @@ -126,3 +128,41 @@ class TestCommentTemplate(common.SavepointCase): ) self.assertEqual(new_template.text, "Text before lines 1") + + def test_check_partners_in_company_id(self): + """ should rise any error because exist the same model, + domain, position and priority""" + with self.assertRaises(Exception) as context: + self.before_template_id_2 = self.env["base.comment.template"].create( + { + "name": "before_lines", + "text": "Text before lines", + "model_ids": [(6, 0, self.user_obj.ids)], + "priority": 5, + } + ) + self.assertTrue( + "The are other records with same models, priority, domain and position." + == context.exception.args[0] + ) + + # should not rise any error + self.before_template_id_3 = self.env["base.comment.template"].create( + { + "name": "before_lines", + "text": "Text before lines", + "model_ids": [(6, 0, self.user_obj.ids)], + "priority": 55, + } + ) + + def test_fields_view_get( + self, view_id=None, view_type="form", toolbar=False, submenu=False + ): + bf_tmp_form_view = self.before_template_id.fields_view_get() + if view_type == "form": + doc = etree.XML(bf_tmp_form_view["arch"]) + model_ids = doc.xpath("//field[@name='model_ids']") + domain = model_ids[0].attrib["domain"] + # if domain exist means that the filtering is done and the function is ok + self.assertTrue(domain != "") From 8fef4ecdba0f5f361da1f14d22afc55255f0f02e Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Tue, 9 Feb 2021 11:29:46 +0100 Subject: [PATCH 3/9] [IMP] base_comment_template: Improved sentences on fields --- base_comment_template/README.rst | 38 +++- .../i18n/base_comment_template.pot | 135 +++++++++++-- base_comment_template/i18n/es.po | 181 +++++++++++++++--- .../models/base_comment_template.py | 22 +-- base_comment_template/models/ir_model.py | 2 +- base_comment_template/readme/CONTRIBUTORS.rst | 4 + .../static/description/index.html | 98 ++++++++-- .../tests/test_base_comment_template.py | 2 +- 8 files changed, 395 insertions(+), 87 deletions(-) diff --git a/base_comment_template/README.rst b/base_comment_template/README.rst index edc149ed7..11871f63f 100644 --- a/base_comment_template/README.rst +++ b/base_comment_template/README.rst @@ -13,7 +13,7 @@ Base Comments Templates .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting-engine-lightgray.png?logo=github +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github :target: https://github.com/OCA/reporting-engine/tree/13.0/base_comment_template :alt: OCA/reporting-engine .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png @@ -23,7 +23,31 @@ Base Comments Templates :target: https://runbot.odoo-community.org/runbot/143/13.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| + +Add a new mixin class to define templates of comments to print on documents. +The comment templates can be defined like make templates, so you can use variables from linked models. + +Two positions are available for the comments: + +* above document lines (before_lines) +* below document lines (after_lines) + +The template are general, and can be attached to any Model and based on some domain defined in the template. +You can define one default template per Model and domain, which can be overwritten for any company and partners. +It has a priority field (smaller number = higher priority) + +In existing reports, if you add this line will get the comment template if you created one like + +* ( or without any parameter) + + +This module is the base module for following modules: + +* sale_comment_template +* purchase_comment_template +* invoice_comment_template +* stock_picking_comment_template **Table of contents** @@ -35,9 +59,6 @@ Configuration Go to *Settings > Technical > Reporting > Comment Templates* and start designing you comment templates. -The template are general, and can be attached to any Model and based on some domain defined in the template. -You can define one default template per Model and domain, which can be overwritten for any partner. - This module is the base module for following modules: * sale_comment_template @@ -48,6 +69,7 @@ This module is the base module for following modules: Usage ===== +#. Go to *Settings* and activate the developer mode. #. Go to *Settings > Technical > Reporting > Comment Templates*. #. Create a new record. #. Define the Company the template is linked or leave default for all companies. @@ -61,7 +83,7 @@ Usage You should have at least one template with Default field set, if you choose a Partner the template is deselected as a Default one. If you create a new template with the same configuration (Model, Domain, Position) and set it as Default, the previous one will be deselected as a default one. -The template is a html field which will be rendered just a mail template, so you can use variables like ${object}, ${user}, ${ctx} to add dynamic content. +The template is a html field which will be rendered just like a mail template, so you can use variables like ${object}, ${user}, ${ctx} to add dynamic content. Change the report related to the model from configuration and add a statement like: @@ -79,7 +101,6 @@ Change the report related to the model from configuration and add a statement li You should always use t-if since the method returns False if no template is found. - Bug Tracker =========== @@ -118,6 +139,9 @@ Contributors * Fekete Mihai +* `Tecnativa `_: + + * Carlos Roca Maintainers ~~~~~~~~~~~ diff --git a/base_comment_template/i18n/base_comment_template.pot b/base_comment_template/i18n/base_comment_template.pot index 649f377da..cf594bd3e 100644 --- a/base_comment_template/i18n/base_comment_template.pot +++ b/base_comment_template/i18n/base_comment_template.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-09 09:55+0000\n" +"PO-Revision-Date: 2021-02-09 09:55+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -24,8 +26,8 @@ msgid "After lines" msgstr "" #. module: base_comment_template -#: model:ir.model,name:base_comment_template.model_base_comment_template -msgid "Base comment template" +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form +msgid "Archived" msgstr "" #. module: base_comment_template @@ -34,21 +36,30 @@ msgid "Before lines" msgstr "" #. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__text #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form msgid "Comment" msgstr "" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_ir_model__is_comment_template +msgid "Comment Template" +msgstr "" + #. module: base_comment_template #: model:ir.actions.act_window,name:base_comment_template.action_base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__base_comment_template_ids +#: model:ir.model.fields,field_description:base_comment_template.field_res_users__base_comment_template_ids +#: model:ir.ui.menu,name:base_comment_template.reports_base_comment_template_menuitem #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_search +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_tree +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_partner_form msgid "Comment Templates" msgstr "" #. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__name -msgid "Comment summary" +#: model:ir.model,name:base_comment_template.model_base_comment_template +msgid "Comments Template" msgstr "" #. module: base_comment_template @@ -56,12 +67,6 @@ msgstr "" msgid "Company" msgstr "" -#. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__property_comment_template_id -#: model:ir.model.fields,field_description:base_comment_template.field_res_users__property_comment_template_id -msgid "Conditions template" -msgstr "" - #. module: base_comment_template #: model:ir.model,name:base_comment_template.model_res_partner msgid "Contact" @@ -79,24 +84,43 @@ msgstr "" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__display_name -#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__display_name +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template__display_name msgid "Display Name" msgstr "" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__domain +msgid "Filter Domain" +msgstr "" + #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__id -#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__id +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template__id msgid "ID" msgstr "" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__model_ids +msgid "IR Model" +msgstr "" + #. module: base_comment_template #: model:ir.model.fields,help:base_comment_template.field_base_comment_template__company_id -msgid "If set, it'll only be available for this company" +msgid "" +"If set, the comment template will be available only for the selected " +"company." +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__partner_ids +msgid "" +"If set, the comment template will be available only for the selected " +"partner." msgstr "" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template____last_update -#: model:ir.model.fields,field_description:base_comment_template.field_res_partner____last_update +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template____last_update msgid "Last Modified on" msgstr "" @@ -111,16 +135,91 @@ msgid "Last Updated on" msgstr "" #. module: base_comment_template +#: model:ir.model,name:base_comment_template.model_ir_model +msgid "Models" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__name #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form msgid "Name" msgstr "" +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__name +msgid "Name/description of this comment template" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__partner_ids +msgid "Partner" +msgstr "" + #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__position -msgid "Position" +msgid "Position on document" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__priority +msgid "Priority" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_res_partner__base_comment_template_ids +#: model:ir.model.fields,help:base_comment_template.field_res_users__base_comment_template_ids +msgid "Specific partner comments that can be included in reports" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__text +msgid "Template" +msgstr "" + +#. module: base_comment_template +#: code:addons/base_comment_template/models/base_comment_template.py:0 +#, python-format +msgid "" +"There are other records with same models, priority, domain and position." +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__model_ids +msgid "" +"This comment template will be available on this models. You can see here " +"only models allowed to set the coment template." +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__domain +msgid "" +"This comment template will be available only for objects that satisfy the " +"condition" msgstr "" #. module: base_comment_template #: model:ir.model.fields,help:base_comment_template.field_base_comment_template__position -msgid "Position on document" +msgid "This field allows to select the position of the comment on reports." +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__text +msgid "This is the text template that will be inserted into reports." +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_ir_model__is_comment_template +msgid "Whether this model supports in reports to add comment templates." +msgstr "" + +#. module: base_comment_template +#: model:ir.model,name:base_comment_template.model_comment_template +msgid "" +"base.comment.template to put header and footer in reports based on created " +"comment templates" +msgstr "" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__priority +msgid "the highest priority = the smallest number" msgstr "" diff --git a/base_comment_template/i18n/es.po b/base_comment_template/i18n/es.po index 682c1f066..e5d06266f 100644 --- a/base_comment_template/i18n/es.po +++ b/base_comment_template/i18n/es.po @@ -8,70 +8,73 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-05 01:40+0000\n" -"PO-Revision-Date: 2018-01-05 01:40+0000\n" -"Last-Translator: enjolras , 2018\n" +"POT-Creation-Date: 2021-02-09 09:55+0000\n" +"PO-Revision-Date: 2021-02-09 11:21+0100\n" +"Last-Translator: Carlos \n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__active msgid "Active" -msgstr "" +msgstr "Activo" #. module: base_comment_template -#: selection:base.comment.template,position:0 +#: model:ir.model.fields.selection,name:base_comment_template.selection__base_comment_template__position__after_lines msgid "After lines" msgstr "Después de las líneas" #. module: base_comment_template -#: model:ir.model,name:base_comment_template.model_base_comment_template -msgid "Base comment template" -msgstr "Plantilla de comentario base" +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form +msgid "Archived" +msgstr "Archivado" #. module: base_comment_template -#: selection:base.comment.template,position:0 +#: model:ir.model.fields.selection,name:base_comment_template.selection__base_comment_template__position__before_lines msgid "Before lines" msgstr "Antes de las líneas" #. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__text #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form msgid "Comment" msgstr "Comentario" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_ir_model__is_comment_template +msgid "Comment Template" +msgstr "Plantilla de comentario" + #. module: base_comment_template #: model:ir.actions.act_window,name:base_comment_template.action_base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__base_comment_template_ids +#: model:ir.model.fields,field_description:base_comment_template.field_res_users__base_comment_template_ids +#: model:ir.ui.menu,name:base_comment_template.reports_base_comment_template_menuitem #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_search +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_tree +#: model_terms:ir.ui.view,arch_db:base_comment_template.view_partner_form msgid "Comment Templates" msgstr "Plantillas de comentarios" #. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__name -msgid "Comment summary" -msgstr "Índice de comentarios" +#: model:ir.model,name:base_comment_template.model_base_comment_template +msgid "Comments Template" +msgstr "Plantillas de comentarios" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__company_id msgid "Company" -msgstr "" - -#. module: base_comment_template -#: model:ir.model.fields,field_description:base_comment_template.field_res_partner__property_comment_template_id -#: model:ir.model.fields,field_description:base_comment_template.field_res_users__property_comment_template_id -#, fuzzy -msgid "Conditions template" -msgstr "Plantillas de comentarios" +msgstr "Compañía" #. module: base_comment_template #: model:ir.model,name:base_comment_template.model_res_partner msgid "Contact" -msgstr "" +msgstr "Contacto" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__create_uid @@ -85,21 +88,45 @@ msgstr "Creado el" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__display_name +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template__display_name msgid "Display Name" msgstr "Nombre mostrado" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__domain +msgid "Filter Domain" +msgstr "Filtro de dominio" + #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__id +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template__id msgid "ID" msgstr "ID" +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__model_ids +msgid "IR Model" +msgstr "Modelo" + #. module: base_comment_template #: model:ir.model.fields,help:base_comment_template.field_base_comment_template__company_id -msgid "If set, it'll only be available for this company" +msgid "" +"If set, the comment template will be available only for the selected company." msgstr "" +"Si se define, la plantilla de comentario va a estar disponible para las " +"compañías seleccionadas." + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__partner_ids +msgid "" +"If set, the comment template will be available only for the selected partner." +msgstr "" +"Si se define, la plantilla de comentario va a estar disponible para los " +"contactos seleccionados." #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template____last_update +#: model:ir.model.fields,field_description:base_comment_template.field_comment_template____last_update msgid "Last Modified on" msgstr "Última modificación el" @@ -114,16 +141,112 @@ msgid "Last Updated on" msgstr "Última modificación el" #. module: base_comment_template +#: model:ir.model,name:base_comment_template.model_ir_model +msgid "Models" +msgstr "Modelos" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__name #: model_terms:ir.ui.view,arch_db:base_comment_template.view_base_comment_template_form msgid "Name" -msgstr "" +msgstr "Nombre" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__name +msgid "Name/description of this comment template" +msgstr "Nombre de la plantilla de comentario" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__partner_ids +msgid "Partner" +msgstr "Contacto" #. module: base_comment_template #: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__position -msgid "Position" -msgstr "Posició" +msgid "Position on document" +msgstr "Posición en el documento" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__priority +msgid "Priority" +msgstr "Prioridad" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_res_partner__base_comment_template_ids +#: model:ir.model.fields,help:base_comment_template.field_res_users__base_comment_template_ids +msgid "Specific partner comments that can be included in reports" +msgstr "Comentarios de contactos que se pueden incluir en informes" + +#. module: base_comment_template +#: model:ir.model.fields,field_description:base_comment_template.field_base_comment_template__text +msgid "Template" +msgstr "Plantilla de comentario" + +#. module: base_comment_template +#: code:addons/base_comment_template/models/base_comment_template.py:0 +#, python-format +msgid "" +"There are other records with same models, priority, domain and position." +msgstr "" +"Hay otros registros con los mismos datos en modelo, prioridad, dominio y " +"posición." + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__model_ids +msgid "" +"This comment template will be available on this models. You can see here " +"only models allowed to set the coment template." +msgstr "" +"Esta plantilla de comentarios estará disponible en estos modelos. Sólo vas a " +"ver los modelos autorizados para configurar la plantilla de comentarios." + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__domain +msgid "" +"This comment template will be available only for objects that satisfy the " +"condition" +msgstr "" +"Esta plantilla de comentarios estará disponible solo para objetos que " +"satisfagan la condición" #. module: base_comment_template #: model:ir.model.fields,help:base_comment_template.field_base_comment_template__position -msgid "Position on document" -msgstr "Posición en el documento" +msgid "This field allows to select the position of the comment on reports." +msgstr "" +"Este campo permite seleccionar la posición del comentario en los informes." + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__text +msgid "This is the text template that will be inserted into reports." +msgstr "Esta es la plantilla de texto que se insertará en los informes." + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_ir_model__is_comment_template +msgid "Whether this model supports in reports to add comment templates." +msgstr "" +"Si este modelo admite en los informes, añadir plantillas de comentarios." + +#. module: base_comment_template +#: model:ir.model,name:base_comment_template.model_comment_template +msgid "" +"base.comment.template to put header and footer in reports based on created " +"comment templates" +msgstr "" +"base.comment.template para poner cabecera y pie de página en los informes " +"basados en las plantillas de comentarios creadas" + +#. module: base_comment_template +#: model:ir.model.fields,help:base_comment_template.field_base_comment_template__priority +msgid "the highest priority = the smallest number" +msgstr "Mayor prioridad = número menor" + +#~ msgid "Comment summary" +#~ msgstr "Índice de comentarios" + +#, fuzzy +#~| msgid "Comment Templates" +#~ msgid "Conditions template" +#~ msgstr "Plantillas de comentarios" + +#~ msgid "Position" +#~ msgstr "Posició" diff --git a/base_comment_template/models/base_comment_template.py b/base_comment_template/models/base_comment_template.py index 489d73534..33e98581d 100644 --- a/base_comment_template/models/base_comment_template.py +++ b/base_comment_template/models/base_comment_template.py @@ -72,38 +72,39 @@ class BaseCommentTemplate(models.Model): active = fields.Boolean(default=True) position = fields.Selection( + string="Position on document", selection=[("before_lines", "Before lines"), ("after_lines", "After lines")], required=True, default="before_lines", - help="Position on document", + help="This field allows to select the position of the comment on reports.", ) name = fields.Char( string="Name", translate=True, required=True, - help="Name/description of this mako comment template", + help="Name/description of this comment template", ) text = fields.Html( string="Template", translate=True, required=True, sanitize=False, - help="This is the mako template that will be inserted into reports.", + help="This is the text template that will be inserted into reports.", ) company_id = fields.Many2one( "res.company", string="Company", ondelete="cascade", index=True, - help="If set, it'll only be available for this company" - "(if the model_id has company_id)", + help="If set, the comment template will be available only for the selected " + "company.", ) partner_ids = fields.Many2many( comodel_name="res.partner", string="Partner", ondelete="cascade", - help="If set, the comment template will be available only for this " - "partner (if the model_id has a partner_id field).", + help="If set, the comment template will be available only for the selected " + "partner.", ) model_ids = fields.Many2many( @@ -111,9 +112,8 @@ class BaseCommentTemplate(models.Model): string="IR Model", ondelete="cascade", required=True, - help="This comment template will be available on this models." - "You can see here only models that have report on them " - "and have inherited comment.template", + help="This comment template will be available on this models. " + "You can see here only models allowed to set the coment template.", ) domain = fields.Char( @@ -142,7 +142,7 @@ class BaseCommentTemplate(models.Model): if other_template_same_models_and_priority: raise ValidationError( _( - "The are other records with same models, priority, " + "There are other records with same models, priority, " "domain and position." ) ) diff --git a/base_comment_template/models/ir_model.py b/base_comment_template/models/ir_model.py index 49150a119..b799732b0 100644 --- a/base_comment_template/models/ir_model.py +++ b/base_comment_template/models/ir_model.py @@ -10,7 +10,7 @@ class IrModel(models.Model): is_comment_template = fields.Boolean( string="Comment Template", default=False, - help="Whether this model supports in reports to add " "comment templates.", + help="Whether this model supports in reports to add comment templates.", ) def _reflect_model_params(self, model): diff --git a/base_comment_template/readme/CONTRIBUTORS.rst b/base_comment_template/readme/CONTRIBUTORS.rst index 7d6d8d13a..8a42546c3 100644 --- a/base_comment_template/readme/CONTRIBUTORS.rst +++ b/base_comment_template/readme/CONTRIBUTORS.rst @@ -15,3 +15,7 @@ * `NextERP Romania `_: * Fekete Mihai + +* `Tecnativa `_: + + * Carlos Roca diff --git a/base_comment_template/static/description/index.html b/base_comment_template/static/description/index.html index 354d7e202..886c20139 100644 --- a/base_comment_template/static/description/index.html +++ b/base_comment_template/static/description/index.html @@ -3,7 +3,7 @@ - + Base Comments Templates