diff --git a/purchase_tier_validation/README.rst b/purchase_tier_validation/README.rst new file mode 100644 index 00000000..2383f55a --- /dev/null +++ b/purchase_tier_validation/README.rst @@ -0,0 +1,116 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +======================== +Purchase Tier Validation +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:927bc3c6c050ec8b4fc60f280f504bfdf4f7b9ea662e35042231aa73fc73fae2 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/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%2Fpurchase--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_tier_validation + :alt: OCA/purchase-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_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/purchase-workflow&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Purchase 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: + +#. Go to *Settings > Technical > Tier Validations > Tier Definition*. +#. Create as many tiers as you want for Purchase Order model. + +Usage +===== + +To use this module, you need to: + +#. Create a Purchase Order triggering at least one "Tier Definition". +#. Click on *Request Validation* button. +#. Under the tab *Reviews* have a look to pending reviews and their statuses. +#. Once all reviews are validated click on *Confirm Order*. + +Additional features: + +* You can filter the POs requesting your review through the filter *Needs my + Review*. +* User with rights to confirm the PO (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. + +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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Lois Rilo +* Naglis Jonaitis +* Pedro Gonzalez +* Kitti U. (migrate to v14) + +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/purchase-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/purchase_tier_validation/__init__.py b/purchase_tier_validation/__init__.py new file mode 100644 index 00000000..31660d6a --- /dev/null +++ b/purchase_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/purchase_tier_validation/__manifest__.py b/purchase_tier_validation/__manifest__.py new file mode 100644 index 00000000..0d7d6407 --- /dev/null +++ b/purchase_tier_validation/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2017 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Purchase Tier Validation", + "summary": "Extends the functionality of Purchase Orders to " + "support a tier validation process.", + "version": "16.0.1.1.1", + "category": "Purchases", + "website": "https://github.com/OCA/purchase-workflow", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["purchase", "base_tier_validation"], + "data": ["views/purchase_order_view.xml"], +} diff --git a/purchase_tier_validation/i18n/es.po b/purchase_tier_validation/i18n/es.po new file mode 100644 index 00000000..dd579cde --- /dev/null +++ b/purchase_tier_validation/i18n/es.po @@ -0,0 +1,137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-06 21:37+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: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__can_review +msgid "Can Review" +msgstr "Puede Revisar" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__has_comment +msgid "Has Comment" +msgstr "Tiene Comentario" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "My Purchases to review" +msgstr "Mis Compras a revisar" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__need_validation +msgid "Need Validation" +msgstr "Necesita validación" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Needs my Review" +msgstr "Necesita mi Revisión" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__next_review +msgid "Next Review" +msgstr "Siguiente revisión" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "POs validated and ready to be confirmed" +msgstr "POs validadas y preparadas para ser confirmadas" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_purchase_order +msgid "Purchase Order" +msgstr "Orden de Compra" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected_message +msgid "Rejected Message" +msgstr "Mensaje rechazado" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__reviewer_ids +msgid "Reviewers" +msgstr "Revisores" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definición del nivel" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__to_validate_message +msgid "To Validate Message" +msgstr "Para validar el mensaje" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Validated" +msgstr "Validada" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated_message +msgid "Validated Message" +msgstr "Mensaje validado" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validation_status +msgid "Validation Status" +msgstr "Estado de validación" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__review_ids +msgid "Validations" +msgstr "Validaciones" + +#~ msgid "" +#~ "This PO needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "Esta PO 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" + +#~ msgid "Reviews" +#~ msgstr "Revisiones" diff --git a/purchase_tier_validation/i18n/it.po b/purchase_tier_validation/i18n/it.po new file mode 100644 index 00000000..9c97179b --- /dev/null +++ b/purchase_tier_validation/i18n/it.po @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-01-11 13:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__can_review +msgid "Can Review" +msgstr "Può revisionare" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__has_comment +msgid "Has Comment" +msgstr "Ha commenti" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "È richiesta la rivalutazione" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "My Purchases to review" +msgstr "I miei acquisti da revisionare" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__need_validation +msgid "Need Validation" +msgstr "Richiede conferma" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Needs my Review" +msgstr "Richiede la mia revisione" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__next_review +msgid "Next Review" +msgstr "Prossima revisione" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "POs validated and ready to be confirmed" +msgstr "Ordini di acquisto approvati e pronti da confermare" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_purchase_order +msgid "Purchase Order" +msgstr "Ordine di acquisto" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected +msgid "Rejected" +msgstr "Rifiutata" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected_message +msgid "Rejected Message" +msgstr "Messaggio di rifiuto" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__reviewer_ids +msgid "Reviewers" +msgstr "Revisori" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definizione livello" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__to_validate_message +msgid "To Validate Message" +msgstr "Messaggio per 'Da validare'" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Validated" +msgstr "Approvata" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated_message +msgid "Validated Message" +msgstr "Messaggio per 'Validato'" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validation_status +msgid "Validation Status" +msgstr "Stato validazione" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__review_ids +msgid "Validations" +msgstr "Validazioni" diff --git a/purchase_tier_validation/i18n/purchase_tier_validation.pot b/purchase_tier_validation/i18n/purchase_tier_validation.pot new file mode 100644 index 00000000..c570b568 --- /dev/null +++ b/purchase_tier_validation/i18n/purchase_tier_validation.pot @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_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: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__can_review +msgid "Can Review" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__has_comment +msgid "Has Comment" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "My Purchases to review" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__need_validation +msgid "Need Validation" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Needs my Review" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__next_review +msgid "Next Review" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "POs validated and ready to be confirmed" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected +msgid "Rejected" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Validated" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated_message +msgid "Validated Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__review_ids +msgid "Validations" +msgstr "" diff --git a/purchase_tier_validation/i18n/zh_CN.po b/purchase_tier_validation/i18n/zh_CN.po new file mode 100644 index 00000000..e534f990 --- /dev/null +++ b/purchase_tier_validation/i18n/zh_CN.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-03-28 16:13+0000\n" +"Last-Translator: Dong \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.10\n" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__can_review +msgid "Can Review" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__has_comment +msgid "Has Comment" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__is_reevaluation_required +msgid "Is Reevaluation Required" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "My Purchases to review" +msgstr "等待我审核的采购" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__need_validation +msgid "Need Validation" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Needs my Review" +msgstr "需要我审核" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__next_review +msgid "Next Review" +msgstr "" + +#. module: purchase_tier_validation +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "POs validated and ready to be confirmed" +msgstr "采购订单已批准并等待确认" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_purchase_order +msgid "Purchase Order" +msgstr "采购订单" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected +msgid "Rejected" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model,name:purchase_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "层级定义" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated +#: model_terms:ir.ui.view,arch_db:purchase_tier_validation.view_purchase_order_filter +msgid "Validated" +msgstr "已批准" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validated_message +msgid "Validated Message" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__validation_status +msgid "Validation Status" +msgstr "" + +#. module: purchase_tier_validation +#: model:ir.model.fields,field_description:purchase_tier_validation.field_purchase_order__review_ids +msgid "Validations" +msgstr "" + +#~ msgid "" +#~ "This PO needs to be\n" +#~ " validated." +#~ msgstr "这个采购订单需要审批。" + +#~ 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/purchase_tier_validation/models/__init__.py b/purchase_tier_validation/models/__init__.py new file mode 100644 index 00000000..a426f80d --- /dev/null +++ b/purchase_tier_validation/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import purchase_order +from . import tier_definition diff --git a/purchase_tier_validation/models/purchase_order.py b/purchase_tier_validation/models/purchase_order.py new file mode 100644 index 00000000..a82eb494 --- /dev/null +++ b/purchase_tier_validation/models/purchase_order.py @@ -0,0 +1,13 @@ +# Copyright 2017 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class PurchaseOrder(models.Model): + _name = "purchase.order" + _inherit = ["purchase.order", "tier.validation"] + _state_from = ["draft", "sent", "to approve"] + _state_to = ["purchase", "approved"] + + _tier_validation_manual_config = False diff --git a/purchase_tier_validation/models/tier_definition.py b/purchase_tier_validation/models/tier_definition.py new file mode 100644 index 00000000..606d5689 --- /dev/null +++ b/purchase_tier_validation/models/tier_definition.py @@ -0,0 +1,14 @@ +# Copyright 2017 ForgeFlow S.L. +# 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(TierDefinition, self)._get_tier_validation_model_names() + res.append("purchase.order") + return res diff --git a/purchase_tier_validation/readme/CONFIGURE.rst b/purchase_tier_validation/readme/CONFIGURE.rst new file mode 100644 index 00000000..b7c0ef30 --- /dev/null +++ b/purchase_tier_validation/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +To configure this module, you need to: + +#. Go to *Settings > Technical > Tier Validations > Tier Definition*. +#. Create as many tiers as you want for Purchase Order model. diff --git a/purchase_tier_validation/readme/CONTRIBUTORS.rst b/purchase_tier_validation/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..01d24644 --- /dev/null +++ b/purchase_tier_validation/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Lois Rilo +* Naglis Jonaitis +* Pedro Gonzalez +* Kitti U. (migrate to v14) diff --git a/purchase_tier_validation/readme/DESCRIPTION.rst b/purchase_tier_validation/readme/DESCRIPTION.rst new file mode 100644 index 00000000..9e217e4d --- /dev/null +++ b/purchase_tier_validation/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of Purchase Orders to support a tier +validation process. diff --git a/purchase_tier_validation/readme/INSTALL.rst b/purchase_tier_validation/readme/INSTALL.rst new file mode 100644 index 00000000..638fbd2d --- /dev/null +++ b/purchase_tier_validation/readme/INSTALL.rst @@ -0,0 +1,2 @@ +This module depends on ``base_tier_validation``. You can find it at +`OCA/server-ux `_ diff --git a/purchase_tier_validation/readme/USAGE.rst b/purchase_tier_validation/readme/USAGE.rst new file mode 100644 index 00000000..31a17ed5 --- /dev/null +++ b/purchase_tier_validation/readme/USAGE.rst @@ -0,0 +1,14 @@ +To use this module, you need to: + +#. Create a Purchase Order triggering at least one "Tier Definition". +#. Click on *Request Validation* button. +#. Under the tab *Reviews* have a look to pending reviews and their statuses. +#. Once all reviews are validated click on *Confirm Order*. + +Additional features: + +* You can filter the POs requesting your review through the filter *Needs my + Review*. +* User with rights to confirm the PO (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/purchase_tier_validation/static/description/icon.png b/purchase_tier_validation/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/purchase_tier_validation/static/description/icon.png differ diff --git a/purchase_tier_validation/static/description/index.html b/purchase_tier_validation/static/description/index.html new file mode 100644 index 00000000..863528a3 --- /dev/null +++ b/purchase_tier_validation/static/description/index.html @@ -0,0 +1,467 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Purchase Tier Validation

