changeset 0e8c33ac7eeb in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=0e8c33ac7eeb
description:
        Allow modify record name on the reports

        issue10749
        review373541002
diffstat:

 CHANGELOG                              |   1 +
 doc/topics/reports/index.rst           |   3 +++
 trytond/ir/action.py                   |  22 ++++++++++++++++++++++
 trytond/ir/message.xml                 |   3 +++
 trytond/ir/view/action_report_form.xml |   3 ++-
 trytond/report/report.py               |  10 +++++++++-
 6 files changed, 40 insertions(+), 2 deletions(-)

diffs (121 lines):

diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb CHANGELOG
--- a/CHANGELOG Thu Oct 07 17:46:14 2021 +0200
+++ b/CHANGELOG Fri Oct 08 19:26:46 2021 +0200
@@ -1,3 +1,4 @@
+* Allow modify record name on the reports
 * Add methods to format number and symbol on Lang
 * Add format number with symbol on Report
 * Allow locking tables by calling ModelSQL.lock without records
diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb doc/topics/reports/index.rst
--- a/doc/topics/reports/index.rst      Thu Oct 07 17:46:14 2021 +0200
+++ b/doc/topics/reports/index.rst      Fri Oct 08 19:26:46 2021 +0200
@@ -56,6 +56,9 @@
       report is called with more than one record, a zip file containing all the
       reports will be generated.
 
+    * ``record_name``: A Genshi Expression to compute the filename for each
+      record.
+
 
 Report Usage
 ============
diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb trytond/ir/action.py
--- a/trytond/ir/action.py      Thu Oct 07 17:46:14 2021 +0200
+++ b/trytond/ir/action.py      Fri Oct 08 19:26:46 2021 +0200
@@ -6,6 +6,7 @@
 from functools import partial
 
 from sql import Null
+from genshi.template.text import TextTemplate
 
 from trytond.cache import Cache, MemoryCache
 from trytond.config import config
@@ -549,6 +550,10 @@
             ], translate=False,
         string='Extension', help='Leave empty for the same as template, '
         'see LibreOffice documentation for compatible format.')
+    record_name = fields.Char(
+        "Record Name", translate=True,
+        help="A Genshi expression to compute the name using 'record'.\n"
+        "Leave empty for the default name.",)
     module = fields.Char('Module', readonly=True, select=True)
     _template_cache = MemoryCache('ir.action.report.template', context=False)
 
@@ -695,6 +700,23 @@
     def set_template_cached(self, template):
         self._template_cache.set(self.id, template)
 
+    @classmethod
+    def validate(cls, reports):
+        super().validate(reports)
+        for report in reports:
+            report.check_record_name()
+
+    def check_record_name(self):
+        if not self.record_name:
+            return
+        try:
+            TextTemplate(self.record_name)
+        except Exception as exception:
+            raise ValidationError(
+                gettext('ir.msg_report_invalid_record_name',
+                    report=self.rec_name,
+                    exception=exception)) from exception
+
 
 class ActionActWindow(ActionMixin, ModelSQL, ModelView):
     "Action act window"
diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb trytond/ir/message.xml
--- a/trytond/ir/message.xml    Thu Oct 07 17:46:14 2021 +0200
+++ b/trytond/ir/message.xml    Fri Oct 08 19:26:46 2021 +0200
@@ -238,6 +238,9 @@
         <record model="ir.message" id="msg_report_invalid_email">
             <field name="text">Invalid email definition for report 
"%(name)s".</field>
         </record>
+        <record model="ir.message" id="msg_report_invalid_record_name">
+            <field name="text">Invalid record name definition for report 
"%(report)s" with exception "%(exception)s".</field>
+        </record>
         <record model="ir.message" id="msg_action_invalid_views">
             <field name="text">Invalid view "%(view)s" for action 
"%(action)s".</field>
         </record>
diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb trytond/ir/view/action_report_form.xml
--- a/trytond/ir/view/action_report_form.xml    Thu Oct 07 17:46:14 2021 +0200
+++ b/trytond/ir/view/action_report_form.xml    Fri Oct 08 19:26:46 2021 +0200
@@ -22,7 +22,8 @@
             <field name="report_name"/>
             <label name="icon"/>
             <field name="icon"/>
-            <newline/>
+            <label name="record_name"/>
+            <field name="record_name"/>
             <label name="report_content"/>
             <group col="-1" id="report_content">
                 <field name="report_content" xexpand="0"/>
diff -r 4eb15d8c9f95 -r 0e8c33ac7eeb trytond/report/report.py
--- a/trytond/report/report.py  Thu Oct 07 17:46:14 2021 +0200
+++ b/trytond/report/report.py  Fri Oct 08 19:26:46 2021 +0200
@@ -29,6 +29,7 @@
     weasyprint = None
 
 from genshi.filters import Translator
+from genshi.template.text import TextTemplate
 
 from trytond.i18n import gettext
 from trytond.pool import Pool, PoolBase
@@ -161,8 +162,15 @@
             name_length = 0
             record_count = len(records)
             max_length = REPORT_NAME_MAX_LENGTH - len(str(record_count)) - 2
+            if action_report.record_name:
+                template = TextTemplate(action_report.record_name)
+            else:
+                template = None
             for record in records[:5]:
-                record_name = record.rec_name
+                if template:
+                    record_name = template.generate(record=record).render()
+                else:
+                    record_name = record.rec_name
                 name_length += len(record_name) + 1
                 if name_length > max_length:
                     break

Reply via email to