diff --git a/base_tier_validation_formula/README.rst b/base_tier_validation_formula/README.rst new file mode 100644 index 000000000..fbe8f5934 --- /dev/null +++ b/base_tier_validation_formula/README.rst @@ -0,0 +1,108 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +============================ +Base Tier Validation Formula +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:4720ae953809b68d7af621235ee072e0267eb0a0f726cd235557b546be782f78 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png + :target: https://odoo-community.org/page/development-status + :alt: Mature +.. |badge2| image:: https://img.shields.io/badge/license-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%2Ftier--validation-lightgray.png?logo=github + :target: https://github.com/OCA/tier-validation/tree/20.0/base_tier_validation_formula + :alt: OCA/tier-validation +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/tier-validation-20-0/tier-validation-20-0-base_tier_validation_formula + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/tier-validation&target_branch=20.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module includes the ability to define the tier definition domain +and the tier reviewers using python code. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To define the domain, \* By python code choose the **Formula** option in +the Definition field. \* By both domain and python code, choose the +**Domain & Formula** option in the Definition field. + +To define the reviewers by python code choose **Python Expression** +option in the Validated by field. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Creu Blanca + +Contributors +------------ + +- Enric Tobella + +- Adrià Gil Sorribes + +- Pedro Gonzalez + +- Pimolnat Suntian + +- `Trobz `__: + + - Hoang Diep + - Son Ho + +Other credits +------------- + +The migration of this module from 15.0 to 16.0 was financially supported +by Camptocamp + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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/tier-validation `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_formula/__init__.py b/base_tier_validation_formula/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/base_tier_validation_formula/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/base_tier_validation_formula/__manifest__.py b/base_tier_validation_formula/__manifest__.py new file mode 100644 index 000000000..2735274bd --- /dev/null +++ b/base_tier_validation_formula/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Base Tier Validation Formula", + "summary": "Formulas for Base tier validation", + "version": "20.0.1.0.0", + "category": "Tools", + "license": "AGPL-3", + "development_status": "Mature", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/tier-validation", + "depends": ["base_tier_validation"], + "data": ["views/tier_definition_view.xml"], + "demo": [], +} diff --git a/base_tier_validation_formula/i18n/base_tier_validation_formula.pot b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot new file mode 100644 index 000000000..7ba6c3921 --- /dev/null +++ b/base_tier_validation_formula/i18n/base_tier_validation_formula.pot @@ -0,0 +1,129 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0\n" +"Report-Msgid-Bugs-To: \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: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" diff --git a/base_tier_validation_formula/i18n/es.po b/base_tier_validation_formula/i18n/es.po new file mode 100644 index 000000000..e530c359d --- /dev/null +++ b/base_tier_validation_formula/i18n/es.po @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-16 11:46+0000\n" +"Last-Translator: Ana Suárez \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "Definición" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "Dominio & Fórmula" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"Error evaluando las condiciones de validación de nivel.\n" +"%s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "Fórmula" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Expresión Python" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "Expresión de Revisión" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "" +"La expresión python del revisor debe retornar un conjunto de registros de " +"res.users." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "Revisores desde una expresión Python" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "Definición de Nivel" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "Expresión de Definición de Nivel" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "Definición de nivel" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validación de Nivel (abstracto)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "Validado por" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" +"Escribe código Python que defina al revisor. El resultado de ejecutar la " +"expresión debe devolver un conjunto de registros de res.users." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" +"Escribe código Python que defina si la confirmación de nivel es necesaria. " +"El resultado de ejecutar la expresión debe ser un booleano." + +#~ msgid "Any user in a specific group." +#~ msgstr "Cualquier usuario de un grupo específico." + +#~ msgid "Domain" +#~ msgstr "Dominio" + +#~ msgid "Specific user" +#~ msgstr "Usuario específico" diff --git a/base_tier_validation_formula/i18n/it.po b/base_tier_validation_formula/i18n/it.po new file mode 100644 index 000000000..999ae644b --- /dev/null +++ b/base_tier_validation_formula/i18n/it.po @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-07-27 11:46+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" +"# Disponibili:\n" +"# - rec: record attuale\n" +"# - Attesa di un recordset di res.users\n" +"rec.env.user" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" +"# Disponibili:\n" +"# - rec: record attuale\n" +"True" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "Definizione" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "Dominio e Formula" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"Errore valutando le condizioni di validazione del livello.\n" +" %s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "Formula" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Espressione Python" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "Espressione Approvazione" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "L'espressione Python revisore deve restituire un recordset res.user." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "Approvatori da espressione Python" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "Definizione livello" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "Espressione Definizione Livello" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "Revisione livello" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validazione livello (sintesi)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "Approvato da" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" +"Scrivere il codice Python che definisce il revisore. Il risultato " +"dell'esecuzione dell'espressione deve essere un recordset res.user." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" +"Scrivere codice Python che definisce quando questa conferma sarà necessaria. " +"Il risultato dell'espressione deve essere un booleano." diff --git a/base_tier_validation_formula/i18n/nl.po b/base_tier_validation_formula/i18n/nl.po new file mode 100644 index 000000000..a66252496 --- /dev/null +++ b/base_tier_validation_formula/i18n/nl.po @@ -0,0 +1,147 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-10-02 23:46+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" +"# Beschikbare lokalen:\n" +"# - rec: huidige record\n" +"# -Verwacht huidig recordset\n" +"rec.env.user" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" +"# Beschikbare lokalen:\n" +"# - rec: huidige record\n" +"Waar" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "Definitie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "Domein & Formule" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"Fout bij het evalueren van de voorwaarden voor de niveauvalidatie.\n" +" %s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "Formule" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Python-expressie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "Beoordelingsexpressie" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "" +"De Python-expressie voor de beoordelaar moet een res.users-recordset " +"retourneren." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "Beoordelaars uit Python-expressie" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "Niveaudefinitie" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "Expressie voor niveaudefinitie" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "Niveaubeoordeling" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Niveauvalidatie (abstract)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "Gevalideerd door" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" +"Schrijf Python-code die de beoordelaar definieert. Het resultaat van het " +"uitvoeren van de expressie moet een res.users-recordset zijn." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" +"Schrijf Python-code die definieert wanneer deze niveaubevestiging nodig is. " +"Het resultaat van het uitvoeren van de expressie moet een boolean zijn." diff --git a/base_tier_validation_formula/i18n/tr.po b/base_tier_validation_formula/i18n/tr.po new file mode 100644 index 000000000..bfbd755b2 --- /dev/null +++ b/base_tier_validation_formula/i18n/tr.po @@ -0,0 +1,138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-07-18 14:25+0000\n" +"Last-Translator: Betül Öğmen \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "Tanım" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "Bağlam & Formül" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"Üst onay şartlarını hesaplarken hata oluştu.\n" +" %s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "Formül" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Python İfadesi" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "Değerlendirme İfadesi" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "Değerlendiren python ifadesi bir res.users kayıtseti döndürmelidir." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "Python ifadesinden Değerlendirenler" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "Seviye Tanımı" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "Katman Tanımı İfadesi" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "Katman İncelemesi" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Seviye Doğrulaması (özet)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "Doğrulayan" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "" +"Değerlendireni tanımlayan Python kodunu yazın. Bu ifadenin sonucu res.users " +"kayıtseti olmalıdır." + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "" +"Katman onayını gerektiren şartı tanımlayan Python kodunu yazın. Bu ifadenin " +"sonucu boolean olmalıdır." diff --git a/base_tier_validation_formula/i18n/zh_CN.po b/base_tier_validation_formula/i18n/zh_CN.po new file mode 100644 index 000000000..a2282c2a4 --- /dev/null +++ b/base_tier_validation_formula/i18n/zh_CN.po @@ -0,0 +1,143 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_formula +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-03-28 16:13+0000\n" +"Last-Translator: Dong \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.10\n" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"# - Expects a recordset of res.users\n" +"rec.env.user" +msgstr "" + +#. module: base_tier_validation_formula +#: model_terms:ir.ui.view,arch_db:base_tier_validation_formula.tier_definition_view_form +msgid "" +"# Available locals:\n" +"# - rec: current record\n" +"True" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__definition_type +msgid "Definition" +msgstr "定义" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__domain_formula +msgid "Domain & Formula" +msgstr "域和公式" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +#: code:addons/base_tier_validation_formula/models/tier_validation.py:0 +msgid "" +"Error evaluating tier validation conditions.\n" +" %s" +msgstr "" +"错误的层级审批条件。\n" +" %s" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__definition_type__formula +msgid "Formula" +msgstr "公式" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_formula +#: model:ir.model.fields.selection,name:base_tier_validation_formula.selection__tier_definition__review_type__expression +msgid "Python Expression" +msgstr "Python表达式" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "Review Expression" +msgstr "审核表达式" + +#. module: base_tier_validation_formula +#. odoo-python +#: code:addons/base_tier_validation_formula/models/tier_review.py:0 +msgid "Reviewer python expression must return a res.users recordset." +msgstr "审核者python表达式必须返回res.users记录集。" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_review__python_reviewer_ids +msgid "Reviewers from Python expression" +msgstr "来自Python表达式的审查者" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_definition +msgid "Tier Definition" +msgstr "层级定义" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__python_code +msgid "Tier Definition Expression" +msgstr "层级定义表达式" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_review +msgid "Tier Review" +msgstr "多层级审批" + +#. module: base_tier_validation_formula +#: model:ir.model,name:base_tier_validation_formula.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "多层级审批(抽象)" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,field_description:base_tier_validation_formula.field_tier_definition__review_type +msgid "Validated by" +msgstr "审批人" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__reviewer_expression +msgid "" +"Write Python code that defines the reviewer. The result of executing the " +"expression must be a res.users recordset." +msgstr "编写定义审核者的Python代码。执行表达式的结果必须是res.users记录集。" + +#. module: base_tier_validation_formula +#: model:ir.model.fields,help:base_tier_validation_formula.field_tier_definition__python_code +msgid "" +"Write Python code that defines when this tier confirmation will be needed. " +"The result of executing the expresion must be a boolean." +msgstr "编写Python代码,定义何时需要此层确认。执行表达式的结果必须是布尔值。" + +#~ msgid "Any user in a specific group." +#~ msgstr "特定组中的任何用户。" + +#~ msgid "Domain" +#~ msgstr "域" + +#~ msgid "Specific user" +#~ msgstr "具体用户" diff --git a/base_tier_validation_formula/models/__init__.py b/base_tier_validation_formula/models/__init__.py new file mode 100644 index 000000000..928b46c88 --- /dev/null +++ b/base_tier_validation_formula/models/__init__.py @@ -0,0 +1,3 @@ +from . import tier_definition +from . import tier_validation +from . import tier_review diff --git a/base_tier_validation_formula/models/tier_definition.py b/base_tier_validation_formula/models/tier_definition.py new file mode 100644 index 000000000..2bd8cc2e0 --- /dev/null +++ b/base_tier_validation_formula/models/tier_definition.py @@ -0,0 +1,39 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class TierDefinition(models.Model): + _inherit = "tier.definition" + + python_code = fields.Text( + string="Tier Definition Expression", + help="Write Python code that defines when this tier confirmation " + "will be needed. The result of executing the expresion must be " + "a boolean.", + default="""# Available locals:\n# - rec: current record\nTrue""", + ) + definition_type = fields.Selection( + selection_add=[("formula", "Formula"), ("domain_formula", "Domain & Formula")] + ) + reviewer_expression = fields.Text( + string="Review Expression", + help="Write Python code that defines the reviewer. " + "The result of executing the expression must be a res.users " + "recordset.", + default="# Available locals:\n# - rec: current record\n" + "# - Expects a recordset of res.users\nrec.env.user", + ) + review_type = fields.Selection(selection_add=[("expression", "Python Expression")]) + + @api.onchange("review_type") + def onchange_review_type(self): + res = super().onchange_review_type() + self.reviewer_expression = ( + "# Available locals:\n" + "# - rec: current record\n" + "# - Expects a recordset of res.users\n" + "rec.env.user" + ) + return res diff --git a/base_tier_validation_formula/models/tier_review.py b/base_tier_validation_formula/models/tier_review.py new file mode 100644 index 000000000..b8e8fe33b --- /dev/null +++ b/base_tier_validation_formula/models/tier_review.py @@ -0,0 +1,58 @@ +# Copyright 2019 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.exceptions import UserError +from odoo.tools.safe_eval import safe_eval + + +class TierReview(models.Model): + _inherit = "tier.review" + + python_reviewer_ids = fields.Many2many( + comodel_name="res.users", + relation="tier_review_python_reviewer_rel", + column1="tier_review_id", + column2="user_id", + string="Reviewers from Python expression", + compute="_compute_python_reviewer_ids", + store=True, + ) + + @api.model + def _get_reviewer_fields(self): + res = super()._get_reviewer_fields() + return res + ["python_reviewer_ids"] + + def _get_reviewers(self): + return super()._get_reviewers() + self.python_reviewer_ids + + @api.depends("definition_id.reviewer_expression", "review_type", "model", "res_id") + def _compute_python_reviewer_ids(self): + for rec in self: + if rec.review_type != "expression": + rec.python_reviewer_ids = self.env["res.users"].browse() + continue + record = rec.env[rec.model].browse(rec.res_id).exists() + try: + reviewer_ids = safe_eval( + rec.definition_id.reviewer_expression, {"rec": record} + ) + except Exception as error: + raise UserError( + rec.env._( + "Error evaluating tier validation conditions.\n %s", error + ) + ) from error + # Check if python expression returns 'res.users' recordset + if ( + not isinstance(reviewer_ids, models.Model) + or reviewer_ids._name != "res.users" + ): + raise UserError( + rec.env._( + "Reviewer python expression must return a res.users recordset." + ) + ) + else: + rec.python_reviewer_ids = reviewer_ids diff --git a/base_tier_validation_formula/models/tier_validation.py b/base_tier_validation_formula/models/tier_validation.py new file mode 100644 index 000000000..eb9a4c5fc --- /dev/null +++ b/base_tier_validation_formula/models/tier_validation.py @@ -0,0 +1,27 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models +from odoo.exceptions import UserError +from odoo.tools.safe_eval import safe_eval + + +class TierValidation(models.AbstractModel): + _inherit = "tier.validation" + + def evaluate_formula_tier(self, tier): + try: + res = safe_eval(tier.python_code, {"rec": self}) + except Exception as error: + raise UserError( + self.env._("Error evaluating tier validation conditions.\n %s", error) + ) from error + return res + + def evaluate_tier(self, tier): + res = super().evaluate_tier(tier) + if tier.definition_type == "formula": + return self.evaluate_formula_tier(tier) + if tier.definition_type == "domain_formula": + return res and self.evaluate_formula_tier(tier) + return res diff --git a/base_tier_validation_formula/pyproject.toml b/base_tier_validation_formula/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/base_tier_validation_formula/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/base_tier_validation_formula/readme/CONTRIBUTORS.md b/base_tier_validation_formula/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..db5ca82c1 --- /dev/null +++ b/base_tier_validation_formula/readme/CONTRIBUTORS.md @@ -0,0 +1,12 @@ +- Enric Tobella \<\> + +- Adrià Gil Sorribes \<\> + +- Pedro Gonzalez \<\> + +- Pimolnat Suntian \<\> + +- [Trobz](https://trobz.com): + + > - Hoang Diep \<\> + > - Son Ho \<\> \ No newline at end of file diff --git a/base_tier_validation_formula/readme/CREDITS.md b/base_tier_validation_formula/readme/CREDITS.md new file mode 100644 index 000000000..e8c91c6a2 --- /dev/null +++ b/base_tier_validation_formula/readme/CREDITS.md @@ -0,0 +1,2 @@ +The migration of this module from 15.0 to 16.0 was financially supported +by Camptocamp \ No newline at end of file diff --git a/base_tier_validation_formula/readme/DESCRIPTION.md b/base_tier_validation_formula/readme/DESCRIPTION.md new file mode 100644 index 000000000..a686be4e4 --- /dev/null +++ b/base_tier_validation_formula/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module includes the ability to define the tier definition domain +and the tier reviewers using python code. \ No newline at end of file diff --git a/base_tier_validation_formula/readme/USAGE.md b/base_tier_validation_formula/readme/USAGE.md new file mode 100644 index 000000000..bb2691e6c --- /dev/null +++ b/base_tier_validation_formula/readme/USAGE.md @@ -0,0 +1,6 @@ +To define the domain, \* By python code choose the **Formula** option in +the Definition field. \* By both domain and python code, choose the +**Domain & Formula** option in the Definition field. + +To define the reviewers by python code choose **Python Expression** +option in the Validated by field. \ No newline at end of file diff --git a/base_tier_validation_formula/static/description/icon.png b/base_tier_validation_formula/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/base_tier_validation_formula/static/description/icon.png differ diff --git a/base_tier_validation_formula/static/description/index.html b/base_tier_validation_formula/static/description/index.html new file mode 100644 index 000000000..7a25e6cf5 --- /dev/null +++ b/base_tier_validation_formula/static/description/index.html @@ -0,0 +1,460 @@ + + + + + +Base Tier Validation Formula + + + +
+ + + +Odoo Community Association + +
+

