From 85da2e66c1cf5a4ad72a3c0d3ddda38977ed78ad Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Sep 2016 03:03:38 +0200 Subject: [PATCH 1/4] [ADD] contract_variable_quantity: ================================================= Variable quantity in contract recurrent invoicing ================================================= With this module, you will be able to define in recurring contracts some lines with variable quantity according a provided formula. Configuration ============= * Go to Sales > Configuration > Contracts > Formulas (quantity). * Define any formula based on Python code that stores at some moment a float/integer value of the quantity to invoice in the variable 'result'. You can use these variables to compute your formula: * *env*: Environment variable for getting other models. * *context*: Current context dictionary. * *user*: Current user. * *line*: Contract recurring invoice line that triggers this formula. * *contract*: Contract whose line belongs to. * *invoice*: Invoice (header) being created. Usage ===== To use this module, you need to: * Go to Sales -> Contracts and select or create a new contract. * Check *Generate recurring invoices automatically*. * Add a new recurring invoicing line. * Select "Variable quantity" in column "Qty. type". * Select one of the possible formulas to use (previously created). --- contract_variable_quantity/README.rst | 72 +++++ contract_variable_quantity/__init__.py | 4 + contract_variable_quantity/__openerp__.py | 21 ++ contract_variable_quantity/models/__init__.py | 4 + contract_variable_quantity/models/contract.py | 66 ++++ .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 5221 bytes .../static/description/icon.svg | 301 ++++++++++++++++++ contract_variable_quantity/tests/__init__.py | 4 + .../tests/test_contract_variable_quantity.py | 60 ++++ .../views/contract_view.xml | 90 ++++++ 11 files changed, 625 insertions(+) create mode 100644 contract_variable_quantity/README.rst create mode 100644 contract_variable_quantity/__init__.py create mode 100644 contract_variable_quantity/__openerp__.py create mode 100644 contract_variable_quantity/models/__init__.py create mode 100644 contract_variable_quantity/models/contract.py create mode 100644 contract_variable_quantity/security/ir.model.access.csv create mode 100644 contract_variable_quantity/static/description/icon.png create mode 100644 contract_variable_quantity/static/description/icon.svg create mode 100644 contract_variable_quantity/tests/__init__.py create mode 100644 contract_variable_quantity/tests/test_contract_variable_quantity.py create mode 100644 contract_variable_quantity/views/contract_view.xml diff --git a/contract_variable_quantity/README.rst b/contract_variable_quantity/README.rst new file mode 100644 index 00000000..e5786edf --- /dev/null +++ b/contract_variable_quantity/README.rst @@ -0,0 +1,72 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +================================================= +Variable quantity in contract recurrent invoicing +================================================= + +With this module, you will be able to define in recurring contracts some +lines with variable quantity according a provided formula. + +Configuration +============= + +#. Go to Sales > Configuration > Contracts > Formulas (quantity). +#. Define any formula based on Python code that stores at some moment a + float/integer value of the quantity to invoice in the variable 'result'. + + You can use these variables to compute your formula: + + * *env*: Environment variable for getting other models. + * *context*: Current context dictionary. + * *user*: Current user. + * *line*: Contract recurring invoice line that triggers this formula. + * *contract*: Contract whose line belongs to. + * *invoice*: Invoice (header) being created. + +Usage +===== + +To use this module, you need to: + +#. Go to Sales -> Contracts and select or create a new contract. +#. Check *Generate recurring invoices automatically*. +#. Add a new recurring invoicing line. +#. Select "Variable quantity" in column "Qty. type". +#. Select one of the possible formulas to use (previously created). + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/110/9.0 + +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. + +Credits +======= + +Contributors +------------ + +* Pedro M. Baeza + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/contract_variable_quantity/__init__.py b/contract_variable_quantity/__init__.py new file mode 100644 index 00000000..ec50cfc0 --- /dev/null +++ b/contract_variable_quantity/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/contract_variable_quantity/__openerp__.py b/contract_variable_quantity/__openerp__.py new file mode 100644 index 00000000..faad6c56 --- /dev/null +++ b/contract_variable_quantity/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Variable quantity in contract recurrent invoicing', + 'version': '9.0.1.0.0', + 'category': 'Contract Management', + 'license': 'AGPL-3', + 'author': "Tecnativa," + "Odoo Community Association (OCA)", + 'website': 'https://www.tecnativa.com', + 'depends': [ + 'contract', + ], + 'data': [ + 'security/ir.model.access.csv', + 'views/contract_view.xml', + ], + 'installable': True, +} diff --git a/contract_variable_quantity/models/__init__.py b/contract_variable_quantity/models/__init__.py new file mode 100644 index 00000000..35503b27 --- /dev/null +++ b/contract_variable_quantity/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import contract diff --git a/contract_variable_quantity/models/contract.py b/contract_variable_quantity/models/contract.py new file mode 100644 index 00000000..92c6c8d3 --- /dev/null +++ b/contract_variable_quantity/models/contract.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import _, api, fields, models, exceptions +from openerp.tools.safe_eval import safe_eval + + +class AccountAnalyticAccount(models.Model): + _inherit = "account.analytic.account" + + @api.model + def _prepare_invoice_line(self, line, invoice_id): + vals = super(AccountAnalyticAccount, self)._prepare_invoice_line( + line, invoice_id) + if line.qty_type == 'variable': + eval_context = { + 'env': self.env, + 'context': self.env.context, + 'user': self.env.user, + 'line': line, + 'contract': line.analytic_account_id, + 'invoice': self.env['account.invoice'].browse(invoice_id), + } + safe_eval(line.qty_formula_id.code.strip(), eval_context, + mode="exec", nocopy=True) # nocopy for returning result + vals['quantity'] = eval_context.get('result', 0) + return vals + + +class AccountAnalyticInvoiceLine(models.Model): + _inherit = 'account.analytic.invoice.line' + + qty_type = fields.Selection( + selection=[ + ('fixed', 'Fixed quantity'), + ('variable', 'Variable quantity'), + ], required=True, default='fixed', string="Qty. type") + qty_formula_id = fields.Many2one( + comodel_name="contract.line.qty.formula", string="Qty. formula") + + +class ContractLineFormula(models.Model): + _name = 'contract.line.qty.formula' + + name = fields.Char(required=True) + code = fields.Text(required=True, default="result = 0") + + @api.constrains('code') + def _check_code(self): + eval_context = { + 'env': self.env, + 'context': self.env.context, + 'user': self.env.user, + 'line': self.env['account.analytic.invoice.line'], + 'contract': self.env['account.analytic.account'], + 'invoice': self.env['account.invoice'], + } + try: + safe_eval( + self.code.strip(), eval_context, mode="exec", nocopy=True) + except Exception as e: + raise exceptions.ValidationError( + _('Error evaluating code.\nDetails: %s') % e) + if 'result' not in eval_context: + raise exceptions.ValidationError(_('No valid result returned.')) diff --git a/contract_variable_quantity/security/ir.model.access.csv b/contract_variable_quantity/security/ir.model.access.csv new file mode 100644 index 00000000..3c87dfeb --- /dev/null +++ b/contract_variable_quantity/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"contract_line_qty_formula_manager","Recurring formula manager","model_contract_line_qty_formula","base.group_sale_manager",1,1,1,1 +"contract_line_qty_formula_user","Recurring formula user","model_contract_line_qty_formula","base.group_sale_salesman",1,0,0,0 diff --git a/contract_variable_quantity/static/description/icon.png b/contract_variable_quantity/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c00adfec43373940257b2a14fe64e3b59a33e35 GIT binary patch literal 5221 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 literal 0 HcmV?d00001 diff --git a/contract_variable_quantity/static/description/icon.svg b/contract_variable_quantity/static/description/icon.svg new file mode 100644 index 00000000..92888efe --- /dev/null +++ b/contract_variable_quantity/static/description/icon.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Pile of Golden Coins + 2010-04-09T03:27:45 + A pile of hypothetical golden coins, drawn in Inkscape. + https://openclipart.org/detail/43969/pile-of-golden-coins-by-j_alves + + + J_Alves + + + + + coin + currency + gold + money + thaler + + + + + + + + + + + diff --git a/contract_variable_quantity/tests/__init__.py b/contract_variable_quantity/tests/__init__.py new file mode 100644 index 00000000..b772135a --- /dev/null +++ b/contract_variable_quantity/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_contract_variable_quantity diff --git a/contract_variable_quantity/tests/test_contract_variable_quantity.py b/contract_variable_quantity/tests/test_contract_variable_quantity.py new file mode 100644 index 00000000..d87a9f29 --- /dev/null +++ b/contract_variable_quantity/tests/test_contract_variable_quantity.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp import exceptions + + +class TestContractVariableQuantity(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestContractVariableQuantity, cls).setUpClass() + cls.partner = cls.env['res.partner'].create({ + 'name': 'Test partner', + }) + cls.product = cls.env['product.product'].create({ + 'name': 'Test product', + }) + cls.contract = cls.env['account.analytic.account'].create({ + 'name': 'Test Contract', + 'partner_id': cls.partner.id, + 'pricelist_id': cls.partner.property_product_pricelist.id, + 'recurring_invoices': True, + }) + cls.formula = cls.env['contract.line.qty.formula'].create({ + 'name': 'Test formula', + # For testing each of the possible variables + 'code': 'env["res.users"]\n' + 'context.get("lang")\n' + 'user.id\n' + 'line.qty_type\n' + 'contract.id\n' + 'invoice.id\n' + 'result = 12', + }) + cls.contract_line = cls.env['account.analytic.invoice.line'].create({ + 'analytic_account_id': cls.contract.id, + 'product_id': cls.product.id, + 'name': 'Test', + 'qty_type': 'variable', + 'qty_formula_id': cls.formula.id, + 'quantity': 1, + 'uom_id': cls.product.uom_id.id, + 'price_unit': 100, + 'discount': 50, + }) + + def test_check_invalid_code(self): + with self.assertRaises(exceptions.ValidationError): + self.formula.code = "sdsds" + + def test_check_no_return_value(self): + with self.assertRaises(exceptions.ValidationError): + self.formula.code = "user.id" + + def test_check_variable_quantity(self): + self.contract._create_invoice(self.contract) + invoice = self.env['account.invoice'].search( + [('contract_id', '=', self.contract.id)]) + self.assertEqual(invoice.invoice_line_ids[0].quantity, 12) diff --git a/contract_variable_quantity/views/contract_view.xml b/contract_variable_quantity/views/contract_view.xml new file mode 100644 index 00000000..efd6e3a7 --- /dev/null +++ b/contract_variable_quantity/views/contract_view.xml @@ -0,0 +1,90 @@ + + + + + account.analytic.account + + + + + + + + + + {'required': [('qty_type', '=', 'fixed')], 'invisible': [('qty_type', '!=', 'fixed')]} + + + + + + contract.line.qty.formula + + + + + + + + + contract.line.qty.formula + +
+ +
+

