From 1adb69fce31a8e43f05908a73fce7d211dd484db Mon Sep 17 00:00:00 2001 From: cubells Date: Fri, 1 Mar 2019 09:23:23 +0100 Subject: [PATCH 01/20] [ADD] contract_price_revision: new module to update contract prices easily --- contract_price_revision/README.rst | 93 ++++ contract_price_revision/__init__.py | 2 + contract_price_revision/__manifest__.py | 21 + .../i18n/contract_price_revision.pot | 152 ++++++ contract_price_revision/i18n/es.po | 157 +++++++ contract_price_revision/models/__init__.py | 2 + .../models/account_analytic_account.py | 17 + .../models/account_analytic_invoice_line.py | 39 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + contract_price_revision/readme/USAGE.rst | 14 + .../static/description/index.html | 441 ++++++++++++++++++ contract_price_revision/tests/__init__.py | 1 + .../tests/test_contract_price_revision.py | 71 +++ .../views/account_analytic_account_views.xml | 43 ++ contract_price_revision/wizards/__init__.py | 1 + .../wizards/create_revision_line.py | 50 ++ .../wizards/create_revision_line_views.xml | 41 ++ 18 files changed, 1149 insertions(+) create mode 100644 contract_price_revision/README.rst create mode 100644 contract_price_revision/__init__.py create mode 100644 contract_price_revision/__manifest__.py create mode 100644 contract_price_revision/i18n/contract_price_revision.pot create mode 100644 contract_price_revision/i18n/es.po create mode 100644 contract_price_revision/models/__init__.py create mode 100644 contract_price_revision/models/account_analytic_account.py create mode 100644 contract_price_revision/models/account_analytic_invoice_line.py create mode 100644 contract_price_revision/readme/CONTRIBUTORS.rst create mode 100644 contract_price_revision/readme/DESCRIPTION.rst create mode 100644 contract_price_revision/readme/USAGE.rst create mode 100644 contract_price_revision/static/description/index.html create mode 100644 contract_price_revision/tests/__init__.py create mode 100644 contract_price_revision/tests/test_contract_price_revision.py create mode 100644 contract_price_revision/views/account_analytic_account_views.xml create mode 100644 contract_price_revision/wizards/__init__.py create mode 100644 contract_price_revision/wizards/create_revision_line.py create mode 100644 contract_price_revision/wizards/create_revision_line_views.xml diff --git a/contract_price_revision/README.rst b/contract_price_revision/README.rst new file mode 100644 index 0000000000..8398a98d6c --- /dev/null +++ b/contract_price_revision/README.rst @@ -0,0 +1,93 @@ +======================= +Contract Price Revision +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github + :target: https://github.com/OCA/contract/tree/11.0/contract_price_revision + :alt: OCA/contract +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/contract-11-0/contract-11-0-contract_price_revision + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/110/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to create revisions of contract line prices. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module: + +#. Go to **Invoicing > Documents > Customer Contracts** if you are a billing + user. +#. Select as many contracts as you want to update line prices. +#. Click on Action button and execute the wizard **Create revision of contract + lines**. +#. Enter date start from which the new price will be valid and enter date + end and percentage to increase old contract lines. +#. By clicking on Apply button, a new contract line will be created with + a price increased accordingly to the percent entered. Old contract lines + will have as ending date the day before the entered date. +#. When create invoices related to contracts selected, prices will be update + with the prices that are not out of date. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Vicent Cubells + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/contract `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/contract_price_revision/__init__.py b/contract_price_revision/__init__.py new file mode 100644 index 0000000000..aee8895e7a --- /dev/null +++ b/contract_price_revision/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/contract_price_revision/__manifest__.py b/contract_price_revision/__manifest__.py new file mode 100644 index 0000000000..561c09bd1e --- /dev/null +++ b/contract_price_revision/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2019 Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Contract Price Revision', + 'summary': 'Easy revision of contract prices', + 'version': '11.0.1.0.0', + 'category': 'Contract', + 'author': 'Tecnativa, ' + 'Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'website': 'https://github.com/OCA/contract', + 'depends': [ + 'contract', + ], + 'data': [ + 'wizards/create_revision_line_views.xml', + 'views/account_analytic_account_views.xml', + ], + 'installable': True, +} diff --git a/contract_price_revision/i18n/contract_price_revision.pot b/contract_price_revision/i18n/contract_price_revision.pot new file mode 100644 index 0000000000..cbca8b4df5 --- /dev/null +++ b/contract_price_revision/i18n/contract_price_revision.pot @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * contract_price_revision +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-01 07:58+0000\n" +"PO-Revision-Date: 2019-03-01 07:58+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_account_analytic_account +msgid "Analytic Account" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Apply" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Cancel" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_uid +msgid "Created by" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_date +msgid "Created on" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_date_end +msgid "Date End" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_display_name +msgid "Display Name" +msgstr "" + +#. module: contract_price_revision +#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action +msgid "Create revision of contract lines" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_end +msgid "End Date" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_id +msgid "ID" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard___last_update +msgid "Last Modified on" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "Line Information" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id +msgid "Previous revision" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,help:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id +msgid "Relation with previous info" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Set new start date and variation percent to duplicate.\n" +" This process set start date previous day as end date of\n" +" origin record.\n" +"
\n" +"
" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_start +msgid "Start Date" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_previous_price +msgid "Unit Price" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "Validity" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_variation_percent +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_variation_percent +msgid "Variation %" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_account_analytic_invoice_line +msgid "account.analytic.invoice.line" +msgstr "" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_create_revision_line_wizard +msgid "create.revision.line.wizard" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "or" +msgstr "" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "to" +msgstr "" + diff --git a/contract_price_revision/i18n/es.po b/contract_price_revision/i18n/es.po new file mode 100644 index 0000000000..3339fea593 --- /dev/null +++ b/contract_price_revision/i18n/es.po @@ -0,0 +1,157 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * contract_price_revision +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-01 07:58+0000\n" +"PO-Revision-Date: 2019-03-01 07:58+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_account_analytic_account +msgid "Analytic Account" +msgstr "Cuenta analítica" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Apply" +msgstr "Aplicar" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_date +msgid "Created on" +msgstr "Creado el" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_date_end +msgid "Date End" +msgstr "Fecha fin" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_date_start +msgid "Date Start" +msgstr "Fecha inicio" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: contract_price_revision +#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action +msgid "Create revision of contract lines" +msgstr "Crear revisión de las líneas de contrato" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_end +msgid "End Date" +msgstr "Fecha fin" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_id +msgid "ID" +msgstr "Id" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_write_uid +msgid "Last Updated by" +msgstr "Última modificación de" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "Line Information" +msgstr "Información de la línea" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id +msgid "Previous revision" +msgstr "Revisión previa" + +#. module: contract_price_revision +#: model:ir.model.fields,help:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id +msgid "Relation with previous info" +msgstr "Relación con la información previa" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "Set new start date and variation percent to duplicate.\n" +" This process set start date previous day as end date of\n" +" origin record.\n" +"
\n" +"
" +msgstr "" +"Establezca nueva fecha y porcentaje de variación para duplicar.\n" +" Este proceso establece la fecha de inicio anterior " +"como fecha de finalización de registro de origen.\n" +"
\n" +"
" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_start +msgid "Start Date" +msgstr "Fecha de inicio" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_previous_price +msgid "Unit Price" +msgstr "Precio unidad" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "Validity" +msgstr "Validez" + +#. module: contract_price_revision +#: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_variation_percent +#: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_variation_percent +msgid "Variation %" +msgstr "Varicación %" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_account_analytic_invoice_line +msgid "account.analytic.invoice.line" +msgstr "account.analytic.invoice.line" + +#. module: contract_price_revision +#: model:ir.model,name:contract_price_revision.model_create_revision_line_wizard +msgid "create.revision.line.wizard" +msgstr "create.revision.line.wizard" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view +msgid "or" +msgstr "o" + +#. module: contract_price_revision +#: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view +msgid "to" +msgstr "hasta" + diff --git a/contract_price_revision/models/__init__.py b/contract_price_revision/models/__init__.py new file mode 100644 index 0000000000..6542a7bc28 --- /dev/null +++ b/contract_price_revision/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_analytic_account +from . import account_analytic_invoice_line diff --git a/contract_price_revision/models/account_analytic_account.py b/contract_price_revision/models/account_analytic_account.py new file mode 100644 index 0000000000..515d80f855 --- /dev/null +++ b/contract_price_revision/models/account_analytic_account.py @@ -0,0 +1,17 @@ +# Copyright 2019 Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, models + + +class AccountAnalyticAccount(models.Model): + _inherit = "account.analytic.account" + + @api.model + def _prepare_invoice_line(self, line, invoice_id): + line_obj = self.env['account.invoice.line'] + invoice = self.env['account.invoice'].browse(invoice_id) + # Line with automatic price are not taken into account + if (line.date_start and invoice.date_invoice < line.date_start) or \ + (line.date_end and invoice.date_invoice > line.date_end): + return line_obj + return super()._prepare_invoice_line(line, invoice_id) diff --git a/contract_price_revision/models/account_analytic_invoice_line.py b/contract_price_revision/models/account_analytic_invoice_line.py new file mode 100644 index 0000000000..73ba2548b2 --- /dev/null +++ b/contract_price_revision/models/account_analytic_invoice_line.py @@ -0,0 +1,39 @@ +# Copyright 2019 Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models +import odoo.addons.decimal_precision as dp + + +class AccountAnalyticINvoiceLine(models.Model): + _inherit = "account.analytic.invoice.line" + + date_start = fields.Date( + string='Start Date', + ) + date_end = fields.Date( + string='End Date', + ) + previous_revision_id = fields.Many2one( + comodel_name='account.analytic.invoice.line', + string='Previous revision', + help='Relation with previous revision', + ) + previous_price = fields.Float( + related='previous_revision_id.price_unit', + readonly=True, + ) + variation_percent = fields.Float( + compute='_compute_variation_percent', + store=True, + digits=dp.get_precision('Product Price'), + string='Variation %', + ) + + @api.multi + @api.depends('price_unit', 'previous_revision_id.price_unit') + def _compute_variation_percent(self): + for line in self: + if not (line.price_unit and line.previous_price): + continue + line.variation_percent = ( + (line.price_unit / line.previous_price - 1) * 100) diff --git a/contract_price_revision/readme/CONTRIBUTORS.rst b/contract_price_revision/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..8cd500d67b --- /dev/null +++ b/contract_price_revision/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_: + + * Vicent Cubells diff --git a/contract_price_revision/readme/DESCRIPTION.rst b/contract_price_revision/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..812aadabdd --- /dev/null +++ b/contract_price_revision/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to create revisions of contract line prices. diff --git a/contract_price_revision/readme/USAGE.rst b/contract_price_revision/readme/USAGE.rst new file mode 100644 index 0000000000..c0232d243f --- /dev/null +++ b/contract_price_revision/readme/USAGE.rst @@ -0,0 +1,14 @@ +To use this module: + +#. Go to **Invoicing > Documents > Customer Contracts** if you are a billing + user. +#. Select as many contracts as you want to update line prices. +#. Click on Action button and execute the wizard **Create revision of contract + lines**. +#. Enter date start from which the new price will be valid and enter date + end and percentage to increase old contract lines. +#. By clicking on Apply button, a new contract line will be created with + a price increased accordingly to the percent entered. Old contract lines + will have as ending date the day before the entered date. +#. When create invoices related to contracts selected, prices will be update + with the prices that are not out of date. diff --git a/contract_price_revision/static/description/index.html b/contract_price_revision/static/description/index.html new file mode 100644 index 0000000000..191f393b71 --- /dev/null +++ b/contract_price_revision/static/description/index.html @@ -0,0 +1,441 @@ + + + + + + +Contract Price Revision + + + +
+