Base Tier Validation Formula

+ +

Mature License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

+

This module includes the ability to define the tier definition domain +and the tier reviewers using python code.

+

Table of contents

+ +
+

Usage

+

To define the domain, * By python code choose the Formula option in +the Definition field. * By both domain and python code, choose the +Domain & Formula option in the Definition field.

+

To define the reviewers by python code choose Python Expression +option in the Validated by field.

+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The migration of this module from 15.0 to 16.0 was financially supported +by Camptocamp

+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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/tier-validation project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+
+ + diff --git a/base_tier_validation_formula/tests/__init__.py b/base_tier_validation_formula/tests/__init__.py new file mode 100644 index 000000000..f39596410 --- /dev/null +++ b/base_tier_validation_formula/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_tier_validation diff --git a/base_tier_validation_formula/tests/test_tier_validation.py b/base_tier_validation_formula/tests/test_tier_validation.py new file mode 100644 index 000000000..78397d913 --- /dev/null +++ b/base_tier_validation_formula/tests/test_tier_validation.py @@ -0,0 +1,121 @@ +# Copyright 2018 ForgeFlow S.L. +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.exceptions import UserError +from odoo.fields import Domain +from odoo.tests.common import tagged + +from odoo.addons.base_tier_validation.tests.common import CommonTierValidation + + +@tagged("post_install", "-at_install") +class TierTierValidation(CommonTierValidation): + def _setup_tier_definitions(self): + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + } + ) + + def test_01_reviewer_from_python_expression(self): + tier_definition = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_type": "formula", + "python_code": "rec.test_field > 1.0", + } + ) + tier_definition.write( + { + "model_id": self.tester_model.id, + "review_type": "expression", + "python_code": "rec.test_field > 3.0", + } + ) + tier_definition.onchange_review_type() + tier_definition.write({"reviewer_expression": "rec.user_id"}) + self.test_record.write({"test_field": 3.5, "user_id": self.test_user_2.id}) + reviews = self.test_record.with_user( + self.test_user_3_multi_company.id + ).request_validation() + self.assertTrue(reviews) + self.assertEqual(len(reviews), 2) + record = self.test_record.with_user(self.test_user_1.id) + self.test_record.invalidate_recordset() + record.invalidate_recordset() + self.assertIn(self.test_user_1, record.reviewer_ids) + self.assertIn(self.test_user_2, record.reviewer_ids) + res = self.test_model.search(Domain("reviewer_ids", "in", self.test_user_2.id)) + self.assertTrue(res) + + def test_02_wrong_reviewer_expression(self): + """Error should raise with incorrect python expresions on + tier definitions.""" + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "expression", + "reviewer_expression": "rec.test_field", + "python_code": "rec.test_field > 1.0", + } + ) + with self.assertRaises(UserError): + self.test_record.with_user( + self.test_user_3_multi_company + ).request_validation() + self.test_record.review_ids.invalidate_recordset() + self.test_record.review_ids._compute_python_reviewer_ids() + + def test_03_evaluate_wrong_reviewer_expression(self): + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "expression", + "reviewer_expression": "raise Exception", + "python_code": "rec.test_field > 1.0", + } + ) + with self.assertRaises(UserError): + self.test_record.with_user( + self.test_user_3_multi_company + ).request_validation() + self.test_record.review_ids.invalidate_recordset() + self.test_record.review_ids._compute_python_reviewer_ids() + + def test_04_evaluate_wrong_python_formula_expression(self): + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "expression", + "reviewer_expression": "raise Exception", + "python_code": "raise Exception", + } + ) + # Request validation + with self.assertRaises(UserError): + review = test_record.with_user(self.test_user_2).request_validation() + self.test_record.evaluate_formula_tier(review) + + def test_05_definition_from_domain_formula(self): + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_type": "domain_formula", + "definition_domain": '[("test_field", "<", 5.0)]', + "python_code": "rec.test_field > 1.0", + } + ) + self.test_record.write({"test_field": 3.5, "user_id": self.test_user_2.id}) + reviews = self.test_record.with_user( + self.test_user_3_multi_company.id + ).request_validation() + self.assertTrue(reviews) diff --git a/base_tier_validation_formula/views/tier_definition_view.xml b/base_tier_validation_formula/views/tier_definition_view.xml new file mode 100644 index 000000000..395baa936 --- /dev/null +++ b/base_tier_validation_formula/views/tier_definition_view.xml @@ -0,0 +1,41 @@ + + + + + tier.definition.form + tier.definition + + + + + + + + + definition_type not in ('domain', 'domain_formula') + + + + + + + + + diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..acecbe7ec --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +odoo-addon-base_tier_validation @ git+https://github.com/OCA/tier-validation.git@refs/pull/94/head#subdirectory=base_tier_validation