Public release from ruodoo-project: 19.0 - 2026-05-10 21:19:01 UTC
This commit is contained in:
18
custom_report_field/README.md
Normal file
18
custom_report_field/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Custom report values
|
||||
Adds custom computed fields for reports.
|
||||
Adds new tab with custom fields in report form, where custom fields can be
|
||||
created. Here is possible to write python code block for computing
|
||||
field's values, and this fields with computed values vill be accessible in report
|
||||
template.
|
||||
|
||||
Also adds wizard where custom fields values can be validated before report creation.
|
||||
If it is required to change some value, it shoud be changed in record where it stored.
|
||||
|
||||
Fields in Custom Field creation form:
|
||||
"name": Name for showing in interface.
|
||||
"tech_name": by this literal field's value can be accessed in templates.
|
||||
"required": If value can't be empty, in fact it must be equivalent to True.
|
||||
"visible": Will this field be showed in validation wizard or not.
|
||||
"Description": Text field storing info for users.
|
||||
"Computing field's value" tab: Place for input python code computing field's value.
|
||||
Help about code writing can be found in neighbour "Help" tab.
|
||||
2
custom_report_field/__init__.py
Normal file
2
custom_report_field/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from . import models
|
||||
from . import wizard
|
||||
29
custom_report_field/__manifest__.py
Normal file
29
custom_report_field/__manifest__.py
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "Custom report field",
|
||||
"summary": """Creates custom computed fields for reports""",
|
||||
"description": """
|
||||
Adds custom computed fields for reports.
|
||||
Adds new tab with custom fields in report form, where custom fields can be
|
||||
created. Here is possible write some python code for computing field's value,
|
||||
and this field with computed value will be accessible in report template.
|
||||
|
||||
Also adds wizard where custom fields values can be validated before report
|
||||
creation.
|
||||
""",
|
||||
"author": "RYDLAB",
|
||||
"website": "https://rydlab.ru",
|
||||
"category": "Technical",
|
||||
"version": "19.0.2025.11.11",
|
||||
"license": "LGPL-3",
|
||||
"depends": ["base", "web", "report_monetary_helpers"],
|
||||
"data": [
|
||||
"security/ir.model.access.csv",
|
||||
"views/ir_actions_report_views.xml",
|
||||
"wizard/custom_report_field_values_wizard_views.xml",
|
||||
],
|
||||
"assets": {
|
||||
"web.assets_backend": [
|
||||
"custom_report_field/static/src/js/action_manager_report.js",
|
||||
],
|
||||
},
|
||||
}
|
||||
297
custom_report_field/i18n/custom_report_field.pot
Normal file
297
custom_report_field/i18n/custom_report_field.pot
Normal file
@ -0,0 +1,297 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * custom_report_field
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-12-29 08:05+0000\n"
|
||||
"PO-Revision-Date: 2022-12-29 08:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>UserError</code>, <code>Warning</code>: Warning Exceptions to use with"
|
||||
" <code>raise</code>"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "<code>env</code>: Odoo Environment on which the action is triggered"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>format_number</code>: Method for formatting number representation in "
|
||||
"report."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>log(message, level='info')</code>: logging function to record debug "
|
||||
"information in <code>ir.logging</code> table"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>model</code>: Odoo Model of the record on which the action is "
|
||||
"triggered; is a void recordset"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>record</code>: record on which the action is triggered; may be be void"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>records</code>: recordset of all records on which the action is "
|
||||
"triggered in multi mode; may be void"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>time</code>, <code>datetime</code>, <code>dateutil</code>, "
|
||||
"<code>timezone</code>: useful Python libraries"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__default_value
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Computing field's value"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__create_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__create_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__create_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__create_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Custom fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field
|
||||
msgid "Custom report field"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__field_values_ids
|
||||
msgid "Custom report field values"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_ir_actions_report__custom_report_field_ids
|
||||
msgid "Custom report fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field_values_wizard
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field_values_wizard_line
|
||||
msgid "Custom report values field verify wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__description
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__description
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__description
|
||||
msgid ""
|
||||
"Description for this field to be showed in fields list in verify wizard."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__display_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__display_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"Example of Python code:<br/>\n"
|
||||
" <code style=\"white-space: pre-wrap;\">\n"
|
||||
" partner_rec = env['res.partner'].search([('name', '=' record.name)])<br/>\n"
|
||||
" value = partner_rec.parent_id.vat if partner_rec else \"\"<br/>\n"
|
||||
" </code>"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.custom_report_values_wizard_view_form
|
||||
msgid "Get report"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Help"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Help with Python code"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__required
|
||||
msgid ""
|
||||
"If checked, it will not be possible to generate a document without a default"
|
||||
" value."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"It's signature: <code>format_number(number, r_acc, dec_sep, div_by_3)</code><br/>\n"
|
||||
" Param <code>number</code> - <code>int</code> or <code>float</code> to represent,<br/>\n"
|
||||
" Param <code>r_acc</code> - <code>int</code> is round accuracy, default value is <code>2</code><br/>\n"
|
||||
" Param <code>dec_sep</code> - <code>str</code> is decimal separator, default value is <code>,</code><br/>\n"
|
||||
" Param <code>div_by_3</code> - <code>bool</code> is flag for add whitespase separators after each 3 digits id integer part. Default value is <code>True</code><br/>\n"
|
||||
" Returns number as <code>str</code>.<br/>"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field____last_update
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard____last_update
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__write_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__write_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__write_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__write_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__name
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__technical_name
|
||||
msgid "Name for using in templates"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__ir_actions_report_id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__ir_actions_report_id
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_ir_actions_report
|
||||
msgid "Report Action"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.custom_report_values_wizard_view_form
|
||||
msgid "Report values"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__required
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__sequence
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__visible
|
||||
msgid "Show in wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__technical_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__technical_name
|
||||
msgid "Technical Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "The following variables can be used:"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__default_value
|
||||
msgid ""
|
||||
"This field contains a Python code which can use the same variables as the "
|
||||
"'code' field in the server action, except moment that the computation result"
|
||||
" should be assigned into the 'value' variable.Also available method "
|
||||
"'format_number' for formatting numbers representation in report. Returns "
|
||||
"number as string."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "To return a value, assign: <code>value = ...</code>"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__visible
|
||||
msgid "To show this field in fields list in verification wizard."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_ir_actions_report__validate_custom_report_field
|
||||
msgid "Validate Custom Report Field"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__value
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__wizard_id
|
||||
msgid "Wizard"
|
||||
msgstr ""
|
||||
331
custom_report_field/i18n/ru.po
Normal file
331
custom_report_field/i18n/ru.po
Normal file
@ -0,0 +1,331 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * custom_report_field
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-12-29 08:06+0000\n"
|
||||
"PO-Revision-Date: 2022-12-29 08:06+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>UserError</code>, <code>Warning</code>: Warning Exceptions to use with"
|
||||
" <code>raise</code>"
|
||||
msgstr ""
|
||||
"<code>UserError</code>, <code>Warning</code>: Исключение для использования с"
|
||||
" <code>raise</code>"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "<code>env</code>: Odoo Environment on which the action is triggered"
|
||||
msgstr "<code>env</code>: Окружение Odoo, на котором вызывается action."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>format_number</code>: Method for formatting number representation in "
|
||||
"report."
|
||||
msgstr ""
|
||||
"<code>format_number</code>: Метод для форматирования числовых представлений в "
|
||||
"отчете."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>log(message, level='info')</code>: logging function to record debug "
|
||||
"information in <code>ir.logging</code> table"
|
||||
msgstr ""
|
||||
"<code>log(message, level='info')</code>: Метод логирования для записи "
|
||||
"отладочной информации<code>ir.logging</code> table"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>model</code>: Odoo Model of the record on which the action is "
|
||||
"triggered; is a void recordset"
|
||||
msgstr ""
|
||||
"<code>model</code>: Модель записи Odoo, на которой вызван action; Является "
|
||||
"пустым множеством записей."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>record</code>: record on which the action is triggered; may be be void"
|
||||
msgstr ""
|
||||
"<code>record</code>: Запись, на которой вызван action; Может быть пустой."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>records</code>: recordset of all records on which the action is "
|
||||
"triggered in multi mode; may be void"
|
||||
msgstr ""
|
||||
"<code>records</code>: Множество записей, на которых вызван action в режиме "
|
||||
"нескольких записей; Может быть пустым."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"<code>time</code>, <code>datetime</code>, <code>dateutil</code>, "
|
||||
"<code>timezone</code>: useful Python libraries"
|
||||
msgstr ""
|
||||
"<code>time</code>, <code>datetime</code>, <code>dateutil</code>, "
|
||||
"<code>timezone</code>: полезные библиотеки Python"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__default_value
|
||||
msgid "Code"
|
||||
msgstr "Код"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Computing field's value"
|
||||
msgstr "Вычисление значения поля"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__create_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__create_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Создал"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__create_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__create_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Создан"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Custom fields"
|
||||
msgstr "Пользовательские поля"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field
|
||||
msgid "Custom report field"
|
||||
msgstr "Пользовательское поле отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__field_values_ids
|
||||
msgid "Custom report field values"
|
||||
msgstr "Значения пользовательских полей отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_ir_actions_report__custom_report_field_ids
|
||||
msgid "Custom report fields"
|
||||
msgstr "Пользовательские поля отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field_values_wizard
|
||||
#: model:ir.model,name:custom_report_field.model_custom_report_field_values_wizard_line
|
||||
msgid "Custom report values field verify wizard"
|
||||
msgstr "Мастер проверки значений пользовательских полей отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__description
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__description
|
||||
msgid "Description"
|
||||
msgstr "Описание"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__description
|
||||
msgid ""
|
||||
"Description for this field to be showed in fields list in verify wizard."
|
||||
msgstr ""
|
||||
"Описание для поля, которое будет отображаться в списке полей мастера "
|
||||
"проверки."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__display_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__display_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Отображаемое имя"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"Example of Python code:<br/>\n"
|
||||
" <code style=\"white-space: pre-wrap;\">\n"
|
||||
" partner_rec = env['res.partner'].search([('name', '=' record.name)])<br/>\n"
|
||||
" value = partner_rec.parent_id.vat if partner_rec else \"\"<br/>\n"
|
||||
" </code>"
|
||||
msgstr ""
|
||||
"Пример кода Python:<br/>\n"
|
||||
" <code style=\"white-space: pre-wrap;\">\n"
|
||||
" partner_rec = env['res.partner'].search([('name', '=' record.name)])<br/>\n"
|
||||
" value = partner_rec.parent_id.vat if partner_rec else \"\"<br/> \n"
|
||||
" </code>"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.custom_report_values_wizard_view_form
|
||||
msgid "Get report"
|
||||
msgstr "Получить отчет"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Help"
|
||||
msgstr "Помощь"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "Help with Python code"
|
||||
msgstr "Помощь с кодом Python"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__required
|
||||
msgid ""
|
||||
"If checked, it will not be possible to generate a document without a default"
|
||||
" value."
|
||||
msgstr ""
|
||||
"Если отмечено, то невозможно будет сгенерировать документ без значения для "
|
||||
"этого поля."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid ""
|
||||
"It's signature: <code>format_number(number, r_acc, dec_sep, div_by_3)</code><br/>\n"
|
||||
" Param <code>number</code> - <code>int</code> or <code>float</code> to represent,<br/>\n"
|
||||
" Param <code>r_acc</code> - <code>int</code> is round accuracy, default value is <code>2</code><br/>\n"
|
||||
" Param <code>dec_sep</code> - <code>str</code> is decimal separator, default value is <code>,</code><br/>\n"
|
||||
" Param <code>div_by_3</code> - <code>bool</code> is flag for add whitespase separators after each 3 digits id integer part. Default value is <code>True</code><br/>\n"
|
||||
" Returns number as <code>str</code>.<br/>"
|
||||
msgstr ""
|
||||
"Сигнатура: <code>format_number(number, r_acc, dec_sep, div_by_3)</code><br/>\n"
|
||||
" Param <code>number</code> - <code>int</code> или <code>float</code> число для отображения,<br/>\n"
|
||||
" Param <code>r_acc</code> - <code>int</code> точность округления, по умолчанию <code>2</code> знака,<br/>\n"
|
||||
" Param <code>dec_sep</code> - <code>str</code> разделитель для десятичной части, по умолчанию <code>,</code>,<br/>\n"
|
||||
" Param <code>div_by_3</code> - <code>bool</code> флаг для добавления пробелов между каждыми тремя цифрами числа в целой части. По умолчанию <code>True</code>,<br/>\n"
|
||||
" Возвращает число как <code>str</code>.<br/>"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field____last_update
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard____last_update
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Последнее изменение"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__write_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__write_uid
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Последний раз обновил"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__write_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__write_date
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Последнее обновление"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__name
|
||||
msgid "Name"
|
||||
msgstr "Имя"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__technical_name
|
||||
msgid "Name for using in templates"
|
||||
msgstr "Имя для использования в шаблонах"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__ir_actions_report_id
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard__ir_actions_report_id
|
||||
msgid "Report"
|
||||
msgstr "Отчет"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model,name:custom_report_field.model_ir_actions_report
|
||||
msgid "Report Action"
|
||||
msgstr "Отчет о действияx "
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.custom_report_values_wizard_view_form
|
||||
msgid "Report values"
|
||||
msgstr "Значения отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__required
|
||||
msgid "Required"
|
||||
msgstr "Обязательно"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Последовательность"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__visible
|
||||
msgid "Show in wizard"
|
||||
msgstr "Видимость"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field__technical_name
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__technical_name
|
||||
msgid "Technical Name"
|
||||
msgstr "Техническое имя"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "The following variables can be used:"
|
||||
msgstr "Могут быть использованы следующие переменные:"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__default_value
|
||||
msgid ""
|
||||
"This field contains a Python code which can use the same variables as the "
|
||||
"'code' field in the server action, except moment that the computation result"
|
||||
" should be assigned into the 'value' variable.Also available method "
|
||||
"'format_number' for formatting numbers representation in report. Returns "
|
||||
"number as string."
|
||||
msgstr ""
|
||||
"Это поле - выражение на Python, которое может использовать те же переменные,"
|
||||
" что и поле 'code' в серверных действиях, кроме момента, что результат "
|
||||
"вычисления должен присваиваться в переменную 'value'. Так же, доступен метод"
|
||||
" 'format_number' для форматирования представлений чисел в отчете. Возвращает"
|
||||
" число как строку."
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model_terms:ir.ui.view,arch_db:custom_report_field.act_report_xml_inherit_view_form
|
||||
msgid "To return a value, assign: <code>value = ...</code>"
|
||||
msgstr ""
|
||||
"Для возвращения значения выполните присвоение: <code>value = ...</code>"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,help:custom_report_field.field_custom_report_field__visible
|
||||
msgid "To show this field in fields list in verification wizard."
|
||||
msgstr ""
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_ir_actions_report__validate_custom_report_field
|
||||
msgid "Validate Custom Report Field"
|
||||
msgstr "Проверка пользовательского поля отчета"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__value
|
||||
msgid "Value"
|
||||
msgstr "Значение"
|
||||
|
||||
#. module: custom_report_field
|
||||
#: model:ir.model.fields,field_description:custom_report_field.field_custom_report_field_values_wizard_line__wizard_id
|
||||
msgid "Wizard"
|
||||
msgstr "Мастер"
|
||||
2
custom_report_field/models/__init__.py
Normal file
2
custom_report_field/models/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from . import custom_report_field
|
||||
from . import ir_actions_report
|
||||
106
custom_report_field/models/custom_report_field.py
Normal file
106
custom_report_field/models/custom_report_field.py
Normal file
@ -0,0 +1,106 @@
|
||||
# import logging
|
||||
|
||||
from odoo import api, exceptions, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools.safe_eval import safe_eval, test_python_expr
|
||||
|
||||
from odoo.addons.report_monetary_helpers.utils.format_number import format_number
|
||||
|
||||
# _logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CustomReportField(models.Model):
|
||||
_name = "custom.report.field"
|
||||
_description = "Custom report field"
|
||||
_order = "sequence"
|
||||
|
||||
ir_actions_report_id = fields.Many2one(
|
||||
"ir.actions.report",
|
||||
string="Report",
|
||||
)
|
||||
sequence = fields.Integer(
|
||||
string="Sequence",
|
||||
)
|
||||
name = fields.Char(
|
||||
string="Name",
|
||||
required=True,
|
||||
translate=True,
|
||||
)
|
||||
technical_name = fields.Char(
|
||||
string="Technical Name",
|
||||
help="Name for using in templates",
|
||||
required=True,
|
||||
)
|
||||
default_value = fields.Text(
|
||||
string="Code",
|
||||
help="This field contains a Python code which can use the same variables as"
|
||||
" the 'code' field in the server action, except moment that the computation"
|
||||
" result should be assigned into the 'value' variable."
|
||||
"Also available method 'format_number' for formatting numbers representation in report. Returns number as string.",
|
||||
required=True,
|
||||
default="# Write a code for computing value for this field\n# and assign it into 'value' variable.",
|
||||
)
|
||||
description = fields.Char(
|
||||
string="Description",
|
||||
help="Description for this field to be showed in fields list in verify wizard.",
|
||||
translate=True,
|
||||
default="",
|
||||
)
|
||||
required = fields.Boolean(
|
||||
string="Required",
|
||||
help="If checked, it will not be possible to generate a document without a default value.",
|
||||
default=False,
|
||||
)
|
||||
visible = fields.Boolean(
|
||||
string="Show in wizard",
|
||||
help="To show this field in fields list in verification wizard.",
|
||||
default=True,
|
||||
)
|
||||
|
||||
@api.constrains("default_value")
|
||||
def _check_default_value(self):
|
||||
for rec in self.filtered("default_value"):
|
||||
msg = test_python_expr(expr=rec.default_value.strip(), mode="exec")
|
||||
if msg:
|
||||
raise ValidationError(msg)
|
||||
|
||||
def _get_eval_context(self, action=None):
|
||||
eval_context = self.env["ir.actions.actions"]._get_eval_context(action=action)
|
||||
eval_context.update(self.env.context)
|
||||
model_name = action.model_id.sudo().model
|
||||
model = self.env[model_name]
|
||||
record = None
|
||||
records = None
|
||||
if self._context.get("active_model") == model_name and self._context.get(
|
||||
"active_id"
|
||||
):
|
||||
record = model.browse(self._context["active_id"])
|
||||
if self._context.get("active_model") == model_name and self._context.get(
|
||||
"active_ids"
|
||||
):
|
||||
records = model.browse(self._context["active_ids"])
|
||||
eval_context.update(
|
||||
{
|
||||
# orm
|
||||
"env": self.env,
|
||||
"model": model,
|
||||
# Exceptions
|
||||
"Warning": exceptions.Warning,
|
||||
"UserError": exceptions.UserError,
|
||||
# record
|
||||
"record": record,
|
||||
"records": records,
|
||||
# utils
|
||||
"format_number": format_number,
|
||||
}
|
||||
)
|
||||
return eval_context
|
||||
|
||||
def compute_value(self, report_rec):
|
||||
_eval_context = self._get_eval_context(report_rec)
|
||||
safe_eval(self.default_value.strip(), _eval_context, mode="exec", nocopy=True)
|
||||
return (
|
||||
_eval_context["value"]
|
||||
if _eval_context.get("value", "key absent") != "key absent"
|
||||
else ""
|
||||
)
|
||||
59
custom_report_field/models/ir_actions_report.py
Normal file
59
custom_report_field/models/ir_actions_report.py
Normal file
@ -0,0 +1,59 @@
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class IrActionsReport(models.Model):
|
||||
_inherit = "ir.actions.report"
|
||||
|
||||
custom_report_field_ids = fields.One2many(
|
||||
comodel_name="custom.report.field",
|
||||
inverse_name="ir_actions_report_id",
|
||||
string="Custom report fields",
|
||||
)
|
||||
validate_custom_report_field = fields.Boolean(
|
||||
compute="_compute_validate_custom_report_field"
|
||||
)
|
||||
|
||||
@api.depends("custom_report_field_ids")
|
||||
def _compute_validate_custom_report_field(self):
|
||||
self.validate_custom_report_field = bool(
|
||||
self.custom_report_field_ids.filtered("visible")
|
||||
)
|
||||
|
||||
def _get_readable_fields(self):
|
||||
return super()._get_readable_fields() | {
|
||||
"validate_custom_report_field",
|
||||
}
|
||||
|
||||
def get_custom_report_field_values(self):
|
||||
"""
|
||||
Returns: dict with computed custom fields values.
|
||||
"""
|
||||
# Bunch reports creation not supported for a while.
|
||||
self.ensure_one()
|
||||
report_custom_field_ids = self.env["custom.report.field"].search(
|
||||
[("ir_actions_report_id", "=", self.id)]
|
||||
)
|
||||
custom_report_field_values = {}
|
||||
for field_rec in report_custom_field_ids:
|
||||
field_value = field_rec.compute_value(self)
|
||||
if field_rec.required and not field_value:
|
||||
raise UserError(
|
||||
"""Required custom field %s of the report is not filled. It's value: %s.
|
||||
Fill it or remove "required" attribute if this value is ok."""
|
||||
% (field_rec.name, field_value)
|
||||
)
|
||||
custom_report_field_values[field_rec.technical_name] = field_value
|
||||
return custom_report_field_values
|
||||
|
||||
@api.model
|
||||
def _get_rendering_context(self, report, docids, data):
|
||||
"""
|
||||
Redefined here to add custom report fields in context.
|
||||
:param docids: source documents IDs list
|
||||
:param data: dict containing current context
|
||||
:return: dict, updated context.
|
||||
"""
|
||||
data = super()._get_rendering_context(report, docids, data)
|
||||
data.update(report.get_custom_report_field_values())
|
||||
return data
|
||||
4
custom_report_field/security/ir.model.access.csv
Normal file
4
custom_report_field/security/ir.model.access.csv
Normal file
@ -0,0 +1,4 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_custom_report_field","custom_report_field user","model_custom_report_field","base.group_user",1,1,1,1
|
||||
"access_custom_report_field_values_wizard","custom_report_field_values_wizard user","model_custom_report_field_values_wizard",,1,1,1,1
|
||||
"access_custom_report_field_values_wizard_line","custom_report_field_values_wizard_line user","model_custom_report_field_values_wizard_line",,1,1,1,1
|
||||
|
40
custom_report_field/static/src/js/action_manager_report.js
Normal file
40
custom_report_field/static/src/js/action_manager_report.js
Normal file
@ -0,0 +1,40 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
|
||||
/**
|
||||
* Adds new handler for showing wizard with custom fields values for report.
|
||||
*
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
async function customReportFieldWizardHandler(action, options, env) {
|
||||
if (action.type === "ir.actions.report"
|
||||
&& action.validate_custom_report_field
|
||||
&& !action.context.report_values_validated) {
|
||||
await env.services.action.doAction({
|
||||
type: "ir.actions.act_window",
|
||||
view_mode: "form",
|
||||
views: [[false, "form"]],
|
||||
res_model: "custom.report.field.values.wizard",
|
||||
target: "new",
|
||||
context: Object.assign(
|
||||
{ "default_ir_actions_report_id": action.id },
|
||||
action.context
|
||||
),
|
||||
});
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
else if (action.type === "ir.actions.report"
|
||||
&& action.validate_custom_report_field
|
||||
&& action.context.report_values_validated) {
|
||||
return env.services.action.doAction({"type": "ir.actions.act_window_close"});
|
||||
}
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
|
||||
registry.category("ir.actions.report handlers").add(
|
||||
"custom_report_field_wizard_handler",
|
||||
customReportFieldWizardHandler,
|
||||
{sequence: 10},
|
||||
);
|
||||
78
custom_report_field/views/ir_actions_report_views.xml
Normal file
78
custom_report_field/views/ir_actions_report_views.xml
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<odoo>
|
||||
|
||||
<record id="act_report_xml_inherit_view_form" model="ir.ui.view">
|
||||
<field name="name">ir.actions.report.inherit.view.form</field>
|
||||
<field name="model">ir.actions.report</field>
|
||||
<field name="inherit_id" ref="base.act_report_xml_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='advanced']" position="after">
|
||||
<page name="custom_report_field" string="Custom fields">
|
||||
<field name="custom_report_field_ids">
|
||||
<list>
|
||||
<field name="ir_actions_report_id" invisible="1"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="technical_name"/>
|
||||
<field name="required" widget="boolean_toggle"/>
|
||||
<field name="visible" widget="boolean_toggle"/>
|
||||
</list>
|
||||
<form>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="technical_name"/>
|
||||
<field name="required" widget="boolean_toggle"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="visible" widget="boolean_toggle"/>
|
||||
<field name="description" widget="text"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Computing field's value">
|
||||
<field name="default_value" widget="ace" options="{'mode': 'python'}"/>
|
||||
</page>
|
||||
<page string="Help">
|
||||
|
||||
<div style="margin-top: 4px;">
|
||||
<h3>Help with Python code</h3>
|
||||
<p>The following variables can be used:</p>
|
||||
<ul>
|
||||
<li><code>env</code>: Odoo Environment on which the action is triggered</li>
|
||||
<li><code>model</code>: Odoo Model of the record on which the action is triggered; is a void recordset</li>
|
||||
<li><code>record</code>: record on which the action is triggered; may be be void</li>
|
||||
<li><code>records</code>: recordset of all records on which the action is triggered in multi mode; may be void</li>
|
||||
<li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li>
|
||||
<li><code>log(message, level='info')</code>: logging function to record debug information in <code>ir.logging</code> table</li>
|
||||
<li><code>UserError</code>, <code>Warning</code>: Warning Exceptions to use with <code>raise</code></li>
|
||||
<li><code>format_number</code>: Method for formatting number representation in report.
|
||||
<div style="padding-left: 10px;">
|
||||
It's signature: <code>format_number(number, r_acc, dec_sep, div_by_3)</code><br/>
|
||||
Param <code>number</code> - <code>int</code> or <code>float</code> to represent,<br/>
|
||||
Param <code>r_acc</code> - <code>int</code> is round accuracy, default value is <code>2</code><br/>
|
||||
Param <code>dec_sep</code> - <code>str</code> is decimal separator, default value is <code>,</code><br/>
|
||||
Param <code>div_by_3</code> - <code>bool</code> is flag for add whitespase separators after each 3 digits id integer part. Default value is <code>True</code><br/>
|
||||
Returns number as <code>str</code>.<br/>
|
||||
</div>
|
||||
</li>
|
||||
<li>To return a value, assign: <code>value = ...</code></li>
|
||||
</ul>
|
||||
<div>
|
||||
Example of Python code:<br/>
|
||||
<code style="white-space: pre-wrap;">
|
||||
partner_rec = env['res.partner'].search([('name', '=' record.name)])<br/>
|
||||
value = partner_rec.parent_id.vat if partner_rec else ""<br/>
|
||||
</code>
|
||||
</div>
|
||||
</div>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
1
custom_report_field/wizard/__init__.py
Normal file
1
custom_report_field/wizard/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import custom_report_field_values_wizard
|
||||
@ -0,0 +1,95 @@
|
||||
from odoo import api, fields, models
|
||||
from odoo.addons.web.controllers.utils import clean_action
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class CustomReportFieldValuesWizard(models.TransientModel):
|
||||
_name = "custom.report.field.values.wizard"
|
||||
_description = "Custom report values field verify wizard"
|
||||
|
||||
ir_actions_report_id = fields.Many2one(
|
||||
"ir.actions.report",
|
||||
string="Report",
|
||||
)
|
||||
field_values_ids = fields.One2many(
|
||||
comodel_name="custom.report.field.values.wizard.line",
|
||||
inverse_name="wizard_id",
|
||||
string="Custom report field values",
|
||||
)
|
||||
|
||||
def _check_records_amount(self):
|
||||
"""
|
||||
Checks source records for report generation. If more than one - raise error.
|
||||
"""
|
||||
active_model = self._context.get("active_model")
|
||||
if active_model:
|
||||
record_id = self.env[active_model].browse(self._context.get("active_id"))
|
||||
record_ids = self.env[active_model].browse(self._context.get("active_ids"))
|
||||
records_for_report = record_id | record_ids
|
||||
if len(records_for_report) > 1:
|
||||
raise ValidationError(
|
||||
"Reports with custom fields do not supports bunch report generation.\nPrint them one at a time."
|
||||
)
|
||||
|
||||
@api.onchange("ir_actions_report_id")
|
||||
def _onchange_ir_actions_report_id(self):
|
||||
self._check_records_amount()
|
||||
custom_values_for_report = self.env["custom.report.field"].search(
|
||||
[
|
||||
("ir_actions_report_id", "=", self.ir_actions_report_id.id),
|
||||
("visible", "=", True),
|
||||
]
|
||||
)
|
||||
self.field_values_ids = [
|
||||
(
|
||||
6,
|
||||
False,
|
||||
self.env["custom.report.field.values.wizard.line"]
|
||||
.create(
|
||||
[
|
||||
{
|
||||
"name": field_rec.name,
|
||||
"value": field_rec.compute_value(self.ir_actions_report_id),
|
||||
"technical_name": field_rec.technical_name,
|
||||
"description": field_rec.description,
|
||||
}
|
||||
for field_rec in custom_values_for_report
|
||||
]
|
||||
)
|
||||
.ids,
|
||||
)
|
||||
]
|
||||
|
||||
def get_report(self):
|
||||
self.ensure_one()
|
||||
cleaned_report = False
|
||||
action_id = self.ir_actions_report_id.id
|
||||
ctx = dict(self._context)
|
||||
ctx.update({"report_values_validated": True})
|
||||
report = self.env["ir.actions.report"].sudo().browse([action_id]).read()
|
||||
if report:
|
||||
cleaned_report = clean_action(report[0], env=self.env)
|
||||
cleaned_report["context"] = ctx
|
||||
return cleaned_report
|
||||
|
||||
|
||||
class CustomReportFieldValuesWizardLine(models.TransientModel):
|
||||
_name = "custom.report.field.values.wizard.line"
|
||||
_description = "Custom report values field verify wizard"
|
||||
|
||||
wizard_id = fields.Many2one(
|
||||
"custom.report.field.values.wizard",
|
||||
)
|
||||
|
||||
name = fields.Char(
|
||||
string="Name",
|
||||
)
|
||||
value = fields.Char(
|
||||
string="Value",
|
||||
)
|
||||
technical_name = fields.Char(
|
||||
string="Technical Name",
|
||||
)
|
||||
description = fields.Char(
|
||||
string="Description",
|
||||
)
|
||||
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="custom_report_values_wizard_view_form" model="ir.ui.view">
|
||||
<field name="name">Verify report values</field>
|
||||
<field name="model">custom.report.field.values.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form create="0" delete="0">
|
||||
<group string="Report values">
|
||||
<field name="ir_actions_report_id" invisible="1"/>
|
||||
<field name="field_values_ids" nolabel="1" colspan="4" readonly="1" view_mode="list">
|
||||
<list>
|
||||
<field name="name"/>
|
||||
<field name="value"/>
|
||||
<field name="description"/>
|
||||
<field name="technical_name" invisible="1"/>
|
||||
</list>
|
||||
</field>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="get_report" type="object" string="Get report"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user