From 5418107feaa7b52953d9b769b05a0139edceb657 Mon Sep 17 00:00:00 2001 From: rjaraspearhead Date: Sun, 16 Feb 2025 23:08:57 -0500 Subject: [PATCH 1/5] [ADD] account_payment_tier_validation --- account_payment_tier_validation/README.rst | 113 +++++ account_payment_tier_validation/__init__.py | 3 + .../__manifest__.py | 16 + .../i18n/account_payment_tier_validation.pot | 115 +++++ .../models/__init__.py | 5 + .../models/account_move.py | 5 + .../models/account_payment.py | 14 + .../models/tier_definition.py | 14 + .../pyproject.toml | 3 + .../readme/CONFIGURE.md | 5 + .../readme/CONTRIBUTORS.md | 3 + .../readme/DESCRIPTION.md | 2 + .../readme/INSTALL.md | 2 + .../readme/ROADMAP.md | 1 + .../readme/USAGE.md | 15 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 462 ++++++++++++++++++ .../tests/__init__.py | 3 + .../tests/test_tier_validation.py | 81 +++ .../views/account_payment_view.xml | 43 ++ 20 files changed, 905 insertions(+) create mode 100644 account_payment_tier_validation/README.rst create mode 100644 account_payment_tier_validation/__init__.py create mode 100644 account_payment_tier_validation/__manifest__.py create mode 100644 account_payment_tier_validation/i18n/account_payment_tier_validation.pot create mode 100644 account_payment_tier_validation/models/__init__.py create mode 100644 account_payment_tier_validation/models/account_move.py create mode 100644 account_payment_tier_validation/models/account_payment.py create mode 100644 account_payment_tier_validation/models/tier_definition.py create mode 100644 account_payment_tier_validation/pyproject.toml create mode 100644 account_payment_tier_validation/readme/CONFIGURE.md create mode 100644 account_payment_tier_validation/readme/CONTRIBUTORS.md create mode 100644 account_payment_tier_validation/readme/DESCRIPTION.md create mode 100644 account_payment_tier_validation/readme/INSTALL.md create mode 100644 account_payment_tier_validation/readme/ROADMAP.md create mode 100644 account_payment_tier_validation/readme/USAGE.md create mode 100644 account_payment_tier_validation/static/description/icon.png create mode 100644 account_payment_tier_validation/static/description/index.html create mode 100644 account_payment_tier_validation/tests/__init__.py create mode 100644 account_payment_tier_validation/tests/test_tier_validation.py create mode 100644 account_payment_tier_validation/views/account_payment_view.xml diff --git a/account_payment_tier_validation/README.rst b/account_payment_tier_validation/README.rst new file mode 100644 index 00000000000..b3018bee56f --- /dev/null +++ b/account_payment_tier_validation/README.rst @@ -0,0 +1,113 @@ +======================= +Payment Tier Validation +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6e4f1446965dcb0038c1be6b059d24ff14482f84eba9cc90f7dfad3e2188dde0 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Faccount--payment-lightgray.png?logo=github + :target: https://github.com/OCA/account-payment/tree/18.0/account_payment_tier_validation + :alt: OCA/account-payment +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-payment-18-0/account-payment-18-0-account_payment_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/account-payment&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Payments 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 Payment model. + +Usage +===== + +To use this module, you need to: + +1. Create a Payment 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*. + +Additional features: + +- You can filter the Payments requesting your review through the filter + *Needs my Review*. +- User with rights to confirm the payment (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 +====================== + +When a payment is generated through the payment wizard in invoices, in +some cases, validation prevents its creation. + +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 +======= + +Contributors +------------ + +- `Spearhead `__: + + Ricardo Jara + +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/account-payment `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_payment_tier_validation/__init__.py b/account_payment_tier_validation/__init__.py new file mode 100644 index 00000000000..4b76c7b2d5c --- /dev/null +++ b/account_payment_tier_validation/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/account_payment_tier_validation/__manifest__.py b/account_payment_tier_validation/__manifest__.py new file mode 100644 index 00000000000..35b81266508 --- /dev/null +++ b/account_payment_tier_validation/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2025 Spearhead - Ricardo Jara +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Payment Tier Validation", + "summary": "Extends the functionality of Payment to " + "support a tier validation process.", + "version": "18.0.1.0.0", + "category": "Generic Modules/Payment", + "website": "https://github.com/OCA/account-payment", + "author": "Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["account", "base_tier_validation"], + "data": ["views/account_payment_view.xml"], +} diff --git a/account_payment_tier_validation/i18n/account_payment_tier_validation.pot b/account_payment_tier_validation/i18n/account_payment_tier_validation.pot new file mode 100644 index 00000000000..b238ec6a7b4 --- /dev/null +++ b/account_payment_tier_validation/i18n/account_payment_tier_validation.pot @@ -0,0 +1,115 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.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: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__can_review +msgid "Can Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__has_comment +msgid "Has Comment" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,help:account_payment_tier_validation.field_account_payment__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "My Payments to review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__need_validation +msgid "Need Validation" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Needs my Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__next_review +msgid "Next Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_payment +msgid "Payments" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Payments validated and ready to be confirmed" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected +msgid "Rejected" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Validated" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated_message +msgid "Validated Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validation_status +msgid "Validation Status" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__review_ids +msgid "Validations" +msgstr "" diff --git a/account_payment_tier_validation/models/__init__.py b/account_payment_tier_validation/models/__init__.py new file mode 100644 index 00000000000..7fe2896f1f2 --- /dev/null +++ b/account_payment_tier_validation/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import account_payment +from . import tier_definition +from . import account_move diff --git a/account_payment_tier_validation/models/account_move.py b/account_payment_tier_validation/models/account_move.py new file mode 100644 index 00000000000..7aabbef8304 --- /dev/null +++ b/account_payment_tier_validation/models/account_move.py @@ -0,0 +1,5 @@ +from odoo import models + + +class AccountMove(models.Model): + _inherit = "account.move" diff --git a/account_payment_tier_validation/models/account_payment.py b/account_payment_tier_validation/models/account_payment.py new file mode 100644 index 00000000000..29b3c83780b --- /dev/null +++ b/account_payment_tier_validation/models/account_payment.py @@ -0,0 +1,14 @@ +# Copyright 2025 Spearhead - Ricardo Jara +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class AccountPayment(models.Model): + _name = "account.payment" + _inherit = ["account.payment", "tier.validation"] + _state_from = ["draft"] + _state_to = ["in_process", "paid"] + _cancel_state = "canceled" + + _tier_validation_manual_config = False diff --git a/account_payment_tier_validation/models/tier_definition.py b/account_payment_tier_validation/models/tier_definition.py new file mode 100644 index 00000000000..2ae970c30bd --- /dev/null +++ b/account_payment_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("account.payment") + return res diff --git a/account_payment_tier_validation/pyproject.toml b/account_payment_tier_validation/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/account_payment_tier_validation/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/account_payment_tier_validation/readme/CONFIGURE.md b/account_payment_tier_validation/readme/CONFIGURE.md new file mode 100644 index 00000000000..6f57c89e2aa --- /dev/null +++ b/account_payment_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 Payment model. diff --git a/account_payment_tier_validation/readme/CONTRIBUTORS.md b/account_payment_tier_validation/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..ce778ae2aca --- /dev/null +++ b/account_payment_tier_validation/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Spearhead](https://spearhead.global/): + + > Ricardo Jara \<\> diff --git a/account_payment_tier_validation/readme/DESCRIPTION.md b/account_payment_tier_validation/readme/DESCRIPTION.md new file mode 100644 index 00000000000..55501cbae98 --- /dev/null +++ b/account_payment_tier_validation/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module extends the functionality of Payments to support a +tier validation process. diff --git a/account_payment_tier_validation/readme/INSTALL.md b/account_payment_tier_validation/readme/INSTALL.md new file mode 100644 index 00000000000..c45725c465b --- /dev/null +++ b/account_payment_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/account_payment_tier_validation/readme/ROADMAP.md b/account_payment_tier_validation/readme/ROADMAP.md new file mode 100644 index 00000000000..f177aba0969 --- /dev/null +++ b/account_payment_tier_validation/readme/ROADMAP.md @@ -0,0 +1 @@ +When a payment is generated through the payment wizard in invoices, in some cases, validation prevents its creation. diff --git a/account_payment_tier_validation/readme/USAGE.md b/account_payment_tier_validation/readme/USAGE.md new file mode 100644 index 00000000000..9e90b593677 --- /dev/null +++ b/account_payment_tier_validation/readme/USAGE.md @@ -0,0 +1,15 @@ +To use this module, you need to: + +1. Create a Payment 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*. + +Additional features: + +- You can filter the Payments requesting your review through the filter + *Needs my Review*. +- User with rights to confirm the payment (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/account_payment_tier_validation/static/description/icon.png b/account_payment_tier_validation/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_payment_tier_validation/static/description/index.html b/account_payment_tier_validation/static/description/index.html new file mode 100644 index 00000000000..b835db9c2a9 --- /dev/null +++ b/account_payment_tier_validation/static/description/index.html @@ -0,0 +1,462 @@ + + + + + +Payment Tier Validation + + + +
+

