From 931d9afc7f034b59ec73a912b2b2183088036316 Mon Sep 17 00:00:00 2001 From: lreficent Date: Fri, 1 Sep 2017 16:14:50 +0200 Subject: [PATCH 01/32] [9.0][ADD] sale_fixed_discount --- sale_fixed_discount/README.rst | 69 +++++++++++++++ sale_fixed_discount/__init__.py | 5 ++ sale_fixed_discount/__openerp__.py | 21 +++++ sale_fixed_discount/models/__init__.py | 5 ++ sale_fixed_discount/models/sale_order.py | 82 ++++++++++++++++++ .../reports/report_sale_order.xml | 27 ++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes sale_fixed_discount/tests/__init__.py | 5 ++ .../tests/test_sale_fixed_discount.py | 71 +++++++++++++++ sale_fixed_discount/views/sale_order_view.xml | 23 +++++ 10 files changed, 308 insertions(+) create mode 100644 sale_fixed_discount/README.rst create mode 100644 sale_fixed_discount/__init__.py create mode 100644 sale_fixed_discount/__openerp__.py create mode 100644 sale_fixed_discount/models/__init__.py create mode 100644 sale_fixed_discount/models/sale_order.py create mode 100644 sale_fixed_discount/reports/report_sale_order.xml create mode 100644 sale_fixed_discount/static/description/icon.png create mode 100644 sale_fixed_discount/tests/__init__.py create mode 100644 sale_fixed_discount/tests/test_sale_fixed_discount.py create mode 100644 sale_fixed_discount/views/sale_order_view.xml diff --git a/sale_fixed_discount/README.rst b/sale_fixed_discount/README.rst new file mode 100644 index 00000000000..7d218cfd54b --- /dev/null +++ b/sale_fixed_discount/README.rst @@ -0,0 +1,69 @@ +.. 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 + +=================== +Sale Fixed Discount +=================== + +This module extends the functionality of Sales to allow you to apply fixed +amount discount at sales order line level. + +The module also extends the sales order report to show fixed discount. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Sale > Configuration >Settings*. +#. In the *Discount* option select *Allow discounts on sales order lines*. + +Usage +===== + +To use this module, you need to: + +#. Go to *Sales*. +#. Create a Sales Order and specify the type of discount and fixed/percent + discount in a line. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/167/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 smash it by providing detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Lois Rilo + +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/sale_fixed_discount/__init__.py b/sale_fixed_discount/__init__.py new file mode 100644 index 00000000000..7201c080519 --- /dev/null +++ b/sale_fixed_discount/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/sale_fixed_discount/__openerp__.py b/sale_fixed_discount/__openerp__.py new file mode 100644 index 00000000000..1c9beacb527 --- /dev/null +++ b/sale_fixed_discount/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Sale Fixed Discount", + "summary": "Allows to apply fixed amount discounts in sales orders.", + "version": "9.0.1.0.0", + "category": "Sales", + "website": "https://odoo-community.org/", + "author": "Eficent, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "sale", "account_invoice_fixed_discount" + ], + "data": [ + "views/sale_order_view.xml", + "reports/report_sale_order.xml", + ], +} diff --git a/sale_fixed_discount/models/__init__.py b/sale_fixed_discount/models/__init__.py new file mode 100644 index 00000000000..2e13f8454bb --- /dev/null +++ b/sale_fixed_discount/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import sale_order diff --git a/sale_fixed_discount/models/sale_order.py b/sale_fixed_discount/models/sale_order.py new file mode 100644 index 00000000000..b1c3c00133e --- /dev/null +++ b/sale_fixed_discount/models/sale_order.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import api, fields, models, _ +import openerp.addons.decimal_precision as dp +from openerp.exceptions import ValidationError + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + @api.depends('order_line.price_total') + def _amount_all(self): + vals = {} + for line in self.mapped('order_line').filtered( + lambda l: l.discount_fixed): + vals[line] = { + 'price_unit': line.price_unit, + 'discount_fixed': line.discount_fixed, + } + price_unit = line.price_unit - line.discount_fixed + line.update({ + 'price_unit': price_unit, + 'discount_fixed': 0.0, + }) + res = super(SaleOrder, self)._amount_all() + for line in vals.keys(): + line.update(vals[line]) + return res + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + discount_fixed = fields.Float( + string="Discount (Fixed)", + digits=dp.get_precision('Product Price'), + help="Fixed amount discount.") + + @api.onchange('discount') + def _onchange_discount(self): + if self.discount: + self.discount_fixed = 0.0 + + @api.onchange('discount_fixed') + def _onchange_discount_fixed(self): + if self.discount_fixed: + self.discount = 0.0 + + @api.one + @api.constrains('discount', 'discount_fixed') + def _check_only_one_discount(self): + if self.discount and self.discount_fixed: + raise ValidationError( + _("You can only set one type of discount per line.")) + + @api.depends('product_uom_qty', 'discount', 'price_unit', 'tax_id', + 'discount_fixed') + def _compute_amount(self): + vals = {} + for line in self.filtered(lambda l: l.discount_fixed): + vals[line] = { + 'price_unit': line.price_unit, + 'discount_fixed': line.discount_fixed, + } + price_unit = line.price_unit - line.discount_fixed + line.update({ + 'price_unit': price_unit, + 'discount_fixed': 0.0, + }) + res = super(SaleOrderLine, self)._compute_amount() + for line in vals.keys(): + line.update(vals[line]) + return res + + def _prepare_invoice_line(self, qty): + res = super(SaleOrderLine, self)._prepare_invoice_line(qty) + res.update({ + 'discount_fixed': self.discount_fixed, + }) + return res diff --git a/sale_fixed_discount/reports/report_sale_order.xml b/sale_fixed_discount/reports/report_sale_order.xml new file mode 100644 index 00000000000..0a323eac4ad --- /dev/null +++ b/sale_fixed_discount/reports/report_sale_order.xml @@ -0,0 +1,27 @@ + + + + + + + diff --git a/sale_fixed_discount/static/description/icon.png b/sale_fixed_discount/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/sale_fixed_discount/tests/__init__.py b/sale_fixed_discount/tests/__init__.py new file mode 100644 index 00000000000..d6ac7c2d78f --- /dev/null +++ b/sale_fixed_discount/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_sale_fixed_discount diff --git a/sale_fixed_discount/tests/test_sale_fixed_discount.py b/sale_fixed_discount/tests/test_sale_fixed_discount.py new file mode 100644 index 00000000000..927d0f193d7 --- /dev/null +++ b/sale_fixed_discount/tests/test_sale_fixed_discount.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import SavepointCase +from openerp.exceptions import ValidationError + + +class TestSaleFixedDiscount(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestSaleFixedDiscount, cls).setUpClass() + cls.partner = cls.env['res.partner'].create({'name': 'Test'}) + cls.tax = cls.env['account.tax'].create({ + 'name': 'TAX 15%', + 'amount_type': 'percent', + 'type_tax_use': 'sale', + 'amount': 15.0, + }) + cls.product = cls.env['product.product'].create({ + 'name': 'Test product', + 'type': 'consu', + }) + cls.sale = cls.env['sale.order'].create({ + 'name': "Test Sale Order", + 'partner_id': cls.partner.id, + }) + cls.so_line = cls.env['sale.order.line'] + cls.sale_line1 = cls.so_line.create({ + 'order_id': cls.sale.id, + 'name': 'Line 1', + 'price_unit': 200.0, + 'product_uom_qty': 1, + 'product_id': cls.product.id, + 'tax_id': [(6, 0, [cls.tax.id])], + }) + + def test_01_discounts(self): + """ Tests multiple discounts in line with taxes.""" + # Apply a fixed discount + self.sale_line1.discount_fixed = 10.0 + self.assertEqual(self.sale.amount_total, 218.50) + # Try to add also a % discount + with self.assertRaises(ValidationError): + self.sale_line1.write({'discount': 50.0}) + # Apply a % discount + self.sale_line1._onchange_discount_fixed() + self.sale_line1.discount_fixed = 0.0 + self.sale_line1.discount = 50.0 + self.sale_line1._onchange_discount() + self.assertEqual(self.sale.amount_total, 115.00) + + def test_02_discounts_multiple_lines(self): + """ Tests multiple lines with mixed taxes and dicount types.""" + self.sale_line2 = self.so_line.create({ + 'order_id': self.sale.id, + 'name': 'Line 2', + 'price_unit': 500.0, + 'product_uom_qty': 1, + 'product_id': self.product.id, + 'tax_id': [(5,)], + }) + self.assertEqual(self.sale_line2.price_subtotal, 500.0) + # Add a fixed discount + self.sale_line2.discount_fixed = 100.0 + self.assertEqual(self.sale_line2.price_subtotal, 400.0) + self.sale._amount_all() + self.assertEqual(self.sale.amount_total, 630.0) + self.sale_line1.discount = 50.0 + self.assertEqual(self.sale.amount_total, 515.0) diff --git a/sale_fixed_discount/views/sale_order_view.xml b/sale_fixed_discount/views/sale_order_view.xml new file mode 100644 index 00000000000..e75ae57add7 --- /dev/null +++ b/sale_fixed_discount/views/sale_order_view.xml @@ -0,0 +1,23 @@ + + + + + + + sale.order.form - sale_fixed_discount + sale.order + + + + + + + + + + + + From a5dbb73203cf8bf3ea51279e1ed29d77da996180 Mon Sep 17 00:00:00 2001 From: lreficent Date: Fri, 12 Jan 2018 10:56:16 +0100 Subject: [PATCH 02/32] [10.0][MIG] sale_fixed_discount --- sale_fixed_discount/README.rst | 8 ++-- sale_fixed_discount/__init__.py | 1 - .../{__openerp__.py => __manifest__.py} | 4 +- .../i18n/sale_fixed_discount.pot | 46 +++++++++++++++++++ sale_fixed_discount/models/__init__.py | 1 - sale_fixed_discount/models/sale_order.py | 6 +-- sale_fixed_discount/tests/__init__.py | 1 - .../tests/test_sale_fixed_discount.py | 4 +- 8 files changed, 57 insertions(+), 14 deletions(-) rename sale_fixed_discount/{__openerp__.py => __manifest__.py} (87%) create mode 100644 sale_fixed_discount/i18n/sale_fixed_discount.pot diff --git a/sale_fixed_discount/README.rst b/sale_fixed_discount/README.rst index 7d218cfd54b..d2e0f403055 100644 --- a/sale_fixed_discount/README.rst +++ b/sale_fixed_discount/README.rst @@ -1,5 +1,5 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 =================== @@ -30,7 +30,7 @@ To use this module, you need to: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/167/9.0 + :target: https://runbot.odoo-community.org/runbot/167/10.0 Bug Tracker =========== @@ -46,7 +46,7 @@ Credits Images ------ -* Odoo Community Association: `Icon `_. +* Odoo Community Association: `Icon `_. Contributors ------------ diff --git a/sale_fixed_discount/__init__.py b/sale_fixed_discount/__init__.py index 7201c080519..ec50cfc0f30 100644 --- a/sale_fixed_discount/__init__.py +++ b/sale_fixed_discount/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/sale_fixed_discount/__openerp__.py b/sale_fixed_discount/__manifest__.py similarity index 87% rename from sale_fixed_discount/__openerp__.py rename to sale_fixed_discount/__manifest__.py index 1c9beacb527..c6a7d1dd05c 100644 --- a/sale_fixed_discount/__openerp__.py +++ b/sale_fixed_discount/__manifest__.py @@ -4,9 +4,9 @@ { "name": "Sale Fixed Discount", "summary": "Allows to apply fixed amount discounts in sales orders.", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "category": "Sales", - "website": "https://odoo-community.org/", + "website": "https://github.com/OCA/sale-workflow", "author": "Eficent, Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, diff --git a/sale_fixed_discount/i18n/sale_fixed_discount.pot b/sale_fixed_discount/i18n/sale_fixed_discount.pot new file mode 100644 index 00000000000..38b6cc75146 --- /dev/null +++ b/sale_fixed_discount/i18n/sale_fixed_discount.pot @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_fixed_discount +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \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: sale_fixed_discount +#: model:ir.ui.view,arch_db:sale_fixed_discount.report_invoice_document +msgid "Disc. Fixed Amount" +msgstr "" + +#. module: sale_fixed_discount +#: model:ir.model.fields,field_description:sale_fixed_discount.field_sale_order_line_discount_fixed +msgid "Discount (Fixed)" +msgstr "" + +#. module: sale_fixed_discount +#: model:ir.model.fields,help:sale_fixed_discount.field_sale_order_line_discount_fixed +msgid "Fixed amount discount." +msgstr "" + +#. module: sale_fixed_discount +#: model:ir.model,name:sale_fixed_discount.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_fixed_discount +#: model:ir.model,name:sale_fixed_discount.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_fixed_discount +#: code:addons/sale_fixed_discount/models/sale_order.py:56 +#, python-format +msgid "You can only set one type of discount per line." +msgstr "" + diff --git a/sale_fixed_discount/models/__init__.py b/sale_fixed_discount/models/__init__.py index 2e13f8454bb..4ad4d3eff91 100644 --- a/sale_fixed_discount/models/__init__.py +++ b/sale_fixed_discount/models/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import sale_order diff --git a/sale_fixed_discount/models/sale_order.py b/sale_fixed_discount/models/sale_order.py index b1c3c00133e..11671742771 100644 --- a/sale_fixed_discount/models/sale_order.py +++ b/sale_fixed_discount/models/sale_order.py @@ -2,9 +2,9 @@ # Copyright 2017 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import api, fields, models, _ -import openerp.addons.decimal_precision as dp -from openerp.exceptions import ValidationError +from odoo import api, fields, models, _ +import odoo.addons.decimal_precision as dp +from odoo.exceptions import ValidationError class SaleOrder(models.Model): diff --git a/sale_fixed_discount/tests/__init__.py b/sale_fixed_discount/tests/__init__.py index d6ac7c2d78f..993abc3165c 100644 --- a/sale_fixed_discount/tests/__init__.py +++ b/sale_fixed_discount/tests/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import test_sale_fixed_discount diff --git a/sale_fixed_discount/tests/test_sale_fixed_discount.py b/sale_fixed_discount/tests/test_sale_fixed_discount.py index 927d0f193d7..ed1f46d8cd5 100644 --- a/sale_fixed_discount/tests/test_sale_fixed_discount.py +++ b/sale_fixed_discount/tests/test_sale_fixed_discount.py @@ -2,8 +2,8 @@ # Copyright 2017 Tecnativa - David Vidal # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp.tests import SavepointCase -from openerp.exceptions import ValidationError +from odoo.tests import SavepointCase +from odoo.exceptions import ValidationError class TestSaleFixedDiscount(SavepointCase): From ca29baaab1514e2d5f552d212df87d14ee9d11a5 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Mon, 8 Oct 2018 16:32:35 +0200 Subject: [PATCH 03/32] [11.0][mig] sale_fixed_discount --- sale_fixed_discount/README.rst | 75 ++- sale_fixed_discount/__init__.py | 3 - sale_fixed_discount/__manifest__.py | 9 +- .../i18n/sale_fixed_discount.pot | 7 +- sale_fixed_discount/models/__init__.py | 3 - sale_fixed_discount/models/sale_order.py | 11 +- sale_fixed_discount/readme/CONFIGURE.rst | 4 + sale_fixed_discount/readme/CONTRIBUTORS.rst | 2 + sale_fixed_discount/readme/DESCRIPTION.rst | 4 + sale_fixed_discount/readme/INSTALL.rst | 2 + sale_fixed_discount/readme/USAGE.rst | 5 + .../reports/report_account_invoice.xml | 18 + .../static/description/index.html | 447 ++++++++++++++++++ sale_fixed_discount/tests/__init__.py | 3 - .../tests/test_sale_fixed_discount.py | 3 +- .../views/account_invoice_views.xml | 57 +++ ...le_order_view.xml => sale_order_views.xml} | 0 17 files changed, 607 insertions(+), 46 deletions(-) create mode 100644 sale_fixed_discount/readme/CONFIGURE.rst create mode 100644 sale_fixed_discount/readme/CONTRIBUTORS.rst create mode 100644 sale_fixed_discount/readme/DESCRIPTION.rst create mode 100644 sale_fixed_discount/readme/INSTALL.rst create mode 100644 sale_fixed_discount/readme/USAGE.rst create mode 100644 sale_fixed_discount/reports/report_account_invoice.xml create mode 100644 sale_fixed_discount/static/description/index.html create mode 100644 sale_fixed_discount/views/account_invoice_views.xml rename sale_fixed_discount/views/{sale_order_view.xml => sale_order_views.xml} (100%) diff --git a/sale_fixed_discount/README.rst b/sale_fixed_discount/README.rst index d2e0f403055..f51a0a50c1f 100644 --- a/sale_fixed_discount/README.rst +++ b/sale_fixed_discount/README.rst @@ -1,16 +1,46 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png - :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - =================== Sale Fixed Discount =================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fsale--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/sale-workflow/tree/11.0/sale_fixed_discount + :alt: OCA/sale-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sale-workflow-11-0/sale-workflow-11-0-sale_fixed_discount + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/167/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module extends the functionality of Sales to allow you to apply fixed amount discount at sales order line level. The module also extends the sales order report to show fixed discount. +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module depends on module 'account_invoice_fixed_discount', +available in https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_fixed_discount + Configuration ============= @@ -28,42 +58,43 @@ To use this module, you need to: #. Create a Sales Order and specify the type of discount and fixed/percent discount in a line. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/167/10.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 smash it by providing detailed and welcomed feedback. +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 ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Eficent Contributors ------------- +~~~~~~~~~~~~ + +* Lois Rilo (www.eficent.com) +* Jordi Ballester (www.eficent.com) -* Lois Rilo +Maintainers +~~~~~~~~~~~ -Maintainer ----------- +This module is maintained by the OCA. .. 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. +This module is part of the `OCA/sale-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_fixed_discount/__init__.py b/sale_fixed_discount/__init__.py index ec50cfc0f30..0650744f6bc 100644 --- a/sale_fixed_discount/__init__.py +++ b/sale_fixed_discount/__init__.py @@ -1,4 +1 @@ -# -*- coding: utf-8 -*- -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import models diff --git a/sale_fixed_discount/__manifest__.py b/sale_fixed_discount/__manifest__.py index c6a7d1dd05c..407be54c3c8 100644 --- a/sale_fixed_discount/__manifest__.py +++ b/sale_fixed_discount/__manifest__.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017-18 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Sale Fixed Discount", "summary": "Allows to apply fixed amount discounts in sales orders.", - "version": "10.0.1.0.0", + "version": "11.0.1.0.0", "category": "Sales", "website": "https://github.com/OCA/sale-workflow", "author": "Eficent, Odoo Community Association (OCA)", @@ -15,7 +14,9 @@ "sale", "account_invoice_fixed_discount" ], "data": [ - "views/sale_order_view.xml", + "views/sale_order_views.xml", + "views/account_invoice_views.xml", "reports/report_sale_order.xml", + "reports/report_account_invoice.xml" ], } diff --git a/sale_fixed_discount/i18n/sale_fixed_discount.pot b/sale_fixed_discount/i18n/sale_fixed_discount.pot index 38b6cc75146..a3546f70fd7 100644 --- a/sale_fixed_discount/i18n/sale_fixed_discount.pot +++ b/sale_fixed_discount/i18n/sale_fixed_discount.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -15,6 +15,7 @@ msgstr "" #. module: sale_fixed_discount #: model:ir.ui.view,arch_db:sale_fixed_discount.report_invoice_document +#: model:ir.ui.view,arch_db:sale_fixed_discount.report_invoice_layouted_fixed_discount msgid "Disc. Fixed Amount" msgstr "" @@ -30,7 +31,7 @@ msgstr "" #. module: sale_fixed_discount #: model:ir.model,name:sale_fixed_discount.model_sale_order -msgid "Sales Order" +msgid "Quotation" msgstr "" #. module: sale_fixed_discount @@ -39,7 +40,7 @@ msgid "Sales Order Line" msgstr "" #. module: sale_fixed_discount -#: code:addons/sale_fixed_discount/models/sale_order.py:56 +#: code:addons/sale_fixed_discount/models/sale_order.py:55 #, python-format msgid "You can only set one type of discount per line." msgstr "" diff --git a/sale_fixed_discount/models/__init__.py b/sale_fixed_discount/models/__init__.py index 4ad4d3eff91..6aacb753131 100644 --- a/sale_fixed_discount/models/__init__.py +++ b/sale_fixed_discount/models/__init__.py @@ -1,4 +1 @@ -# -*- coding: utf-8 -*- -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import sale_order diff --git a/sale_fixed_discount/models/sale_order.py b/sale_fixed_discount/models/sale_order.py index 11671742771..bdfc3ea611b 100644 --- a/sale_fixed_discount/models/sale_order.py +++ b/sale_fixed_discount/models/sale_order.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017-18 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models, _ @@ -48,12 +47,12 @@ def _onchange_discount_fixed(self): if self.discount_fixed: self.discount = 0.0 - @api.one @api.constrains('discount', 'discount_fixed') def _check_only_one_discount(self): - if self.discount and self.discount_fixed: - raise ValidationError( - _("You can only set one type of discount per line.")) + for line in self: + if line.discount and line.discount_fixed: + raise ValidationError( + _("You can only set one type of discount per line.")) @api.depends('product_uom_qty', 'discount', 'price_unit', 'tax_id', 'discount_fixed') diff --git a/sale_fixed_discount/readme/CONFIGURE.rst b/sale_fixed_discount/readme/CONFIGURE.rst new file mode 100644 index 00000000000..36c6308845f --- /dev/null +++ b/sale_fixed_discount/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +To configure this module, you need to: + +#. Go to *Sale > Configuration >Settings*. +#. In the *Discount* option select *Allow discounts on sales order lines*. diff --git a/sale_fixed_discount/readme/CONTRIBUTORS.rst b/sale_fixed_discount/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..b8611ce5dd2 --- /dev/null +++ b/sale_fixed_discount/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Lois Rilo (www.eficent.com) +* Jordi Ballester (www.eficent.com) diff --git a/sale_fixed_discount/readme/DESCRIPTION.rst b/sale_fixed_discount/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..41211a4293f --- /dev/null +++ b/sale_fixed_discount/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module extends the functionality of Sales to allow you to apply fixed +amount discount at sales order line level. + +The module also extends the sales order report to show fixed discount. diff --git a/sale_fixed_discount/readme/INSTALL.rst b/sale_fixed_discount/readme/INSTALL.rst new file mode 100644 index 00000000000..3623ce08050 --- /dev/null +++ b/sale_fixed_discount/readme/INSTALL.rst @@ -0,0 +1,2 @@ +This module depends on module 'account_invoice_fixed_discount', +available in https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_fixed_discount diff --git a/sale_fixed_discount/readme/USAGE.rst b/sale_fixed_discount/readme/USAGE.rst new file mode 100644 index 00000000000..6e28a4477c8 --- /dev/null +++ b/sale_fixed_discount/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +#. Go to *Sales*. +#. Create a Sales Order and specify the type of discount and fixed/percent + discount in a line. diff --git a/sale_fixed_discount/reports/report_account_invoice.xml b/sale_fixed_discount/reports/report_account_invoice.xml new file mode 100644 index 00000000000..f48011a6d58 --- /dev/null +++ b/sale_fixed_discount/reports/report_account_invoice.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/sale_fixed_discount/static/description/index.html b/sale_fixed_discount/static/description/index.html new file mode 100644 index 00000000000..c785e6e26ea --- /dev/null +++ b/sale_fixed_discount/static/description/index.html @@ -0,0 +1,447 @@ + + + + + + +Sale Fixed Discount + + + +
+

