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,
+)