Payment Tier Validation

+ + +

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runboat

+

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

Usage

+

To use this module, you need to:

+
    +
  1. Create a Payment 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.
  8. +
+

Additional features:

+
    +
  • You can filter the Payments requesting your review through the filter +Needs my Review.
  • +
  • User with rights to confirm the payment (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

+

When a payment is generated through the payment wizard in invoices, in +some cases, validation prevents its creation.

+
+
+

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

+
+

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/account-payment project on GitHub.

+

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

+
+
+
+ + diff --git a/account_payment_tier_validation/tests/__init__.py b/account_payment_tier_validation/tests/__init__.py new file mode 100644 index 00000000000..f39596410e7 --- /dev/null +++ b/account_payment_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/account_payment_tier_validation/tests/test_tier_validation.py b/account_payment_tier_validation/tests/test_tier_validation.py new file mode 100644 index 00000000000..e44ec51c2f5 --- /dev/null +++ b/account_payment_tier_validation/tests/test_tier_validation.py @@ -0,0 +1,81 @@ +# Copyright 2025 Spearhead - Ricardo Jara +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.exceptions import ValidationError +from odoo.tests import tagged + +from odoo.addons.base.tests.common import BaseCommon + + +@tagged("post_install", "-at_install") +class TestAccountPayment(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Payment model + cls.payment_model = cls.env.ref("account.model_account_payment") + + # Create users + group_ids = ( + cls.env.ref("base.group_system") + + cls.env.ref("account.group_account_manager") + ).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.payment_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('amount', '>', 100)]", + } + ) + cls.customer = cls.env["res.partner"].create({"name": "Partner for test"}) + + def test_01_tier_definition_models(self): + res = self.tier_def_obj._get_tier_validation_model_names() + self.assertIn("account.payment", res) + + def test_02_validation_account_payment(self): + payment = self.env["account.payment"].create( + { + "amount": 200.0, + "payment_type": "inbound", + "partner_type": "customer", + "partner_id": self.customer.id, + } + ) + + with self.assertRaises(ValidationError): + payment.action_post() + payment.amount = 100 + payment.action_post() + self.assertEqual(payment.state, "in_process") + + def test_03_validation_account_payment(self): + payment = self.env["account.payment"].create( + { + "amount": 200.0, + "payment_type": "inbound", + "partner_type": "customer", + "partner_id": self.customer.id, + } + ) + reviews = payment.with_user(self.env.user.id).request_validation() + self.assertEqual(payment.validation_status, "no") + self.assertTrue(reviews) + record = payment.with_user(self.test_user_1.id) + record.invalidate_model() + record.validate_tier() + payment.action_post() + self.assertEqual(payment.state, "in_process") + self.assertEqual(payment.validation_status, "validated") diff --git a/account_payment_tier_validation/views/account_payment_view.xml b/account_payment_tier_validation/views/account_payment_view.xml new file mode 100644 index 00000000000..4f31f611715 --- /dev/null +++ b/account_payment_tier_validation/views/account_payment_view.xml @@ -0,0 +1,43 @@ + + + + account.payment.search + account.payment + + + + + + + + + + + + account.payment.list + account.payment + + + + + + + + From b0a08f48076e3dd140752ecfb643529b0c88f3fe Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 18 Mar 2025 12:55:57 +0000 Subject: [PATCH 2/5] Added translation using Weblate (Italian) --- account_payment_tier_validation/i18n/it.po | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 account_payment_tier_validation/i18n/it.po diff --git a/account_payment_tier_validation/i18n/it.po b/account_payment_tier_validation/i18n/it.po new file mode 100644 index 00000000000..e259e6adf89 --- /dev/null +++ b/account_payment_tier_validation/i18n/it.po @@ -0,0 +1,119 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-03-18 15: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.10.2\n" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__can_review +msgid "Can Review" +msgstr "Può revisionare" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__has_comment +msgid "Has Comment" +msgstr "Ha commenti" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__hide_reviews +msgid "Hide Reviews" +msgstr "Nascondi revisioni" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,help:account_payment_tier_validation.field_account_payment__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Se attivata, consente al revisore di lasciare un commento nella revisione." + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_move +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "My Payments to review" +msgstr "I miei pagamenti da revisionare" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__need_validation +msgid "Need Validation" +msgstr "Richiede conferma" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Needs my Review" +msgstr "Richiede la mia revisione" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__next_review +msgid "Next Review" +msgstr "Prossima revisione" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_payment +msgid "Payments" +msgstr "Pagamenti" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Payments validated and ready to be confirmed" +msgstr "Pagamenti validati e pronti per la conferma" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected +msgid "Rejected" +msgstr "Respinto" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected_message +msgid "Rejected Message" +msgstr "Messaggio di rifiuto" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__reviewer_ids +msgid "Reviewers" +msgstr "Revisori" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "Definizione livello" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__to_validate_message +msgid "To Validate Message" +msgstr "Messaggio per 'Da validare'" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Validated" +msgstr "Validato" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated_message +msgid "Validated Message" +msgstr "Messaggio per 'Validato'" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validation_status +msgid "Validation Status" +msgstr "Stato validazione" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__review_ids +msgid "Validations" +msgstr "Validazioni" From 682a0a451ea82d445146ed7c7ece390ebb3fdb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20=28=C4=90=E1=BB=97=20Anh=29?= Date: Mon, 21 Apr 2025 18:03:57 +0700 Subject: [PATCH 3/5] [FIX] account_payment_tier_validation: fix incorrect validation_status assertion in test --- account_payment_tier_validation/README.rst | 2 +- account_payment_tier_validation/__manifest__.py | 2 +- .../static/description/index.html | 2 +- .../tests/test_tier_validation.py | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/account_payment_tier_validation/README.rst b/account_payment_tier_validation/README.rst index b3018bee56f..5c7903702b6 100644 --- a/account_payment_tier_validation/README.rst +++ b/account_payment_tier_validation/README.rst @@ -7,7 +7,7 @@ Payment Tier Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6e4f1446965dcb0038c1be6b059d24ff14482f84eba9cc90f7dfad3e2188dde0 + !! source digest: sha256:b20484a2cc48487ef795ff2d3555ff9cb5c70f73ad407b9f33f10982b5ccc247 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/account_payment_tier_validation/__manifest__.py b/account_payment_tier_validation/__manifest__.py index 35b81266508..9f39086119c 100644 --- a/account_payment_tier_validation/__manifest__.py +++ b/account_payment_tier_validation/__manifest__.py @@ -4,7 +4,7 @@ "name": "Payment Tier Validation", "summary": "Extends the functionality of Payment to " "support a tier validation process.", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Generic Modules/Payment", "website": "https://github.com/OCA/account-payment", "author": "Odoo Community Association (OCA)", diff --git a/account_payment_tier_validation/static/description/index.html b/account_payment_tier_validation/static/description/index.html index b835db9c2a9..f744f430663 100644 --- a/account_payment_tier_validation/static/description/index.html +++ b/account_payment_tier_validation/static/description/index.html @@ -367,7 +367,7 @@

Payment Tier Validation

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:6e4f1446965dcb0038c1be6b059d24ff14482f84eba9cc90f7dfad3e2188dde0 +!! source digest: sha256:b20484a2cc48487ef795ff2d3555ff9cb5c70f73ad407b9f33f10982b5ccc247 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runboat

This module extends the functionality of Payments to support a tier diff --git a/account_payment_tier_validation/tests/test_tier_validation.py b/account_payment_tier_validation/tests/test_tier_validation.py index e44ec51c2f5..1b3b5e6b836 100644 --- a/account_payment_tier_validation/tests/test_tier_validation.py +++ b/account_payment_tier_validation/tests/test_tier_validation.py @@ -70,8 +70,11 @@ def test_03_validation_account_payment(self): "partner_id": self.customer.id, } ) - reviews = payment.with_user(self.env.user.id).request_validation() + payment.invalidate_model() self.assertEqual(payment.validation_status, "no") + reviews = payment.with_user(self.env.user.id).request_validation() + payment.invalidate_model() + self.assertEqual(payment.validation_status, "waiting") self.assertTrue(reviews) record = payment.with_user(self.test_user_1.id) record.invalidate_model() From af1675a89b2fd604f2d0c820f8530ef39cd98297 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Tue, 24 Jun 2025 16:45:50 +0000 Subject: [PATCH 4/5] Added translation using Weblate (Portuguese (Brazil)) --- account_payment_tier_validation/i18n/pt_BR.po | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 account_payment_tier_validation/i18n/pt_BR.po diff --git a/account_payment_tier_validation/i18n/pt_BR.po b/account_payment_tier_validation/i18n/pt_BR.po new file mode 100644 index 00000000000..fb800f0313c --- /dev/null +++ b/account_payment_tier_validation/i18n/pt_BR.po @@ -0,0 +1,116 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt_BR\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" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__can_review +msgid "Can Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__has_comment +msgid "Has Comment" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,help:account_payment_tier_validation.field_account_payment__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "My Payments to review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__need_validation +msgid "Need Validation" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Needs my Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__next_review +msgid "Next Review" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_account_payment +msgid "Payments" +msgstr "" + +#. module: account_payment_tier_validation +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Payments validated and ready to be confirmed" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected +msgid "Rejected" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model,name:account_payment_tier_validation.model_tier_definition +msgid "Tier Definition" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated +#: model_terms:ir.ui.view,arch_db:account_payment_tier_validation.view_account_payment_search +msgid "Validated" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validated_message +msgid "Validated Message" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__validation_status +msgid "Validation Status" +msgstr "" + +#. module: account_payment_tier_validation +#: model:ir.model.fields,field_description:account_payment_tier_validation.field_account_payment__review_ids +msgid "Validations" +msgstr "" From febdd7b5e7287c881b5f33afbc58e86b56e32fc4 Mon Sep 17 00:00:00 2001 From: Quirino Leone Date: Mon, 28 Jul 2025 12:46:49 +0200 Subject: [PATCH 5/5] [MIG] account_payment_tier_validation: Backport to 16.0 Co-authored-by: Alexei Rivera --- account_payment_tier_validation/README.rst | 10 +-- .../__manifest__.py | 2 +- .../models/__init__.py | 1 - .../models/account_move.py | 5 -- .../models/account_payment.py | 83 ++++++++++++++++++- .../static/description/index.html | 6 +- .../tests/test_tier_validation.py | 6 +- .../views/account_payment_view.xml | 8 +- .../addons/account_payment_tier_validation | 1 + .../account_payment_tier_validation/setup.py | 6 ++ 10 files changed, 102 insertions(+), 26 deletions(-) delete mode 100644 account_payment_tier_validation/models/account_move.py create mode 120000 setup/account_payment_tier_validation/odoo/addons/account_payment_tier_validation create mode 100644 setup/account_payment_tier_validation/setup.py diff --git a/account_payment_tier_validation/README.rst b/account_payment_tier_validation/README.rst index 5c7903702b6..c6d2109a6cf 100644 --- a/account_payment_tier_validation/README.rst +++ b/account_payment_tier_validation/README.rst @@ -17,13 +17,13 @@ Payment Tier Validation :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--payment-lightgray.png?logo=github - :target: https://github.com/OCA/account-payment/tree/18.0/account_payment_tier_validation + :target: https://github.com/OCA/account-payment/tree/16.0/account_payment_tier_validation :alt: OCA/account-payment .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/account-payment-18-0/account-payment-18-0-account_payment_tier_validation + :target: https://translation.odoo-community.org/projects/account-payment-16-0/account-payment-16-0-account_payment_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/account-payment&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-payment&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -81,7 +81,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -108,6 +108,6 @@ 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/account-payment `_ project on GitHub. +This module is part of the `OCA/account-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_payment_tier_validation/__manifest__.py b/account_payment_tier_validation/__manifest__.py index 9f39086119c..68c744c2b44 100644 --- a/account_payment_tier_validation/__manifest__.py +++ b/account_payment_tier_validation/__manifest__.py @@ -4,7 +4,7 @@ "name": "Payment Tier Validation", "summary": "Extends the functionality of Payment to " "support a tier validation process.", - "version": "18.0.1.0.1", + "version": "16.0.1.0.0", "category": "Generic Modules/Payment", "website": "https://github.com/OCA/account-payment", "author": "Odoo Community Association (OCA)", diff --git a/account_payment_tier_validation/models/__init__.py b/account_payment_tier_validation/models/__init__.py index 7fe2896f1f2..37f4e58dbb3 100644 --- a/account_payment_tier_validation/models/__init__.py +++ b/account_payment_tier_validation/models/__init__.py @@ -2,4 +2,3 @@ from . import account_payment from . import tier_definition -from . import account_move diff --git a/account_payment_tier_validation/models/account_move.py b/account_payment_tier_validation/models/account_move.py deleted file mode 100644 index 7aabbef8304..00000000000 --- a/account_payment_tier_validation/models/account_move.py +++ /dev/null @@ -1,5 +0,0 @@ -from odoo import models - - -class AccountMove(models.Model): - _inherit = "account.move" diff --git a/account_payment_tier_validation/models/account_payment.py b/account_payment_tier_validation/models/account_payment.py index 29b3c83780b..36435be5470 100644 --- a/account_payment_tier_validation/models/account_payment.py +++ b/account_payment_tier_validation/models/account_payment.py @@ -1,14 +1,89 @@ # Copyright 2025 Spearhead - Ricardo Jara # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models +from odoo import _, models +from odoo.exceptions import ValidationError class AccountPayment(models.Model): _name = "account.payment" _inherit = ["account.payment", "tier.validation"] - _state_from = ["draft"] - _state_to = ["in_process", "paid"] - _cancel_state = "canceled" + _state_to = ["posted"] _tier_validation_manual_config = False + + def _get_under_validation_exceptions(self): + res = super(AccountPayment, self)._get_under_validation_exceptions() + return res + ["name"] + + def action_post(self): + return super( + AccountPayment, self.with_context(validate_in_progress=True) + ).action_post() + + def write(self, vals): + """ + Overwritten to call some custom methods for the tier validation process + since field state is a related field not stored, and base code in + tier_validation does not work as expected, when the state is 'posted' + """ + for rec in self: + if rec._check_state_conditions_custom(): + if rec._get_need_validation(): + # try to validate operation + reviews = rec.request_validation() + rec._validate_tier(reviews) + if rec.validation_status != "validated": + raise ValidationError( + _( + "This action needs to be validated for at" + " least one record. \nPlease request a" + " validation." + ) + ) + if rec.review_ids and rec.validation_status != "validated": + raise ValidationError( + _( + "A validation process is still open for at least " + "one record." + ) + ) + return super(AccountPayment, self).write(vals) + + def _check_state_conditions_custom(self): + """ + Needed because state is a related field not stored, + _check_state_conditions in model tier_validation, does not work + when the state is 'done' + """ + self.ensure_one() + if self._context.get("validate_in_progress"): + return True + return False + + def _get_need_validation(self): + """ + Needed because state is a related field not stored, + _compute_need_validation (field need_validation) in model + tier_validation, does not properly work when executing button + "Validate" + """ + self.ensure_one() + if isinstance(self.id, models.NewId): + return False + tiers = ( + self.env["tier.definition"] + .with_context(active_test=True) + .search( + [ + ("model", "=", self._name), + ("company_id", "in", [False] + self._get_company().ids), + ] + ) + ) + valid_tiers = tiers.filtered(lambda x: self.evaluate_tier(x)) + requested_tiers = self.review_ids.filtered( + lambda x: x.status != "pending" + ).mapped("definition_id") + new_tiers = valid_tiers - requested_tiers + return new_tiers and self._context.get("validate_in_progress") diff --git a/account_payment_tier_validation/static/description/index.html b/account_payment_tier_validation/static/description/index.html index f744f430663..67c8d3a18b0 100644 --- a/account_payment_tier_validation/static/description/index.html +++ b/account_payment_tier_validation/static/description/index.html @@ -369,7 +369,7 @@