+ +

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

+

This module extends the functionality of Purchase 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 Purchase Order model.
  4. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Create a Purchase 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 POs requesting your review through the filter Needs my +Review.
  • +
  • User with rights to confirm the PO (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.
  • +
+
+
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

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

+

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

+
+
+
+
+ + diff --git a/purchase_tier_validation/tests/__init__.py b/purchase_tier_validation/tests/__init__.py new file mode 100644 index 00000000..f3959641 --- /dev/null +++ b/purchase_tier_validation/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_tier_validation diff --git a/purchase_tier_validation/tests/test_tier_validation.py b/purchase_tier_validation/tests/test_tier_validation.py new file mode 100644 index 00000000..512282a3 --- /dev/null +++ b/purchase_tier_validation/tests/test_tier_validation.py @@ -0,0 +1,69 @@ +# Copyright 2018 ForgeFlow S.L. +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo_test_helper import FakeModelLoader + +from odoo.tests import common +from odoo.tests.common import tagged + + +@tagged("post_install", "-at_install") +class TestPurchaseTierValidation(common.TransactionCase): + @classmethod + def setUpClass(cls): + super(TestPurchaseTierValidation, cls).setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + + from .tier_validation_tester import TierValidationTester + + cls.loader.update_registry((TierValidationTester,)) + + cls.test_model = cls.env[TierValidationTester._name] + + cls.tester_model = cls.env["ir.model"].search( + [("model", "=", "tier.validation.tester")] + ) + + # Access record: + cls.env["ir.model.access"].create( + { + "name": "access.tester", + "model_id": cls.tester_model.id, + "perm_read": 1, + "perm_write": 1, + "perm_create": 1, + "perm_unlink": 1, + } + ) + + # Create users: + group_ids = cls.env.ref("base.group_system").ids + cls.test_user_1 = cls.env["res.users"].create( + {"name": "John", "login": "test1", "groups_id": [(6, 0, group_ids)]} + ) + + # Create tier definitions: + cls.tier_def_obj = cls.env["tier.definition"] + cls.tier_def_obj.create( + { + "model_id": cls.tester_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + } + ) + + cls.test_record = cls.test_model.create({"test_field": 2.5}) + + @classmethod + def tearDownClass(cls): + cls.loader.restore_registry() + return super(TestPurchaseTierValidation, cls).tearDownClass() + + def test_01_tier_definition_models(self): + """When the user can validate all future reviews, it is not needed + to request a validation, the action can be done straight forward.""" + res = self.tier_def_obj._get_tier_validation_model_names() + self.assertIn("purchase.order", res) diff --git a/purchase_tier_validation/tests/tier_validation_tester.py b/purchase_tier_validation/tests/tier_validation_tester.py new file mode 100644 index 00000000..21bb4fef --- /dev/null +++ b/purchase_tier_validation/tests/tier_validation_tester.py @@ -0,0 +1,24 @@ +# Copyright 2018 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class TierValidationTester(models.Model): + _name = "tier.validation.tester" + _description = "Tier Validation Tester" + _inherit = ["tier.validation"] + + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("cancel", "Cancel"), + ], + default="draft", + ) + test_field = fields.Float() + user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users") + + def action_confirm(self): + self.write({"state": "confirmed"}) diff --git a/purchase_tier_validation/views/purchase_order_view.xml b/purchase_tier_validation/views/purchase_order_view.xml new file mode 100644 index 00000000..916d6665 --- /dev/null +++ b/purchase_tier_validation/views/purchase_order_view.xml @@ -0,0 +1,44 @@ + + + + + purchase.order.select - purchase_tier_validation + purchase.order + + + + + + + + + + + purchase.order.inherit.purchase.order.tree + purchase.order + + + + + + + + diff --git a/setup/purchase_tier_validation/odoo/addons/purchase_tier_validation b/setup/purchase_tier_validation/odoo/addons/purchase_tier_validation new file mode 120000 index 00000000..deeb6f8e --- /dev/null +++ b/setup/purchase_tier_validation/odoo/addons/purchase_tier_validation @@ -0,0 +1 @@ +../../../../purchase_tier_validation \ No newline at end of file diff --git a/setup/purchase_tier_validation/setup.py b/setup/purchase_tier_validation/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/purchase_tier_validation/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)