From 7de87354f07ef1bde1e9c1d0ed9aa4fd6524d86e Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Wed, 27 Jan 2016 13:54:21 +0100 Subject: [PATCH 1/2] [IMP] Copy partner payment mode to contracts when installing --- contract_payment_mode/README.rst | 1 + contract_payment_mode/__init__.py | 4 ++++ contract_payment_mode/__openerp__.py | 1 + contract_payment_mode/hooks.py | 24 ++++++++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 contract_payment_mode/hooks.py diff --git a/contract_payment_mode/README.rst b/contract_payment_mode/README.rst index 5d4ee46c..09e27ba1 100644 --- a/contract_payment_mode/README.rst +++ b/contract_payment_mode/README.rst @@ -34,6 +34,7 @@ Contributors ------------ * Ángel Moya +* Antonio Espinosa Maintainer diff --git a/contract_payment_mode/__init__.py b/contract_payment_mode/__init__.py index a0fdc10f..753e6cee 100644 --- a/contract_payment_mode/__init__.py +++ b/contract_payment_mode/__init__.py @@ -1,2 +1,6 @@ # -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import models +from .hooks import post_init_hook diff --git a/contract_payment_mode/__openerp__.py b/contract_payment_mode/__openerp__.py index 1eee7c8b..f9c12929 100644 --- a/contract_payment_mode/__openerp__.py +++ b/contract_payment_mode/__openerp__.py @@ -35,6 +35,7 @@ 'views/contract_view.xml', ], 'test': ['test/contract_payment_mode.yml'], + 'post_init_hook': 'post_init_hook', 'installable': True, 'auto_install': True, } diff --git a/contract_payment_mode/hooks.py b/contract_payment_mode/hooks.py new file mode 100644 index 00000000..01ee2da2 --- /dev/null +++ b/contract_payment_mode/hooks.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import api, SUPERUSER_ID +import logging + +_logger = logging.getLogger(__name__) + + +def post_init_hook(cr, registry): + """Copy payment mode from partner to the new field at contract.""" + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + m_contract = env['account.analytic.account'] + contracts = m_contract.search([('type', '=', 'contract')]) + if contracts: + _logger.info('Setting payment mode: %d contracts' % + len(contracts)) + for contract in contracts: + payment_mode = contract.partner_id.customer_payment_mode + if payment_mode: + contract.payment_mode_id = payment_mode.id + _logger.info('Setting payment mode: Done') From c73cb116140aba96846e357c2a1d128e41eff379 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Fri, 4 Mar 2016 16:33:41 +0100 Subject: [PATCH 2/2] Adding test --- contract_payment_mode/hooks.py | 5 ++- contract_payment_mode/tests/__init__.py | 5 +++ .../tests/test_contract_payment_init.py | 40 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 contract_payment_mode/tests/__init__.py create mode 100644 contract_payment_mode/tests/test_contract_payment_init.py diff --git a/contract_payment_mode/hooks.py b/contract_payment_mode/hooks.py index 01ee2da2..5e68b6c3 100644 --- a/contract_payment_mode/hooks.py +++ b/contract_payment_mode/hooks.py @@ -13,7 +13,10 @@ def post_init_hook(cr, registry): with api.Environment.manage(): env = api.Environment(cr, SUPERUSER_ID, {}) m_contract = env['account.analytic.account'] - contracts = m_contract.search([('type', '=', 'contract')]) + contracts = m_contract.search([ + ('type', '=', 'contract'), + ('payment_mode_id', '=', False), + ]) if contracts: _logger.info('Setting payment mode: %d contracts' % len(contracts)) diff --git a/contract_payment_mode/tests/__init__.py b/contract_payment_mode/tests/__init__.py new file mode 100644 index 00000000..be86a7bf --- /dev/null +++ b/contract_payment_mode/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_contract_payment_init diff --git a/contract_payment_mode/tests/test_contract_payment_init.py b/contract_payment_mode/tests/test_contract_payment_init.py new file mode 100644 index 00000000..2056a162 --- /dev/null +++ b/contract_payment_mode/tests/test_contract_payment_init.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests.common import TransactionCase +from ..hooks import post_init_hook + + +class TestContractPaymentInit(TransactionCase): + # Use case : Prepare some data for current test case + def setUp(self): + super(TestContractPaymentInit, self).setUp() + self.payment_mode = self.env.ref('account_payment.payment_mode_1') + self.partner = self.env['res.partner'].create({ + 'name': 'Test contract partner', + 'customer_payment_mode': self.payment_mode.id, + }) + + def _contract_payment_mode_id(self, contract_id): + contract = self.env['account.analytic.account'].search([ + ('id', '=', contract_id), + ]) + return contract.payment_mode_id.id + + def test_post_init_hook(self): + contract = self.env['account.analytic.account'].create({ + 'name': 'Test contract', + 'type': 'contract', + 'partner_id': self.partner.id, + 'payment_mode_id': self.payment_mode.id, + }) + self.assertEqual(self._contract_payment_mode_id(contract.id), + self.payment_mode.id) + + contract.payment_mode_id = False + self.assertEqual(self._contract_payment_mode_id(contract.id), False) + + post_init_hook(self.cr, self.env) + self.assertEqual(self._contract_payment_mode_id(contract.id), + self.payment_mode.id)