From 35fcc62c9b82512ff815414625ae738b683ce477 Mon Sep 17 00:00:00 2001 From: Iryna Vyshnevska Date: Thu, 18 Jul 2019 16:50:59 +0300 Subject: [PATCH 01/21] [12.0][ADD] create addon: account_reconcile_restrict_partner_mismatch --- .../README.rst | 0 .../__init__.py | 2 + .../__manifest__.py | 19 + .../models/__init__.py | 1 + .../models/account_move_line.py | 29 ++ .../readme/DESCRIPTION.rst | 10 + .../report/__init__.py | 1 + .../report/account_move_lines_report.xml | 61 +++ .../report/report_reconciled_lines.py | 65 +++ .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 419 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_reconciliation.py | 104 +++++ 14 files changed, 714 insertions(+) create mode 100644 account_reconcile_restrict_partner_mismatch/README.rst create mode 100755 account_reconcile_restrict_partner_mismatch/__init__.py create mode 100644 account_reconcile_restrict_partner_mismatch/__manifest__.py create mode 100755 account_reconcile_restrict_partner_mismatch/models/__init__.py create mode 100644 account_reconcile_restrict_partner_mismatch/models/account_move_line.py create mode 100644 account_reconcile_restrict_partner_mismatch/readme/DESCRIPTION.rst create mode 100644 account_reconcile_restrict_partner_mismatch/report/__init__.py create mode 100644 account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml create mode 100644 account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py create mode 100644 account_reconcile_restrict_partner_mismatch/security/ir.model.access.csv create mode 100644 account_reconcile_restrict_partner_mismatch/static/description/icon.png create mode 100644 account_reconcile_restrict_partner_mismatch/static/description/index.html create mode 100644 account_reconcile_restrict_partner_mismatch/tests/__init__.py create mode 100644 account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py diff --git a/account_reconcile_restrict_partner_mismatch/README.rst b/account_reconcile_restrict_partner_mismatch/README.rst new file mode 100644 index 00000000..e69de29b diff --git a/account_reconcile_restrict_partner_mismatch/__init__.py b/account_reconcile_restrict_partner_mismatch/__init__.py new file mode 100755 index 00000000..bf588bc8 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report diff --git a/account_reconcile_restrict_partner_mismatch/__manifest__.py b/account_reconcile_restrict_partner_mismatch/__manifest__.py new file mode 100644 index 00000000..a9e05f06 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Reconcile restrict partner mismatch', + 'summary': 'Restrict reconciliation on receivable ' + 'and payable accounts to the same partner', + 'version': '12.0.1.0.0', + 'depends': ['account'], + 'author': 'Camptocamp, Odoo Community Association (OCA)', + 'website': 'http://www.github.com/OCA/account-reconcile', + 'category': 'Finance', + 'license': 'AGPL-3', + 'data': [ + 'report/account_move_lines_report.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/account_reconcile_restrict_partner_mismatch/models/__init__.py b/account_reconcile_restrict_partner_mismatch/models/__init__.py new file mode 100755 index 00000000..8795b3be --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/models/__init__.py @@ -0,0 +1 @@ +from . import account_move_line diff --git a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py new file mode 100644 index 00000000..8ab5f13e --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py @@ -0,0 +1,29 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, models, _ +from odoo.exceptions import UserError +from odoo.tools import config + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + @api.multi + def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False): + if (config['test_enable'] + and not self.env.context.get('test_partner_mismatch')): + return super().reconcile(writeoff_acc_id, writeoff_journal_id) + + # to be consistent with parent method + if not self: + return True + partners = set() + for line in self: + if line.account_id.internal_type in ('receivable', 'payable'): + partners.add(line.partner_id.id) + if len(partners) > 1: + raise UserError(_('The partner has to be the same on all' + ' lines for receivable and payable accounts!')) + return super().reconcile( + writeoff_acc_id, writeoff_journal_id) diff --git a/account_reconcile_restrict_partner_mismatch/readme/DESCRIPTION.rst b/account_reconcile_restrict_partner_mismatch/readme/DESCRIPTION.rst new file mode 100644 index 00000000..a546b3fa --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ +This module restricts reconciliation between journal items when: + + - both items have different partners + - one item is with partner and the other without it + +This rule applies only for journal items using receivable and payable account type. + +As at the moment of installation some journal items could have been reconciled +using different partners, you can detect them in menu Accounting > Adviser > +Reconciled items with partner mismatch. diff --git a/account_reconcile_restrict_partner_mismatch/report/__init__.py b/account_reconcile_restrict_partner_mismatch/report/__init__.py new file mode 100644 index 00000000..f32b29ee --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/report/__init__.py @@ -0,0 +1 @@ +from . import report_reconciled_lines diff --git a/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml new file mode 100644 index 00000000..14b7276f --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml @@ -0,0 +1,61 @@ + + + + Reconciled items with partner mismatch + account.reconcile.partner.mismatch.report + + + + + + + + + + + + + + + + + + + account.reconcile.partner.mismatch.report.form + account.reconcile.partner.mismatch.report + +
+ + + + + + + + + + + + + + + + + + +
+
+
+ + + Reconciled items with partner mismatch + account.reconcile.partner.mismatch.report + tree,form + + + +
diff --git a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py new file mode 100644 index 00000000..ac2cfc57 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py @@ -0,0 +1,65 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + + +from odoo import api, fields, models, tools + + +class AccountReconcilePartnerMismatchReport(models.Model): + _name = 'account.reconcile.partner.mismatch.report' + _auto = False + + partial_reconcile_id = fields.Many2one( + 'account.partial.reconcile', + string="Partial Reconcile" + ) + full_reconcile_id = fields.Many2one('account.full.reconcile') + account_id = fields.Many2one( + 'account.account', + string="Account" + ) + account_type_id = fields.Many2one( + 'account.account.type', + string="Account type", + ) + debit_move_id = fields.Many2one('account.move.line', string="Debit move") + debit_amount = fields.Float("Debit amount") + debit_partner_id = fields.Many2one('res.partner', string="Debit partner") + credit_move_id = fields.Many2one('account.move.line', string="Credit move") + credit_amount = fields.Float("Credit amount") + credit_partner_id = fields.Many2one('res.partner', string="Credit partner") + + @api.model_cr + def init(self): + """Select lines which violate defined rules""" + tools.drop_view_if_exists(self.env.cr, self._table) + self._cr.execute( + """CREATE OR REPLACE VIEW %s AS ( + SELECT pr.id id + , pr.id partial_reconcile_id + , pr.full_reconcile_id + , pr.debit_move_id + , daml.debit debit_amount + , aat.id account_type_id + , daml.partner_id debit_partner_id + , daml.account_id account_id + , pr.credit_move_id + , caml.credit credit_amount + , caml.partner_id credit_partner_id + FROM account_partial_reconcile pr + LEFT JOIN account_move_line daml + ON daml.id = pr.debit_move_id + LEFT JOIN account_move_line caml + ON caml.id = pr.credit_move_id + LEFT JOIN account_account_type aat + ON daml.user_type_id = aat.id + WHERE aat.type in ('receivable', 'payable') + AND (daml.partner_id <> caml.partner_id + OR (daml.partner_id IS NULL + AND caml.partner_id IS NOT NULL) + OR (caml.partner_id IS NULL + AND daml.partner_id IS NOT NULL)) + ) + """ + % self._table + ) diff --git a/account_reconcile_restrict_partner_mismatch/security/ir.model.access.csv b/account_reconcile_restrict_partner_mismatch/security/ir.model.access.csv new file mode 100644 index 00000000..8dea174a --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_reconcile_partner_mismatch_report,access_account_reconcile_partner_mismatch_report,model_account_reconcile_partner_mismatch_report,account.group_account_user,1,0,0,0 diff --git a/account_reconcile_restrict_partner_mismatch/static/description/icon.png b/account_reconcile_restrict_partner_mismatch/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_reconcile_restrict_partner_mismatch/static/description/index.html b/account_reconcile_restrict_partner_mismatch/static/description/index.html new file mode 100644 index 00000000..876a1f6c --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/static/description/index.html @@ -0,0 +1,419 @@ + + + + + + +Account Set Reconcilable + + + +
+