Contract Price Revision

+ + +

Beta License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runbot

+

This module allows to create revisions of contract line prices.

+

Table of contents

+ +
+

Usage

+

To use this module:

+
    +
  1. Go to Invoicing > Documents > Customer Contracts if you are a billing +user.
  2. +
  3. Select as many contracts as you want to update line prices.
  4. +
  5. Click on Action button and execute the wizard Create revision of contract +lines.
  6. +
  7. Enter date start from which the new price will be valid and enter date +end and percentage to increase old contract lines.
  8. +
  9. By clicking on Apply button, a new contract line will be created with +a price increased accordingly to the percent entered. Old contract lines +will have as ending date the day before the entered date.
  10. +
  11. When create invoices related to contracts selected, prices will be update +with the prices that are not out of date.
  12. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/contract project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/contract_price_revision/tests/__init__.py b/contract_price_revision/tests/__init__.py new file mode 100644 index 0000000000..2cc4cb0c11 --- /dev/null +++ b/contract_price_revision/tests/__init__.py @@ -0,0 +1 @@ +from . import test_contract_price_revision diff --git a/contract_price_revision/tests/test_contract_price_revision.py b/contract_price_revision/tests/test_contract_price_revision.py new file mode 100644 index 0000000000..154be5baad --- /dev/null +++ b/contract_price_revision/tests/test_contract_price_revision.py @@ -0,0 +1,71 @@ +# Copyright 2019 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from dateutil.relativedelta import relativedelta + +from odoo.tests import common +from odoo import fields + + +class TestContractPriceRevision(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestContractPriceRevision, cls).setUpClass() + partner = cls.env['res.partner'].create({ + 'name': 'Partner test', + }) + product = cls.env['product.product'].create({ + 'name': 'Test Product', + }) + cls.contract = cls.env['account.analytic.account'].create({ + 'name': 'Contract test', + 'partner_id': partner.id, + 'date_start': fields.Date.today(), + 'recurring_next_date': fields.Date.to_string( + fields.date.today() + relativedelta(days=7)), + 'recurring_rule_type': 'monthly', + 'recurring_invoice_line_ids': [(0, 0, { + 'product_id': product.id, + 'quantity': 1.0, + 'uom_id': product.uom_id.id, + 'name': product.name, + 'price_unit': 33.0, + 'automatic_price': True, + }), (0, 0, { + 'product_id': product.id, + 'quantity': 1.0, + 'uom_id': product.uom_id.id, + 'name': product.name, + 'price_unit': 25.0, + 'automatic_price': False, + })] + }) + + def execute_wizard(self): + wizard = self.env['create.revision.line.wizard'].create({ + 'date_start': fields.Date.today(), + 'date_end': fields.Date.to_string( + fields.date.today() + relativedelta(years=1)), + 'variation_percent': 100.0, + }) + wizard.with_context( + {'active_ids': [self.contract.id]}).action_apply() + + def test_contract_price_revision_wizard(self): + self.assertEqual(len(self.contract.recurring_invoice_line_ids.ids), 2) + self.execute_wizard() + self.assertEqual(len(self.contract.recurring_invoice_line_ids.ids), 3) + lines = self.contract.mapped('recurring_invoice_line_ids').filtered( + lambda x: x.price_unit == 50.0) + self.assertEqual(len(lines), 1) + + def test_contract_price_revision_invoicing(self): + self.execute_wizard() + self.contract.recurring_create_invoice() + invoices = self.env['account.invoice'].search([ + ('contract_id', '=', self.contract.id)]) + self.assertEqual(len(invoices), 1) + lines = invoices.mapped('invoice_line_ids') + self.assertEqual(len(lines), 2) + lines = lines.filtered(lambda x: x.price_unit == 50.0) + self.assertEqual(len(lines), 1) diff --git a/contract_price_revision/views/account_analytic_account_views.xml b/contract_price_revision/views/account_analytic_account_views.xml new file mode 100644 index 0000000000..e25fce656a --- /dev/null +++ b/contract_price_revision/views/account_analytic_account_views.xml @@ -0,0 +1,43 @@ + + + + + account.analytic.invoice.line.view + account.analytic.invoice.line + +
