From 4569dcf841e09f7e3c57384d7a0ae878c26d06fe Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Sun, 14 Feb 2021 19:11:42 +0100 Subject: [PATCH] [IMP] contract_price_revision: black, isort, prettier --- contract_price_revision/__manifest__.py | 30 ++++---- .../migrations/12.0.1.0.0/pre-migration.py | 3 +- .../models/contract_line.py | 18 ++--- .../tests/test_contract_price_revision.py | 30 ++++---- .../views/contract_line.xml | 19 +++-- .../wizards/contract_price_revision.py | 69 +++++++++---------- .../wizards/contract_price_revision_views.xml | 34 +++++---- .../odoo/addons/contract_price_revision | 1 + setup/contract_price_revision/setup.py | 6 ++ 9 files changed, 108 insertions(+), 102 deletions(-) create mode 120000 setup/contract_price_revision/odoo/addons/contract_price_revision create mode 100644 setup/contract_price_revision/setup.py diff --git a/contract_price_revision/__manifest__.py b/contract_price_revision/__manifest__.py index 68e3cd870..8d5ae4bfa 100644 --- a/contract_price_revision/__manifest__.py +++ b/contract_price_revision/__manifest__.py @@ -3,22 +3,16 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': 'Contract Price Revision', - 'summary': 'Easy revision of contract prices', - 'version': '12.0.1.0.1', - 'category': 'Contract', - 'author': 'Tecnativa, ' - 'Odoo Community Association (OCA)', - 'license': 'AGPL-3', - 'website': 'https://github.com/OCA/contract', - 'depends': [ - 'contract', - ], - 'data': [ - 'views/contract_line.xml', - 'wizards/contract_price_revision_views.xml', - ], - 'installable': True, - 'development_status': 'Production/Stable', - 'maintainers': ['carlosdauden'], + "name": "Contract Price Revision", + "summary": "Easy revision of contract prices", + "version": "12.0.1.0.1", + "category": "Contract", + "author": "Tecnativa, " "Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "https://github.com/OCA/contract", + "depends": ["contract",], + "data": ["views/contract_line.xml", "wizards/contract_price_revision_views.xml",], + "installable": True, + "development_status": "Production/Stable", + "maintainers": ["carlosdauden"], } diff --git a/contract_price_revision/migrations/12.0.1.0.0/pre-migration.py b/contract_price_revision/migrations/12.0.1.0.0/pre-migration.py index bea5b2a83..8eb746bfc 100644 --- a/contract_price_revision/migrations/12.0.1.0.0/pre-migration.py +++ b/contract_price_revision/migrations/12.0.1.0.0/pre-migration.py @@ -13,8 +13,7 @@ def migrate(env, version): """ Update values from old previous_revision_id to predecessor_contract_line_id """ - if not openupgrade.column_exists( - env.cr, 'contract_line', 'previous_revision_id'): + if not openupgrade.column_exists(env.cr, "contract_line", "previous_revision_id"): return _logger.info("previous_revision_id to predecessor_contract_line_id") diff --git a/contract_price_revision/models/contract_line.py b/contract_price_revision/models/contract_line.py index 62c066274..bf24913f4 100644 --- a/contract_price_revision/models/contract_line.py +++ b/contract_price_revision/models/contract_line.py @@ -3,29 +3,31 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models + import odoo.addons.decimal_precision as dp class ContractLine(models.Model): - _inherit = 'contract.line' + _inherit = "contract.line" previous_price = fields.Float( - string='Previous price', - related='predecessor_contract_line_id.price_unit', + string="Previous price", + related="predecessor_contract_line_id.price_unit", readonly=True, ) variation_percent = fields.Float( - compute='_compute_variation_percent', + compute="_compute_variation_percent", store=True, - digits=dp.get_precision('Product Price'), - string='Variation %', + digits=dp.get_precision("Product Price"), + string="Variation %", ) - @api.depends('price_unit', 'predecessor_contract_line_id.price_unit') + @api.depends("price_unit", "predecessor_contract_line_id.price_unit") def _compute_variation_percent(self): for line in self: if line.price_unit and line.previous_price: line.variation_percent = ( - (line.price_unit / line.previous_price - 1) * 100) + line.price_unit / line.previous_price - 1 + ) * 100 else: line.variation_percent = 0.0 diff --git a/contract_price_revision/tests/test_contract_price_revision.py b/contract_price_revision/tests/test_contract_price_revision.py index 16bf2529e..5f7d2aa11 100644 --- a/contract_price_revision/tests/test_contract_price_revision.py +++ b/contract_price_revision/tests/test_contract_price_revision.py @@ -6,32 +6,36 @@ from odoo.addons.contract.tests.test_contract import TestContractBase class TestContractPriceRevision(TestContractBase): - def execute_wizard(self): - wizard = self.env['contract.price.revision.wizard'].create({ - 'date_start': '2018-02-15', - 'variation_percent': 100.0, - }) - wizard.with_context( - {'active_ids': [self.contract.id]}).action_apply() + wizard = self.env["contract.price.revision.wizard"].create( + {"date_start": "2018-02-15", "variation_percent": 100.0,} + ) + wizard.with_context({"active_ids": [self.contract.id]}).action_apply() def test_contract_price_revision_wizard(self): # This is for checking if this line is not versioned - self.acct_line.copy({'automatic_price': True}) + self.acct_line.copy({"automatic_price": True}) self.assertEqual(len(self.contract.contract_line_ids.ids), 2) self.execute_wizard() self.assertEqual(len(self.contract.contract_line_ids.ids), 3) lines = self.contract.contract_line_ids.filtered( - lambda x: x.price_unit == 200.0) + lambda x: x.price_unit == 200.0 + ) self.assertEqual(len(lines), 1) def test_contract_price_revision_invoicing(self): - self.acct_line.copy({'automatic_price': True}) + self.acct_line.copy({"automatic_price": True}) self.execute_wizard() invoice = self.contract.recurring_create_invoice() - invoices = self.env['account.invoice'].search([ - ('invoice_line_ids.contract_line_id', 'in', - self.contract.contract_line_ids.ids)]) + invoices = self.env["account.invoice"].search( + [ + ( + "invoice_line_ids.contract_line_id", + "in", + self.contract.contract_line_ids.ids, + ) + ] + ) self.assertEqual(len(invoices), 1) lines = invoice.invoice_line_ids self.assertEqual(len(lines), 2) diff --git a/contract_price_revision/views/contract_line.xml b/contract_price_revision/views/contract_line.xml index af6bd2f07..97fa65ea4 100644 --- a/contract_price_revision/views/contract_line.xml +++ b/contract_price_revision/views/contract_line.xml @@ -1,26 +1,25 @@ - + - contract.line - + - + - contract.line - + - + - diff --git a/contract_price_revision/wizards/contract_price_revision.py b/contract_price_revision/wizards/contract_price_revision.py index 8ab883050..b5de000c8 100644 --- a/contract_price_revision/wizards/contract_price_revision.py +++ b/contract_price_revision/wizards/contract_price_revision.py @@ -5,60 +5,57 @@ from dateutil.relativedelta import relativedelta from odoo import fields, models + import odoo.addons.decimal_precision as dp class ContractPriceRevisionWizard(models.TransientModel): """ Update contract price based on percentage variation """ - _name = 'contract.price.revision.wizard' + + _name = "contract.price.revision.wizard" _description = "Wizard to update price based on percentage variation" - date_start = fields.Date( - required=True, - ) + date_start = fields.Date(required=True,) date_end = fields.Date() variation_percent = fields.Float( - digits=dp.get_precision('Product Price'), - required=True, - string='Variation %', + digits=dp.get_precision("Product Price"), required=True, string="Variation %", ) def action_apply(self): - ContractLine = self.env['contract.line'] - active_ids = self.env.context.get('active_ids') - contracts = self.env['contract.contract'].browse(active_ids) + ContractLine = self.env["contract.line"] + active_ids = self.env.context.get("active_ids") + contracts = self.env["contract.contract"].browse(active_ids) for line in self._get_contract_lines_to_revise(contracts): - line.update({ - 'date_end': self.date_start - relativedelta(days=1), - }) - new_vals = line.copy_data({ - 'date_start': self.date_start, - 'date_end': self.date_end, - 'predecessor_contract_line_id': line.id, - 'price_unit': line.price_unit * ( - 1.0 + self.variation_percent / 100.0), - })[0] + line.update( + {"date_end": self.date_start - relativedelta(days=1),} + ) + new_vals = line.copy_data( + { + "date_start": self.date_start, + "date_end": self.date_end, + "predecessor_contract_line_id": line.id, + "price_unit": line.price_unit + * (1.0 + self.variation_percent / 100.0), + } + )[0] tmp_line = ContractLine.new(new_vals) tmp_line._onchange_date_start() - new_line = ContractLine.create( - tmp_line._convert_to_write(tmp_line._cache)) - line.update({ - 'successor_contract_line_id': new_line.id, - }) - action = self.env['ir.actions.act_window'].for_xml_id( - 'contract', 'action_customer_contract') - action['domain'] = [('id', 'in', active_ids)] + new_line = ContractLine.create(tmp_line._convert_to_write(tmp_line._cache)) + line.update( + {"successor_contract_line_id": new_line.id,} + ) + action = self.env["ir.actions.act_window"].for_xml_id( + "contract", "action_customer_contract" + ) + action["domain"] = [("id", "in", active_ids)] return action def _get_contract_lines_to_revise(self, contracts): self.ensure_one() - to_revise = ( - contracts.mapped("contract_line_ids") - .filtered( - lambda x: not x.automatic_price - and not x.successor_contract_line_id - and x.recurring_next_date - and (not x.date_end or x.date_end >= self.date_start) - ) + to_revise = contracts.mapped("contract_line_ids").filtered( + lambda x: not x.automatic_price + and not x.successor_contract_line_id + and x.recurring_next_date + and (not x.date_end or x.date_end >= self.date_start) ) return to_revise diff --git a/contract_price_revision/wizards/contract_price_revision_views.xml b/contract_price_revision/wizards/contract_price_revision_views.xml index a50af38c9..bedbc50e3 100644 --- a/contract_price_revision/wizards/contract_price_revision_views.xml +++ b/contract_price_revision/wizards/contract_price_revision_views.xml @@ -1,6 +1,5 @@ - + - Create Revision Line contract.price.revision.wizard @@ -10,31 +9,36 @@ Set new start date and variation percent to duplicate. This process set start date previous day as end date of origin record. -
-
+
+
- - - + + +
-
- - -
diff --git a/setup/contract_price_revision/odoo/addons/contract_price_revision b/setup/contract_price_revision/odoo/addons/contract_price_revision new file mode 120000 index 000000000..a8fc75502 --- /dev/null +++ b/setup/contract_price_revision/odoo/addons/contract_price_revision @@ -0,0 +1 @@ +../../../../contract_price_revision \ No newline at end of file diff --git a/setup/contract_price_revision/setup.py b/setup/contract_price_revision/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/contract_price_revision/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)