Account Set Reconcilable

+ + +

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

+

Allows to set as reconcilable a non reconcilable account that already have journal items.

+

Table of contents

+ +
+

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

+
    +
  • Eficent
  • +
+
+
+

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-reconcile project on GitHub.

+

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

+
+
+
+ + diff --git a/account_reconcile_restrict_partner_mismatch/tests/__init__.py b/account_reconcile_restrict_partner_mismatch/tests/__init__.py new file mode 100644 index 00000000..5eaab019 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/tests/__init__.py @@ -0,0 +1 @@ +from . import test_reconciliation diff --git a/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py new file mode 100644 index 00000000..a21c6af9 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py @@ -0,0 +1,104 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.addons.account.tests.account_test_classes import AccountingTestCase +from odoo.exceptions import UserError + + +class TestReconciliation(AccountingTestCase): + + def setUp(self): + super().setUp() + self.env = self.env(context=dict( + self.env.context, tracking_disable=True, + test_partner_mismatch=True) + ) + + self.partner = self.env.ref("base.res_partner_2") + self.partner_id = self.partner.id + rec_type = self.env['account.account'].search([ + ('user_type_id', '=', + self.env.ref('account.data_account_type_receivable').id) + ], limit=1) + pay_type = self.env['account.account'].search([ + ('user_type_id', '=', + self.env.ref('account.data_account_type_payable').id) + ], limit=1) + self.account_rcv = (self.partner.property_account_receivable_id + or rec_type) + self.account_rsa = self.partner.property_account_payable_id or pay_type + + self.bank_journal = self.env['account.journal']. \ + create({'name': 'Bank', 'type': 'bank', 'code': 'BNK67'}) + self.aml = self.init_moves() + self.wizard = self.env['account.move.line.reconcile.writeoff']. \ + with_context(active_ids=[x.id for x in self.aml]).create({ + 'journal_id': self.bank_journal.id, + 'writeoff_acc_id': self.account_rsa.id + }) + + def create_move(self, name, amount): + debit_line_vals = { + 'name': name, + 'debit': amount > 0 and amount or 0.0, + 'credit': amount < 0 and -amount or 0.0, + 'account_id': self.account_rcv.id, + } + credit_line_vals = debit_line_vals.copy() + credit_line_vals['debit'] = debit_line_vals['credit'] + credit_line_vals['credit'] = debit_line_vals['debit'] + credit_line_vals['account_id'] = self.account_rsa.id + vals = { + 'journal_id': self.bank_journal.id, + 'line_ids': [(0, 0, debit_line_vals), (0, 0, credit_line_vals)] + } + return self.env['account.move'].create(vals).id + + def init_moves(self): + move_list_vals = [ + ('1', -1.83), + ('2', 728.35), + ('3', -4.46), + ('4', 0.32), + ('5', 14.72), + ('6', -737.10), + ] + move_ids = [] + for name, amount in move_list_vals: + move_ids.append(self.create_move(name, amount)) + aml_recs = self.env['account.move.line'].search([ + ('move_id', 'in', move_ids), + ('account_id', '=', self.account_rcv.id) + ]) + return aml_recs + + def test_reconcile_no_partner(self): + self.wizard.trans_rec_reconcile() + self.assertTrue(all(self.aml.mapped('reconciled'))) + + def test_reconcile_partner_mismatch(self): + self.aml[0].partner_id = self.partner.id + with self.assertRaises(UserError): + self.wizard.trans_rec_reconcile() + # all lines with same partner allowed + self.aml.write({'partner_id': self.partner.id}) + self.wizard.trans_rec_reconcile() + self.assertTrue(all(self.aml.mapped('reconciled'))) + + def test_reconcile_accounts_excluded(self): + self.aml[0].partner_id = self.partner.id + with self.assertRaises(UserError): + self.wizard.trans_rec_reconcile() + # reconciliation forbiden only for certain types of accounts + account = self.env['account.account'].search([ + ('user_type_id.type', '=', 'other') + ], limit=1) + account.reconcile = True + self.aml[0].account_id = account.id + with self.assertRaises(UserError): + self.wizard.trans_rec_reconcile() + # reconciliation for different partners allowed + # for not forbidden types + self.aml.write({'account_id': account.id}) + self.wizard.trans_rec_reconcile() + self.assertTrue(all(self.aml.mapped('reconciled'))) From 1e953971316b482aad232699c51158f0d4be40d6 Mon Sep 17 00:00:00 2001 From: Iryna Vyshnevska Date: Thu, 18 Jul 2019 18:10:43 +0300 Subject: [PATCH 02/21] [MIG][12.0] adapt tests to v12 --- .../README.rst | 77 +++++++++++++ ...nt_reconcile_restrict_partner_mismatch.pot | 104 ++++++++++++++++++ .../static/description/index.html | 39 ++++--- .../tests/test_reconciliation.py | 17 +-- 4 files changed, 208 insertions(+), 29 deletions(-) create mode 100644 account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot diff --git a/account_reconcile_restrict_partner_mismatch/README.rst b/account_reconcile_restrict_partner_mismatch/README.rst index e69de29b..8abb6497 100644 --- a/account_reconcile_restrict_partner_mismatch/README.rst +++ b/account_reconcile_restrict_partner_mismatch/README.rst @@ -0,0 +1,77 @@ +=================================== +Reconcile restrict partner mismatch +=================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/12.0/account_reconcile_restrict_partner_mismatch + :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-12-0/account-reconcile-12-0-account_reconcile_restrict_partner_mismatch + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module restricts reconciliation between journal items when: + + - both items have different partners + - one item is with partner and the other without it + +This rule applies only for journal items using receivable and payable account type. + +As at the moment of installation some journal items could have been reconciled +using different partners, you can detect them in menu Accounting > Adviser > +Reconciled items with partner mismatch. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* Camptocamp + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/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_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot new file mode 100644 index 00000000..9a97f573 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_restrict_partner_mismatch +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__account_id +msgid "Account" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__account_type_id +msgid "Account type" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__credit_amount +msgid "Credit amount" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__credit_move_id +msgid "Credit move" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__credit_partner_id +msgid "Credit partner" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__debit_amount +msgid "Debit amount" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__debit_move_id +msgid "Debit move" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__debit_partner_id +msgid "Debit partner" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__display_name +msgid "Display Name" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__full_reconcile_id +msgid "Full Reconcile" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__id +msgid "ID" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model,name:account_reconcile_restrict_partner_mismatch.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__partial_reconcile_id +msgid "Partial Reconcile" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.actions.act_window,name:account_reconcile_restrict_partner_mismatch.action_account_reconcile_partner_mismatch_report +#: model:ir.ui.menu,name:account_reconcile_restrict_partner_mismatch.menu_account_reconcile_partner_mismatch_report +#: model_terms:ir.ui.view,arch_db:account_reconcile_restrict_partner_mismatch.account_reconcile_partner_mismatch_report_view_form +#: model_terms:ir.ui.view,arch_db:account_reconcile_restrict_partner_mismatch.view_account_move_reconciled_report_tree +msgid "Reconciled items with partner mismatch" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: code:addons/account_reconcile_restrict_partner_mismatch/models/account_move_line.py:26 +#, python-format +msgid "The partner has to be the same on all lines for receivable and payable accounts!" +msgstr "" + +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model,name:account_reconcile_restrict_partner_mismatch.model_account_reconcile_partner_mismatch_report +msgid "account.reconcile.partner.mismatch.report" +msgstr "" + diff --git a/account_reconcile_restrict_partner_mismatch/static/description/index.html b/account_reconcile_restrict_partner_mismatch/static/description/index.html index 876a1f6c..aa278bcf 100644 --- a/account_reconcile_restrict_partner_mismatch/static/description/index.html +++ b/account_reconcile_restrict_partner_mismatch/static/description/index.html @@ -3,8 +3,8 @@ - -Account Set Reconcilable + +Reconcile restrict partner mismatch -
-

