From 8edeac7ab34684b1595b3177885d38f53c9b72ab Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 4 Jun 2021 12:40:57 +0200 Subject: [PATCH] [MIG]pos_margin: Migration to 13.0 --- pos_margin/__manifest__.py | 9 ++- pos_margin/i18n/fr.po | 43 ++++++++++---- pos_margin/i18n/pos_margin.pot | 27 ++++++++- .../migrations/12.0.2.0.0/pre-migration.py | 18 ++++++ pos_margin/models/__init__.py | 1 + pos_margin/models/pos_config.py | 15 +++++ pos_margin/models/pos_order.py | 7 +-- pos_margin/models/pos_order_line.py | 9 +-- pos_margin/readme/CONFIGURE.rst | 4 ++ pos_margin/readme/CONTRIBUTORS.rst | 1 + pos_margin/readme/USAGE.rst | 10 ++++ .../static/description/pos_config_form.png | Bin 0 -> 24231 bytes .../static/description/pos_front_end.png | Bin 0 -> 47922 bytes pos_margin/static/src/css/pos_margin.css | 8 +++ pos_margin/static/src/js/models.js | 56 ++++++++++++++++++ pos_margin/static/src/js/screens.js | 27 +++++++++ pos_margin/static/src/xml/pos_margin.xml | 38 ++++++++++++ pos_margin/tests/test_module.py | 17 +++--- pos_margin/views/templates.xml | 15 +++++ pos_margin/views/view_pos_config.xml | 29 +++++++++ setup/pos_margin/odoo/addons/pos_margin | 1 + setup/pos_margin/setup.py | 6 ++ 22 files changed, 307 insertions(+), 34 deletions(-) create mode 100644 pos_margin/migrations/12.0.2.0.0/pre-migration.py create mode 100644 pos_margin/models/pos_config.py create mode 100644 pos_margin/readme/CONFIGURE.rst create mode 100644 pos_margin/static/description/pos_config_form.png create mode 100644 pos_margin/static/description/pos_front_end.png create mode 100644 pos_margin/static/src/css/pos_margin.css create mode 100644 pos_margin/static/src/js/models.js create mode 100644 pos_margin/static/src/js/screens.js create mode 100644 pos_margin/static/src/xml/pos_margin.xml create mode 100644 pos_margin/views/templates.xml create mode 100644 pos_margin/views/view_pos_config.xml create mode 120000 setup/pos_margin/odoo/addons/pos_margin create mode 100644 setup/pos_margin/setup.py diff --git a/pos_margin/__manifest__.py b/pos_margin/__manifest__.py index a255d341a7..70c9155ce0 100644 --- a/pos_margin/__manifest__.py +++ b/pos_margin/__manifest__.py @@ -5,13 +5,18 @@ { "name": "PoS Order Margin", "summary": "Margin on PoS Order", - "version": "13.0.1.0.0", + "version": "13.0.2.0.1", "category": "Point Of Sale", "author": "GRAP," "Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], "website": "https://github.com/OCA/pos", "license": "AGPL-3", "depends": ["point_of_sale", "sale_margin"], - "data": ["views/view_pos_order.xml"], + "data": [ + "views/templates.xml", + "views/view_pos_config.xml", + "views/view_pos_order.xml", + ], + "qweb": ["static/src/xml/pos_margin.xml"], "installable": True, } diff --git a/pos_margin/i18n/fr.po b/pos_margin/i18n/fr.po index 0284d450f0..a2ab05ebc5 100644 --- a/pos_margin/i18n/fr.po +++ b/pos_margin/i18n/fr.po @@ -6,11 +6,10 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-12 10:19+0000\n" -"PO-Revision-Date: 2019-12-12 10:19+0000\n" +"POT-Creation-Date: 2021-06-11 14:57+0000\n" +"PO-Revision-Date: 2021-06-11 14:57+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" @@ -21,14 +20,21 @@ msgstr "" msgid "Cost Price" msgstr "Prix de revient" +#. module: pos_margin +#: model:ir.model.fields,field_description:pos_margin.field_pos_config__iface_display_margin +msgid "Diplay Margin" +msgstr "Afficher la marge" + +#. module: pos_margin +#: model:ir.model.fields,help:pos_margin.field_pos_config__iface_display_margin +#: model_terms:ir.ui.view,arch_db:pos_margin.view_pos_config_form +msgid "Display Margin and Margin Rate in the frontend" +msgstr "Afficher la marge et le taux de marge sur l'interface tactile" + #. module: pos_margin #: model:ir.model.fields,help:pos_margin.field_pos_order__margin -msgid "" -"It gives profitability by calculating the difference between the Unit Price " -"and the cost price." -msgstr "" -"Il donne la rentabilité en calculant la différence entre le prix unitaire et " -"le prix de revient." +msgid "It gives profitability by calculating the difference between the Unit Price and the cost price." +msgstr "Il donne la rentabilité en calculant la différence entre le prix unitaire et le prix de revient." #. module: pos_margin #: model:ir.model.fields,field_description:pos_margin.field_pos_order__margin @@ -40,7 +46,7 @@ msgstr "Marge" #: model:ir.model.fields,field_description:pos_margin.field_pos_order__margin_percent #: model:ir.model.fields,field_description:pos_margin.field_pos_order_line__margin_percent msgid "Margin (%)" -msgstr "Marge (%)" +msgstr "Taux de marque (%)" #. module: pos_margin #: model:ir.model.fields,field_description:pos_margin.field_report_pos_order__margin_rate @@ -52,10 +58,22 @@ msgstr "Taux de marque" msgid "Margin Total" msgstr "Marge Totale" +#. module: pos_margin +#. openerp-web +#: code:addons/pos_margin/static/src/xml/pos_margin.xml:26 +#, python-format +msgid "Margin:" +msgstr "Marge :" + +#. module: pos_margin +#: model:ir.model,name:pos_margin.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Paramétrage du point de vente" + #. module: pos_margin #: model:ir.model,name:pos_margin.model_pos_order_line msgid "Point of Sale Order Lines" -msgstr "" +msgstr "Lignes des commandes du point de vente" #. module: pos_margin #: model:ir.model,name:pos_margin.model_pos_order @@ -70,4 +88,5 @@ msgstr "Rapport sur les commandes au point de vente" #. module: pos_margin #: model_terms:ir.ui.view,arch_db:pos_margin.view_pos_order_tree msgid "Total" -msgstr "Total" +msgstr "" + diff --git a/pos_margin/i18n/pos_margin.pot b/pos_margin/i18n/pos_margin.pot index 84a9131780..ada9aa43df 100644 --- a/pos_margin/i18n/pos_margin.pot +++ b/pos_margin/i18n/pos_margin.pot @@ -1,11 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * pos_margin +# * pos_margin # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-06-11 14:57+0000\n" +"PO-Revision-Date: 2021-06-11 14:57+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,6 +20,17 @@ msgstr "" msgid "Cost Price" msgstr "" +#. module: pos_margin +#: model:ir.model.fields,field_description:pos_margin.field_pos_config__iface_display_margin +msgid "Diplay Margin" +msgstr "" + +#. module: pos_margin +#: model:ir.model.fields,help:pos_margin.field_pos_config__iface_display_margin +#: model_terms:ir.ui.view,arch_db:pos_margin.view_pos_config_form +msgid "Display Margin and Margin Rate in the frontend" +msgstr "" + #. module: pos_margin #: model:ir.model.fields,help:pos_margin.field_pos_order__margin msgid "It gives profitability by calculating the difference between the Unit Price and the cost price." @@ -45,6 +58,18 @@ msgstr "" msgid "Margin Total" msgstr "" +#. module: pos_margin +#. openerp-web +#: code:addons/pos_margin/static/src/xml/pos_margin.xml:26 +#, python-format +msgid "Margin:" +msgstr "" + +#. module: pos_margin +#: model:ir.model,name:pos_margin.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + #. module: pos_margin #: model:ir.model,name:pos_margin.model_pos_order_line msgid "Point of Sale Order Lines" diff --git a/pos_margin/migrations/12.0.2.0.0/pre-migration.py b/pos_margin/migrations/12.0.2.0.0/pre-migration.py new file mode 100644 index 0000000000..25bcf902ec --- /dev/null +++ b/pos_margin/migrations/12.0.2.0.0/pre-migration.py @@ -0,0 +1,18 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +def migrate(cr, version): + cr.execute( + """ + ALTER TABLE pos_config + ADD COLUMN iface_display_margin bool; + """ + ) + cr.execute( + """ + UPDATE pos_config + SET iface_display_margin = false; + """ + ) diff --git a/pos_margin/models/__init__.py b/pos_margin/models/__init__.py index 64f952d518..947532d9f5 100644 --- a/pos_margin/models/__init__.py +++ b/pos_margin/models/__init__.py @@ -1,2 +1,3 @@ +from . import pos_config from . import pos_order from . import pos_order_line diff --git a/pos_margin/models/pos_config.py b/pos_margin/models/pos_config.py new file mode 100644 index 0000000000..dab34d9587 --- /dev/null +++ b/pos_margin/models/pos_config.py @@ -0,0 +1,15 @@ +# Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class PosConfig(models.Model): + _inherit = "pos.config" + + iface_display_margin = fields.Boolean( + string="Diplay Margin", + help="Display Margin and Margin Rate in the frontend", + default=True, + ) diff --git a/pos_margin/models/pos_order.py b/pos_margin/models/pos_order.py index e6ebea354e..0b3667b3b2 100644 --- a/pos_margin/models/pos_order.py +++ b/pos_margin/models/pos_order.py @@ -4,8 +4,6 @@ from odoo import api, fields, models -import odoo.addons.decimal_precision as dp - class PosOrder(models.Model): _inherit = "pos.order" @@ -15,7 +13,7 @@ class PosOrder(models.Model): string="Margin", compute="_compute_margin", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", help="It gives profitability by calculating the difference between" " the Unit Price and the cost price.", ) @@ -24,11 +22,10 @@ class PosOrder(models.Model): string="Margin (%)", compute="_compute_margin", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", ) # Compute Section - @api.multi @api.depends("lines.margin", "lines.price_subtotal") def _compute_margin(self): for order in self: diff --git a/pos_margin/models/pos_order_line.py b/pos_margin/models/pos_order_line.py index 012b811a2e..8994ccc0be 100644 --- a/pos_margin/models/pos_order_line.py +++ b/pos_margin/models/pos_order_line.py @@ -4,8 +4,6 @@ from odoo import api, fields, models -import odoo.addons.decimal_precision as dp - class PosOrderLine(models.Model): _inherit = "pos.order.line" @@ -15,25 +13,24 @@ class PosOrderLine(models.Model): string="Margin", compute="_compute_multi_margin", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", ) margin_percent = fields.Float( string="Margin (%)", compute="_compute_multi_margin", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", ) purchase_price = fields.Float( string="Cost Price", compute="_compute_multi_margin", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", ) # Compute Section - @api.multi @api.depends("product_id", "qty", "price_subtotal") def _compute_multi_margin(self): for line in self.filtered("product_id"): diff --git a/pos_margin/readme/CONFIGURE.rst b/pos_margin/readme/CONFIGURE.rst new file mode 100644 index 0000000000..7c161346a4 --- /dev/null +++ b/pos_margin/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +* If you want to disable the display of the margin, in the front-office UI, you can + uncheck the check box in the ``pos.config`` form: + +.. figure:: ../static/description/pos_config_form.png diff --git a/pos_margin/readme/CONTRIBUTORS.rst b/pos_margin/readme/CONTRIBUTORS.rst index 3b5f099616..fc21e02242 100644 --- a/pos_margin/readme/CONTRIBUTORS.rst +++ b/pos_margin/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Sylvain LE GAL (https://twitter.com/legalsylvain) * Wolfgang Pichler +* Manuel Regidor (www.sygel.es) diff --git a/pos_margin/readme/USAGE.rst b/pos_margin/readme/USAGE.rst index 431e4a2ed8..69620a588c 100644 --- a/pos_margin/readme/USAGE.rst +++ b/pos_margin/readme/USAGE.rst @@ -1,3 +1,13 @@ +**In the PoS Front Office** + +* Make an order. Each time a line is added, updated, or deleted, the margin and the margin rate + will be updated. + +.. figure:: ../static/description/pos_front_end.png + :width: 800px + +**In the PoS Back Office** + To use this module, you need to: * Go to 'Point Of Sale' / 'Orders' / 'Orders' diff --git a/pos_margin/static/description/pos_config_form.png b/pos_margin/static/description/pos_config_form.png new file mode 100644 index 0000000000000000000000000000000000000000..27275ebc30ee88ee4b141e0f3a14bc43619f1d3f GIT binary patch literal 24231 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 (margin += line.get_margin()), + 0 + ); + }, + + get_margin_rate: function() { + var priceWithoutTax = this.get_total_without_tax(); + return priceWithoutTax ? (this.get_margin() / priceWithoutTax) * 100 : 0; + }, + }); + + models.Order = OrderMargin; + + // ///////////////////////////// + // Overload models.OrderLine + // ///////////////////////////// + var OrderLineMargin = models.Orderline.extend({ + get_purchase_price: function() { + // Overload the function to use another field that the default standard_price + return this.product.standard_price; + }, + + get_margin: function() { + return ( + this.get_all_prices().priceWithoutTax - + this.quantity * this.get_purchase_price() + ); + }, + + get_margin_rate: function() { + var priceWithoutTax = this.get_all_prices().priceWithoutTax; + return priceWithoutTax ? (this.get_margin() / priceWithoutTax) * 100 : 0; + }, + + get_margin_rate_str: function() { + return this.pos.chrome.format_pr(this.get_margin_rate(), 0.01) + "%"; + }, + }); + + models.Orderline = OrderLineMargin; +}); diff --git a/pos_margin/static/src/js/screens.js b/pos_margin/static/src/js/screens.js new file mode 100644 index 0000000000..e92f0756fd --- /dev/null +++ b/pos_margin/static/src/js/screens.js @@ -0,0 +1,27 @@ +// Copyright (C) 2021 - Today: GRAP (http://www.grap.coop) +// @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +odoo.define("pos_margin.screens", function(require) { + "use strict"; + + var screens = require("point_of_sale.screens"); + + screens.OrderWidget.include({ + update_summary: function() { + this._super.apply(this, arguments); + var order = this.pos.get_order(); + if (!order.get_orderlines().length) { + return; + } + if (this.pos.config.iface_display_margin) { + this.el.querySelector( + ".summary .order-margin .value-margin-rate" + ).textContent = this.format_pr(order.get_margin_rate(), 0.01) + "%"; + this.el.querySelector( + ".summary .order-margin .value-margin" + ).textContent = this.format_currency(order.get_margin()); + } + }, + }); +}); diff --git a/pos_margin/static/src/xml/pos_margin.xml b/pos_margin/static/src/xml/pos_margin.xml new file mode 100644 index 0000000000..8afc64a2ec --- /dev/null +++ b/pos_margin/static/src/xml/pos_margin.xml @@ -0,0 +1,38 @@ + + + + + + + + + () + + + + + + + + +
+
+
+ Margin: 0.00 € + (0.00 %) +
+
+
+
+
+
+ +
diff --git a/pos_margin/tests/test_module.py b/pos_margin/tests/test_module.py index a191c5732d..826c729437 100644 --- a/pos_margin/tests/test_module.py +++ b/pos_margin/tests/test_module.py @@ -15,16 +15,18 @@ def setUp(self): # Create a new pos config and open it self.pos_config = self.env.ref("point_of_sale.pos_config_main").copy() self.pos_config.open_session_cb() + self.payment_method = self.pos_config.payment_method_ids[0].id def test_margin(self): self.pos_product.list_price = 1.8 self.pos_product.standard_price = 0.5 order = self._create_order() - - self.assertEqual(order.margin, 10 * (1.8 - 0.5), "Bad computation of margin") + self.assertEqual(order[0].margin, 10 * (1.8 - 0.5), "Bad computation of margin") def _create_order(self): # Create order + account_id = self.env.user.partner_id.property_account_receivable_id.id + statement_id = self.pos_config.current_session_id.statement_ids[0].id order_data = { "id": u"0006-001-0010", "to_invoice": False, @@ -53,13 +55,12 @@ def _create_order(self): 0, 0, { - "journal_id": self.pos_config.journal_ids[0].id, + "journal_id": self.pos_config.journal_id.id, "amount": 18.0, "name": fields.Datetime.now(), - "account_id": self.env.user.partner_id.property_account_receivable_id.id, - "statement_id": self.pos_config.current_session_id.statement_ids[ - 0 - ].id, + "account_id": account_id, + "statement_id": statement_id, + "payment_method_id": self.payment_method, }, ] ], @@ -74,5 +75,5 @@ def _create_order(self): } result = self.PosOrder.create_from_ui([order_data]) - order = self.PosOrder.browse(result[0]) + order = self.PosOrder.search([("id", "=", result[0].get("id"))]) return order diff --git a/pos_margin/views/templates.xml b/pos_margin/views/templates.xml new file mode 100644 index 0000000000..7180dacf59 --- /dev/null +++ b/pos_margin/views/templates.xml @@ -0,0 +1,15 @@ + + + +