From 48274351b88802bee5c303674ddccc0135b4eedb Mon Sep 17 00:00:00 2001 From: Yoshi Tashiro Date: Thu, 18 Jul 2024 14:52:51 +0000 Subject: [PATCH 1/3] [3715][ADD] sale_tier_validation --- sale_tier_validation/README.rst | 122 +++++ sale_tier_validation/__init__.py | 3 + sale_tier_validation/__manifest__.py | 16 + sale_tier_validation/data/mail_data.xml | 77 +++ sale_tier_validation/i18n/es.po | 149 ++++++ sale_tier_validation/i18n/es_MX.po | 121 +++++ sale_tier_validation/i18n/it.po | 121 +++++ .../i18n/sale_tier_validation.pot | 118 +++++ sale_tier_validation/i18n/sv.po | 130 +++++ sale_tier_validation/i18n/tr.po | 121 +++++ sale_tier_validation/i18n/zh_CN.po | 147 ++++++ sale_tier_validation/models/__init__.py | 5 + sale_tier_validation/models/sale_order.py | 22 + .../models/tier_definition.py | 14 + sale_tier_validation/readme/CONFIGURE.md | 5 + sale_tier_validation/readme/CONTRIBUTORS.md | 4 + sale_tier_validation/readme/DESCRIPTION.md | 2 + sale_tier_validation/readme/INSTALL.md | 2 + sale_tier_validation/readme/ROADMAP.md | 3 + sale_tier_validation/readme/USAGE.md | 15 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 470 ++++++++++++++++++ sale_tier_validation/tests/__init__.py | 2 + .../tests/test_tier_validation.py | 75 +++ .../views/sale_order_view.xml | 26 + .../odoo/addons/sale_tier_validation | 1 + setup/sale_tier_validation/setup.py | 6 + 27 files changed, 1777 insertions(+) create mode 100644 sale_tier_validation/README.rst create mode 100644 sale_tier_validation/__init__.py create mode 100644 sale_tier_validation/__manifest__.py create mode 100644 sale_tier_validation/data/mail_data.xml create mode 100644 sale_tier_validation/i18n/es.po create mode 100644 sale_tier_validation/i18n/es_MX.po create mode 100644 sale_tier_validation/i18n/it.po create mode 100644 sale_tier_validation/i18n/sale_tier_validation.pot create mode 100644 sale_tier_validation/i18n/sv.po create mode 100644 sale_tier_validation/i18n/tr.po create mode 100644 sale_tier_validation/i18n/zh_CN.po create mode 100644 sale_tier_validation/models/__init__.py create mode 100644 sale_tier_validation/models/sale_order.py create mode 100644 sale_tier_validation/models/tier_definition.py create mode 100644 sale_tier_validation/readme/CONFIGURE.md create mode 100644 sale_tier_validation/readme/CONTRIBUTORS.md create mode 100644 sale_tier_validation/readme/DESCRIPTION.md create mode 100644 sale_tier_validation/readme/INSTALL.md create mode 100644 sale_tier_validation/readme/ROADMAP.md create mode 100644 sale_tier_validation/readme/USAGE.md create mode 100644 sale_tier_validation/static/description/icon.png create mode 100644 sale_tier_validation/static/description/index.html create mode 100644 sale_tier_validation/tests/__init__.py create mode 100644 sale_tier_validation/tests/test_tier_validation.py create mode 100644 sale_tier_validation/views/sale_order_view.xml create mode 120000 setup/sale_tier_validation/odoo/addons/sale_tier_validation create mode 100644 setup/sale_tier_validation/setup.py diff --git a/sale_tier_validation/README.rst b/sale_tier_validation/README.rst new file mode 100644 index 00000000..2786351e --- /dev/null +++ b/sale_tier_validation/README.rst @@ -0,0 +1,122 @@ +==================== +Sale Tier Validation +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ccba7ba5488f404d32fbff50dbf1c3f9c16eab25c1e6e4326ea85fe27baf03d1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/sale-workflow/tree/16.0/sale_tier_validation + :alt: OCA/sale-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_tier_validation + :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/sale-workflow&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Sale Orders to support a tier +validation process. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module depends on ``base_tier_validation``. You can find it at +`OCA/server-ux `__ + +Configuration +============= + +To configure this module, you need to: + +1. Go to *Settings > Technical > Tier Validations > Tier Definition*. +2. Create as many tiers as you want for Sale Order model. + +Usage +===== + +To use this module, you need to: + +1. Create a Sale Order triggering at least one "Tier Definition". +2. Click on *Request Validation* button. +3. Under the tab *Reviews* have a look to pending reviews and their + statuses. +4. Once all reviews are validated click on *Confirm Order*. + +Additional features: + +- You can filter the SOs requesting your review through the filter + *Needs my Review*. +- User with rights to confirm the SO (validate all tiers that would be + generated) can directly do the operation, this is, there is no need + for her/him to request a validation. + +Known issues / Roadmap +====================== + +- The sales order, when moved to the state sent, will still send the + email even if the validation is not approved by the corresponding + tier. Code to consider this particular case is not developed. + +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 +------- + +* Open Source Integrators + +Contributors +------------ + +- Mayank Gosai +- `Tecnativa `__: + + - Sergio Teruel + +- Tharathip Chaweewongphan + +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/sale-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_tier_validation/__init__.py b/sale_tier_validation/__init__.py new file mode 100644 index 00000000..31660d6a --- /dev/null +++ b/sale_tier_validation/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/sale_tier_validation/__manifest__.py b/sale_tier_validation/__manifest__.py new file mode 100644 index 00000000..8c02fdfc --- /dev/null +++ b/sale_tier_validation/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2019 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Sale Tier Validation", + "summary": "Extends the functionality of Sale Orders to " + "support a tier validation process.", + "version": "16.0.1.0.4", + "category": "Sale", + "website": "https://github.com/OCA/sale-workflow", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["sale", "base_tier_validation"], + "data": ["data/mail_data.xml", "views/sale_order_view.xml"], +} diff --git a/sale_tier_validation/data/mail_data.xml b/sale_tier_validation/data/mail_data.xml new file mode 100644 index 00000000..407ed362 --- /dev/null +++ b/sale_tier_validation/data/mail_data.xml @@ -0,0 +1,77 @@ + + + + + Tier Validation Requested + sale.order + True + + + Tier Validation Accepted Notification + sale.order + True + + + Tier Validation Rejected Notification + sale.order + True + + + + Tier Validation Requested + crm.team + + True + + team_id + + + Tier Validation Accepted Notification + crm.team + + True + + team_id + + + Tier Validation Rejected Notification + crm.team + + + True + team_id + + diff --git a/sale_tier_validation/i18n/es.po b/sale_tier_validation/i18n/es.po new file mode 100644 index 00000000..72228c23 --- /dev/null +++ b/sale_tier_validation/i18n/es.po @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-07 11:28+0000\n" +"PO-Revision-Date: 2023-11-08 13:40+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" +"SO-Revision-Date: 2019-05-08 12:03+0000\n" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "Puede Revisar" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "Tiene Comentario" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "Mis ventas a revisar" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "Necesita validación" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "Necesita mi Revisión" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "Siguiente revisión" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "Rechazado/a" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "Mensaje rechazado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "Revisores" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "SOs validadas y preparadas para ser confirmadas" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "Pedidos" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definición de nivel" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Validación de nivel aceptada" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Validación de nivel rechazada" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Validación de nivel solicitada" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "Para validar el mensaje" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "Validada" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "Mensaje validado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "Estado de la Validación" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "Validaciones" + +#~ msgid "" +#~ "This SO needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "Esta SO debe ser\n" +#~ " validada." + +#~ msgid " Operation has been rejected." +#~ msgstr "" +#~ "La operación ha sido rechazada." + +#~ msgid " Operation has been validated!" +#~ msgstr "La operación ha sido validada!" + +#~ msgid "Reject" +#~ msgstr "Rechazar" + +#~ msgid "Request Validation" +#~ msgstr "Solicitar Validación" + +#~ msgid "Restart Validation" +#~ msgstr "Reiniciar Validación" + +#~ msgid "Validate" +#~ msgstr "Validar" diff --git a/sale_tier_validation/i18n/es_MX.po b/sale_tier_validation/i18n/es_MX.po new file mode 100644 index 00000000..599d5f91 --- /dev/null +++ b/sale_tier_validation/i18n/es_MX.po @@ -0,0 +1,121 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-11-04 11:44+0000\n" +"Last-Translator: Jesús Alan Ramos Rodríguez \n" +"Language-Team: none\n" +"Language: es_MX\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.14.1\n" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "Puede revisar" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "Tiene comentario" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "Mis ventas para revisar" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "Necesita validación" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "Necesita mi revisión" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "Siguiente revisión" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "Mensaje rechazado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "Revisores" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "SOs validados y listos para ser confirmados" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "Orden de venta" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definición de Nivel" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Notificación de validación de nivel aceptada" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Notificación de rechazo de validación de nivel" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Validación de nivel solicitada" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "Mensaje para validar" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "Validado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "Mensaje validado" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "Validaciones" diff --git a/sale_tier_validation/i18n/it.po b/sale_tier_validation/i18n/it.po new file mode 100644 index 00000000..66382a24 --- /dev/null +++ b/sale_tier_validation/i18n/it.po @@ -0,0 +1,121 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-22 14:38+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 4.17\n" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "Può revisionare" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "Ha commenti" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "Le mie vendte da revisionare" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "Richiede conferma" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "Richiede la mia revisione" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "Prossima revisione" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "Rifiutato" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "Messaggio di rifiuto" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "Revisori" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "Ordini di vendita approvati e pronti da confermare" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "Ordine di vendita" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definizione livello" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Notifica accettazione livello approvazione" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Notifica rifiuto livello approvazione" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Approvazione livello richiesta" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "Messaggio per 'Da validare'" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "Validato" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "Messaggio per 'Validato'" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "Stato validazione" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "Validazioni" diff --git a/sale_tier_validation/i18n/sale_tier_validation.pot b/sale_tier_validation/i18n/sale_tier_validation.pot new file mode 100644 index 00000000..f6676d7e --- /dev/null +++ b/sale_tier_validation/i18n/sale_tier_validation.pot @@ -0,0 +1,118 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "" diff --git a/sale_tier_validation/i18n/sv.po b/sale_tier_validation/i18n/sv.po new file mode 100644 index 00000000..8c99bd14 --- /dev/null +++ b/sale_tier_validation/i18n/sv.po @@ -0,0 +1,130 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-11-24 12:20+0000\n" +"Last-Translator: Simon S \n" +"Language-Team: none\n" +"Language: sv\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: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "Kan granska" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "Har kommentar" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "Min försäljning att granska" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "Behöver validering" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "Behöver min granskning" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "Nästa granskning" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "Nekad" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "Granskare" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "Försäljningsordrar validerade och redo att bekräftas" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "Försäljningsorder" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Attestdefinition" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "Validerad" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "Valideringar" + +#~ msgid "Display Name" +#~ msgstr "Visningsnamn" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Senast ändrad den" diff --git a/sale_tier_validation/i18n/tr.po b/sale_tier_validation/i18n/tr.po new file mode 100644 index 00000000..11f4037f --- /dev/null +++ b/sale_tier_validation/i18n/tr.po @@ -0,0 +1,121 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-03-30 22:51+0000\n" +"Last-Translator: Ediz Duman \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 4.14.1\n" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "Gözden Geçirebilir" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "Yorum Var" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "İncelenecek Satışlarım" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "Doğrulama Gerekiyor" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "İncelememe ihtiyacı var" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "Sonraki İnceleme" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "Reddedildi" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "Reddedilme Mesaj" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "İnceleyenler" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "SO'lar doğrulandı ve onaylanmaya hazır" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "Satış Siparişi" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Seviye Tanımı" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Seviye Doğrulama Kabul Bildirimi" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Seviye Doğrulaması Reddedildi Bildirimi" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Seviye Doğrulama İstendi" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "Mesajı Doğrulamak İçin" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "Doğrulandı" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "Doğrulanmış Mesaj" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "Doğrulamalar" diff --git a/sale_tier_validation/i18n/zh_CN.po b/sale_tier_validation/i18n/zh_CN.po new file mode 100644 index 00000000..ab7d65cb --- /dev/null +++ b/sale_tier_validation/i18n/zh_CN.po @@ -0,0 +1,147 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-08 09:19+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\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" +"SO-Revision-Date: 2019-09-02 19:23+0000\n" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review +msgid "Can Review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment +msgid "Has Comment" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "My Sales to review" +msgstr "查看我的采购" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation +msgid "Need Validation" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Needs my Review" +msgstr "需要我审查的" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review +msgid "Next Review" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected +msgid "Rejected" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "SOs validated and ready to be confirmed" +msgstr "采购订单已验证,待确认" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_sale_order +msgid "Sales Order" +msgstr "销售订单" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "层定义" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: sale_tier_validation +#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested +#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter +msgid "Validated" +msgstr "已验证" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message +msgid "Validated Message" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids +msgid "Validations" +msgstr "" + +#~ msgid "" +#~ "This SO needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "这个采购订单需要\n" +#~ " 验证。" + +#~ msgid " Operation has been rejected." +#~ msgstr " 操作已被拒绝." + +#~ msgid " Operation has been validated!" +#~ msgstr " 操作已被 验证!" + +#~ msgid "Reject" +#~ msgstr "拒绝" + +#~ msgid "Request Validation" +#~ msgstr "请求验证" + +#~ msgid "Restart Validation" +#~ msgstr "重新启动验证" + +#~ msgid "Validate" +#~ msgstr "验证" diff --git a/sale_tier_validation/models/__init__.py b/sale_tier_validation/models/__init__.py new file mode 100644 index 00000000..551e600d --- /dev/null +++ b/sale_tier_validation/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2019 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import sale_order +from . import tier_definition diff --git a/sale_tier_validation/models/sale_order.py b/sale_tier_validation/models/sale_order.py new file mode 100644 index 00000000..3c7eecf0 --- /dev/null +++ b/sale_tier_validation/models/sale_order.py @@ -0,0 +1,22 @@ +# Copyright 2019 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class SaleOrder(models.Model): + _name = "sale.order" + _inherit = ["sale.order", "tier.validation"] + _state_from = ["draft", "sent"] + _state_to = ["sale", "done"] + + _tier_validation_manual_config = False + + def _get_requested_notification_subtype(self): + return "sale_tier_validation.sale_order_tier_validation_requested" + + def _get_accepted_notification_subtype(self): + return "sale_tier_validation.sale_order_tier_validation_accepted" + + def _get_rejected_notification_subtype(self): + return "sale_tier_validation.sale_order_tier_validation_rejected" diff --git a/sale_tier_validation/models/tier_definition.py b/sale_tier_validation/models/tier_definition.py new file mode 100644 index 00000000..f08a2a96 --- /dev/null +++ b/sale_tier_validation/models/tier_definition.py @@ -0,0 +1,14 @@ +# Copyright 2019 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class TierDefinition(models.Model): + _inherit = "tier.definition" + + @api.model + def _get_tier_validation_model_names(self): + res = super()._get_tier_validation_model_names() + res.append("sale.order") + return res diff --git a/sale_tier_validation/readme/CONFIGURE.md b/sale_tier_validation/readme/CONFIGURE.md new file mode 100644 index 00000000..de4359b2 --- /dev/null +++ b/sale_tier_validation/readme/CONFIGURE.md @@ -0,0 +1,5 @@ +To configure this module, you need to: + +1. Go to *Settings \> Technical \> Tier Validations \> Tier + Definition*. +2. Create as many tiers as you want for Sale Order model. diff --git a/sale_tier_validation/readme/CONTRIBUTORS.md b/sale_tier_validation/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..2e0d4e8f --- /dev/null +++ b/sale_tier_validation/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- Mayank Gosai \<\> +- [Tecnativa](https://www.tecnativa.com): + - Sergio Teruel +- Tharathip Chaweewongphan \<\> diff --git a/sale_tier_validation/readme/DESCRIPTION.md b/sale_tier_validation/readme/DESCRIPTION.md new file mode 100644 index 00000000..9333ac3b --- /dev/null +++ b/sale_tier_validation/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module extends the functionality of Sale Orders to support a tier +validation process. diff --git a/sale_tier_validation/readme/INSTALL.md b/sale_tier_validation/readme/INSTALL.md new file mode 100644 index 00000000..c45725c4 --- /dev/null +++ b/sale_tier_validation/readme/INSTALL.md @@ -0,0 +1,2 @@ +This module depends on `base_tier_validation`. You can find it at +[OCA/server-ux](https://github.com/OCA/server-ux) diff --git a/sale_tier_validation/readme/ROADMAP.md b/sale_tier_validation/readme/ROADMAP.md new file mode 100644 index 00000000..e01cc6a8 --- /dev/null +++ b/sale_tier_validation/readme/ROADMAP.md @@ -0,0 +1,3 @@ +- The sales order, when moved to the state sent, will still send the + email even if the validation is not approved by the corresponding + tier. Code to consider this particular case is not developed. diff --git a/sale_tier_validation/readme/USAGE.md b/sale_tier_validation/readme/USAGE.md new file mode 100644 index 00000000..398f28b8 --- /dev/null +++ b/sale_tier_validation/readme/USAGE.md @@ -0,0 +1,15 @@ +To use this module, you need to: + +1. Create a Sale Order triggering at least one "Tier Definition". +2. Click on *Request Validation* button. +3. Under the tab *Reviews* have a look to pending reviews and their + statuses. +4. Once all reviews are validated click on *Confirm Order*. + +Additional features: + +- You can filter the SOs requesting your review through the filter + *Needs my Review*. +- User with rights to confirm the SO (validate all tiers that would be + generated) can directly do the operation, this is, there is no need + for her/him to request a validation. diff --git a/sale_tier_validation/static/description/icon.png b/sale_tier_validation/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/sale_tier_validation/static/description/index.html b/sale_tier_validation/static/description/index.html new file mode 100644 index 00000000..a48ef0e9 --- /dev/null +++ b/sale_tier_validation/static/description/index.html @@ -0,0 +1,470 @@ + + + + + +Sale Tier Validation + + + +
+