+ +

+
+ +
+ +

Help with Python expressions.

+

You have to insert valid Python code block that stores at some moment a float/integer value of the quantity to invoice in the variable 'result'.

+

You can use these variables to compute your formula:

+
    +
  • env: Environment variable for getting other models.
  • +
  • context: Current context dictionary.
  • +
  • user: Current user.
  • +
  • line: Contract recurring invoice line that triggers this formula.
  • +
  • contract: Contract whose line belongs to.
  • +
  • invoice: Invoice (header) being created.
  • +
+
+

Example of Python code

+ + result = env['product.product'].search_count([('sale_ok', '=', True)]) + +
+
+
+
+
+
+
+ + + Formulas (quantity) + contract.line.qty.formula + form + tree,form + +

+ Click to create a new formula for variable quantities. +

+
+
+ + + + +
From 8e6deab765c3eea4017f0903c1ded49695765e55 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Sep 2016 18:57:18 +0200 Subject: [PATCH 2/4] [IMP] contract_variable_quantity: Screenshot --- contract_variable_quantity/README.rst | 4 ++++ .../images/formula_form.png | Bin 0 -> 57349 bytes 2 files changed, 4 insertions(+) create mode 100644 contract_variable_quantity/images/formula_form.png diff --git a/contract_variable_quantity/README.rst b/contract_variable_quantity/README.rst index e5786edf..7dccb894 100644 --- a/contract_variable_quantity/README.rst +++ b/contract_variable_quantity/README.rst @@ -25,6 +25,10 @@ Configuration * *contract*: Contract whose line belongs to. * *invoice*: Invoice (header) being created. +.. figure:: images/formula_form.png + :alt: Formula form + :width: 600 px + Usage ===== diff --git a/contract_variable_quantity/images/formula_form.png b/contract_variable_quantity/images/formula_form.png new file mode 100644 index 0000000000000000000000000000000000000000..23d03e5ab6670846c328fefaa14d3124449eb990 GIT binary patch literal 57349 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Ï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�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 B5-k7# literal 0 HcmV?d00001 From 043057112a26c92c14259082dd6ebad8484e9b3d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Sep 2016 19:05:05 +0200 Subject: [PATCH 3/4] [IMP] contract_variable_quantity: Spanish translation --- contract_variable_quantity/i18n/es.po | 188 ++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 contract_variable_quantity/i18n/es.po diff --git a/contract_variable_quantity/i18n/es.po b/contract_variable_quantity/i18n/es.po new file mode 100644 index 00000000..73ff0684 --- /dev/null +++ b/contract_variable_quantity/i18n/es.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * contract_variable_quantity +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 16:50+0000\n" +"PO-Revision-Date: 2016-09-09 16:50+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_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "\n" +" result = env['product.product'].search_count([('sale_ok', '=', True)])\n" +" " +msgstr "\n" +" result = env['product.product'].search_count([('sale_ok', '=', True)])\n" +" " + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "context: Current context dictionary." +msgstr "context: Diccionario de contexto actual." + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "contract: Contract whose line belongs to." +msgstr "contract: Contrato al que pertenece esta línea." + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "env: Environment variable for getting other models." +msgstr "env: Variable de entorno para obtener otros modelos." + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "invoice: Invoice (header) being created." +msgstr "invoice: Factura (cabecera) siendo creada." + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "line: Contract recurring invoice line that triggers this formula." +msgstr "line: Línea del contrato de facturación recurrente que lanza esta fórmula." + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "user: Current user." +msgstr "user: Usuario actual." + +#. module: contract_variable_quantity +#: model:ir.model,name:contract_variable_quantity.model_account_analytic_account +msgid "Analytic Account" +msgstr "Cuenta analítica" + +#. module: contract_variable_quantity +#: model:ir.actions.act_window,help:contract_variable_quantity.action_contract_quantity_formula +msgid "Click to create a new formula for variable quantities." +msgstr "Pulse para crear una nueva fórmula para cantidades variables." + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_code +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "Code" +msgstr "Código" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: contract_variable_quantity +#: code:addons/contract_variable_quantity/models/contract.py:64 +#, python-format +msgid "Error evaluating code.\n" +"Details: %s" +msgstr "Error evaluando el código.\n" +"Detalles: %s" + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "Example of Python code" +msgstr "Ejemplo del código Python" + +#. module: contract_variable_quantity +#: selection:account.analytic.invoice.line,qty_type:0 +msgid "Fixed quantity" +msgstr "Cantidad fija" + +#. module: contract_variable_quantity +#: model:ir.actions.act_window,name:contract_variable_quantity.action_contract_quantity_formula +#: model:ir.ui.menu,name:contract_variable_quantity.menu_contract_quantity_formula +msgid "Formulas (quantity)" +msgstr "Fórmulas (cantidad)" + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "Help with Python expressions." +msgstr "Ayuda con las expresiones Python." + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_id +msgid "ID" +msgstr "ID (identificación)" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_name +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "Name" +msgstr "Nombre" + +#. module: contract_variable_quantity +#: code:addons/contract_variable_quantity/models/contract.py:66 +#, python-format +msgid "No valid result returned." +msgstr "No se devuelve un valor válido." + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_account_analytic_invoice_line_qty_formula_id +msgid "Qty. formula" +msgstr "Formula ctdad." + +#. module: contract_variable_quantity +#: model:ir.model.fields,field_description:contract_variable_quantity.field_account_analytic_invoice_line_qty_type +msgid "Qty. type" +msgstr "Tipo ctdad." + +#. module: contract_variable_quantity +#: selection:account.analytic.invoice.line,qty_type:0 +msgid "Variable quantity" +msgstr "Cantidad variable" + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "You can use these variables to compute your formula:" +msgstr "Puede usar estas variables para calcular su fórmula:" + +#. module: contract_variable_quantity +#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form +msgid "You have to insert valid Python code block that stores at some moment a float/integer value of the quantity to invoice in the variable 'result'." +msgstr "Debe insertar un bloque de código Python que almacene en algún momento un valor entero o decimal de la cantidad a facturar en la variable 'result'." + +#. module: contract_variable_quantity +#: model:ir.model,name:contract_variable_quantity.model_account_analytic_invoice_line +msgid "account.analytic.invoice.line" +msgstr "account.analytic.invoice.line" + +#. module: contract_variable_quantity +#: model:ir.model,name:contract_variable_quantity.model_contract_line_formula +msgid "contract.line.formula" +msgstr "contract.line.formula" + +#. module: contract_variable_quantity +#: model:ir.model,name:contract_variable_quantity.model_contract_line_qty_formula +msgid "contract.line.qty.formula" +msgstr "contract.line.qty.formula" + From e8a584af7cbf9f47f2a8db3ed79749bb0d813fe8 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Sep 2016 19:11:50 +0200 Subject: [PATCH 4/4] Update README.rst --- contract_variable_quantity/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract_variable_quantity/README.rst b/contract_variable_quantity/README.rst index 7dccb894..4518b00e 100644 --- a/contract_variable_quantity/README.rst +++ b/contract_variable_quantity/README.rst @@ -7,7 +7,7 @@ Variable quantity in contract recurrent invoicing ================================================= With this module, you will be able to define in recurring contracts some -lines with variable quantity according a provided formula. +lines with variable quantity according to a provided formula. Configuration =============