Sale Fixed Discount

+ + +

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

+

This module extends the functionality of Sales to allow you to apply fixed +amount discount at sales order line level.

+

The module also extends the sales order report to show fixed discount.

+

Table of contents

+ +
+

Installation

+

This module depends on module ‘account_invoice_fixed_discount’, +available in https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_fixed_discount

+
+
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Sale > Configuration >Settings.
  2. +
  3. In the Discount option select Allow discounts on sales order lines.
  4. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Sales.
  2. +
  3. Create a Sales Order and specify the type of discount and fixed/percent +discount in a line.
  4. +
+
+
+

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

+
    +
  • Eficent
  • +
+
+
+

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/sale-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_fixed_discount/tests/__init__.py b/sale_fixed_discount/tests/__init__.py index 993abc3165c..73fd17b7425 100644 --- a/sale_fixed_discount/tests/__init__.py +++ b/sale_fixed_discount/tests/__init__.py @@ -1,4 +1 @@ -# -*- coding: utf-8 -*- -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import test_sale_fixed_discount diff --git a/sale_fixed_discount/tests/test_sale_fixed_discount.py b/sale_fixed_discount/tests/test_sale_fixed_discount.py index ed1f46d8cd5..14f142a4c11 100644 --- a/sale_fixed_discount/tests/test_sale_fixed_discount.py +++ b/sale_fixed_discount/tests/test_sale_fixed_discount.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright 2017 Tecnativa - David Vidal +# Copyright 2017-18 Eficent Business and IT Consulting Services S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo.tests import SavepointCase diff --git a/sale_fixed_discount/views/account_invoice_views.xml b/sale_fixed_discount/views/account_invoice_views.xml new file mode 100644 index 00000000000..bf2ab3b30e9 --- /dev/null +++ b/sale_fixed_discount/views/account_invoice_views.xml @@ -0,0 +1,57 @@ + + + + + + Account Invoice + account.invoice + + + + + sale.group_discount_per_so_line + + + + + + + account.invoice.line.tree + account.invoice.line + + + + + sale.group_discount_per_so_line + + + + + + + account.invoice.line.form + account.invoice.line + + + + + sale.group_discount_per_so_line + + + + + + + account.invoice.supplier.form + account.invoice + + + + + sale.group_discount_per_so_line + + + + + + diff --git a/sale_fixed_discount/views/sale_order_view.xml b/sale_fixed_discount/views/sale_order_views.xml similarity index 100% rename from sale_fixed_discount/views/sale_order_view.xml rename to sale_fixed_discount/views/sale_order_views.xml From 0f056d68cc05be7ae97bec22202581624afd1a35 Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 2 Sep 2019 13:55:07 +0200 Subject: [PATCH 04/32] [MIG] sale_fixed_discount: Migration to 12.0 --- sale_fixed_discount/README.rst | 16 ++++++++-------- sale_fixed_discount/__manifest__.py | 3 +-- .../i18n/sale_fixed_discount.pot | 2 +- sale_fixed_discount/models/sale_order.py | 4 +++- sale_fixed_discount/readme/CONFIGURE.rst | 4 ++-- sale_fixed_discount/readme/INSTALL.rst | 2 +- .../reports/report_account_invoice.xml | 18 ------------------ .../reports/report_sale_order.xml | 10 ++++++---- .../static/description/index.html | 8 ++++---- .../views/account_invoice_views.xml | 8 ++++---- 10 files changed, 30 insertions(+), 45 deletions(-) delete mode 100644 sale_fixed_discount/reports/report_account_invoice.xml diff --git a/sale_fixed_discount/README.rst b/sale_fixed_discount/README.rst index f51a0a50c1f..21498bdb5a1 100644 --- a/sale_fixed_discount/README.rst +++ b/sale_fixed_discount/README.rst @@ -14,13 +14,13 @@ Sale Fixed Discount :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github - :target: https://github.com/OCA/sale-workflow/tree/11.0/sale_fixed_discount + :target: https://github.com/OCA/sale-workflow/tree/12.0/sale_fixed_discount :alt: OCA/sale-workflow .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/sale-workflow-11-0/sale-workflow-11-0-sale_fixed_discount + :target: https://translation.odoo-community.org/projects/sale-workflow-12-0/sale-workflow-12-0-sale_fixed_discount :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/167/11.0 + :target: https://runbot.odoo-community.org/runbot/167/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -39,15 +39,15 @@ Installation ============ This module depends on module 'account_invoice_fixed_discount', -available in https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_fixed_discount +available in https://github.com/OCA/account-invoicing/tree/12.0/account_invoice_fixed_discount Configuration ============= To configure this module, you need to: -#. Go to *Sale > Configuration >Settings*. -#. In the *Discount* option select *Allow discounts on sales order lines*. +#. Go to *Sales > Configuration > Settings*. +#. In the *Pricing* section select *Discounts* option to grant discounts on sales order lines. Usage ===== @@ -64,7 +64,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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -95,6 +95,6 @@ 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/sale-workflow `_ project on GitHub. +This module is part of the `OCA/sale-workflow `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_fixed_discount/__manifest__.py b/sale_fixed_discount/__manifest__.py index 407be54c3c8..73c6ee07a29 100644 --- a/sale_fixed_discount/__manifest__.py +++ b/sale_fixed_discount/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale Fixed Discount", "summary": "Allows to apply fixed amount discounts in sales orders.", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "category": "Sales", "website": "https://github.com/OCA/sale-workflow", "author": "Eficent, Odoo Community Association (OCA)", @@ -17,6 +17,5 @@ "views/sale_order_views.xml", "views/account_invoice_views.xml", "reports/report_sale_order.xml", - "reports/report_account_invoice.xml" ], } diff --git a/sale_fixed_discount/i18n/sale_fixed_discount.pot b/sale_fixed_discount/i18n/sale_fixed_discount.pot index a3546f70fd7..44b8937b2f1 100644 --- a/sale_fixed_discount/i18n/sale_fixed_discount.pot +++ b/sale_fixed_discount/i18n/sale_fixed_discount.pot @@ -40,7 +40,7 @@ msgid "Sales Order Line" msgstr "" #. module: sale_fixed_discount -#: code:addons/sale_fixed_discount/models/sale_order.py:55 +#: code:addons/sale_fixed_discount/models/sale_order.py:57 #, python-format msgid "You can only set one type of discount per line." msgstr "" diff --git a/sale_fixed_discount/models/sale_order.py b/sale_fixed_discount/models/sale_order.py index bdfc3ea611b..2679d335e75 100644 --- a/sale_fixed_discount/models/sale_order.py +++ b/sale_fixed_discount/models/sale_order.py @@ -38,7 +38,9 @@ class SaleOrderLine(models.Model): help="Fixed amount discount.") @api.onchange('discount') - def _onchange_discount(self): + def _onchange_discount_percent(self): + # _onchange_discount method already exists in core, + # but discount is not in the onchange definition if self.discount: self.discount_fixed = 0.0 diff --git a/sale_fixed_discount/readme/CONFIGURE.rst b/sale_fixed_discount/readme/CONFIGURE.rst index 36c6308845f..2115aaad682 100644 --- a/sale_fixed_discount/readme/CONFIGURE.rst +++ b/sale_fixed_discount/readme/CONFIGURE.rst @@ -1,4 +1,4 @@ To configure this module, you need to: -#. Go to *Sale > Configuration >Settings*. -#. In the *Discount* option select *Allow discounts on sales order lines*. +#. Go to *Sales > Configuration > Settings*. +#. In the *Pricing* section select *Discounts* option to grant discounts on sales order lines. diff --git a/sale_fixed_discount/readme/INSTALL.rst b/sale_fixed_discount/readme/INSTALL.rst index 3623ce08050..cbffaaee702 100644 --- a/sale_fixed_discount/readme/INSTALL.rst +++ b/sale_fixed_discount/readme/INSTALL.rst @@ -1,2 +1,2 @@ This module depends on module 'account_invoice_fixed_discount', -available in https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_fixed_discount +available in https://github.com/OCA/account-invoicing/tree/12.0/account_invoice_fixed_discount diff --git a/sale_fixed_discount/reports/report_account_invoice.xml b/sale_fixed_discount/reports/report_account_invoice.xml deleted file mode 100644 index f48011a6d58..00000000000 --- a/sale_fixed_discount/reports/report_account_invoice.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/sale_fixed_discount/reports/report_sale_order.xml b/sale_fixed_discount/reports/report_sale_order.xml index 0a323eac4ad..98837faba40 100644 --- a/sale_fixed_discount/reports/report_sale_order.xml +++ b/sale_fixed_discount/reports/report_sale_order.xml @@ -3,7 +3,7 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> -