diff --git a/contract_price_revision/__manifest__.py b/contract_price_revision/__manifest__.py
index 8d5ae4bfa..749502109 100644
--- a/contract_price_revision/__manifest__.py
+++ b/contract_price_revision/__manifest__.py
@@ -5,13 +5,13 @@
{
"name": "Contract Price Revision",
"summary": "Easy revision of contract prices",
- "version": "12.0.1.0.1",
+ "version": "13.0.1.0.0",
"category": "Contract",
- "author": "Tecnativa, " "Odoo Community Association (OCA)",
+ "author": "ACSONE SA/NV, 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",],
+ "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
deleted file mode 100644
index 8eb746bfc..000000000
--- a/contract_price_revision/migrations/12.0.1.0.0/pre-migration.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2020 Tecnativa - Carlos Dauden
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-import logging
-
-from openupgradelib import openupgrade
-
-_logger = logging.getLogger(__name__)
-
-
-@openupgrade.migrate()
-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"):
- return
-
- _logger.info("previous_revision_id to predecessor_contract_line_id")
- openupgrade.logged_query(
- env.cr,
- """
- UPDATE contract_line
- SET predecessor_contract_line_id=previous_revision_id
- WHERE previous_revision_id IS NOT NULL AND (
- predecessor_contract_line_id IS NULL OR predecessor_contract_line_id=0)
- """,
- )
diff --git a/contract_price_revision/tests/test_contract_price_revision.py b/contract_price_revision/tests/test_contract_price_revision.py
index 5f7d2aa11..875d12c8a 100644
--- a/contract_price_revision/tests/test_contract_price_revision.py
+++ b/contract_price_revision/tests/test_contract_price_revision.py
@@ -1,5 +1,6 @@
# Copyright 2019 Tecnativa - Vicent Cubells
# Copyright 2019 Tecnativa - Carlos Dauden
+# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo.addons.contract.tests.test_contract import TestContractBase
@@ -7,8 +8,10 @@ from odoo.addons.contract.tests.test_contract import TestContractBase
class TestContractPriceRevision(TestContractBase):
def execute_wizard(self):
+ # TODO: Limitation here, start date should be on the
+ # beginning of next period (should not have a gap)
wizard = self.env["contract.price.revision.wizard"].create(
- {"date_start": "2018-02-15", "variation_percent": 100.0,}
+ {"date_start": "2018-02-01", "variation_percent": 100.0}
)
wizard.with_context({"active_ids": [self.contract.id]}).action_apply()
@@ -27,7 +30,7 @@ class TestContractPriceRevision(TestContractBase):
self.acct_line.copy({"automatic_price": True})
self.execute_wizard()
invoice = self.contract.recurring_create_invoice()
- invoices = self.env["account.invoice"].search(
+ invoices = self.env["account.move"].search(
[
(
"invoice_line_ids.contract_line_id",
diff --git a/contract_price_revision/wizards/contract_price_revision.py b/contract_price_revision/wizards/contract_price_revision.py
index b5de000c8..7fdfb0f4c 100644
--- a/contract_price_revision/wizards/contract_price_revision.py
+++ b/contract_price_revision/wizards/contract_price_revision.py
@@ -1,5 +1,6 @@
# Copyright 2019 Tecnativa - Vicent Cubells
# Copyright 2019 Tecnativa - Carlos Dauden
+# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from dateutil.relativedelta import relativedelta
@@ -21,29 +22,28 @@ class ContractPriceRevisionWizard(models.TransientModel):
digits=dp.get_precision("Product Price"), required=True, string="Variation %",
)
+ def _get_new_line_value(self, line):
+ self.ensure_one()
+ return {
+ "date_start": self.date_start,
+ "last_date_invoiced": False,
+ "date_end": self.date_end,
+ "predecessor_contract_line_id": line.id,
+ "price_unit": line.price_unit * (1.0 + self.variation_percent / 100.0),
+ }
+
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)
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]
- 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,}
- )
+ line.update({"date_end": self.date_start - relativedelta(days=1)})
+ # As copy or copy_data are trigerring constraints, don't use them
+ new_line = line.new(line._cache)
+ new_line.update(self._get_new_line_value(line))
+ new_line._onchange_date_start()
+ new_line = ContractLine.create(new_line._convert_to_write(new_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"
)
diff --git a/contract_price_revision/wizards/contract_price_revision_views.xml b/contract_price_revision/wizards/contract_price_revision_views.xml
index bedbc50e3..1867911f2 100644
--- a/contract_price_revision/wizards/contract_price_revision_views.xml
+++ b/contract_price_revision/wizards/contract_price_revision_views.xml
@@ -31,14 +31,12 @@
-
+
+ Create revision of contract lines
+ ir.actions.act_window
+ contract.price.revision.wizard
+ form
+ new
+
+