+ + + + + + + + + + + + + + +
+
+
+ + Contract form price revision + account.analytic.account + + + + + + + + + + +
diff --git a/contract_price_revision/wizards/__init__.py b/contract_price_revision/wizards/__init__.py new file mode 100644 index 0000000000..f215b5a531 --- /dev/null +++ b/contract_price_revision/wizards/__init__.py @@ -0,0 +1 @@ +from . import create_revision_line diff --git a/contract_price_revision/wizards/create_revision_line.py b/contract_price_revision/wizards/create_revision_line.py new file mode 100644 index 0000000000..8aca4b84f3 --- /dev/null +++ b/contract_price_revision/wizards/create_revision_line.py @@ -0,0 +1,50 @@ +# Copyright 2019 Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models +import odoo.addons.decimal_precision as dp + + +class CreateRevisionLineWizard(models.TransientModel): + _name = 'create.revision.line.wizard' + + date_start = fields.Date( + required=True, + ) + date_end = fields.Date() + variation_percent = fields.Float( + digits=dp.get_precision('Product Price'), + required=True, + string='Variation %', + ) + + @api.multi + def action_apply(self): + contract_obj = self.env['account.analytic.account'] + line_obj = self.env['account.analytic.invoice.line'] + active_ids = self.env.context['active_ids'] + line_news = line_obj + for item in contract_obj.browse(active_ids).mapped( + 'recurring_invoice_line_ids').filtered( + lambda x: not x.automatic_price): + line_news |= item.copy({ + 'date_start': self.date_start, + 'date_end': self.date_end, + 'previous_revision_id': item.id, + 'price_unit': item.price_unit * ( + 1.0 + self.variation_percent / 100.0), + }) + item.date_end = (fields.Date.from_string(self.date_start) - + relativedelta(days=1)) + action = self.env.ref( + 'contract.action_account_analytic_sale_overdue_all').read()[0] + if len(active_ids) > 1: # pragma: no cover + action['domain'] = [('id', 'in', active_ids)] + elif active_ids: + action['views'] = [( + self.env.ref('contract.account_analytic_account_sale_form').id, + 'form')] + action['res_id'] = active_ids[0] + return action diff --git a/contract_price_revision/wizards/create_revision_line_views.xml b/contract_price_revision/wizards/create_revision_line_views.xml new file mode 100644 index 0000000000..9c249ec5fd --- /dev/null +++ b/contract_price_revision/wizards/create_revision_line_views.xml @@ -0,0 +1,41 @@ + + + + + Create Revision Line + create.revision.line.wizard + +
+
+ Set new start date and variation percent to duplicate. + This process set start date previous day as end date of + origin record. +
+
+
+ + + + + + + +
+
+
+
+
+ + + +
From ab5c93434512f7185488eadb002029cbb3492db1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 7 Mar 2019 13:39:52 +0100 Subject: [PATCH 02/20] [IMP] contract_price_revision: Improve a bit performance --- .../i18n/contract_price_revision.pot | 19 ++++-------- contract_price_revision/i18n/es.po | 27 +++++++++--------- .../models/account_analytic_account.py | 4 ++- .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 2 +- .../wizards/create_revision_line_views.xml | 1 - 6 files changed, 24 insertions(+), 29 deletions(-) create mode 100644 contract_price_revision/static/description/icon.png diff --git a/contract_price_revision/i18n/contract_price_revision.pot b/contract_price_revision/i18n/contract_price_revision.pot index cbca8b4df5..ffd35e2641 100644 --- a/contract_price_revision/i18n/contract_price_revision.pot +++ b/contract_price_revision/i18n/contract_price_revision.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-01 07:58+0000\n" -"PO-Revision-Date: 2019-03-01 07:58+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -30,6 +28,11 @@ msgstr "" msgid "Cancel" msgstr "" +#. module: contract_price_revision +#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action +msgid "Create revision of contract lines" +msgstr "" + #. module: contract_price_revision #: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_uid msgid "Created by" @@ -55,11 +58,6 @@ msgstr "" msgid "Display Name" msgstr "" -#. module: contract_price_revision -#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action -msgid "Create revision of contract lines" -msgstr "" - #. module: contract_price_revision #: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_end msgid "End Date" @@ -97,7 +95,7 @@ msgstr "" #. module: contract_price_revision #: model:ir.model.fields,help:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id -msgid "Relation with previous info" +msgid "Relation with previous revision" msgstr "" #. module: contract_price_revision @@ -140,11 +138,6 @@ msgstr "" msgid "create.revision.line.wizard" msgstr "" -#. module: contract_price_revision -#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view -msgid "or" -msgstr "" - #. module: contract_price_revision #: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view msgid "to" diff --git a/contract_price_revision/i18n/es.po b/contract_price_revision/i18n/es.po index 3339fea593..b28785991f 100644 --- a/contract_price_revision/i18n/es.po +++ b/contract_price_revision/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * contract_price_revision +# * contract_price_revision # msgid "" msgstr "" @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2019-03-01 07:58+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -30,6 +31,11 @@ msgstr "Aplicar" msgid "Cancel" msgstr "Cancelar" +#. module: contract_price_revision +#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action +msgid "Create revision of contract lines" +msgstr "Crear revisión de las líneas de contrato" + #. module: contract_price_revision #: model:ir.model.fields,field_description:contract_price_revision.field_create_revision_line_wizard_create_uid msgid "Created by" @@ -55,11 +61,6 @@ msgstr "Fecha inicio" msgid "Display Name" msgstr "Nombre mostrado" -#. module: contract_price_revision -#: model:ir.actions.act_window,name:contract_price_revision.contract_line_duplicate_wizard_action -msgid "Create revision of contract lines" -msgstr "Crear revisión de las líneas de contrato" - #. module: contract_price_revision #: model:ir.model.fields,field_description:contract_price_revision.field_account_analytic_invoice_line_date_end msgid "End Date" @@ -97,12 +98,15 @@ msgstr "Revisión previa" #. module: contract_price_revision #: model:ir.model.fields,help:contract_price_revision.field_account_analytic_invoice_line_previous_revision_id -msgid "Relation with previous info" +#, fuzzy +#| msgid "Relation with previous info" +msgid "Relation with previous revision" msgstr "Relación con la información previa" #. module: contract_price_revision #: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view -msgid "Set new start date and variation percent to duplicate.\n" +msgid "" +"Set new start date and variation percent to duplicate.\n" " This process set start date previous day as end date of\n" " origin record.\n" "
\n" @@ -145,13 +149,10 @@ msgstr "account.analytic.invoice.line" msgid "create.revision.line.wizard" msgstr "create.revision.line.wizard" -#. module: contract_price_revision -#: model:ir.ui.view,arch_db:contract_price_revision.contract_line_duplicate_wizard_view -msgid "or" -msgstr "o" - #. module: contract_price_revision #: model:ir.ui.view,arch_db:contract_price_revision.account_analytic_invoice_line_form_view msgid "to" msgstr "hasta" +#~ msgid "or" +#~ msgstr "o" diff --git a/contract_price_revision/models/account_analytic_account.py b/contract_price_revision/models/account_analytic_account.py index 515d80f855..9c5899cc50 100644 --- a/contract_price_revision/models/account_analytic_account.py +++ b/contract_price_revision/models/account_analytic_account.py @@ -9,7 +9,9 @@ class AccountAnalyticAccount(models.Model): @api.model def _prepare_invoice_line(self, line, invoice_id): line_obj = self.env['account.invoice.line'] - invoice = self.env['account.invoice'].browse(invoice_id) + invoice = self.env['account.invoice'].browse( + invoice_id, prefetch=self._prefetch, + ) # Line with automatic price are not taken into account if (line.date_start and invoice.date_invoice < line.date_start) or \ (line.date_end and invoice.date_invoice > line.date_end): diff --git a/contract_price_revision/static/description/icon.png b/contract_price_revision/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/contract_price_revision/static/description/index.html b/contract_price_revision/static/description/index.html index 191f393b71..6b609992d9 100644 --- a/contract_price_revision/static/description/index.html +++ b/contract_price_revision/static/description/index.html @@ -3,7 +3,7 @@ - + Contract Price Revision -
-