Sale Tier Validation

+ + +

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

+

This module extends the functionality of Sale Orders to support a tier +validation process.

+

Table of contents

+ +
+

Installation

+

This module depends on base_tier_validation. You can find it at +OCA/server-ux

+
+
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Settings > Technical > Tier Validations > Tier Definition.
  2. +
  3. Create as many tiers as you want for Sale Order model.
  4. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Create a Sale Order triggering at least one “Tier Definition”.
  2. +
  3. Click on Request Validation button.
  4. +
  5. Under the tab Reviews have a look to pending reviews and their +statuses.
  6. +
  7. Once all reviews are validated click on Confirm Order.
  8. +
+

Additional features:

+
    +
  • You can filter the SOs requesting your review through the filter +Needs my Review.
  • +
  • User with rights to confirm the SO (validate all tiers that would be +generated) can directly do the operation, this is, there is no need +for her/him to request a validation.
  • +
+
+
+

Known issues / Roadmap

+
    +
  • The sales order, when moved to the state sent, will still send the +email even if the validation is not approved by the corresponding +tier. Code to consider this particular case is not developed.
  • +
+
+
+

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

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

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/sale-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_tier_validation/tests/__init__.py b/sale_tier_validation/tests/__init__.py new file mode 100644 index 00000000..e1a50db5 --- /dev/null +++ b/sale_tier_validation/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_tier_validation diff --git a/sale_tier_validation/tests/test_tier_validation.py b/sale_tier_validation/tests/test_tier_validation.py new file mode 100644 index 00000000..53b00360 --- /dev/null +++ b/sale_tier_validation/tests/test_tier_validation.py @@ -0,0 +1,75 @@ +# Copyright 2020 Sergio Teruel +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). +from odoo.exceptions import ValidationError +from odoo.tests import common, tagged + + +@tagged("post_install", "-at_install") +class TestSaleTierValidation(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Get sale order model + cls.so_model = cls.env.ref("sale.model_sale_order") + + # Create users + group_ids = ( + cls.env.ref("base.group_system") + + cls.env.ref("sales_team.group_sale_salesman_all_leads") + ).ids + cls.test_user_1 = cls.env["res.users"].create( + { + "name": "John", + "login": "test1", + "groups_id": [(6, 0, group_ids)], + "email": "test@examlple.com", + } + ) + + # Create tier definitions: + cls.tier_def_obj = cls.env["tier.definition"] + cls.tier_def_obj.create( + { + "model_id": cls.so_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('amount_untaxed', '>', 50.0)]", + } + ) + cls.customer = cls.env["res.partner"].create({"name": "Partner for test"}) + cls.product = cls.env["product.product"].create( + {"name": "Product for test", "list_price": 120.00} + ) + + def test_tier_validation_model_name(self): + self.assertIn( + "sale.order", self.tier_def_obj._get_tier_validation_model_names() + ) + + def test_validation_sale_order(self): + so = self.env["sale.order"].create( + { + "partner_id": self.customer.id, + "order_line": [ + ( + 0, + 0, + { + "name": "Test line", + "product_id": self.product.id, + "product_uom_qty": 1, + "product_uom": self.product.uom_id.id, + "price_unit": self.product.list_price, + }, + ) + ], + "pricelist_id": self.customer.property_product_pricelist.id, + } + ) + with self.assertRaises(ValidationError): + so.action_confirm() + so.order_line.price_unit = 45 + so.request_validation() + so.with_user(self.test_user_1).validate_tier() + so.action_confirm() + self.assertEqual(so.state, "sale") diff --git a/sale_tier_validation/views/sale_order_view.xml b/sale_tier_validation/views/sale_order_view.xml new file mode 100644 index 00000000..54e192d4 --- /dev/null +++ b/sale_tier_validation/views/sale_order_view.xml @@ -0,0 +1,26 @@ + + + + + sale.order.select - sale_tier_validation + sale.order + + + + + + + + + diff --git a/setup/sale_tier_validation/odoo/addons/sale_tier_validation b/setup/sale_tier_validation/odoo/addons/sale_tier_validation new file mode 120000 index 00000000..26ad4190 --- /dev/null +++ b/setup/sale_tier_validation/odoo/addons/sale_tier_validation @@ -0,0 +1 @@ +../../../../sale_tier_validation \ No newline at end of file diff --git a/setup/sale_tier_validation/setup.py b/setup/sale_tier_validation/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/sale_tier_validation/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From e477e5f544aaf23637ef21acdd92a94e153e2e03 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Mon, 19 Aug 2024 01:57:52 +0000 Subject: [PATCH 2/3] relect oca changes --- sale_tier_validation/README.rst | 9 ++++- sale_tier_validation/__init__.py | 1 + sale_tier_validation/__manifest__.py | 6 +++- sale_tier_validation/models/__init__.py | 2 ++ sale_tier_validation/models/res_company.py | 12 +++++++ .../models/res_config_settings.py | 14 ++++++++ sale_tier_validation/readme/CONFIGURE.md | 4 +++ sale_tier_validation/readme/CONTRIBUTORS.md | 2 ++ sale_tier_validation/reports/__init__.py | 1 + sale_tier_validation/reports/sale_report.py | 27 +++++++++++++++ .../static/description/index.html | 9 ++++- .../tests/test_tier_validation.py | 33 ++++++++++++++++++- .../views/res_config_settings_views.xml | 29 ++++++++++++++++ 13 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 sale_tier_validation/models/res_company.py create mode 100644 sale_tier_validation/models/res_config_settings.py create mode 100644 sale_tier_validation/reports/__init__.py create mode 100644 sale_tier_validation/reports/sale_report.py create mode 100644 sale_tier_validation/views/res_config_settings_views.xml diff --git a/sale_tier_validation/README.rst b/sale_tier_validation/README.rst index 2786351e..f7bd7fc2 100644 --- a/sale_tier_validation/README.rst +++ b/sale_tier_validation/README.rst @@ -7,7 +7,7 @@ Sale Tier Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ccba7ba5488f404d32fbff50dbf1c3f9c16eab25c1e6e4326ea85fe27baf03d1 + !! source digest: sha256:912a7cbbfc7a756ae58b843c5d5745aac9924ab08e025264e22b157d14f81c2d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -50,6 +50,10 @@ To configure this module, you need to: 1. Go to *Settings > Technical > Tier Validations > Tier Definition*. 2. Create as many tiers as you want for Sale Order model. +If necessary, update the "Block Printing of Unvalidated Quotations" +under *Sales > Configuration > Settings* to block the printing of +quotation when the order has yet to be validated (disabled by default). + Usage ===== @@ -103,6 +107,9 @@ Contributors - Sergio Teruel - Tharathip Chaweewongphan +- `Quartile `__: + + - Aung Ko Ko Lin Maintainers ----------- diff --git a/sale_tier_validation/__init__.py b/sale_tier_validation/__init__.py index 31660d6a..28f4d9ba 100644 --- a/sale_tier_validation/__init__.py +++ b/sale_tier_validation/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import models +from . import reports diff --git a/sale_tier_validation/__manifest__.py b/sale_tier_validation/__manifest__.py index 8c02fdfc..357fe40c 100644 --- a/sale_tier_validation/__manifest__.py +++ b/sale_tier_validation/__manifest__.py @@ -12,5 +12,9 @@ "application": False, "installable": True, "depends": ["sale", "base_tier_validation"], - "data": ["data/mail_data.xml", "views/sale_order_view.xml"], + "data": [ + "data/mail_data.xml", + "views/sale_order_view.xml", + "views/res_config_settings_views.xml", + ], } diff --git a/sale_tier_validation/models/__init__.py b/sale_tier_validation/models/__init__.py index 551e600d..320c6333 100644 --- a/sale_tier_validation/models/__init__.py +++ b/sale_tier_validation/models/__init__.py @@ -1,5 +1,7 @@ # Copyright 2019 Open Source Integrators # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import res_company +from . import res_config_settings from . import sale_order from . import tier_definition diff --git a/sale_tier_validation/models/res_company.py b/sale_tier_validation/models/res_company.py new file mode 100644 index 00000000..e91c6402 --- /dev/null +++ b/sale_tier_validation/models/res_company.py @@ -0,0 +1,12 @@ +# Copyright 2024 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + sale_report_print_block = fields.Boolean( + help="Block the printing of the sale order report if the order is not validated." + ) diff --git a/sale_tier_validation/models/res_config_settings.py b/sale_tier_validation/models/res_config_settings.py new file mode 100644 index 00000000..d741fbc9 --- /dev/null +++ b/sale_tier_validation/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2024 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + sale_report_print_block = fields.Boolean( + related="company_id.sale_report_print_block", + readonly=False, + help="Block the printing of the sale order report if the order is not validated.", + ) diff --git a/sale_tier_validation/readme/CONFIGURE.md b/sale_tier_validation/readme/CONFIGURE.md index de4359b2..db4b94c2 100644 --- a/sale_tier_validation/readme/CONFIGURE.md +++ b/sale_tier_validation/readme/CONFIGURE.md @@ -3,3 +3,7 @@ To configure this module, you need to: 1. Go to *Settings \> Technical \> Tier Validations \> Tier Definition*. 2. Create as many tiers as you want for Sale Order model. + +If necessary, update the "Block Printing of Unvalidated Quotations" under *Sales \> +Configuration \> Settings* to block the printing of quotation when the order has yet +to be validated (disabled by default). diff --git a/sale_tier_validation/readme/CONTRIBUTORS.md b/sale_tier_validation/readme/CONTRIBUTORS.md index 2e0d4e8f..14559110 100644 --- a/sale_tier_validation/readme/CONTRIBUTORS.md +++ b/sale_tier_validation/readme/CONTRIBUTORS.md @@ -2,3 +2,5 @@ - [Tecnativa](https://www.tecnativa.com): - Sergio Teruel - Tharathip Chaweewongphan \<\> +- [Quartile](https://www.quartile.co): + - Aung Ko Ko Lin diff --git a/sale_tier_validation/reports/__init__.py b/sale_tier_validation/reports/__init__.py new file mode 100644 index 00000000..cd23411b --- /dev/null +++ b/sale_tier_validation/reports/__init__.py @@ -0,0 +1 @@ +from . import sale_report diff --git a/sale_tier_validation/reports/sale_report.py b/sale_tier_validation/reports/sale_report.py new file mode 100644 index 00000000..4fcbfd73 --- /dev/null +++ b/sale_tier_validation/reports/sale_report.py @@ -0,0 +1,27 @@ +# Copyright 2024 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, models +from odoo.exceptions import UserError + + +class ReportSaleOrder(models.AbstractModel): + _name = "report.sale.report_saleorder" + _description = "Sale Order Report" + + @api.model + def _get_report_values(self, docids, data=None): + docs = self.env["sale.order"].browse(docids) + for order in docs: + if not order.company_id.sale_report_print_block: + continue + if order.need_validation or (order.review_ids and not order.validated): + raise UserError( + _("Quotation printing is blocked until the order is approved.") + ) + return { + "doc_ids": docids, + "doc_model": "sale.order", + "docs": docs, + "data": data, + } diff --git a/sale_tier_validation/static/description/index.html b/sale_tier_validation/static/description/index.html index a48ef0e9..ce93cbd8 100644 --- a/sale_tier_validation/static/description/index.html +++ b/sale_tier_validation/static/description/index.html @@ -366,7 +366,7 @@