Payment Tier Validation

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:b20484a2cc48487ef795ff2d3555ff9cb5c70f73ad407b9f33f10982b5ccc247 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runboat

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

Table of contents

@@ -429,7 +429,7 @@

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.

+feedback.

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

@@ -453,7 +453,7 @@

Maintainers

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/account-payment project on GitHub.

+

This module is part of the OCA/account-payment project on GitHub.

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

diff --git a/account_payment_tier_validation/tests/test_tier_validation.py b/account_payment_tier_validation/tests/test_tier_validation.py index 1b3b5e6b836..932b6a5bbb3 100644 --- a/account_payment_tier_validation/tests/test_tier_validation.py +++ b/account_payment_tier_validation/tests/test_tier_validation.py @@ -59,7 +59,7 @@ def test_02_validation_account_payment(self): payment.action_post() payment.amount = 100 payment.action_post() - self.assertEqual(payment.state, "in_process") + self.assertEqual(payment.state, "posted") def test_03_validation_account_payment(self): payment = self.env["account.payment"].create( @@ -74,11 +74,11 @@ def test_03_validation_account_payment(self): self.assertEqual(payment.validation_status, "no") reviews = payment.with_user(self.env.user.id).request_validation() payment.invalidate_model() - self.assertEqual(payment.validation_status, "waiting") + self.assertEqual(payment.validation_status, "pending") self.assertTrue(reviews) record = payment.with_user(self.test_user_1.id) record.invalidate_model() record.validate_tier() payment.action_post() - self.assertEqual(payment.state, "in_process") + self.assertEqual(payment.state, "posted") self.assertEqual(payment.validation_status, "validated") diff --git a/account_payment_tier_validation/views/account_payment_view.xml b/account_payment_tier_validation/views/account_payment_view.xml index 4f31f611715..e41335633b2 100644 --- a/account_payment_tier_validation/views/account_payment_view.xml +++ b/account_payment_tier_validation/views/account_payment_view.xml @@ -16,7 +16,7 @@ @@ -24,11 +24,11 @@ - account.payment.list + account.payment.tree account.payment - + - + diff --git a/setup/account_payment_tier_validation/odoo/addons/account_payment_tier_validation b/setup/account_payment_tier_validation/odoo/addons/account_payment_tier_validation new file mode 120000 index 00000000000..e47cee3d8c3 --- /dev/null +++ b/setup/account_payment_tier_validation/odoo/addons/account_payment_tier_validation @@ -0,0 +1 @@ +../../../../account_payment_tier_validation \ No newline at end of file diff --git a/setup/account_payment_tier_validation/setup.py b/setup/account_payment_tier_validation/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/account_payment_tier_validation/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)