From ea4676f9f3c4507866ff26b559e00a4430f9fbb0 Mon Sep 17 00:00:00 2001
From: Ernesto Tejeda
Date: Fri, 17 Jun 2022 07:56:34 -0400
Subject: [PATCH 01/18] [ADD] account_move_reconcile_forbid_cancel: new module
[UPD] Update account_move_reconcile_forbid_cancel.pot
[UPD] README.rst
[ADD] icon.png
---
.../README.rst | 88 ++++
.../__init__.py | 3 +
.../__manifest__.py | 12 +
.../account_move_reconcile_forbid_cancel.pot | 31 ++
.../i18n/es.po | 35 ++
.../models/__init__.py | 3 +
.../models/account_move.py | 26 ++
.../readme/CONTRIBUTORS.rst | 4 +
.../readme/DESCRIPTION.rst | 2 +
.../readme/USAGE.rst | 7 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 436 ++++++++++++++++++
.../tests/__init__.py | 3 +
...st_account_move_reconcile_forbid_cancel.py | 83 ++++
14 files changed, 733 insertions(+)
create mode 100644 account_move_reconcile_forbid_cancel/README.rst
create mode 100644 account_move_reconcile_forbid_cancel/__init__.py
create mode 100644 account_move_reconcile_forbid_cancel/__manifest__.py
create mode 100644 account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
create mode 100644 account_move_reconcile_forbid_cancel/i18n/es.po
create mode 100644 account_move_reconcile_forbid_cancel/models/__init__.py
create mode 100644 account_move_reconcile_forbid_cancel/models/account_move.py
create mode 100644 account_move_reconcile_forbid_cancel/readme/CONTRIBUTORS.rst
create mode 100644 account_move_reconcile_forbid_cancel/readme/DESCRIPTION.rst
create mode 100644 account_move_reconcile_forbid_cancel/readme/USAGE.rst
create mode 100644 account_move_reconcile_forbid_cancel/static/description/icon.png
create mode 100644 account_move_reconcile_forbid_cancel/static/description/index.html
create mode 100644 account_move_reconcile_forbid_cancel/tests/__init__.py
create mode 100644 account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
diff --git a/account_move_reconcile_forbid_cancel/README.rst b/account_move_reconcile_forbid_cancel/README.rst
new file mode 100644
index 0000000000..cce810c11f
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/README.rst
@@ -0,0 +1,88 @@
+====================================
+Account Move Reconcile Forbid Cancel
+====================================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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--reconcile-lightgray.png?logo=github
+ :target: https://github.com/OCA/account-reconcile/tree/13.0/account_move_reconcile_forbid_cancel
+ :alt: OCA/account-reconcile
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_move_reconcile_forbid_cancel
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/98/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module restricts to cancel or reset to draft any invoice/journal entry that
+has been reconciled (aka paid).
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to *Invoicing > Customers > Invoices*
+#. Access an invoice that has a payment.
+#. Click on the 'Reset to Draft' button and you will get an error
+ message to prevent you from resetting the invoice to draft state because
+ it has already an associated payment.
+
+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 smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* `Tecnativa `_:
+
+ * Ernesto Tejeda
+ * Pedro M. Baeza
+
+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-reconcile `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_move_reconcile_forbid_cancel/__init__.py b/account_move_reconcile_forbid_cancel/__init__.py
new file mode 100644
index 0000000000..31660d6a96
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import models
diff --git a/account_move_reconcile_forbid_cancel/__manifest__.py b/account_move_reconcile_forbid_cancel/__manifest__.py
new file mode 100644
index 0000000000..4f42f6ea28
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/__manifest__.py
@@ -0,0 +1,12 @@
+# Copyright 2022 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Account Move Reconcile Forbid Cancel",
+ "version": "13.0.1.0.0",
+ "category": "Finance",
+ "website": "https://github.com/OCA/account-reconcile",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "depends": ["account"],
+}
diff --git a/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
new file mode 100644
index 0000000000..c37b959af1
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
@@ -0,0 +1,31 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_move_reconcile_forbid_cancel
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.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_move_reconcile_forbid_cancel
+#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
+msgid "Journal Entries"
+msgstr ""
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot cancel reconciled entries."
+msgstr ""
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot reset to draft reconciled entries."
+msgstr ""
diff --git a/account_move_reconcile_forbid_cancel/i18n/es.po b/account_move_reconcile_forbid_cancel/i18n/es.po
new file mode 100644
index 0000000000..79cf1e08f3
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/i18n/es.po
@@ -0,0 +1,35 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_move_reconcile_forbid_cancel
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-06-20 14:20+0000\n"
+"PO-Revision-Date: 2022-06-20 10:29-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.0.1\n"
+
+#. module: account_move_reconcile_forbid_cancel
+#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
+msgid "Journal Entries"
+msgstr "Asientos contables"
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot cancel reconciled entries."
+msgstr "No puede cancelar asientos conciliados"
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot reset to draft reconciled entries."
+msgstr "No puede cambiar a borrador asientos conciliadas"
diff --git a/account_move_reconcile_forbid_cancel/models/__init__.py b/account_move_reconcile_forbid_cancel/models/__init__.py
new file mode 100644
index 0000000000..0c439503ce
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/models/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import account_move
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
new file mode 100644
index 0000000000..4e67dfd98b
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -0,0 +1,26 @@
+# Copyright 2022 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import _, models
+from odoo.exceptions import ValidationError
+
+
+class AccountMove(models.Model):
+ _inherit = "account.move"
+
+ def _get_receivable_payable_lines(self):
+ return self.line_ids.filtered(
+ lambda l: l.account_internal_type in ["receivable", "acc_type_pay"],
+ )
+
+ def button_draft(self):
+ rec_pay_lines = self._get_receivable_payable_lines()
+ if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ raise ValidationError(_("You cannot reset to draft reconciled entries."))
+ super().button_draft()
+
+ def button_cancel(self):
+ rec_pay_lines = self._get_receivable_payable_lines()
+ if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ raise ValidationError(_("You cannot cancel reconciled entries."))
+ super().button_cancel()
diff --git a/account_move_reconcile_forbid_cancel/readme/CONTRIBUTORS.rst b/account_move_reconcile_forbid_cancel/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..b31cef3217
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* `Tecnativa `_:
+
+ * Ernesto Tejeda
+ * Pedro M. Baeza
diff --git a/account_move_reconcile_forbid_cancel/readme/DESCRIPTION.rst b/account_move_reconcile_forbid_cancel/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..3c3b9cb10e
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module restricts to cancel or reset to draft any invoice/journal entry that
+has been reconciled (aka paid).
diff --git a/account_move_reconcile_forbid_cancel/readme/USAGE.rst b/account_move_reconcile_forbid_cancel/readme/USAGE.rst
new file mode 100644
index 0000000000..1af82feaf3
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/readme/USAGE.rst
@@ -0,0 +1,7 @@
+To use this module, you need to:
+
+#. Go to *Invoicing > Customers > Invoices*
+#. Access an invoice that has a payment.
+#. Click on the 'Reset to Draft' button and you will get an error
+ message to prevent you from resetting the invoice to draft state because
+ it has already an associated payment.
diff --git a/account_move_reconcile_forbid_cancel/static/description/icon.png b/account_move_reconcile_forbid_cancel/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/account_move_reconcile_forbid_cancel/static/description/index.html b/account_move_reconcile_forbid_cancel/static/description/index.html
new file mode 100644
index 0000000000..0052cb2c9b
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/static/description/index.html
@@ -0,0 +1,436 @@
+
+
+
+
+
+
+Account Move Reconcile Forbid Cancel
+
+
+
+
+
Account Move Reconcile Forbid Cancel
+
+
+

+
This module restricts to cancel or reset to draft any invoice/journal entry that
+has been reconciled (aka paid).
+
Table of contents
+
+
+
+
To use this module, you need to:
+
+- Go to Invoicing > Customers > Invoices
+- Access an invoice that has a payment.
+- Click on the ‘Reset to Draft’ button and you will get an error
+message to prevent you from resetting the invoice to draft state because
+it has already an associated payment.
+
+
+
+
+
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 smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+- Tecnativa:
+- Ernesto Tejeda
+- Pedro M. Baeza
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
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-reconcile project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/account_move_reconcile_forbid_cancel/tests/__init__.py b/account_move_reconcile_forbid_cancel/tests/__init__.py
new file mode 100644
index 0000000000..3289f35f33
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import test_account_move_reconcile_forbid_cancel
diff --git a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
new file mode 100644
index 0000000000..3edb3c68be
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
@@ -0,0 +1,83 @@
+# Copyright 2022 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo.exceptions import ValidationError
+from odoo.tests.common import Form, SavepointCase
+
+
+class TestAccountMoveReconcileForbidCancel(SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ journal_sale = cls.env["account.journal"].create(
+ {"name": "Sale journal", "code": "SJ", "type": "sale"}
+ )
+ receivable_account_type = cls.env["account.account.type"].create(
+ {
+ "name": "Receivable account type",
+ "type": "receivable",
+ "internal_group": "asset",
+ }
+ )
+ income_account_type = cls.env["account.account.type"].create(
+ {
+ "name": "Income account type",
+ "type": "other",
+ "internal_group": "income",
+ }
+ )
+ receivable_account = cls.env["account.account"].create(
+ {
+ "name": "Receivable Account",
+ "code": "REC",
+ "user_type_id": receivable_account_type.id,
+ "reconcile": True,
+ }
+ )
+ income_account = cls.env["account.account"].create(
+ {
+ "name": "Income Account",
+ "code": "INC",
+ "user_type_id": income_account_type.id,
+ "reconcile": False,
+ }
+ )
+ partner = cls.env["res.partner"].create(
+ {
+ "name": "Partner test",
+ "property_account_receivable_id": receivable_account.id,
+ }
+ )
+ product = cls.env["product.product"].create(
+ {"name": "Product Test", "property_account_income_id": income_account.id}
+ )
+ # Create invoice
+ move_form = Form(
+ cls.env["account.move"].with_context(default_type="out_invoice")
+ )
+ move_form.journal_id = journal_sale
+ move_form.partner_id = partner
+ with move_form.invoice_line_ids.new() as line_form:
+ line_form.product_id = product
+ line_form.price_unit = 100.0
+ cls.invoice = move_form.save()
+ cls.invoice.action_post()
+ # Create payment from invoice
+ cls.env["account.journal"].create(
+ {"name": "Bank Journal", "code": "BANK", "type": "bank"}
+ )
+ payment_register = Form(
+ cls.env["account.payment"].with_context(
+ active_model="account.move", active_ids=cls.invoice.ids,
+ )
+ )
+ cls.payment = payment_register.save()
+ cls.payment.post()
+
+ def test_reset_invoice_to_draft(self):
+ with self.assertRaises(ValidationError):
+ self.invoice.button_draft()
+
+ def test_cancel_invoice(self):
+ with self.assertRaises(ValidationError):
+ self.invoice.button_cancel()
From ee6d3f50c0b3a3420e7fc90bf7c61822d7bbe9d1 Mon Sep 17 00:00:00 2001
From: Ernesto Tejeda
Date: Wed, 29 Jun 2022 14:48:54 +0000
Subject: [PATCH 02/18] Translated using Weblate (Spanish)
Currently translated at 100.0% (3 of 3 strings)
Translation: account-reconcile-13.0/account-reconcile-13.0-account_move_reconcile_forbid_cancel
Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_move_reconcile_forbid_cancel/es/
---
account_move_reconcile_forbid_cancel/i18n/es.po | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/i18n/es.po b/account_move_reconcile_forbid_cancel/i18n/es.po
index 79cf1e08f3..fdbf382509 100644
--- a/account_move_reconcile_forbid_cancel/i18n/es.po
+++ b/account_move_reconcile_forbid_cancel/i18n/es.po
@@ -7,15 +7,15 @@ msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-20 14:20+0000\n"
-"PO-Revision-Date: 2022-06-20 10:29-0400\n"
-"Last-Translator: \n"
+"PO-Revision-Date: 2022-06-29 14:50+0000\n"
+"Last-Translator: Ernesto Tejeda \n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: \n"
-"X-Generator: Poedit 3.0.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: account_move_reconcile_forbid_cancel
#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
@@ -32,4 +32,4 @@ msgstr "No puede cancelar asientos conciliados"
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot reset to draft reconciled entries."
-msgstr "No puede cambiar a borrador asientos conciliadas"
+msgstr "No puede cambiar a borrador asientos conciliados"
From 02ba76b161e235b6160ba759cf6d8fd68f7c4566 Mon Sep 17 00:00:00 2001
From: Ernesto Tejeda
Date: Tue, 5 Jul 2022 09:55:14 -0400
Subject: [PATCH 03/18] [FIX] account_move_reconcile_forbid_cancel: make it
compatible with test of other modules
---
.../models/account_move.py | 22 +++++++++++++------
...st_account_move_reconcile_forbid_cancel.py | 4 ++--
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
index 4e67dfd98b..5c84a13311 100644
--- a/account_move_reconcile_forbid_cancel/models/account_move.py
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -1,7 +1,7 @@
# Copyright 2022 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from odoo import _, models
+from odoo import _, models, tools
from odoo.exceptions import ValidationError
@@ -14,13 +14,21 @@ def _get_receivable_payable_lines(self):
)
def button_draft(self):
- rec_pay_lines = self._get_receivable_payable_lines()
- if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
- raise ValidationError(_("You cannot reset to draft reconciled entries."))
+ if not tools.config["test_enable"] or self.env.context.get(
+ "test_reconcile_forbid_cancel"
+ ):
+ rec_pay_lines = self._get_receivable_payable_lines()
+ if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ raise ValidationError(
+ _("You cannot reset to draft reconciled entries.")
+ )
super().button_draft()
def button_cancel(self):
- rec_pay_lines = self._get_receivable_payable_lines()
- if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
- raise ValidationError(_("You cannot cancel reconciled entries."))
+ if not tools.config["test_enable"] or self.env.context.get(
+ "test_reconcile_forbid_cancel"
+ ):
+ rec_pay_lines = self._get_receivable_payable_lines()
+ if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ raise ValidationError(_("You cannot cancel reconciled entries."))
super().button_cancel()
diff --git a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
index 3edb3c68be..6edabd3e6b 100644
--- a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
+++ b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
@@ -76,8 +76,8 @@ def setUpClass(cls):
def test_reset_invoice_to_draft(self):
with self.assertRaises(ValidationError):
- self.invoice.button_draft()
+ self.invoice.with_context(test_reconcile_forbid_cancel=True).button_draft()
def test_cancel_invoice(self):
with self.assertRaises(ValidationError):
- self.invoice.button_cancel()
+ self.invoice.with_context(test_reconcile_forbid_cancel=True).button_cancel()
From fee2468be6130b08c7f12fec20556b69a1311a39 Mon Sep 17 00:00:00 2001
From: Ernesto Tejeda
Date: Tue, 5 Jul 2022 09:59:30 -0400
Subject: [PATCH 04/18] [FIX] account_move_reconcile_forbid_cancel: wrong
payable acc detection and add test.
account_move_reconcile_forbid_cancel 13.0.1.0.1
---
.../__manifest__.py | 2 +-
.../models/account_move.py | 2 +-
...st_account_move_reconcile_forbid_cancel.py | 99 ++++++++++++++++---
3 files changed, 86 insertions(+), 17 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/__manifest__.py b/account_move_reconcile_forbid_cancel/__manifest__.py
index 4f42f6ea28..723e7dd781 100644
--- a/account_move_reconcile_forbid_cancel/__manifest__.py
+++ b/account_move_reconcile_forbid_cancel/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Account Move Reconcile Forbid Cancel",
- "version": "13.0.1.0.0",
+ "version": "13.0.1.0.1",
"category": "Finance",
"website": "https://github.com/OCA/account-reconcile",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
index 5c84a13311..a05a0677cd 100644
--- a/account_move_reconcile_forbid_cancel/models/account_move.py
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -10,7 +10,7 @@ class AccountMove(models.Model):
def _get_receivable_payable_lines(self):
return self.line_ids.filtered(
- lambda l: l.account_internal_type in ["receivable", "acc_type_pay"],
+ lambda l: l.account_internal_type in ["receivable", "payable"],
)
def button_draft(self):
diff --git a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
index 6edabd3e6b..2818bca48b 100644
--- a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
+++ b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
@@ -9,9 +9,15 @@ class TestAccountMoveReconcileForbidCancel(SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
- journal_sale = cls.env["account.journal"].create(
+ purchase_journal = cls.env["account.journal"].create(
+ {"name": "Purchase journal", "code": "PJ", "type": "purchase"}
+ )
+ sale_journal = cls.env["account.journal"].create(
{"name": "Sale journal", "code": "SJ", "type": "sale"}
)
+ cls.env["account.journal"].create(
+ {"name": "Bank Journal", "code": "BANK", "type": "bank"}
+ )
receivable_account_type = cls.env["account.account.type"].create(
{
"name": "Receivable account type",
@@ -19,6 +25,13 @@ def setUpClass(cls):
"internal_group": "asset",
}
)
+ payable_account_type = cls.env["account.account.type"].create(
+ {
+ "name": "Payable account type",
+ "type": "payable",
+ "internal_group": "liability",
+ }
+ )
income_account_type = cls.env["account.account.type"].create(
{
"name": "Income account type",
@@ -26,6 +39,13 @@ def setUpClass(cls):
"internal_group": "income",
}
)
+ expense_account_type = cls.env["account.account.type"].create(
+ {
+ "name": "Expense account type",
+ "type": "other",
+ "internal_group": "expense",
+ }
+ )
receivable_account = cls.env["account.account"].create(
{
"name": "Receivable Account",
@@ -34,6 +54,14 @@ def setUpClass(cls):
"reconcile": True,
}
)
+ payable_account = cls.env["account.account"].create(
+ {
+ "name": "Payable Account",
+ "code": "PAY",
+ "user_type_id": payable_account_type.id,
+ "reconcile": True,
+ }
+ )
income_account = cls.env["account.account"].create(
{
"name": "Income Account",
@@ -42,42 +70,83 @@ def setUpClass(cls):
"reconcile": False,
}
)
+ expense_account = cls.env["account.account"].create(
+ {
+ "name": "Expense Account",
+ "code": "EXP",
+ "user_type_id": expense_account_type.id,
+ "reconcile": False,
+ }
+ )
partner = cls.env["res.partner"].create(
{
"name": "Partner test",
"property_account_receivable_id": receivable_account.id,
+ "property_account_payable_id": payable_account.id,
}
)
product = cls.env["product.product"].create(
- {"name": "Product Test", "property_account_income_id": income_account.id}
+ {
+ "name": "Product Test",
+ "property_account_income_id": income_account.id,
+ "property_account_expense_id": expense_account.id,
+ }
)
- # Create invoice
+ # Create a purchase invoice
move_form = Form(
- cls.env["account.move"].with_context(default_type="out_invoice")
+ cls.env["account.move"].with_context(default_type="in_invoice")
)
- move_form.journal_id = journal_sale
+ move_form.journal_id = purchase_journal
move_form.partner_id = partner
with move_form.invoice_line_ids.new() as line_form:
line_form.product_id = product
line_form.price_unit = 100.0
- cls.invoice = move_form.save()
- cls.invoice.action_post()
+ cls.purchase_invoice = move_form.save()
+ cls.purchase_invoice.action_post()
# Create payment from invoice
- cls.env["account.journal"].create(
- {"name": "Bank Journal", "code": "BANK", "type": "bank"}
+ payment_register_form = Form(
+ cls.env["account.payment"].with_context(
+ active_model="account.move", active_ids=cls.purchase_invoice.ids,
+ )
+ )
+ payment = payment_register_form.save()
+ payment.post()
+ # Create a sale invoice
+ move_form = Form(
+ cls.env["account.move"].with_context(default_type="out_invoice")
)
- payment_register = Form(
+ move_form.journal_id = sale_journal
+ move_form.partner_id = partner
+ with move_form.invoice_line_ids.new() as line_form:
+ line_form.product_id = product
+ line_form.price_unit = 100.0
+ cls.sale_invoice = move_form.save()
+ cls.sale_invoice.action_post()
+ # Create payment from invoice
+ payment_register_form = Form(
cls.env["account.payment"].with_context(
- active_model="account.move", active_ids=cls.invoice.ids,
+ active_model="account.move", active_ids=cls.sale_invoice.ids,
)
)
- cls.payment = payment_register.save()
- cls.payment.post()
+ payment = payment_register_form.save()
+ payment.post()
def test_reset_invoice_to_draft(self):
with self.assertRaises(ValidationError):
- self.invoice.with_context(test_reconcile_forbid_cancel=True).button_draft()
+ self.purchase_invoice.with_context(
+ test_reconcile_forbid_cancel=True
+ ).button_draft()
+ with self.assertRaises(ValidationError):
+ self.sale_invoice.with_context(
+ test_reconcile_forbid_cancel=True
+ ).button_draft()
def test_cancel_invoice(self):
with self.assertRaises(ValidationError):
- self.invoice.with_context(test_reconcile_forbid_cancel=True).button_cancel()
+ self.purchase_invoice.with_context(
+ test_reconcile_forbid_cancel=True
+ ).button_cancel()
+ with self.assertRaises(ValidationError):
+ self.sale_invoice.with_context(
+ test_reconcile_forbid_cancel=True
+ ).button_cancel()
From eae89c3765e2c05978a9e087f69b10f5de6317d2 Mon Sep 17 00:00:00 2001
From: Carlos Dauden
Date: Tue, 20 Sep 2022 13:26:06 +0200
Subject: [PATCH 05/18] [IMP] account_move_reconcile_forbid_cancel: Add context
to skip restriction (P.E. payment orders) TT38927 TT39037
account_move_reconcile_forbid_cancel 13.0.1.0.2
---
account_move_reconcile_forbid_cancel/__manifest__.py | 2 +-
.../models/account_move.py | 10 ++++++----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/__manifest__.py b/account_move_reconcile_forbid_cancel/__manifest__.py
index 723e7dd781..85245587e0 100644
--- a/account_move_reconcile_forbid_cancel/__manifest__.py
+++ b/account_move_reconcile_forbid_cancel/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Account Move Reconcile Forbid Cancel",
- "version": "13.0.1.0.1",
+ "version": "13.0.1.0.2",
"category": "Finance",
"website": "https://github.com/OCA/account-reconcile",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
index a05a0677cd..e734cfcfe3 100644
--- a/account_move_reconcile_forbid_cancel/models/account_move.py
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -14,8 +14,9 @@ def _get_receivable_payable_lines(self):
)
def button_draft(self):
- if not tools.config["test_enable"] or self.env.context.get(
- "test_reconcile_forbid_cancel"
+ if not self.env.context.get("skip_reconcile_forbid_cancel") and (
+ not tools.config["test_enable"]
+ or self.env.context.get("test_reconcile_forbid_cancel")
):
rec_pay_lines = self._get_receivable_payable_lines()
if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
@@ -25,8 +26,9 @@ def button_draft(self):
super().button_draft()
def button_cancel(self):
- if not tools.config["test_enable"] or self.env.context.get(
- "test_reconcile_forbid_cancel"
+ if not self.env.context.get("skip_reconcile_forbid_cancel") and (
+ not tools.config["test_enable"]
+ or self.env.context.get("test_reconcile_forbid_cancel")
):
rec_pay_lines = self._get_receivable_payable_lines()
if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
From 14997f3db416d995048ffc698756adb2b37e06ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
Date: Tue, 22 Nov 2022 16:37:13 +0100
Subject: [PATCH 06/18] [IMP] account_move_reconcile_forbid_cancel: black,
isort, prettier
---
.../tests/test_account_move_reconcile_forbid_cancel.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
index 2818bca48b..eeb69cf19e 100644
--- a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
+++ b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
@@ -106,7 +106,8 @@ def setUpClass(cls):
# Create payment from invoice
payment_register_form = Form(
cls.env["account.payment"].with_context(
- active_model="account.move", active_ids=cls.purchase_invoice.ids,
+ active_model="account.move",
+ active_ids=cls.purchase_invoice.ids,
)
)
payment = payment_register_form.save()
@@ -125,7 +126,8 @@ def setUpClass(cls):
# Create payment from invoice
payment_register_form = Form(
cls.env["account.payment"].with_context(
- active_model="account.move", active_ids=cls.sale_invoice.ids,
+ active_model="account.move",
+ active_ids=cls.sale_invoice.ids,
)
)
payment = payment_register_form.save()
From a1517131e79581670c1a0666213895edb79a9a0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
Date: Tue, 22 Nov 2022 17:06:26 +0100
Subject: [PATCH 07/18] [MIG] account_move_reconcile_forbid_cancel: Migration
to 15.0
TT40142
---
.../README.rst | 10 +-
.../__manifest__.py | 2 +-
.../account_move_reconcile_forbid_cancel.pot | 4 +-
.../i18n/es.po | 7 +-
.../models/account_move.py | 4 +-
.../static/description/index.html | 6 +-
...st_account_move_reconcile_forbid_cancel.py | 112 +++++++-----------
7 files changed, 59 insertions(+), 86 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/README.rst b/account_move_reconcile_forbid_cancel/README.rst
index cce810c11f..07fd02aac7 100644
--- a/account_move_reconcile_forbid_cancel/README.rst
+++ b/account_move_reconcile_forbid_cancel/README.rst
@@ -14,13 +14,13 @@ Account Move Reconcile Forbid Cancel
: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--reconcile-lightgray.png?logo=github
- :target: https://github.com/OCA/account-reconcile/tree/13.0/account_move_reconcile_forbid_cancel
+ :target: https://github.com/OCA/account-reconcile/tree/15.0/account_move_reconcile_forbid_cancel
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_move_reconcile_forbid_cancel
+ :target: https://translation.odoo-community.org/projects/account-reconcile-15-0/account-reconcile-15-0-account_move_reconcile_forbid_cancel
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/98/13.0
+ :target: https://runbot.odoo-community.org/runbot/98/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -83,6 +83,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-reconcile `_ project on GitHub.
+This module is part of the `OCA/account-reconcile `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_move_reconcile_forbid_cancel/__manifest__.py b/account_move_reconcile_forbid_cancel/__manifest__.py
index 85245587e0..ee7b11eaa6 100644
--- a/account_move_reconcile_forbid_cancel/__manifest__.py
+++ b/account_move_reconcile_forbid_cancel/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Account Move Reconcile Forbid Cancel",
- "version": "13.0.1.0.2",
+ "version": "15.0.1.0.0",
"category": "Finance",
"website": "https://github.com/OCA/account-reconcile",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
index c37b959af1..118bb4193e 100644
--- a/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
+++ b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -15,7 +15,7 @@ msgstr ""
#. module: account_move_reconcile_forbid_cancel
#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
-msgid "Journal Entries"
+msgid "Journal Entry"
msgstr ""
#. module: account_move_reconcile_forbid_cancel
diff --git a/account_move_reconcile_forbid_cancel/i18n/es.po b/account_move_reconcile_forbid_cancel/i18n/es.po
index fdbf382509..0ccece2222 100644
--- a/account_move_reconcile_forbid_cancel/i18n/es.po
+++ b/account_move_reconcile_forbid_cancel/i18n/es.po
@@ -19,8 +19,8 @@ msgstr ""
#. module: account_move_reconcile_forbid_cancel
#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
-msgid "Journal Entries"
-msgstr "Asientos contables"
+msgid "Journal Entry"
+msgstr ""
#. module: account_move_reconcile_forbid_cancel
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
@@ -33,3 +33,6 @@ msgstr "No puede cancelar asientos conciliados"
#, python-format
msgid "You cannot reset to draft reconciled entries."
msgstr "No puede cambiar a borrador asientos conciliados"
+
+#~ msgid "Journal Entries"
+#~ msgstr "Asientos contables"
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
index e734cfcfe3..ed3e820189 100644
--- a/account_move_reconcile_forbid_cancel/models/account_move.py
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -23,7 +23,7 @@ def button_draft(self):
raise ValidationError(
_("You cannot reset to draft reconciled entries.")
)
- super().button_draft()
+ return super().button_draft()
def button_cancel(self):
if not self.env.context.get("skip_reconcile_forbid_cancel") and (
@@ -33,4 +33,4 @@ def button_cancel(self):
rec_pay_lines = self._get_receivable_payable_lines()
if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
raise ValidationError(_("You cannot cancel reconciled entries."))
- super().button_cancel()
+ return super().button_cancel()
diff --git a/account_move_reconcile_forbid_cancel/static/description/index.html b/account_move_reconcile_forbid_cancel/static/description/index.html
index 0052cb2c9b..88309fc173 100644
--- a/account_move_reconcile_forbid_cancel/static/description/index.html
+++ b/account_move_reconcile_forbid_cancel/static/description/index.html
@@ -367,7 +367,7 @@ Account Move Reconcile Forbid Cancel
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module restricts to cancel or reset to draft any invoice/journal entry that
has been reconciled (aka paid).
Table of contents
@@ -399,7 +399,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -427,7 +427,7 @@
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-reconcile project on GitHub.
+
This module is part of the OCA/account-reconcile project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
index eeb69cf19e..f5f7c92e6a 100644
--- a/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
+++ b/account_move_reconcile_forbid_cancel/tests/test_account_move_reconcile_forbid_cancel.py
@@ -1,56 +1,23 @@
# Copyright 2022 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import fields
from odoo.exceptions import ValidationError
-from odoo.tests.common import Form, SavepointCase
+from odoo.tests.common import Form, TransactionCase
-class TestAccountMoveReconcileForbidCancel(SavepointCase):
+class TestAccountMoveReconcileForbidCancel(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
- purchase_journal = cls.env["account.journal"].create(
- {"name": "Purchase journal", "code": "PJ", "type": "purchase"}
- )
- sale_journal = cls.env["account.journal"].create(
- {"name": "Sale journal", "code": "SJ", "type": "sale"}
- )
cls.env["account.journal"].create(
{"name": "Bank Journal", "code": "BANK", "type": "bank"}
)
- receivable_account_type = cls.env["account.account.type"].create(
- {
- "name": "Receivable account type",
- "type": "receivable",
- "internal_group": "asset",
- }
- )
- payable_account_type = cls.env["account.account.type"].create(
- {
- "name": "Payable account type",
- "type": "payable",
- "internal_group": "liability",
- }
- )
- income_account_type = cls.env["account.account.type"].create(
- {
- "name": "Income account type",
- "type": "other",
- "internal_group": "income",
- }
- )
- expense_account_type = cls.env["account.account.type"].create(
- {
- "name": "Expense account type",
- "type": "other",
- "internal_group": "expense",
- }
- )
receivable_account = cls.env["account.account"].create(
{
"name": "Receivable Account",
"code": "REC",
- "user_type_id": receivable_account_type.id,
+ "user_type_id": cls.env.ref("account.data_account_type_receivable").id,
"reconcile": True,
}
)
@@ -58,7 +25,7 @@ def setUpClass(cls):
{
"name": "Payable Account",
"code": "PAY",
- "user_type_id": payable_account_type.id,
+ "user_type_id": cls.env.ref("account.data_account_type_payable").id,
"reconcile": True,
}
)
@@ -66,7 +33,9 @@ def setUpClass(cls):
{
"name": "Income Account",
"code": "INC",
- "user_type_id": income_account_type.id,
+ "user_type_id": cls.env.ref(
+ "account.data_account_type_other_income"
+ ).id,
"reconcile": False,
}
)
@@ -74,18 +43,18 @@ def setUpClass(cls):
{
"name": "Expense Account",
"code": "EXP",
- "user_type_id": expense_account_type.id,
+ "user_type_id": cls.env.ref("account.data_account_type_expenses").id,
"reconcile": False,
}
)
- partner = cls.env["res.partner"].create(
+ cls.partner = cls.env["res.partner"].create(
{
"name": "Partner test",
"property_account_receivable_id": receivable_account.id,
"property_account_payable_id": payable_account.id,
}
)
- product = cls.env["product.product"].create(
+ cls.product = cls.env["product.product"].create(
{
"name": "Product Test",
"property_account_income_id": income_account.id,
@@ -93,45 +62,34 @@ def setUpClass(cls):
}
)
# Create a purchase invoice
- move_form = Form(
- cls.env["account.move"].with_context(default_type="in_invoice")
- )
- move_form.journal_id = purchase_journal
- move_form.partner_id = partner
- with move_form.invoice_line_ids.new() as line_form:
- line_form.product_id = product
- line_form.price_unit = 100.0
- cls.purchase_invoice = move_form.save()
+ cls.purchase_invoice = cls._create_invoice(cls, "in_invoice")
cls.purchase_invoice.action_post()
# Create payment from invoice
- payment_register_form = Form(
- cls.env["account.payment"].with_context(
- active_model="account.move",
- active_ids=cls.purchase_invoice.ids,
- )
- )
- payment = payment_register_form.save()
- payment.post()
+ cls._create_payment_from_invoice(cls, cls.purchase_invoice)
# Create a sale invoice
+ cls.sale_invoice = cls._create_invoice(cls, "out_invoice")
+ cls.sale_invoice.action_post()
+ # Create payment from invoice
+ cls._create_payment_from_invoice(cls, cls.sale_invoice)
+
+ def _create_invoice(self, move_type):
move_form = Form(
- cls.env["account.move"].with_context(default_type="out_invoice")
+ self.env["account.move"].with_context(default_move_type=move_type)
)
- move_form.journal_id = sale_journal
- move_form.partner_id = partner
+ move_form.invoice_date = fields.Date.today()
+ move_form.partner_id = self.partner
with move_form.invoice_line_ids.new() as line_form:
- line_form.product_id = product
+ line_form.product_id = self.product
line_form.price_unit = 100.0
- cls.sale_invoice = move_form.save()
- cls.sale_invoice.action_post()
- # Create payment from invoice
+ return move_form.save()
+
+ def _create_payment_from_invoice(self, invoice):
+ res = invoice.action_register_payment()
payment_register_form = Form(
- cls.env["account.payment"].with_context(
- active_model="account.move",
- active_ids=cls.sale_invoice.ids,
- )
+ self.env[res["res_model"]].with_context(**res["context"])
)
payment = payment_register_form.save()
- payment.post()
+ payment.action_create_payments()
def test_reset_invoice_to_draft(self):
with self.assertRaises(ValidationError):
@@ -152,3 +110,15 @@ def test_cancel_invoice(self):
self.sale_invoice.with_context(
test_reconcile_forbid_cancel=True
).button_cancel()
+
+ def test_extra_invoice_process_to_draft(self):
+ invoice = self._create_invoice("out_invoice")
+ invoice.action_post()
+ invoice.button_draft()
+ self.assertEqual(invoice.state, "draft")
+
+ def test_extra_invoice_process_cancel(self):
+ invoice = self._create_invoice("out_invoice")
+ invoice.action_post()
+ invoice.button_cancel()
+ self.assertEqual(invoice.state, "cancel")
From ce943b3b60d464706d745d3c32bf249cee3ccac7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Douglas=20Cust=C3=B3dio?=
Date: Fri, 17 Mar 2023 20:28:31 +0000
Subject: [PATCH 08/18] Added translation using Weblate (Portuguese (Brazil))
---
.../i18n/pt_BR.po | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 account_move_reconcile_forbid_cancel/i18n/pt_BR.po
diff --git a/account_move_reconcile_forbid_cancel/i18n/pt_BR.po b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
new file mode 100644
index 0000000000..f6b3e45d19
--- /dev/null
+++ b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
@@ -0,0 +1,32 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_move_reconcile_forbid_cancel
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 15.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_move_reconcile_forbid_cancel
+#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
+msgid "Journal Entry"
+msgstr ""
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot cancel reconciled entries."
+msgstr ""
+
+#. module: account_move_reconcile_forbid_cancel
+#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
+#, python-format
+msgid "You cannot reset to draft reconciled entries."
+msgstr ""
From d40b555784792c21c8a94f807de51c711ae9e6ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Douglas=20Cust=C3=B3dio?=
Date: Fri, 17 Mar 2023 20:30:54 +0000
Subject: [PATCH 09/18] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (3 of 3 strings)
Translation: account-reconcile-15.0/account-reconcile-15.0-account_move_reconcile_forbid_cancel
Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-15-0/account-reconcile-15-0-account_move_reconcile_forbid_cancel/pt_BR/
---
account_move_reconcile_forbid_cancel/i18n/pt_BR.po | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/i18n/pt_BR.po b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
index f6b3e45d19..274a07b766 100644
--- a/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
+++ b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
@@ -6,27 +6,29 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2023-03-17 22:25+0000\n"
+"Last-Translator: Douglas Custódio \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"
+"X-Generator: Weblate 4.14.1\n"
#. module: account_move_reconcile_forbid_cancel
#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move
msgid "Journal Entry"
-msgstr ""
+msgstr "Lançamento de Diário"
#. module: account_move_reconcile_forbid_cancel
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot cancel reconciled entries."
-msgstr ""
+msgstr "Você não pode cancelar lançamentos reconciliados."
#. module: account_move_reconcile_forbid_cancel
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot reset to draft reconciled entries."
-msgstr ""
+msgstr "Você não pode redefinir para rascunho lançamentos reconciliados."
From feccfe61e004778f5210337681bf76703477fb20 Mon Sep 17 00:00:00 2001
From: Alejandro Ji Cheung
Date: Wed, 19 Jul 2023 10:54:38 +0200
Subject: [PATCH 10/18] [MIG] account_move_reconcile_forbid_cancel: Migration
to 16.0
---
.../README.rst | 23 +++++-----
.../__manifest__.py | 2 +-
.../account_move_reconcile_forbid_cancel.pot | 4 +-
.../i18n/es.po | 2 +
.../i18n/pt_BR.po | 2 +
.../models/account_move.py | 11 +----
.../static/description/index.html | 42 ++++++++++---------
...st_account_move_reconcile_forbid_cancel.py | 10 ++---
8 files changed, 49 insertions(+), 47 deletions(-)
diff --git a/account_move_reconcile_forbid_cancel/README.rst b/account_move_reconcile_forbid_cancel/README.rst
index 07fd02aac7..b21d1d187e 100644
--- a/account_move_reconcile_forbid_cancel/README.rst
+++ b/account_move_reconcile_forbid_cancel/README.rst
@@ -2,10 +2,13 @@
Account Move Reconcile Forbid Cancel
====================================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:eef7ef907f0451af988c645bad597424e8cb168c4bc7fe22ec5fdbe80c37a2d5
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -14,16 +17,16 @@ Account Move Reconcile Forbid Cancel
: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--reconcile-lightgray.png?logo=github
- :target: https://github.com/OCA/account-reconcile/tree/15.0/account_move_reconcile_forbid_cancel
+ :target: https://github.com/OCA/account-reconcile/tree/16.0/account_move_reconcile_forbid_cancel
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/account-reconcile-15-0/account-reconcile-15-0-account_move_reconcile_forbid_cancel
+ :target: https://translation.odoo-community.org/projects/account-reconcile-16-0/account-reconcile-16-0-account_move_reconcile_forbid_cancel
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/98/15.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/account-reconcile&target_branch=16.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
This module restricts to cancel or reset to draft any invoice/journal entry that
has been reconciled (aka paid).
@@ -49,8 +52,8 @@ 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 smashing it by providing a detailed and welcomed
-`feedback `_.
+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.
@@ -83,6 +86,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-reconcile `_ project on GitHub.
+This module is part of the `OCA/account-reconcile `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_move_reconcile_forbid_cancel/__manifest__.py b/account_move_reconcile_forbid_cancel/__manifest__.py
index ee7b11eaa6..65553875cf 100644
--- a/account_move_reconcile_forbid_cancel/__manifest__.py
+++ b/account_move_reconcile_forbid_cancel/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Account Move Reconcile Forbid Cancel",
- "version": "15.0.1.0.0",
+ "version": "16.0.1.0.0",
"category": "Finance",
"website": "https://github.com/OCA/account-reconcile",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
index 118bb4193e..8f017881eb 100644
--- a/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
+++ b/account_move_reconcile_forbid_cancel/i18n/account_move_reconcile_forbid_cancel.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -19,12 +19,14 @@ msgid "Journal Entry"
msgstr ""
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot cancel reconciled entries."
msgstr ""
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot reset to draft reconciled entries."
diff --git a/account_move_reconcile_forbid_cancel/i18n/es.po b/account_move_reconcile_forbid_cancel/i18n/es.po
index 0ccece2222..696d67d96a 100644
--- a/account_move_reconcile_forbid_cancel/i18n/es.po
+++ b/account_move_reconcile_forbid_cancel/i18n/es.po
@@ -23,12 +23,14 @@ msgid "Journal Entry"
msgstr ""
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot cancel reconciled entries."
msgstr "No puede cancelar asientos conciliados"
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot reset to draft reconciled entries."
diff --git a/account_move_reconcile_forbid_cancel/i18n/pt_BR.po b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
index 274a07b766..cc6ae3d8d0 100644
--- a/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
+++ b/account_move_reconcile_forbid_cancel/i18n/pt_BR.po
@@ -22,12 +22,14 @@ msgid "Journal Entry"
msgstr "Lançamento de Diário"
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot cancel reconciled entries."
msgstr "Você não pode cancelar lançamentos reconciliados."
#. module: account_move_reconcile_forbid_cancel
+#. odoo-python
#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0
#, python-format
msgid "You cannot reset to draft reconciled entries."
diff --git a/account_move_reconcile_forbid_cancel/models/account_move.py b/account_move_reconcile_forbid_cancel/models/account_move.py
index ed3e820189..539ae70867 100644
--- a/account_move_reconcile_forbid_cancel/models/account_move.py
+++ b/account_move_reconcile_forbid_cancel/models/account_move.py
@@ -8,18 +8,12 @@
class AccountMove(models.Model):
_inherit = "account.move"
- def _get_receivable_payable_lines(self):
- return self.line_ids.filtered(
- lambda l: l.account_internal_type in ["receivable", "payable"],
- )
-
def button_draft(self):
if not self.env.context.get("skip_reconcile_forbid_cancel") and (
not tools.config["test_enable"]
or self.env.context.get("test_reconcile_forbid_cancel")
):
- rec_pay_lines = self._get_receivable_payable_lines()
- if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ if self._get_reconciled_amls():
raise ValidationError(
_("You cannot reset to draft reconciled entries.")
)
@@ -30,7 +24,6 @@ def button_cancel(self):
not tools.config["test_enable"]
or self.env.context.get("test_reconcile_forbid_cancel")
):
- rec_pay_lines = self._get_receivable_payable_lines()
- if rec_pay_lines.matched_debit_ids or rec_pay_lines.matched_credit_ids:
+ if self._get_reconciled_amls():
raise ValidationError(_("You cannot cancel reconciled entries."))
return super().button_cancel()
diff --git a/account_move_reconcile_forbid_cancel/static/description/index.html b/account_move_reconcile_forbid_cancel/static/description/index.html
index 88309fc173..710d17dfe5 100644
--- a/account_move_reconcile_forbid_cancel/static/description/index.html
+++ b/account_move_reconcile_forbid_cancel/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Account Move Reconcile Forbid Cancel