From 7fbaf6549027ea873ac3ce457800def95da781e5 Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Thu, 4 Oct 2018 17:21:28 +0200 Subject: [PATCH] Update manifest and split readme Fix breaking typo on model name for reconciliation method Add unittest Add myself to contributors --- .../__manifest__.py | 7 +- .../models/advanced_reconciliation.py | 2 +- .../models/mass_reconcile.py | 3 +- .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + .../tests/__init__.py | 0 .../test_account_reconcile_transaction_ref.py | 117 ++++++++++++++++++ 7 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 account_mass_reconcile_transaction_ref/readme/CONTRIBUTORS.rst create mode 100644 account_mass_reconcile_transaction_ref/readme/DESCRIPTION.rst create mode 100644 account_mass_reconcile_transaction_ref/tests/__init__.py create mode 100644 account_mass_reconcile_transaction_ref/tests/test_account_reconcile_transaction_ref.py diff --git a/account_mass_reconcile_transaction_ref/__manifest__.py b/account_mass_reconcile_transaction_ref/__manifest__.py index 1215a709..e9edc5df 100644 --- a/account_mass_reconcile_transaction_ref/__manifest__.py +++ b/account_mass_reconcile_transaction_ref/__manifest__.py @@ -3,10 +3,10 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) { 'name': 'Mass Reconcile Transaction Ref', - 'version': '10.0.1.0.0', + 'version': '10.0.1.1.0', 'author': "Camptocamp,Odoo Community Association (OCA)", 'category': 'Finance', - 'website': 'http://www.camptocamp.com', + 'website': 'https://github.com/OCA/account-reconcile', 'license': 'AGPL-3', 'depends': [ 'account_mass_reconcile', @@ -15,9 +15,6 @@ 'data': [ 'views/mass_reconcile_view.xml' ], - 'demo': [], - 'test': [], 'auto_install': False, 'installable': True, - 'images': [] } diff --git a/account_mass_reconcile_transaction_ref/models/advanced_reconciliation.py b/account_mass_reconcile_transaction_ref/models/advanced_reconciliation.py index 5e9cdcfd..37f91e55 100644 --- a/account_mass_reconcile_transaction_ref/models/advanced_reconciliation.py +++ b/account_mass_reconcile_transaction_ref/models/advanced_reconciliation.py @@ -32,7 +32,7 @@ class MassReconcileAdvancedTransactionRef(models.TransientModel): class MassReconcileAdvancedTransactionRefVsRef(models.TransientModel): - _name = 'mass.reconcile.advanced.transaction.ref.vs.ref' + _name = 'mass.reconcile.advanced.trans_ref_vs_ref' _inherit = 'mass.reconcile.advanced' @api.multi diff --git a/account_mass_reconcile_transaction_ref/models/mass_reconcile.py b/account_mass_reconcile_transaction_ref/models/mass_reconcile.py index 8d155d9f..f00cf3d3 100644 --- a/account_mass_reconcile_transaction_ref/models/mass_reconcile.py +++ b/account_mass_reconcile_transaction_ref/models/mass_reconcile.py @@ -10,8 +10,7 @@ class AccountMassReconcileMethod(models.Model): @api.model def _get_all_rec_method(self): - _super = super(AccountMassReconcileMethod, self) - methods = _super._get_all_rec_method() + methods = super(AccountMassReconcileMethod, self)._get_all_rec_method() methods += [ ('mass.reconcile.advanced.transaction_ref', 'Advanced. Partner and Transaction Ref.'), diff --git a/account_mass_reconcile_transaction_ref/readme/CONTRIBUTORS.rst b/account_mass_reconcile_transaction_ref/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..08238cfe --- /dev/null +++ b/account_mass_reconcile_transaction_ref/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Romain Deheele +* Matthieu Dietrich +* Akim Juillerat diff --git a/account_mass_reconcile_transaction_ref/readme/DESCRIPTION.rst b/account_mass_reconcile_transaction_ref/readme/DESCRIPTION.rst new file mode 100644 index 00000000..150d1cea --- /dev/null +++ b/account_mass_reconcile_transaction_ref/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of account_mass_reconcile +to use the 'transaction_ref' field defined in base_transaction_id. \ No newline at end of file diff --git a/account_mass_reconcile_transaction_ref/tests/__init__.py b/account_mass_reconcile_transaction_ref/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/account_mass_reconcile_transaction_ref/tests/test_account_reconcile_transaction_ref.py b/account_mass_reconcile_transaction_ref/tests/test_account_reconcile_transaction_ref.py new file mode 100644 index 00000000..580b8020 --- /dev/null +++ b/account_mass_reconcile_transaction_ref/tests/test_account_reconcile_transaction_ref.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import SavepointCase + + +class TestAccountReconcileTransactionRef(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestAccountReconcileTransactionRef, cls).setUpClass() + + cls.partner = cls.env.ref('base.res_partner_18') + cls.account_receivable = cls.env['account.account'].search([ + ('user_type_id', '=', + cls.env.ref('account.data_account_type_receivable').id) + ], limit=1) + account_revenue = cls.env['account.account'].search([ + ('user_type_id', '=', + cls.env.ref('account.data_account_type_revenue').id) + ], limit=1) + sales_journal = cls.env['account.journal'].search([ + ('type', '=', 'sale')], limit=1) + # Create invoice + cls.cust_invoice = cls.env['account.invoice'].create({ + 'partner_id': cls.partner.id, + 'type': 'out_invoice', + 'account_id': cls.account_receivable.id, + 'journal_id': sales_journal.id, + 'invoice_line_ids': [(0, 0, { + 'name': '[CONS_DEL01] Server', + 'product_id': cls.env.ref('product.consu_delivery_01').id, + 'account_id': account_revenue.id, + 'price_unit': 1000.0, + 'quantity': 1.0, + })], + 'transaction_id': 'test_transaction_id', + }) + cls.cust_invoice.action_invoice_open() + + def test_mass_reconcile_transaction_ref_vs_ref(self): + self.assertEqual(self.cust_invoice.state, 'open') + self.assertEqual(self.cust_invoice.transaction_id, + 'test_transaction_id') + bank_journal = self.env['account.journal'].search([ + ('type', '=', 'sale')], limit=1) + + # Create payment + payment = self.env['account.payment'].create({ + 'payment_type': 'inbound', + 'partner_type': 'customer', + 'partner_id': self.partner.id, + 'journal_id': bank_journal.id, + 'amount': 1000.0, + 'communication': 'test_transaction_id', + 'payment_method_id': self.env['account.payment.method'].search([ + ('name', '=', 'Manual')], limit=1).id, + }) + self.assertEqual(payment.state, 'draft') + payment.post() + self.assertEqual(payment.state, 'posted') + + reconcile = self.env['account.mass.reconcile'].create({ + 'name': 'Test reconcile transaction id', + 'account': self.account_receivable.id, + 'reconcile_method': [(0, 0, { + 'name': 'mass.reconcile.advanced.trans_ref_vs_ref', + 'date_base_on': 'newest', + })] + }) + count = reconcile.unreconciled_count + reconcile.run_reconcile() + self.assertEqual(self.cust_invoice.state, 'paid') + self.assertEqual(reconcile.unreconciled_count, count - 2) + + def test_mass_reconcile_transaction_ref(self): + self.assertEqual(self.cust_invoice.state, 'open') + self.assertEqual(self.cust_invoice.transaction_id, + 'test_transaction_id') + bank_journal = self.env['account.journal'].search([ + ('type', '=', 'sale')], limit=1) + + # Create payment + payment = self.env['account.payment'].create({ + 'payment_type': 'inbound', + 'partner_type': 'customer', + 'partner_id': self.partner.id, + 'journal_id': bank_journal.id, + 'amount': 1000.0, + 'communication': 'test_transaction_id', + 'payment_method_id': self.env['account.payment.method'].search([ + ('name', '=', 'Manual')], limit=1).id, + }) + self.assertEqual(payment.state, 'draft') + payment.post() + self.assertEqual(payment.state, 'posted') + receivable_payment_move_line = self.env['account.move.line'].search([ + ('payment_id', '=', payment.id), + ('account_id', '=', self.account_receivable.id) + ]) + receivable_payment_move_line.write({ + 'transaction_ref': 'test_transaction_id' + }) + + reconcile = self.env['account.mass.reconcile'].create({ + 'name': 'Test reconcile transaction id', + 'account': self.account_receivable.id, + 'reconcile_method': [(0, 0, { + 'name': 'mass.reconcile.advanced.transaction_ref', + 'date_base_on': 'newest', + })] + }) + count = reconcile.unreconciled_count + reconcile.run_reconcile() + self.assertEqual(self.cust_invoice.state, 'paid') + self.assertEqual(reconcile.unreconciled_count, count - 2)