Sale Tier Validation

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ccba7ba5488f404d32fbff50dbf1c3f9c16eab25c1e6e4326ea85fe27baf03d1 +!! source digest: sha256:912a7cbbfc7a756ae58b843c5d5745aac9924ab08e025264e22b157d14f81c2d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

This module extends the functionality of Sale Orders to support a tier @@ -399,6 +399,9 @@

Configuration

  • Go to Settings > Technical > Tier Validations > Tier Definition.
  • Create as many tiers as you want for Sale Order model.
  • +

    If necessary, update the “Block Printing of Unvalidated Quotations” +under Sales > Configuration > Settings to block the printing of +quotation when the order has yet to be validated (disabled by default).

    Usage

    @@ -452,6 +455,10 @@

    Contributors

  • Tharathip Chaweewongphan <tharathipc@ecosoft.co.th>
  • +
  • Quartile:
      +
    • Aung Ko Ko Lin
    • +
    +
  • diff --git a/sale_tier_validation/tests/test_tier_validation.py b/sale_tier_validation/tests/test_tier_validation.py index 53b00360..70d133df 100644 --- a/sale_tier_validation/tests/test_tier_validation.py +++ b/sale_tier_validation/tests/test_tier_validation.py @@ -1,6 +1,6 @@ # Copyright 2020 Sergio Teruel # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). -from odoo.exceptions import ValidationError +from odoo.exceptions import UserError, ValidationError from odoo.tests import common, tagged @@ -73,3 +73,34 @@ def test_validation_sale_order(self): so.with_user(self.test_user_1).validate_tier() so.action_confirm() self.assertEqual(so.state, "sale") + + def test_block_print_unvalidated_sale_order(self): + so = self.env["sale.order"].create( + { + "partner_id": self.customer.id, + "order_line": [ + ( + 0, + 0, + { + "name": "Test line", + "product_id": self.product.id, + "product_uom_qty": 1, + "product_uom": self.product.uom_id.id, + "price_unit": self.product.list_price, + }, + ) + ], + } + ) + so.company_id.sale_report_print_block = True + report = self.env["report.sale.report_saleorder"] + # Attempt to render the report before validation + with self.assertRaises(UserError): + report._get_report_values(docids=[so.id]) + so.request_validation() + with self.assertRaises(UserError): + report._get_report_values(docids=[so.id]) + so.with_user(self.test_user_1).validate_tier() + # Attempt to render the report after validation + report._get_report_values(docids=[so.id]) diff --git a/sale_tier_validation/views/res_config_settings_views.xml b/sale_tier_validation/views/res_config_settings_views.xml new file mode 100644 index 00000000..5e3058f4 --- /dev/null +++ b/sale_tier_validation/views/res_config_settings_views.xml @@ -0,0 +1,29 @@ + + + + res.config.settings.form + res.config.settings + + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    From acf1f367df20077dfe944b923ce11b4909dba6b0 Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Tue, 12 Aug 2025 04:23:03 +0000 Subject: [PATCH 3/3] reflect oca changes --- sale_tier_validation/README.rst | 38 ++++++++------ sale_tier_validation/__manifest__.py | 2 +- sale_tier_validation/i18n/es.po | 46 ++++++++++++++++ sale_tier_validation/i18n/es_MX.po | 46 ++++++++++++++++ sale_tier_validation/i18n/it.po | 52 ++++++++++++++++++- .../i18n/sale_tier_validation.pot | 46 ++++++++++++++++ sale_tier_validation/i18n/sv.po | 46 ++++++++++++++++ sale_tier_validation/i18n/tr.po | 46 ++++++++++++++++ sale_tier_validation/i18n/zh_CN.po | 46 ++++++++++++++++ sale_tier_validation/readme/ROADMAP.md | 2 + sale_tier_validation/reports/sale_report.py | 4 +- .../static/description/index.html | 47 ++++++++++------- .../views/sale_order_view.xml | 21 +++++++- 13 files changed, 403 insertions(+), 39 deletions(-) diff --git a/sale_tier_validation/README.rst b/sale_tier_validation/README.rst index f7bd7fc2..52ed1f39 100644 --- a/sale_tier_validation/README.rst +++ b/sale_tier_validation/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ==================== Sale Tier Validation ==================== @@ -7,13 +11,13 @@ Sale Tier Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:912a7cbbfc7a756ae58b843c5d5745aac9924ab08e025264e22b157d14f81c2d + !! source digest: sha256:6af1c72fe8747fb5c730d2d249d08d6ecaa53723190ba8a68e3f80bca0ae98a5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |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%2Fsale--workflow-lightgray.png?logo=github @@ -67,18 +71,20 @@ To use this module, you need to: Additional features: -- You can filter the SOs requesting your review through the filter - *Needs my Review*. -- User with rights to confirm the SO (validate all tiers that would be - generated) can directly do the operation, this is, there is no need - for her/him to request a validation. +- You can filter the SOs requesting your review through the filter + *Needs my Review*. +- User with rights to confirm the SO (validate all tiers that would be + generated) can directly do the operation, this is, there is no need + for her/him to request a validation. Known issues / Roadmap ====================== -- The sales order, when moved to the state sent, will still send the - email even if the validation is not approved by the corresponding - tier. Code to consider this particular case is not developed. +- The sales order, when moved to the state sent, will still send the + email even if the validation is not approved by the corresponding + tier. Code to consider this particular case is not developed. +- If any module modifies the attrs of the confirm sales order button, it + will invalidate the expected behavior. Bug Tracker =========== @@ -101,15 +107,15 @@ Authors Contributors ------------ -- Mayank Gosai -- `Tecnativa `__: +- Mayank Gosai +- `Tecnativa `__: - - Sergio Teruel + - Sergio Teruel -- Tharathip Chaweewongphan -- `Quartile `__: +- Tharathip Chaweewongphan +- `Quartile `__: - - Aung Ko Ko Lin + - Aung Ko Ko Lin Maintainers ----------- diff --git a/sale_tier_validation/__manifest__.py b/sale_tier_validation/__manifest__.py index 357fe40c..b5ca6cdb 100644 --- a/sale_tier_validation/__manifest__.py +++ b/sale_tier_validation/__manifest__.py @@ -4,7 +4,7 @@ "name": "Sale Tier Validation", "summary": "Extends the functionality of Sale Orders to " "support a tier validation process.", - "version": "16.0.1.0.4", + "version": "16.0.1.1.2", "category": "Sale", "website": "https://github.com/OCA/sale-workflow", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/sale_tier_validation/i18n/es.po b/sale_tier_validation/i18n/es.po index 72228c23..1b36f83c 100644 --- a/sale_tier_validation/i18n/es.po +++ b/sale_tier_validation/i18n/es.po @@ -18,16 +18,44 @@ msgstr "" "X-Generator: Weblate 4.17\n" "SO-Revision-Date: 2019-05-08 12:03+0000\n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "Puede Revisar" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "Tiene Comentario" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -48,6 +76,13 @@ msgstr "Necesita mi Revisión" msgid "Next Review" msgstr "Siguiente revisión" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -68,6 +103,17 @@ msgstr "Revisores" msgid "SOs validated and ready to be confirmed" msgstr "SOs validadas y preparadas para ser confirmadas" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/es_MX.po b/sale_tier_validation/i18n/es_MX.po index 599d5f91..64c9e7aa 100644 --- a/sale_tier_validation/i18n/es_MX.po +++ b/sale_tier_validation/i18n/es_MX.po @@ -16,16 +16,44 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14.1\n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "Puede revisar" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "Tiene comentario" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -46,6 +74,13 @@ msgstr "Necesita mi revisión" msgid "Next Review" msgstr "Siguiente revisión" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -66,6 +101,17 @@ msgstr "Revisores" msgid "SOs validated and ready to be confirmed" msgstr "SOs validados y listos para ser confirmados" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/it.po b/sale_tier_validation/i18n/it.po index 66382a24..06e03e10 100644 --- a/sale_tier_validation/i18n/it.po +++ b/sale_tier_validation/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-12-22 14:38+0000\n" +"PO-Revision-Date: 2025-01-07 15:06+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,18 +14,48 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "Blocco stampa preventivi non validati" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" +"Blocca la stampa del resoconto dell'ordine di vendita se l'ordine non è " +"validato." #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "Può revisionare" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "Ha commenti" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "È richiesta la rivalutazione" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -46,6 +76,13 @@ msgstr "Richiede la mia revisione" msgid "Next Review" msgstr "Prossima revisione" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "La stampa del preventivo è bloccata finché l'ordine non è approvato." + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -66,6 +103,17 @@ msgstr "Revisori" msgid "SOs validated and ready to be confirmed" msgstr "Ordini di vendita approvati e pronti da confermare" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "Resoconto ordine di vendita" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "Blocco stampa resoconto vendita" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/sale_tier_validation.pot b/sale_tier_validation/i18n/sale_tier_validation.pot index f6676d7e..01186f09 100644 --- a/sale_tier_validation/i18n/sale_tier_validation.pot +++ b/sale_tier_validation/i18n/sale_tier_validation.pot @@ -13,16 +13,44 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -43,6 +71,13 @@ msgstr "" msgid "Next Review" msgstr "" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -63,6 +98,17 @@ msgstr "" msgid "SOs validated and ready to be confirmed" msgstr "" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/sv.po b/sale_tier_validation/i18n/sv.po index 8c99bd14..08a2e78a 100644 --- a/sale_tier_validation/i18n/sv.po +++ b/sale_tier_validation/i18n/sv.po @@ -16,16 +16,44 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "Kan granska" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "Har kommentar" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -46,6 +74,13 @@ msgstr "Behöver min granskning" msgid "Next Review" msgstr "Nästa granskning" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -66,6 +101,17 @@ msgstr "Granskare" msgid "SOs validated and ready to be confirmed" msgstr "Försäljningsordrar validerade och redo att bekräftas" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/tr.po b/sale_tier_validation/i18n/tr.po index 11f4037f..e3c39df2 100644 --- a/sale_tier_validation/i18n/tr.po +++ b/sale_tier_validation/i18n/tr.po @@ -16,16 +16,44 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14.1\n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "Gözden Geçirebilir" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "Yorum Var" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -46,6 +74,13 @@ msgstr "İncelememe ihtiyacı var" msgid "Next Review" msgstr "Sonraki İnceleme" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -66,6 +101,17 @@ msgstr "İnceleyenler" msgid "SOs validated and ready to be confirmed" msgstr "SO'lar doğrulandı ve onaylanmaya hazır" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/i18n/zh_CN.po b/sale_tier_validation/i18n/zh_CN.po index ab7d65cb..680329eb 100644 --- a/sale_tier_validation/i18n/zh_CN.po +++ b/sale_tier_validation/i18n/zh_CN.po @@ -17,16 +17,44 @@ msgstr "" "X-Generator: Weblate 3.10\n" "SO-Revision-Date: 2019-09-02 19:23+0000\n" +#. module: sale_tier_validation +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "Block Printing of Unvalidated Quotations" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block +#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view +msgid "" +"Block the printing of the sale order report if the order is not validated." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review msgid "Can Review" msgstr "" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment msgid "Has Comment" msgstr "" +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + #. module: sale_tier_validation #: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter msgid "My Sales to review" @@ -47,6 +75,13 @@ msgstr "需要我审查的" msgid "Next Review" msgstr "" +#. module: sale_tier_validation +#. odoo-python +#: code:addons/sale_tier_validation/reports/sale_report.py:0 +#, python-format +msgid "Quotation printing is blocked until the order is approved." +msgstr "" + #. module: sale_tier_validation #: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected msgid "Rejected" @@ -67,6 +102,17 @@ msgstr "" msgid "SOs validated and ready to be confirmed" msgstr "采购订单已验证,待确认" +#. module: sale_tier_validation +#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder +msgid "Sale Order Report" +msgstr "" + +#. module: sale_tier_validation +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block +#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block +msgid "Sale Report Print Block" +msgstr "" + #. module: sale_tier_validation #: model:ir.model,name:sale_tier_validation.model_sale_order msgid "Sales Order" diff --git a/sale_tier_validation/readme/ROADMAP.md b/sale_tier_validation/readme/ROADMAP.md index e01cc6a8..98aba570 100644 --- a/sale_tier_validation/readme/ROADMAP.md +++ b/sale_tier_validation/readme/ROADMAP.md @@ -1,3 +1,5 @@ - The sales order, when moved to the state sent, will still send the email even if the validation is not approved by the corresponding tier. Code to consider this particular case is not developed. +- If any module modifies the attrs of the confirm sales order button, + it will invalidate the expected behavior. \ No newline at end of file diff --git a/sale_tier_validation/reports/sale_report.py b/sale_tier_validation/reports/sale_report.py index 4fcbfd73..739fe47e 100644 --- a/sale_tier_validation/reports/sale_report.py +++ b/sale_tier_validation/reports/sale_report.py @@ -15,7 +15,9 @@ def _get_report_values(self, docids, data=None): for order in docs: if not order.company_id.sale_report_print_block: continue - if order.need_validation or (order.review_ids and not order.validated): + if order.need_validation or ( + order.review_ids and order.validation_status != "validated" + ): raise UserError( _("Quotation printing is blocked until the order is approved.") ) diff --git a/sale_tier_validation/static/description/index.html b/sale_tier_validation/static/description/index.html index ce93cbd8..9d459a62 100644 --- a/sale_tier_validation/static/description/index.html +++ b/sale_tier_validation/static/description/index.html @@ -3,15 +3,16 @@ -Sale Tier Validation +README.rst -
    -

    Sale Tier Validation

    +
    + + +Odoo Community Association + +
    +

    Sale Tier Validation

    -

    Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

    This module extends the functionality of Sale Orders to support a tier validation process.

    Table of contents

    @@ -388,12 +394,12 @@

    Sale Tier Validation

    -

    Installation

    +

    Installation

    This module depends on base_tier_validation. You can find it at OCA/server-ux

    -

    Configuration

    +

    Configuration

    To configure this module, you need to:

    1. Go to Settings > Technical > Tier Validations > Tier Definition.
    2. @@ -404,7 +410,7 @@

      Configuration

      quotation when the order has yet to be validated (disabled by default).

    -

    Usage

    +

    Usage

    To use this module, you need to:

    1. Create a Sale Order triggering at least one “Tier Definition”.
    2. @@ -423,15 +429,17 @@

      Usage

    -

    Known issues / Roadmap

    +

    Known issues / Roadmap

    • The sales order, when moved to the state sent, will still send the email even if the validation is not approved by the corresponding tier. Code to consider this particular case is not developed.
    • +
    • If any module modifies the attrs of the confirm sales order button, it +will invalidate the expected behavior.
    -

    Bug Tracker

    +

    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 @@ -439,15 +447,15 @@

    Bug Tracker

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Open Source Integrators
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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.

    @@ -473,5 +483,6 @@

    Maintainers

    +
    diff --git a/sale_tier_validation/views/sale_order_view.xml b/sale_tier_validation/views/sale_order_view.xml index 54e192d4..e28f8ade 100644 --- a/sale_tier_validation/views/sale_order_view.xml +++ b/sale_tier_validation/views/sale_order_view.xml @@ -2,6 +2,25 @@ + + sale.order + + + + {'invisible':['|', ('validation_status', 'in', ('pending', 'rejected')),('state', '!=', 'sent')]} + + + {'invisible':['|', ('validation_status', 'in', ('pending', 'rejected')),('state', '!=', 'draft')]} + + + + + + sale.order.select - sale_tier_validation sale.order @@ -17,7 +36,7 @@