Contract Price Revision

+
+ + +Odoo Community Association + +
+

Contract Price Revision

-

Production/Stable License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runboat

This module allows to create revisions of contract line prices.

Table of contents

@@ -385,7 +390,7 @@

Contract Price Revision

-

Usage

+

Usage

To use this module:

  1. Go to Invoicing > Customers > Customer Contracts if you are a @@ -406,24 +411,24 @@

    Usage

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
  • Tecnativa
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -445,10 +450,11 @@

Maintainers

promote its widespread use.

Current maintainer:

carlosdauden

-

This module is part of the OCA/contract project on GitHub.

+

This module is part of the OCA/contract project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
diff --git a/contract_price_revision/tests/test_contract_price_revision.py b/contract_price_revision/tests/test_contract_price_revision.py index 106f41b041..45a528822e 100644 --- a/contract_price_revision/tests/test_contract_price_revision.py +++ b/contract_price_revision/tests/test_contract_price_revision.py @@ -21,7 +21,9 @@ def _create_wizard(self, v_type="percentage", value=0.0): ) def execute_wizard(self): - self.wizard.with_context(active_ids=self.contract.id).action_apply() + self.wizard.with_context( + active_ids=self.contract.ids, active_model=self.contract._name + ).action_apply() def test_contract_price_revision_wizard(self): # This is for checking if this line is not versioned @@ -59,7 +61,13 @@ def test_contract_price_fixed_revision_wizard_never(self): self.assertEqual(len(lines), 1) def test_contract_price_revision_invoicing(self): - self.acct_line.copy({"automatic_price": True}) + # We need to define the appropriate value for recurring_next_date. The value + # for acct_line is not consistent according to the + # _compute_recurring_next_date() method. It is currently set to 2018-01-15, but + # if we execute it, it would be 2018-01-01. + self.acct_line.copy( + {"automatic_price": True, "recurring_next_date": self.acct_line.date_start} + ) self._create_wizard(value=100.0) self.execute_wizard() invoice = self.contract.recurring_create_invoice() From b3dd763b49d6c4b968a7fab331467a3703228845 Mon Sep 17 00:00:00 2001 From: Larsq1 Date: Tue, 9 Jun 2026 16:52:39 +0200 Subject: [PATCH 20/20] [MIG] contract_price_revision: Migration to 19.0 --- contract_price_revision/README.rst | 10 +++++----- contract_price_revision/__manifest__.py | 2 +- .../i18n/contract_price_revision.pot | 2 +- contract_price_revision/i18n/fr.po | 2 +- contract_price_revision/static/description/index.html | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/contract_price_revision/README.rst b/contract_price_revision/README.rst index 6a117d6329..4ea966c54e 100644 --- a/contract_price_revision/README.rst +++ b/contract_price_revision/README.rst @@ -21,13 +21,13 @@ Contract Price Revision :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github - :target: https://github.com/OCA/contract/tree/18.0/contract_price_revision + :target: https://github.com/OCA/contract/tree/19.0/contract_price_revision :alt: OCA/contract .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/contract-18-0/contract-18-0-contract_price_revision + :target: https://translation.odoo-community.org/projects/contract-19-0/contract-19-0-contract_price_revision :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/contract&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/contract&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +66,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -110,6 +110,6 @@ Current `maintainer `__: |maintainer-carlosdauden| -This module is part of the `OCA/contract `_ project on GitHub. +This module is part of the `OCA/contract `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/contract_price_revision/__manifest__.py b/contract_price_revision/__manifest__.py index 7bcdfb25be..e4f214153f 100644 --- a/contract_price_revision/__manifest__.py +++ b/contract_price_revision/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Contract Price Revision", "summary": "Easy revision of contract prices", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "category": "Contract", "author": "ACSONE SA/NV, Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/contract_price_revision/i18n/contract_price_revision.pot b/contract_price_revision/i18n/contract_price_revision.pot index 6b77730856..575b160415 100644 --- a/contract_price_revision/i18n/contract_price_revision.pot +++ b/contract_price_revision/i18n/contract_price_revision.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/contract_price_revision/i18n/fr.po b/contract_price_revision/i18n/fr.po index d178e5d821..70ee0e75d2 100644 --- a/contract_price_revision/i18n/fr.po +++ b/contract_price_revision/i18n/fr.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2026-01-04 08:42+0000\n" "Last-Translator: Quentin THEURET \n" diff --git a/contract_price_revision/static/description/index.html b/contract_price_revision/static/description/index.html index 536e274d76..72ae82a234 100644 --- a/contract_price_revision/static/description/index.html +++ b/contract_price_revision/static/description/index.html @@ -374,7 +374,7 @@

Contract Price Revision

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:ff4343baf2bbcfca59343403aee31cae504005fee75b6ca7ccb52994c3418751 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runboat

This module allows to create revisions of contract line prices.

Table of contents

@@ -415,7 +415,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -450,7 +450,7 @@

Maintainers

promote its widespread use.

Current maintainer:

carlosdauden

-

This module is part of the OCA/contract project on GitHub.

+

This module is part of the OCA/contract project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.