Account Set Reconcilable

+
+

Reconcile restrict partner mismatch

-

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

-

Allows to set as reconcilable a non reconcilable account that already have journal items.

+

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

+

This module restricts reconciliation between journal items when:

+
+
    +
  • both items have different partners
  • +
  • one item is with partner and the other without it
  • +
+
+

This rule applies only for journal items using receivable and payable account type.

+

As at the moment of installation some journal items could have been reconciled +using different partners, you can detect them in menu Accounting > Adviser > +Reconciled items with partner mismatch.

Table of contents

@@ -386,7 +395,7 @@ ul.auto-toc {

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.

@@ -394,23 +403,17 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

Authors

    -
  • Eficent
  • -
-
-
-

Contributors

-
-

Maintainers

+

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-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_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py index a21c6af9..13be4455 100644 --- a/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py +++ b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py @@ -31,11 +31,6 @@ class TestReconciliation(AccountingTestCase): self.bank_journal = self.env['account.journal']. \ create({'name': 'Bank', 'type': 'bank', 'code': 'BNK67'}) self.aml = self.init_moves() - self.wizard = self.env['account.move.line.reconcile.writeoff']. \ - with_context(active_ids=[x.id for x in self.aml]).create({ - 'journal_id': self.bank_journal.id, - 'writeoff_acc_id': self.account_rsa.id - }) def create_move(self, name, amount): debit_line_vals = { @@ -73,22 +68,22 @@ class TestReconciliation(AccountingTestCase): return aml_recs def test_reconcile_no_partner(self): - self.wizard.trans_rec_reconcile() + self.aml.reconcile() self.assertTrue(all(self.aml.mapped('reconciled'))) def test_reconcile_partner_mismatch(self): self.aml[0].partner_id = self.partner.id with self.assertRaises(UserError): - self.wizard.trans_rec_reconcile() + self.aml.reconcile() # all lines with same partner allowed self.aml.write({'partner_id': self.partner.id}) - self.wizard.trans_rec_reconcile() + self.aml.reconcile() self.assertTrue(all(self.aml.mapped('reconciled'))) def test_reconcile_accounts_excluded(self): self.aml[0].partner_id = self.partner.id with self.assertRaises(UserError): - self.wizard.trans_rec_reconcile() + self.aml.reconcile() # reconciliation forbiden only for certain types of accounts account = self.env['account.account'].search([ ('user_type_id.type', '=', 'other') @@ -96,9 +91,9 @@ class TestReconciliation(AccountingTestCase): account.reconcile = True self.aml[0].account_id = account.id with self.assertRaises(UserError): - self.wizard.trans_rec_reconcile() + self.aml.reconcile() # reconciliation for different partners allowed # for not forbidden types self.aml.write({'account_id': account.id}) - self.wizard.trans_rec_reconcile() + self.aml.reconcile() self.assertTrue(all(self.aml.mapped('reconciled'))) From a692ea1a3d475605703991d12313f8209a1c6642 Mon Sep 17 00:00:00 2001 From: mreficent Date: Fri, 2 Aug 2019 14:46:42 +0200 Subject: [PATCH 03/21] [FIX] Add description to a model --- .../account_reconcile_restrict_partner_mismatch.pot | 10 +++++----- .../report/report_reconciled_lines.py | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot index 9a97f573..89588632 100644 --- a/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot +++ b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot @@ -18,6 +18,11 @@ msgstr "" msgid "Account" msgstr "" +#. module: account_reconcile_restrict_partner_mismatch +#: model:ir.model,name:account_reconcile_restrict_partner_mismatch.model_account_reconcile_partner_mismatch_report +msgid "Account Reconcile Partner Mismatch Report" +msgstr "" + #. module: account_reconcile_restrict_partner_mismatch #: model:ir.model.fields,field_description:account_reconcile_restrict_partner_mismatch.field_account_reconcile_partner_mismatch_report__account_type_id msgid "Account type" @@ -97,8 +102,3 @@ msgstr "" msgid "The partner has to be the same on all lines for receivable and payable accounts!" msgstr "" -#. module: account_reconcile_restrict_partner_mismatch -#: model:ir.model,name:account_reconcile_restrict_partner_mismatch.model_account_reconcile_partner_mismatch_report -msgid "account.reconcile.partner.mismatch.report" -msgstr "" - diff --git a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py index ac2cfc57..994264ac 100644 --- a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py +++ b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py @@ -7,6 +7,7 @@ from odoo import api, fields, models, tools class AccountReconcilePartnerMismatchReport(models.Model): _name = 'account.reconcile.partner.mismatch.report' + _description = 'Account Reconcile Partner Mismatch Report' _auto = False partial_reconcile_id = fields.Many2one( From eb17203388b93a5daf087663bfe76d6bebfa35c0 Mon Sep 17 00:00:00 2001 From: ernestotejeda Date: Mon, 25 Nov 2019 15:07:08 -0500 Subject: [PATCH 04/21] [IMP] account_reconcile_restrict_partner_mismatch: black, isort --- .../__manifest__.py | 25 ++--- .../models/account_move_line.py | 18 ++-- .../report/account_move_lines_report.xml | 2 +- .../report/report_reconciled_lines.py | 27 ++--- .../tests/test_reconciliation.py | 102 ++++++++++-------- 5 files changed, 89 insertions(+), 85 deletions(-) diff --git a/account_reconcile_restrict_partner_mismatch/__manifest__.py b/account_reconcile_restrict_partner_mismatch/__manifest__.py index a9e05f06..92fb8619 100644 --- a/account_reconcile_restrict_partner_mismatch/__manifest__.py +++ b/account_reconcile_restrict_partner_mismatch/__manifest__.py @@ -2,18 +2,15 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': 'Reconcile restrict partner mismatch', - 'summary': 'Restrict reconciliation on receivable ' - 'and payable accounts to the same partner', - 'version': '12.0.1.0.0', - 'depends': ['account'], - 'author': 'Camptocamp, Odoo Community Association (OCA)', - 'website': 'http://www.github.com/OCA/account-reconcile', - 'category': 'Finance', - 'license': 'AGPL-3', - 'data': [ - 'report/account_move_lines_report.xml', - 'security/ir.model.access.csv', - ], - 'installable': True, + "name": "Reconcile restrict partner mismatch", + "summary": "Restrict reconciliation on receivable " + "and payable accounts to the same partner", + "version": "12.0.1.0.0", + "depends": ["account"], + "author": "Camptocamp, Odoo Community Association (OCA)", + "website": "http://www.github.com/OCA/account-reconcile", + "category": "Finance", + "license": "AGPL-3", + "data": ["report/account_move_lines_report.xml", "security/ir.model.access.csv"], + "installable": True, } diff --git a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py index 8ab5f13e..9cd800fe 100644 --- a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py +++ b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py @@ -1,7 +1,7 @@ # Copyright 2019 Camptocamp SA # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, models, _ +from odoo import _, api, models from odoo.exceptions import UserError from odoo.tools import config @@ -11,8 +11,7 @@ class AccountMoveLine(models.Model): @api.multi def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False): - if (config['test_enable'] - and not self.env.context.get('test_partner_mismatch')): + if config["test_enable"] and not self.env.context.get("test_partner_mismatch"): return super().reconcile(writeoff_acc_id, writeoff_journal_id) # to be consistent with parent method @@ -20,10 +19,13 @@ class AccountMoveLine(models.Model): return True partners = set() for line in self: - if line.account_id.internal_type in ('receivable', 'payable'): + if line.account_id.internal_type in ("receivable", "payable"): partners.add(line.partner_id.id) if len(partners) > 1: - raise UserError(_('The partner has to be the same on all' - ' lines for receivable and payable accounts!')) - return super().reconcile( - writeoff_acc_id, writeoff_journal_id) + raise UserError( + _( + "The partner has to be the same on all" + " lines for receivable and payable accounts!" + ) + ) + return super().reconcile(writeoff_acc_id, writeoff_journal_id) diff --git a/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml index 14b7276f..91aef714 100644 --- a/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml +++ b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml @@ -5,7 +5,7 @@ account.reconcile.partner.mismatch.report - diff --git a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py index 994264ac..06e0e86b 100644 --- a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py +++ b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py @@ -6,29 +6,22 @@ from odoo import api, fields, models, tools class AccountReconcilePartnerMismatchReport(models.Model): - _name = 'account.reconcile.partner.mismatch.report' - _description = 'Account Reconcile Partner Mismatch Report' + _name = "account.reconcile.partner.mismatch.report" + _description = "Account Reconcile Partner Mismatch Report" _auto = False partial_reconcile_id = fields.Many2one( - 'account.partial.reconcile', - string="Partial Reconcile" + "account.partial.reconcile", string="Partial Reconcile" ) - full_reconcile_id = fields.Many2one('account.full.reconcile') - account_id = fields.Many2one( - 'account.account', - string="Account" - ) - account_type_id = fields.Many2one( - 'account.account.type', - string="Account type", - ) - debit_move_id = fields.Many2one('account.move.line', string="Debit move") + full_reconcile_id = fields.Many2one("account.full.reconcile") + account_id = fields.Many2one("account.account", string="Account") + account_type_id = fields.Many2one("account.account.type", string="Account type") + debit_move_id = fields.Many2one("account.move.line", string="Debit move") debit_amount = fields.Float("Debit amount") - debit_partner_id = fields.Many2one('res.partner', string="Debit partner") - credit_move_id = fields.Many2one('account.move.line', string="Credit move") + debit_partner_id = fields.Many2one("res.partner", string="Debit partner") + credit_move_id = fields.Many2one("account.move.line", string="Credit move") credit_amount = fields.Float("Credit amount") - credit_partner_id = fields.Many2one('res.partner', string="Credit partner") + credit_partner_id = fields.Many2one("res.partner", string="Credit partner") @api.model_cr def init(self): diff --git a/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py index 13be4455..5711a687 100644 --- a/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py +++ b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py @@ -1,99 +1,111 @@ # Copyright 2019 Camptocamp SA # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo.addons.account.tests.account_test_classes import AccountingTestCase from odoo.exceptions import UserError +from odoo.addons.account.tests.account_test_classes import AccountingTestCase + class TestReconciliation(AccountingTestCase): - def setUp(self): super().setUp() - self.env = self.env(context=dict( - self.env.context, tracking_disable=True, - test_partner_mismatch=True) + self.env = self.env( + context=dict( + self.env.context, tracking_disable=True, test_partner_mismatch=True + ) ) self.partner = self.env.ref("base.res_partner_2") self.partner_id = self.partner.id - rec_type = self.env['account.account'].search([ - ('user_type_id', '=', - self.env.ref('account.data_account_type_receivable').id) - ], limit=1) - pay_type = self.env['account.account'].search([ - ('user_type_id', '=', - self.env.ref('account.data_account_type_payable').id) - ], limit=1) - self.account_rcv = (self.partner.property_account_receivable_id - or rec_type) + rec_type = self.env["account.account"].search( + [ + ( + "user_type_id", + "=", + self.env.ref("account.data_account_type_receivable").id, + ) + ], + limit=1, + ) + pay_type = self.env["account.account"].search( + [ + ( + "user_type_id", + "=", + self.env.ref("account.data_account_type_payable").id, + ) + ], + limit=1, + ) + self.account_rcv = self.partner.property_account_receivable_id or rec_type self.account_rsa = self.partner.property_account_payable_id or pay_type - self.bank_journal = self.env['account.journal']. \ - create({'name': 'Bank', 'type': 'bank', 'code': 'BNK67'}) + self.bank_journal = self.env["account.journal"].create( + {"name": "Bank", "type": "bank", "code": "BNK67"} + ) self.aml = self.init_moves() def create_move(self, name, amount): debit_line_vals = { - 'name': name, - 'debit': amount > 0 and amount or 0.0, - 'credit': amount < 0 and -amount or 0.0, - 'account_id': self.account_rcv.id, + "name": name, + "debit": amount > 0 and amount or 0.0, + "credit": amount < 0 and -amount or 0.0, + "account_id": self.account_rcv.id, } credit_line_vals = debit_line_vals.copy() - credit_line_vals['debit'] = debit_line_vals['credit'] - credit_line_vals['credit'] = debit_line_vals['debit'] - credit_line_vals['account_id'] = self.account_rsa.id + credit_line_vals["debit"] = debit_line_vals["credit"] + credit_line_vals["credit"] = debit_line_vals["debit"] + credit_line_vals["account_id"] = self.account_rsa.id vals = { - 'journal_id': self.bank_journal.id, - 'line_ids': [(0, 0, debit_line_vals), (0, 0, credit_line_vals)] + "journal_id": self.bank_journal.id, + "line_ids": [(0, 0, debit_line_vals), (0, 0, credit_line_vals)], } - return self.env['account.move'].create(vals).id + return self.env["account.move"].create(vals).id def init_moves(self): move_list_vals = [ - ('1', -1.83), - ('2', 728.35), - ('3', -4.46), - ('4', 0.32), - ('5', 14.72), - ('6', -737.10), + ("1", -1.83), + ("2", 728.35), + ("3", -4.46), + ("4", 0.32), + ("5", 14.72), + ("6", -737.10), ] move_ids = [] for name, amount in move_list_vals: move_ids.append(self.create_move(name, amount)) - aml_recs = self.env['account.move.line'].search([ - ('move_id', 'in', move_ids), - ('account_id', '=', self.account_rcv.id) - ]) + aml_recs = self.env["account.move.line"].search( + [("move_id", "in", move_ids), ("account_id", "=", self.account_rcv.id)] + ) return aml_recs def test_reconcile_no_partner(self): self.aml.reconcile() - self.assertTrue(all(self.aml.mapped('reconciled'))) + self.assertTrue(all(self.aml.mapped("reconciled"))) def test_reconcile_partner_mismatch(self): self.aml[0].partner_id = self.partner.id with self.assertRaises(UserError): self.aml.reconcile() # all lines with same partner allowed - self.aml.write({'partner_id': self.partner.id}) + self.aml.write({"partner_id": self.partner.id}) self.aml.reconcile() - self.assertTrue(all(self.aml.mapped('reconciled'))) + self.assertTrue(all(self.aml.mapped("reconciled"))) def test_reconcile_accounts_excluded(self): self.aml[0].partner_id = self.partner.id with self.assertRaises(UserError): self.aml.reconcile() # reconciliation forbiden only for certain types of accounts - account = self.env['account.account'].search([ - ('user_type_id.type', '=', 'other') - ], limit=1) + account = self.env["account.account"].search( + [("user_type_id.type", "=", "other")], limit=1 + ) account.reconcile = True self.aml[0].account_id = account.id with self.assertRaises(UserError): self.aml.reconcile() # reconciliation for different partners allowed # for not forbidden types - self.aml.write({'account_id': account.id}) + self.aml.write({"account_id": account.id}) self.aml.reconcile() - self.assertTrue(all(self.aml.mapped('reconciled'))) + self.assertTrue(all(self.aml.mapped("reconciled"))) From ac3e23873668dd4e59a2f1960ab7a88164211c58 Mon Sep 17 00:00:00 2001 From: ernestotejeda Date: Tue, 26 Nov 2019 11:37:54 -0500 Subject: [PATCH 05/21] [MIG] account_reconcile_restrict_partner_mismatch: Migration to 13.0 --- .../README.rst | 17 ++- .../__init__.py | 0 .../__manifest__.py | 2 +- ...nt_reconcile_restrict_partner_mismatch.pot | 13 +- .../models/__init__.py | 0 .../models/account_move_line.py | 3 +- .../readme/CONTRIBUTORS.rst | 3 + .../report/account_move_lines_report.xml | 123 ++++++++++-------- .../report/report_reconciled_lines.py | 7 +- .../static/description/index.html | 20 ++- .../tests/test_reconciliation.py | 95 +++++++------- 11 files changed, 161 insertions(+), 122 deletions(-) mode change 100755 => 100644 account_reconcile_restrict_partner_mismatch/__init__.py mode change 100755 => 100644 account_reconcile_restrict_partner_mismatch/models/__init__.py create mode 100644 account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst diff --git a/account_reconcile_restrict_partner_mismatch/README.rst b/account_reconcile_restrict_partner_mismatch/README.rst index 8abb6497..145d112a 100644 --- a/account_reconcile_restrict_partner_mismatch/README.rst +++ b/account_reconcile_restrict_partner_mismatch/README.rst @@ -14,13 +14,13 @@ Reconcile restrict partner mismatch :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/12.0/account_reconcile_restrict_partner_mismatch + :target: https://github.com/OCA/account-reconcile/tree/13.0/account_reconcile_restrict_partner_mismatch :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-12-0/account-reconcile-12-0-account_reconcile_restrict_partner_mismatch + :target: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_reconcile_restrict_partner_mismatch :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/12.0 + :target: https://runbot.odoo-community.org/runbot/98/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,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. @@ -59,6 +59,13 @@ Authors * Camptocamp +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Ernesto Tejeda + Maintainers ~~~~~~~~~~~ @@ -72,6 +79,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_reconcile_restrict_partner_mismatch/__init__.py b/account_reconcile_restrict_partner_mismatch/__init__.py old mode 100755 new mode 100644 diff --git a/account_reconcile_restrict_partner_mismatch/__manifest__.py b/account_reconcile_restrict_partner_mismatch/__manifest__.py index 92fb8619..694d288e 100644 --- a/account_reconcile_restrict_partner_mismatch/__manifest__.py +++ b/account_reconcile_restrict_partner_mismatch/__manifest__.py @@ -5,7 +5,7 @@ "name": "Reconcile restrict partner mismatch", "summary": "Restrict reconciliation on receivable " "and payable accounts to the same partner", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "depends": ["account"], "author": "Camptocamp, Odoo Community Association (OCA)", "website": "http://www.github.com/OCA/account-reconcile", diff --git a/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot index 89588632..b3d9f2af 100644 --- a/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot +++ b/account_reconcile_restrict_partner_mismatch/i18n/account_reconcile_restrict_partner_mismatch.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * account_reconcile_restrict_partner_mismatch +# * account_reconcile_restrict_partner_mismatch # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -97,8 +97,9 @@ msgid "Reconciled items with partner mismatch" msgstr "" #. module: account_reconcile_restrict_partner_mismatch -#: code:addons/account_reconcile_restrict_partner_mismatch/models/account_move_line.py:26 +#: code:addons/account_reconcile_restrict_partner_mismatch/models/account_move_line.py:0 #, python-format -msgid "The partner has to be the same on all lines for receivable and payable accounts!" +msgid "" +"The partner has to be the same on all lines for receivable and payable " +"accounts!" msgstr "" - diff --git a/account_reconcile_restrict_partner_mismatch/models/__init__.py b/account_reconcile_restrict_partner_mismatch/models/__init__.py old mode 100755 new mode 100644 diff --git a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py index 9cd800fe..adafe6e4 100644 --- a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py +++ b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py @@ -1,7 +1,7 @@ # Copyright 2019 Camptocamp SA # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import _, api, models +from odoo import _, models from odoo.exceptions import UserError from odoo.tools import config @@ -9,7 +9,6 @@ from odoo.tools import config class AccountMoveLine(models.Model): _inherit = "account.move.line" - @api.multi def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False): if config["test_enable"] and not self.env.context.get("test_partner_mismatch"): return super().reconcile(writeoff_acc_id, writeoff_journal_id) diff --git a/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst b/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..0b6bee44 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_: + + * Ernesto Tejeda diff --git a/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml index 91aef714..ee82bcc8 100644 --- a/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml +++ b/account_reconcile_restrict_partner_mismatch/report/account_move_lines_report.xml @@ -1,61 +1,74 @@ - + - - Reconciled items with partner mismatch - account.reconcile.partner.mismatch.report - - + + Reconciled items with partner mismatch + account.reconcile.partner.mismatch.report + + - - - - - - - - - - - - - - - - account.reconcile.partner.mismatch.report.form - account.reconcile.partner.mismatch.report - -
- + + + + + + + + + + + + + + + account.reconcile.partner.mismatch.report.form + account.reconcile.partner.mismatch.report + + + + - - - - - - - - - - - - - - + + + + + + - - - - - - - Reconciled items with partner mismatch - account.reconcile.partner.mismatch.report - tree,form - - - + + + + + + + +
+ +
+
+ + Reconciled items with partner mismatch + account.reconcile.partner.mismatch.report + tree,form + +
diff --git a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py index 06e0e86b..a1ceeab4 100644 --- a/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py +++ b/account_reconcile_restrict_partner_mismatch/report/report_reconciled_lines.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models, tools +from odoo import fields, models, tools class AccountReconcilePartnerMismatchReport(models.Model): @@ -23,7 +23,6 @@ class AccountReconcilePartnerMismatchReport(models.Model): credit_amount = fields.Float("Credit amount") credit_partner_id = fields.Many2one("res.partner", string="Credit partner") - @api.model_cr def init(self): """Select lines which violate defined rules""" tools.drop_view_if_exists(self.env.cr, self._table) @@ -45,8 +44,10 @@ class AccountReconcilePartnerMismatchReport(models.Model): ON daml.id = pr.debit_move_id LEFT JOIN account_move_line caml ON caml.id = pr.credit_move_id + LEFT JOIN account_account aa + ON daml.account_id = aa.id LEFT JOIN account_account_type aat - ON daml.user_type_id = aat.id + ON aa.user_type_id = aat.id WHERE aat.type in ('receivable', 'payable') AND (daml.partner_id <> caml.partner_id OR (daml.partner_id IS NULL diff --git a/account_reconcile_restrict_partner_mismatch/static/description/index.html b/account_reconcile_restrict_partner_mismatch/static/description/index.html index aa278bcf..3ddd6fd3 100644 --- a/account_reconcile_restrict_partner_mismatch/static/description/index.html +++ b/account_reconcile_restrict_partner_mismatch/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

This module restricts reconciliation between journal items when:

@@ -395,7 +396,7 @@ Reconciled items with partner mismatch.

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.

@@ -406,14 +407,23 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
  • Camptocamp
  • +
    +

    Contributors

    + +
    -

    Maintainers

    +

    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-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_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py index 5711a687..6f1e61f1 100644 --- a/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py +++ b/account_reconcile_restrict_partner_mismatch/tests/test_reconciliation.py @@ -2,67 +2,66 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.exceptions import UserError - -from odoo.addons.account.tests.account_test_classes import AccountingTestCase +from odoo.tests.common import SavepointCase -class TestReconciliation(AccountingTestCase): - def setUp(self): - super().setUp() - self.env = self.env( +class TestReconciliation(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( context=dict( - self.env.context, tracking_disable=True, test_partner_mismatch=True + cls.env.context, tracking_disable=True, test_partner_mismatch=True ) ) - - self.partner = self.env.ref("base.res_partner_2") - self.partner_id = self.partner.id - rec_type = self.env["account.account"].search( - [ - ( - "user_type_id", - "=", - self.env.ref("account.data_account_type_receivable").id, - ) - ], - limit=1, + cls.partner = cls.env.ref("base.res_partner_2") + cls.partner_id = cls.partner.id + cls.account_rcv = cls.env["account.account"].create( + { + "code": "RA1000", + "name": "Test Receivable Account", + "user_type_id": cls.env.ref("account.data_account_type_receivable").id, + "reconcile": True, + } ) - pay_type = self.env["account.account"].search( - [ - ( - "user_type_id", - "=", - self.env.ref("account.data_account_type_payable").id, - ) - ], - limit=1, + cls.account_rsa = cls.env["account.account"].create( + { + "code": "PA1000", + "name": "Test Payable Account", + "user_type_id": cls.env.ref("account.data_account_type_payable").id, + "reconcile": True, + } ) - self.account_rcv = self.partner.property_account_receivable_id or rec_type - self.account_rsa = self.partner.property_account_payable_id or pay_type - - self.bank_journal = self.env["account.journal"].create( + cls.bank_journal = cls.env["account.journal"].create( {"name": "Bank", "type": "bank", "code": "BNK67"} ) - self.aml = self.init_moves() + cls.aml = cls.init_moves() - def create_move(self, name, amount): + @classmethod + def create_move(cls, name, amount): debit_line_vals = { "name": name, "debit": amount > 0 and amount or 0.0, "credit": amount < 0 and -amount or 0.0, - "account_id": self.account_rcv.id, + "account_id": cls.account_rcv.id, } credit_line_vals = debit_line_vals.copy() credit_line_vals["debit"] = debit_line_vals["credit"] credit_line_vals["credit"] = debit_line_vals["debit"] - credit_line_vals["account_id"] = self.account_rsa.id + credit_line_vals["account_id"] = cls.account_rsa.id vals = { - "journal_id": self.bank_journal.id, + "journal_id": cls.bank_journal.id, "line_ids": [(0, 0, debit_line_vals), (0, 0, credit_line_vals)], } - return self.env["account.move"].create(vals).id + return ( + cls.env["account.move"] + .with_context(default_journal_id=cls.bank_journal.id) + .create(vals) + .id + ) - def init_moves(self): + @classmethod + def init_moves(cls): move_list_vals = [ ("1", -1.83), ("2", 728.35), @@ -73,9 +72,9 @@ class TestReconciliation(AccountingTestCase): ] move_ids = [] for name, amount in move_list_vals: - move_ids.append(self.create_move(name, amount)) - aml_recs = self.env["account.move.line"].search( - [("move_id", "in", move_ids), ("account_id", "=", self.account_rcv.id)] + move_ids.append(cls.create_move(name, amount)) + aml_recs = cls.env["account.move.line"].search( + [("move_id", "in", move_ids), ("account_id", "=", cls.account_rcv.id)] ) return aml_recs @@ -97,10 +96,16 @@ class TestReconciliation(AccountingTestCase): with self.assertRaises(UserError): self.aml.reconcile() # reconciliation forbiden only for certain types of accounts - account = self.env["account.account"].search( - [("user_type_id.type", "=", "other")], limit=1 + account = self.env["account.account"].create( + { + "code": "CAA1000", + "name": "Test Current Assets Account", + "user_type_id": self.env.ref( + "account.data_account_type_current_assets" + ).id, + "reconcile": True, + } ) - account.reconcile = True self.aml[0].account_id = account.id with self.assertRaises(UserError): self.aml.reconcile() From e6c7f97f106189365b6396ca97d21ab458f96bac Mon Sep 17 00:00:00 2001 From: mreficent Date: Wed, 29 Jan 2020 13:04:41 +0100 Subject: [PATCH 06/21] [IMP] account_partner_reconcile: black, isort, prettier --- account_reconcile_restrict_partner_mismatch/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/account_reconcile_restrict_partner_mismatch/__init__.py b/account_reconcile_restrict_partner_mismatch/__init__.py index bf588bc8..51d8f52a 100644 --- a/account_reconcile_restrict_partner_mismatch/__init__.py +++ b/account_reconcile_restrict_partner_mismatch/__init__.py @@ -1,2 +1 @@ -from . import models -from . import report +from . import models, report From c2aa4662c20737e3e167f8fc85ad1e4afae26533 Mon Sep 17 00:00:00 2001 From: nguyenhk Date: Wed, 29 Sep 2021 16:59:33 +0700 Subject: [PATCH 07/21] [IMP] account_reconcile_restrict_partner_mismatch: black, isort, prettier --- account_reconcile_restrict_partner_mismatch/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_reconcile_restrict_partner_mismatch/__manifest__.py b/account_reconcile_restrict_partner_mismatch/__manifest__.py index 694d288e..c24f65f8 100644 --- a/account_reconcile_restrict_partner_mismatch/__manifest__.py +++ b/account_reconcile_restrict_partner_mismatch/__manifest__.py @@ -8,7 +8,7 @@ "version": "13.0.1.0.0", "depends": ["account"], "author": "Camptocamp, Odoo Community Association (OCA)", - "website": "http://www.github.com/OCA/account-reconcile", + "website": "https://github.com/OCA/account-reconcile", "category": "Finance", "license": "AGPL-3", "data": ["report/account_move_lines_report.xml", "security/ir.model.access.csv"], From 955e6990ba0024cb44b0ac47d934ef8dfa8ef5ce Mon Sep 17 00:00:00 2001 From: nguyenhk Date: Wed, 6 Oct 2021 08:32:00 +0700 Subject: [PATCH 08/21] [MIG] account_reconcile_restrict_partner_mismatch: Migration to 14.0 --- .../README.rst | 19 +++++++++----- .../__manifest__.py | 2 +- .../models/account_move_line.py | 6 ++--- .../readme/CONTRIBUTORS.rst | 3 ++- .../readme/CREDITS.rst | 1 + .../static/description/index.html | 25 +++++++++++-------- .../tests/test_reconciliation.py | 3 +++ 7 files changed, 38 insertions(+), 21 deletions(-) create mode 100644 account_reconcile_restrict_partner_mismatch/readme/CREDITS.rst diff --git a/account_reconcile_restrict_partner_mismatch/README.rst b/account_reconcile_restrict_partner_mismatch/README.rst index 145d112a..0469d270 100644 --- a/account_reconcile_restrict_partner_mismatch/README.rst +++ b/account_reconcile_restrict_partner_mismatch/README.rst @@ -14,13 +14,13 @@ Reconcile restrict partner mismatch :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_reconcile_restrict_partner_mismatch + :target: https://github.com/OCA/account-reconcile/tree/14.0/account_reconcile_restrict_partner_mismatch :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_reconcile_restrict_partner_mismatch + :target: https://translation.odoo-community.org/projects/account-reconcile-14-0/account-reconcile-14-0-account_reconcile_restrict_partner_mismatch :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/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,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. @@ -63,8 +63,15 @@ Contributors ~~~~~~~~~~~~ * `Tecnativa `_: - * Ernesto Tejeda +* `Trobz `_: + * Nguyen Ho + +Other credits +~~~~~~~~~~~~~ + +The migration of this module from 13.0 to 14.0 was financially supported by Camptocamp + Maintainers ~~~~~~~~~~~ @@ -79,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_reconcile_restrict_partner_mismatch/__manifest__.py b/account_reconcile_restrict_partner_mismatch/__manifest__.py index c24f65f8..3d2ab092 100644 --- a/account_reconcile_restrict_partner_mismatch/__manifest__.py +++ b/account_reconcile_restrict_partner_mismatch/__manifest__.py @@ -5,7 +5,7 @@ "name": "Reconcile restrict partner mismatch", "summary": "Restrict reconciliation on receivable " "and payable accounts to the same partner", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "depends": ["account"], "author": "Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/account-reconcile", diff --git a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py index adafe6e4..2835a2a8 100644 --- a/account_reconcile_restrict_partner_mismatch/models/account_move_line.py +++ b/account_reconcile_restrict_partner_mismatch/models/account_move_line.py @@ -9,9 +9,9 @@ from odoo.tools import config class AccountMoveLine(models.Model): _inherit = "account.move.line" - def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False): + def reconcile(self): if config["test_enable"] and not self.env.context.get("test_partner_mismatch"): - return super().reconcile(writeoff_acc_id, writeoff_journal_id) + return super().reconcile() # to be consistent with parent method if not self: @@ -27,4 +27,4 @@ class AccountMoveLine(models.Model): " lines for receivable and payable accounts!" ) ) - return super().reconcile(writeoff_acc_id, writeoff_journal_id) + return super().reconcile() diff --git a/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst b/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst index 0b6bee44..85d7402d 100644 --- a/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst +++ b/account_reconcile_restrict_partner_mismatch/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * `Tecnativa `_: - * Ernesto Tejeda +* `Trobz `_: + * Nguyen Ho diff --git a/account_reconcile_restrict_partner_mismatch/readme/CREDITS.rst b/account_reconcile_restrict_partner_mismatch/readme/CREDITS.rst new file mode 100644 index 00000000..f37ebe75 --- /dev/null +++ b/account_reconcile_restrict_partner_mismatch/readme/CREDITS.rst @@ -0,0 +1 @@ +The migration of this module from 13.0 to 14.0 was financially supported by Camptocamp diff --git a/account_reconcile_restrict_partner_mismatch/static/description/index.html b/account_reconcile_restrict_partner_mismatch/static/description/index.html index 3ddd6fd3..c01c3ccf 100644 --- a/account_reconcile_restrict_partner_mismatch/static/description/index.html +++ b/account_reconcile_restrict_partner_mismatch/static/description/index.html @@ -3,7 +3,7 @@ - + Reconcile restrict partner mismatch