From dd3c2203a4331f03dddf387f18dd48b5675ad470 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 9 Jul 2018 18:59:44 +0200 Subject: [PATCH 01/49] [ADD] sale_margin_delivered: New Module --- sale_margin_delivered/README.rst | 101 ++++++++++++++++++ sale_margin_delivered/__init__.py | 2 + sale_margin_delivered/__manifest__.py | 19 ++++ sale_margin_delivered/i18n/es.po | 58 ++++++++++ .../i18n/sale_margin_delivered.pot | 58 ++++++++++ sale_margin_delivered/models/__init__.py | 2 + sale_margin_delivered/models/sale_margin.py | 38 +++++++ sale_margin_delivered/models/stock_picking.py | 20 ++++ sale_margin_delivered/readme/CONFIGURE.rst | 2 + sale_margin_delivered/readme/CONTRIBUTORS.rst | 2 + sale_margin_delivered/readme/DESCRIPTION.rst | 1 + sale_margin_delivered/readme/USAGE.rst | 17 +++ sale_margin_delivered/reports/__init__.py | 1 + sale_margin_delivered/reports/sale_report.py | 21 ++++ .../views/sale_margin_delivered_view.xml | 19 ++++ 15 files changed, 361 insertions(+) create mode 100644 sale_margin_delivered/README.rst create mode 100644 sale_margin_delivered/__init__.py create mode 100644 sale_margin_delivered/__manifest__.py create mode 100644 sale_margin_delivered/i18n/es.po create mode 100644 sale_margin_delivered/i18n/sale_margin_delivered.pot create mode 100644 sale_margin_delivered/models/__init__.py create mode 100644 sale_margin_delivered/models/sale_margin.py create mode 100644 sale_margin_delivered/models/stock_picking.py create mode 100644 sale_margin_delivered/readme/CONFIGURE.rst create mode 100644 sale_margin_delivered/readme/CONTRIBUTORS.rst create mode 100644 sale_margin_delivered/readme/DESCRIPTION.rst create mode 100644 sale_margin_delivered/readme/USAGE.rst create mode 100644 sale_margin_delivered/reports/__init__.py create mode 100644 sale_margin_delivered/reports/sale_report.py create mode 100644 sale_margin_delivered/views/sale_margin_delivered_view.xml diff --git a/sale_margin_delivered/README.rst b/sale_margin_delivered/README.rst new file mode 100644 index 000000000..48c2a5ba3 --- /dev/null +++ b/sale_margin_delivered/README.rst @@ -0,0 +1,101 @@ +===================== +Sale Margin Delivered +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fmargin--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/margin-analysis/tree/11.0/sale_margin_delivered + :alt: OCA/margin-analysis +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/margin-analysis-11-0/margin-analysis-11-0-sale_margin_delivered + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/132/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Computes sale order lines margins for the delivered items. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To grant Sales Margin view privileges to a user, go to *Settings > Users & +Companies > Users*, select the user and set *Show Sale Margin* on. + +Usage +===== + +#. Place a new *Sale Order* and add a line with an stockable product. Set a + quantity higher than one. +#. Confirm the *Sale Order* and deliver just a partial amount of product in the + picking. +#. Go to *Sales > Reporting > Sales* and unfold the *Order Reference* dimension + and the *Margin* and *Margin Delivered* to compare them. + +For example: + +In an order line with a product at a cost of 10 and a sell price of 25 we +deliver 2 of 3 units. Then, the reported margins would be: + +`margin`: 45 (3 * 15) +`margin_delivered`: 30 (2 * 15) + +Additionaly, you can check the margin and the margin percent in the sale order +line. + +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 +~~~~~~~~~~~~ + +* Sergio Teruel +* David Vidal + +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/margin-analysis `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_margin_delivered/__init__.py b/sale_margin_delivered/__init__.py new file mode 100644 index 000000000..55ec7fc9a --- /dev/null +++ b/sale_margin_delivered/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import reports diff --git a/sale_margin_delivered/__manifest__.py b/sale_margin_delivered/__manifest__.py new file mode 100644 index 000000000..15a865020 --- /dev/null +++ b/sale_margin_delivered/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Sale Margin Delivered", + "version": "11.0.1.0.0", + "author": "Tecnativa," + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/margin-analysis", + "category": "Sales", + "license": "AGPL-3", + "depends": [ + "stock", + "sale_margin_security", + ], + "data": [ + "views/sale_margin_delivered_view.xml", + ], + "installable": True, +} diff --git a/sale_margin_delivered/i18n/es.po b/sale_margin_delivered/i18n/es.po new file mode 100644 index 000000000..0c90f7d50 --- /dev/null +++ b/sale_margin_delivered/i18n/es.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_margin_delivered +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-09 10:42+0000\n" +"PO-Revision-Date: 2018-10-09 10:42+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: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "% Margin" +msgstr "% Margen" + +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Margin" +msgstr "Margen" + +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_report_margin_delivered +msgid "Margin Delivered" +msgstr "Margin Entregados" + +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_margin_delivered_percent +msgid "Margin Delivered Percent" +msgstr "Porcentage de Margen de Entregados" + +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Margin dlvd." +msgstr "Margin entrg." + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de ventas" + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_sale_report +msgid "Sales Orders Statistics" +msgstr "Estadísticas pedidos de ventas" + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_stock_picking +msgid "Transfer" +msgstr "Transferir" + diff --git a/sale_margin_delivered/i18n/sale_margin_delivered.pot b/sale_margin_delivered/i18n/sale_margin_delivered.pot new file mode 100644 index 000000000..3d8219469 --- /dev/null +++ b/sale_margin_delivered/i18n/sale_margin_delivered.pot @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_margin_delivered +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-09 10:43+0000\n" +"PO-Revision-Date: 2018-10-09 10:43+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: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "% Margin" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Margin" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_report_margin_delivered +msgid "Margin Delivered" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_margin_delivered_percent +msgid "Margin Delivered Percent" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Margin dlvd." +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_sale_report +msgid "Sales Orders Statistics" +msgstr "" + +#. module: sale_margin_delivered +#: model:ir.model,name:sale_margin_delivered.model_stock_picking +msgid "Transfer" +msgstr "" + diff --git a/sale_margin_delivered/models/__init__.py b/sale_margin_delivered/models/__init__.py new file mode 100644 index 000000000..400506c09 --- /dev/null +++ b/sale_margin_delivered/models/__init__.py @@ -0,0 +1,2 @@ +from . import sale_margin +from . import stock_picking diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py new file mode 100644 index 000000000..4cb4c8da7 --- /dev/null +++ b/sale_margin_delivered/models/sale_margin.py @@ -0,0 +1,38 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + margin_delivered = fields.Float( + string='Margin Delivered', + compute='_compute_margin_delivered', + store=True, + ) + margin_delivered_percent = fields.Float( + string='Margin Delivered Percent', + compute='_compute_margin_delivered', + store=True, + readonly=True, + oldname='margin_delivered_percent', + ) + + @api.depends('margin', 'qty_delivered', 'product_uom_qty') + def _compute_margin_delivered(self): + for line in self.filtered('price_reduce'): + vals = { + 'margin_delivered': 0.0, + 'margin_delivered_percent': 0.0, + } + if line.qty_delivered == line.product_uom_qty: + vals['margin_delivered'] = line.margin + elif line.product_uom_qty: + vals['margin_delivered'] = ( + line.qty_delivered * line.margin / line.product_uom_qty) + vals['margin_delivered_percent'] = ( + (line.price_reduce - line.purchase_price) / + line.price_reduce * 100.0) + line.update(vals) diff --git a/sale_margin_delivered/models/stock_picking.py b/sale_margin_delivered/models/stock_picking.py new file mode 100644 index 000000000..913a8354c --- /dev/null +++ b/sale_margin_delivered/models/stock_picking.py @@ -0,0 +1,20 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + @api.multi + def action_done(self): + res = super().action_done() + # Update purchase_price in so_lines + pickings = self.filtered( + lambda x: x.picking_type_code == 'outgoing') + so_lines = pickings.mapped( + 'move_lines.sale_line_id') + for line in so_lines: + line.purchase_price = line.product_id.standard_price + return res diff --git a/sale_margin_delivered/readme/CONFIGURE.rst b/sale_margin_delivered/readme/CONFIGURE.rst new file mode 100644 index 000000000..277b976f4 --- /dev/null +++ b/sale_margin_delivered/readme/CONFIGURE.rst @@ -0,0 +1,2 @@ +To grant Sales Margin view privileges to a user, go to *Settings > Users & +Companies > Users*, select the user and set *Show Sale Margin* on. diff --git a/sale_margin_delivered/readme/CONTRIBUTORS.rst b/sale_margin_delivered/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..5505ba54f --- /dev/null +++ b/sale_margin_delivered/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Sergio Teruel +* David Vidal diff --git a/sale_margin_delivered/readme/DESCRIPTION.rst b/sale_margin_delivered/readme/DESCRIPTION.rst new file mode 100644 index 000000000..b8b7164e5 --- /dev/null +++ b/sale_margin_delivered/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Computes sale order lines margins for the delivered items. diff --git a/sale_margin_delivered/readme/USAGE.rst b/sale_margin_delivered/readme/USAGE.rst new file mode 100644 index 000000000..e8333da1c --- /dev/null +++ b/sale_margin_delivered/readme/USAGE.rst @@ -0,0 +1,17 @@ +#. Place a new *Sale Order* and add a line with an stockable product. Set a + quantity higher than one. +#. Confirm the *Sale Order* and deliver just a partial amount of product in the + picking. +#. Go to *Sales > Reporting > Sales* and unfold the *Order Reference* dimension + and the *Margin* and *Margin Delivered* to compare them. + +For example: + +In an order line with a product at a cost of 10 and a sell price of 25 we +deliver 2 of 3 units. Then, the reported margins would be: + +`margin`: 45 (3 * 15) +`margin_delivered`: 30 (2 * 15) + +Additionaly, you can check the margin and the margin percent in the sale order +line. diff --git a/sale_margin_delivered/reports/__init__.py b/sale_margin_delivered/reports/__init__.py new file mode 100644 index 000000000..cd23411b8 --- /dev/null +++ b/sale_margin_delivered/reports/__init__.py @@ -0,0 +1 @@ +from . import sale_report diff --git a/sale_margin_delivered/reports/sale_report.py b/sale_margin_delivered/reports/sale_report.py new file mode 100644 index 000000000..d54645e38 --- /dev/null +++ b/sale_margin_delivered/reports/sale_report.py @@ -0,0 +1,21 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SaleReport(models.Model): + _inherit = "sale.report" + + margin_delivered = fields.Float( + string='Margin Delivered', + readonly=True, + ) + + def _select(self): + res = super(SaleReport, self)._select() + res += """, + SUM(l.margin_delivered / COALESCE(cr.rate, 1.0)) as + margin_delivered + """ + return res diff --git a/sale_margin_delivered/views/sale_margin_delivered_view.xml b/sale_margin_delivered/views/sale_margin_delivered_view.xml new file mode 100644 index 000000000..98a300a99 --- /dev/null +++ b/sale_margin_delivered/views/sale_margin_delivered_view.xml @@ -0,0 +1,19 @@ + + + + + + sale.order + + + + + + + + + + + + From 84ed49da4a28f2913705013682d918c112c5f36b Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Tue, 13 Nov 2018 14:06:56 +0100 Subject: [PATCH 02/49] [IMP] sale_margin_delivered: Add new computed field for better control on delivery purchase price [UPD] README.rst [UPD] Update sale_margin_delivered.pot Update translation files Updated by Update PO files to match POT (msgmerge) hook in Weblate. --- sale_margin_delivered/i18n/es.po | 21 +- .../i18n/sale_margin_delivered.pot | 17 +- sale_margin_delivered/models/__init__.py | 2 +- sale_margin_delivered/models/sale_margin.py | 21 +- sale_margin_delivered/models/stock_picking.py | 20 - .../static/description/index.html | 445 ++++++++++++++++++ .../views/sale_margin_delivered_view.xml | 1 + 7 files changed, 492 insertions(+), 35 deletions(-) delete mode 100644 sale_margin_delivered/models/stock_picking.py create mode 100644 sale_margin_delivered/static/description/index.html diff --git a/sale_margin_delivered/i18n/es.po b/sale_margin_delivered/i18n/es.po index 0c90f7d50..3a89b6420 100644 --- a/sale_margin_delivered/i18n/es.po +++ b/sale_margin_delivered/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * sale_margin_delivered +# * sale_margin_delivered # msgid "" msgstr "" @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2018-10-09 10:42+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" @@ -20,6 +21,11 @@ msgstr "" msgid "% Margin" msgstr "% Margen" +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Cost Price dlvd." +msgstr "" + #. module: sale_margin_delivered #: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form msgid "Margin" @@ -41,6 +47,12 @@ msgstr "Porcentage de Margen de Entregados" msgid "Margin dlvd." msgstr "Margin entrg." +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_purchase_price_delivery +#, fuzzy +msgid "Purchase Price Delivered" +msgstr "Margin Entregados" + #. module: sale_margin_delivered #: model:ir.model,name:sale_margin_delivered.model_sale_order_line msgid "Sales Order Line" @@ -51,8 +63,5 @@ msgstr "Línea de pedido de ventas" msgid "Sales Orders Statistics" msgstr "Estadísticas pedidos de ventas" -#. module: sale_margin_delivered -#: model:ir.model,name:sale_margin_delivered.model_stock_picking -msgid "Transfer" -msgstr "Transferir" - +#~ msgid "Transfer" +#~ msgstr "Transferir" diff --git a/sale_margin_delivered/i18n/sale_margin_delivered.pot b/sale_margin_delivered/i18n/sale_margin_delivered.pot index 3d8219469..25cc32f38 100644 --- a/sale_margin_delivered/i18n/sale_margin_delivered.pot +++ b/sale_margin_delivered/i18n/sale_margin_delivered.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-09 10:43+0000\n" -"PO-Revision-Date: 2018-10-09 10:43+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -20,6 +18,11 @@ msgstr "" msgid "% Margin" msgstr "" +#. module: sale_margin_delivered +#: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form +msgid "Cost Price dlvd." +msgstr "" + #. module: sale_margin_delivered #: model:ir.ui.view,arch_db:sale_margin_delivered.view_order_form msgid "Margin" @@ -41,6 +44,11 @@ msgstr "" msgid "Margin dlvd." msgstr "" +#. module: sale_margin_delivered +#: model:ir.model.fields,field_description:sale_margin_delivered.field_sale_order_line_purchase_price_delivery +msgid "Purchase Price Delivered" +msgstr "" + #. module: sale_margin_delivered #: model:ir.model,name:sale_margin_delivered.model_sale_order_line msgid "Sales Order Line" @@ -51,8 +59,3 @@ msgstr "" msgid "Sales Orders Statistics" msgstr "" -#. module: sale_margin_delivered -#: model:ir.model,name:sale_margin_delivered.model_stock_picking -msgid "Transfer" -msgstr "" - diff --git a/sale_margin_delivered/models/__init__.py b/sale_margin_delivered/models/__init__.py index 400506c09..10f6472fb 100644 --- a/sale_margin_delivered/models/__init__.py +++ b/sale_margin_delivered/models/__init__.py @@ -1,2 +1,2 @@ from . import sale_margin -from . import stock_picking + diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py index 4cb4c8da7..da97dd0bb 100644 --- a/sale_margin_delivered/models/sale_margin.py +++ b/sale_margin_delivered/models/sale_margin.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models +from odoo import tools class SaleOrderLine(models.Model): @@ -19,20 +20,38 @@ class SaleOrderLine(models.Model): readonly=True, oldname='margin_delivered_percent', ) + purchase_price_delivery = fields.Float( + string='Purchase Price Delivered', + compute='_compute_margin_delivered', + store=True, + ) @api.depends('margin', 'qty_delivered', 'product_uom_qty') def _compute_margin_delivered(self): + rounding = self.env['decimal.precision'].precision_get('Product Price') for line in self.filtered('price_reduce'): vals = { 'margin_delivered': 0.0, 'margin_delivered_percent': 0.0, + 'purchase_price_delivery': line.purchase_price, } + delivered_qty = 0.0 + cost_price = 0.0 + moves = line.move_ids.filtered(lambda x: ( + x.state == 'done' and x.picking_code == 'outgoing' + )) + for move in moves: + delivered_qty += move.product_qty + cost_price += move.product_qty * abs(move.price_unit) + average_price = cost_price / (delivered_qty or 1.0) + vals['purchase_price_delivery'] = tools.float_round( + average_price, precision_rounding=rounding) if line.qty_delivered == line.product_uom_qty: vals['margin_delivered'] = line.margin elif line.product_uom_qty: vals['margin_delivered'] = ( line.qty_delivered * line.margin / line.product_uom_qty) vals['margin_delivered_percent'] = ( - (line.price_reduce - line.purchase_price) / + (line.price_reduce - vals['purchase_price_delivery']) / line.price_reduce * 100.0) line.update(vals) diff --git a/sale_margin_delivered/models/stock_picking.py b/sale_margin_delivered/models/stock_picking.py deleted file mode 100644 index 913a8354c..000000000 --- a/sale_margin_delivered/models/stock_picking.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2018 Tecnativa - Sergio Teruel -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, models - - -class StockPicking(models.Model): - _inherit = "stock.picking" - - @api.multi - def action_done(self): - res = super().action_done() - # Update purchase_price in so_lines - pickings = self.filtered( - lambda x: x.picking_type_code == 'outgoing') - so_lines = pickings.mapped( - 'move_lines.sale_line_id') - for line in so_lines: - line.purchase_price = line.product_id.standard_price - return res diff --git a/sale_margin_delivered/static/description/index.html b/sale_margin_delivered/static/description/index.html new file mode 100644 index 000000000..a89519e54 --- /dev/null +++ b/sale_margin_delivered/static/description/index.html @@ -0,0 +1,445 @@ + + + + + + +Sale Margin Delivered + + + +
+

Sale Margin Delivered

+ + +

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

+

Computes sale order lines margins for the delivered items.

+

Table of contents

+ +
+

Configuration

+

To grant Sales Margin view privileges to a user, go to Settings > Users & +Companies > Users, select the user and set Show Sale Margin on.

+
+
+

Usage

+
    +
  1. Place a new Sale Order and add a line with an stockable product. Set a +quantity higher than one.
  2. +
  3. Confirm the Sale Order and deliver just a partial amount of product in the +picking.
  4. +
  5. Go to Sales > Reporting > Sales and unfold the Order Reference dimension +and the Margin and Margin Delivered to compare them.
  6. +
+

For example:

+

In an order line with a product at a cost of 10 and a sell price of 25 we +deliver 2 of 3 units. Then, the reported margins would be:

+

margin: 45 (3 * 15) +margin_delivered: 30 (2 * 15)

+

Additionaly, you can check the margin and the margin percent in the sale order +line.

+
+
+

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
  • +
+
+ +
+

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/margin-analysis project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_margin_delivered/views/sale_margin_delivered_view.xml b/sale_margin_delivered/views/sale_margin_delivered_view.xml index 98a300a99..9b4de17f2 100644 --- a/sale_margin_delivered/views/sale_margin_delivered_view.xml +++ b/sale_margin_delivered/views/sale_margin_delivered_view.xml @@ -10,6 +10,7 @@ + From 99d59306ba68e42dbbc1b6a424f2035cf31e0c97 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Mon, 14 Jan 2019 14:18:23 +0100 Subject: [PATCH 03/49] [11.0][FIX] sale_margin_delivered: Set % delivered percent to 0.0 if not delivered qty (#43) [FIX] sale_margin_delivered: Set % delivered percent to quantities ordered if the line has not delivered quantities [ADD] icon.png --- sale_margin_delivered/models/sale_margin.py | 12 +++++++----- .../static/description/icon.png | Bin 0 -> 9455 bytes 2 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 sale_margin_delivered/static/description/icon.png diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py index da97dd0bb..f1b7fac7c 100644 --- a/sale_margin_delivered/models/sale_margin.py +++ b/sale_margin_delivered/models/sale_margin.py @@ -28,7 +28,7 @@ class SaleOrderLine(models.Model): @api.depends('margin', 'qty_delivered', 'product_uom_qty') def _compute_margin_delivered(self): - rounding = self.env['decimal.precision'].precision_get('Product Price') + digits = self.env['decimal.precision'].precision_get('Product Price') for line in self.filtered('price_reduce'): vals = { 'margin_delivered': 0.0, @@ -43,15 +43,17 @@ def _compute_margin_delivered(self): for move in moves: delivered_qty += move.product_qty cost_price += move.product_qty * abs(move.price_unit) - average_price = cost_price / (delivered_qty or 1.0) + qty = delivered_qty or line.product_uom_qty + average_price = qty and ( + cost_price or line.purchase_price) / qty or 0.0 vals['purchase_price_delivery'] = tools.float_round( - average_price, precision_rounding=rounding) + average_price, precision_digits=digits) if line.qty_delivered == line.product_uom_qty: vals['margin_delivered'] = line.margin elif line.product_uom_qty: vals['margin_delivered'] = ( line.qty_delivered * line.margin / line.product_uom_qty) - vals['margin_delivered_percent'] = ( + vals['margin_delivered_percent'] = qty and ( (line.price_reduce - vals['purchase_price_delivery']) / - line.price_reduce * 100.0) + line.price_reduce * 100.0) or 0.0 line.update(vals) diff --git a/sale_margin_delivered/static/description/icon.png b/sale_margin_delivered/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 5ca1b9d17e63ff5e60b874b2dc15f439b01a209b Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Mon, 15 Apr 2019 23:02:24 +0200 Subject: [PATCH 04/49] [11.0][FIX] sale_margin_delivered: Fix cost price unit from stock moves (#44) --- sale_margin_delivered/models/__init__.py | 1 - sale_margin_delivered/models/sale_margin.py | 11 +-- sale_margin_delivered/tests/__init__.py | 3 + .../tests/test_sale_margin_delivered.py | 83 +++++++++++++++++++ 4 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 sale_margin_delivered/tests/__init__.py create mode 100644 sale_margin_delivered/tests/test_sale_margin_delivered.py diff --git a/sale_margin_delivered/models/__init__.py b/sale_margin_delivered/models/__init__.py index 10f6472fb..7df041a90 100644 --- a/sale_margin_delivered/models/__init__.py +++ b/sale_margin_delivered/models/__init__.py @@ -1,2 +1 @@ from . import sale_margin - diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py index f1b7fac7c..42cde3c0a 100644 --- a/sale_margin_delivered/models/sale_margin.py +++ b/sale_margin_delivered/models/sale_margin.py @@ -30,6 +30,8 @@ class SaleOrderLine(models.Model): def _compute_margin_delivered(self): digits = self.env['decimal.precision'].precision_get('Product Price') for line in self.filtered('price_reduce'): + if not line.qty_delivered and not line.product_uom_qty: + continue vals = { 'margin_delivered': 0.0, 'margin_delivered_percent': 0.0, @@ -44,15 +46,14 @@ def _compute_margin_delivered(self): delivered_qty += move.product_qty cost_price += move.product_qty * abs(move.price_unit) qty = delivered_qty or line.product_uom_qty - average_price = qty and ( - cost_price or line.purchase_price) / qty or 0.0 + average_price = (cost_price / qty) or line.purchase_price vals['purchase_price_delivery'] = tools.float_round( average_price, precision_digits=digits) - if line.qty_delivered == line.product_uom_qty: - vals['margin_delivered'] = line.margin - elif line.product_uom_qty: + if line.qty_delivered: vals['margin_delivered'] = ( line.qty_delivered * line.margin / line.product_uom_qty) + else: + vals['margin_delivered'] = line.margin vals['margin_delivered_percent'] = qty and ( (line.price_reduce - vals['purchase_price_delivery']) / line.price_reduce * 100.0) or 0.0 diff --git a/sale_margin_delivered/tests/__init__.py b/sale_margin_delivered/tests/__init__.py new file mode 100644 index 000000000..42412e220 --- /dev/null +++ b/sale_margin_delivered/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from . import test_sale_margin_delivered diff --git a/sale_margin_delivered/tests/test_sale_margin_delivered.py b/sale_margin_delivered/tests/test_sale_margin_delivered.py new file mode 100644 index 000000000..42ad6bdfe --- /dev/null +++ b/sale_margin_delivered/tests/test_sale_margin_delivered.py @@ -0,0 +1,83 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from datetime import datetime +from odoo.tests import SavepointCase + + +class TestSaleMarginCostExtra(SavepointCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.SaleOrder = cls.env['sale.order'] + cls.product_uom_id = cls.env.ref('product.product_uom_unit') + cls.product = cls.env['product.product'].create({ + 'name': 'test', + 'type': 'product', + 'uom_id': cls.product_uom_id.id, + 'standard_price': 10.0, + 'list_price': 20.00, + 'tracking': 'none', + }) + cls.src_location = cls.env.ref('stock.stock_location_stock') + cls.pricelist = cls.env['product.pricelist'].create({ + 'name': 'Test pricelist', + 'item_ids': [(0, 0, { + 'applied_on': '3_global', + 'compute_price': 'formula', + 'base': 'list_price', + })] + }) + cls.partner = cls.env['res.partner'].create({ + 'name': 'partner test', + 'property_product_pricelist': cls.pricelist.id, + }) + cls.quant = cls.env['stock.quant'].create({ + 'product_id': cls.product.id, + 'location_id': cls.src_location.id, + 'quantity': 100.0, + }) + + def _new_sale_order(self): + sale_order = self.SaleOrder.new({ + 'date_order': datetime.today(), + 'name': 'Test_SO011', + 'order_line': [ + (0, 0, { + 'product_id': self.product.id, + 'product_uom_qty': 6, + }) + ], + 'partner_id': self.partner.id, + }) + sale_order.onchange_partner_id() + return self.SaleOrder.create( + sale_order._convert_to_write(sale_order._cache)) + + def test_sale_margin_ordered(self): + sale_order = self._new_sale_order() + order_line = sale_order.order_line[:1] + self.assertEqual(order_line.margin_delivered, 60.0) + self.assertEqual(order_line.margin_delivered_percent, 50.0) + self.assertEqual( + order_line.purchase_price_delivery, order_line.purchase_price) + + def test_sale_margin_delivered(self): + sale_order = self._new_sale_order() + sale_order.action_confirm() + picking = sale_order.picking_ids + picking.action_assign() + picking.move_line_ids.qty_done = 3.0 + picking.action_done() + order_line = sale_order.order_line[:1] + self.assertEqual(order_line.margin_delivered, 30.0) + self.assertEqual(order_line.margin_delivered_percent, 50.0) + self.assertEqual( + order_line.purchase_price_delivery, order_line.purchase_price) + + def test_sale_margin_zero(self): + sale_order = self._new_sale_order() + order_line = sale_order.order_line[:1] + order_line.product_uom_qty = 0.0 + self.assertEqual(order_line.margin_delivered, 0.0) + self.assertEqual(order_line.margin_delivered_percent, 0) From 6bc147b32bebbe3f8b269a3f7097d982c0b11f84 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Tue, 16 Apr 2019 12:30:40 +0200 Subject: [PATCH 05/49] [11.0][IMP] sale_margin_delivered: take an account returned moves --- sale_margin_delivered/models/sale_margin.py | 44 +++++++++-------- .../tests/test_sale_margin_delivered.py | 47 ++++++++++++++++++- 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py index 42cde3c0a..a87f6a408 100644 --- a/sale_margin_delivered/models/sale_margin.py +++ b/sale_margin_delivered/models/sale_margin.py @@ -32,29 +32,27 @@ def _compute_margin_delivered(self): for line in self.filtered('price_reduce'): if not line.qty_delivered and not line.product_uom_qty: continue - vals = { - 'margin_delivered': 0.0, - 'margin_delivered_percent': 0.0, - 'purchase_price_delivery': line.purchase_price, - } - delivered_qty = 0.0 - cost_price = 0.0 - moves = line.move_ids.filtered(lambda x: ( - x.state == 'done' and x.picking_code == 'outgoing' - )) - for move in moves: - delivered_qty += move.product_qty - cost_price += move.product_qty * abs(move.price_unit) - qty = delivered_qty or line.product_uom_qty - average_price = (cost_price / qty) or line.purchase_price - vals['purchase_price_delivery'] = tools.float_round( - average_price, precision_digits=digits) + qty = line.qty_delivered or line.product_uom_qty + line.purchase_price_delivery = line.purchase_price + line.margin_delivered = line.margin if line.qty_delivered: - vals['margin_delivered'] = ( + cost_price = 0.0 + moves = line.move_ids.filtered( + lambda x: ( + x.state == 'done' and ( + x.picking_code == 'outgoing' or ( + x.picking_code == 'incoming' and x.to_refund)) + )) + for move in moves: + cost_price += move.product_qty * move.price_unit + average_price = (abs(cost_price) / + line.qty_delivered) or line.purchase_price + line.purchase_price_delivery = tools.float_round( + average_price, precision_digits=digits) + line.margin_delivered = ( line.qty_delivered * line.margin / line.product_uom_qty) - else: - vals['margin_delivered'] = line.margin - vals['margin_delivered_percent'] = qty and ( - (line.price_reduce - vals['purchase_price_delivery']) / + # compute percent margin based on delivered quantities or ordered + # quantities + line.margin_delivered_percent = qty and ( + (line.price_reduce - line.purchase_price_delivery) / line.price_reduce * 100.0) or 0.0 - line.update(vals) diff --git a/sale_margin_delivered/tests/test_sale_margin_delivered.py b/sale_margin_delivered/tests/test_sale_margin_delivered.py index 42ad6bdfe..39a7e6649 100644 --- a/sale_margin_delivered/tests/test_sale_margin_delivered.py +++ b/sale_margin_delivered/tests/test_sale_margin_delivered.py @@ -4,7 +4,7 @@ from odoo.tests import SavepointCase -class TestSaleMarginCostExtra(SavepointCase): +class TestSaleMarginDelivered(SavepointCase): @classmethod def setUpClass(cls): @@ -46,6 +46,7 @@ def _new_sale_order(self): (0, 0, { 'product_id': self.product.id, 'product_uom_qty': 6, + 'product_uom': self.product.uom_po_id.id, }) ], 'partner_id': self.partner.id, @@ -81,3 +82,47 @@ def test_sale_margin_zero(self): order_line.product_uom_qty = 0.0 self.assertEqual(order_line.margin_delivered, 0.0) self.assertEqual(order_line.margin_delivered_percent, 0) + + def _create_return(self, picking, to_refund=False): + return_wiz = self.env['stock.return.picking'].with_context( + active_id=picking.id + ).create({}) + return_wiz.product_return_moves.write({ + 'quantity': 3.0, + 'to_refund': to_refund, + }) + new_picking_id, pick_type_id = return_wiz._create_returns() + return self.env['stock.picking'].browse(new_picking_id) + + def _validate_so_picking(self, sale_order): + picking = sale_order.picking_ids + picking.action_assign() + picking.move_line_ids.qty_done = 6.0 + picking.action_done() + return picking + + def test_sale_margin_delivered_return_to_refund(self): + sale_order = self._new_sale_order() + sale_order.action_confirm() + picking = self._validate_so_picking(sale_order) + picking_return = self._create_return(picking, to_refund=True) + picking_return.move_line_ids.qty_done = 3.0 + picking_return.action_done() + order_line = sale_order.order_line[:1] + self.assertEqual(order_line.margin_delivered, 30.0) + self.assertEqual(order_line.margin_delivered_percent, 50.0) + self.assertEqual( + order_line.purchase_price_delivery, order_line.purchase_price) + + def test_sale_margin_delivered_return_no_refund(self): + sale_order = self._new_sale_order() + sale_order.action_confirm() + picking = self._validate_so_picking(sale_order) + picking_return = self._create_return(picking, to_refund=False) + picking_return.move_line_ids.qty_done = 3.0 + picking_return.action_done() + order_line = sale_order.order_line[:1] + self.assertEqual(order_line.margin_delivered, 60.0) + self.assertEqual(order_line.margin_delivered_percent, 50.0) + self.assertEqual( + order_line.purchase_price_delivery, order_line.purchase_price) From 45a65fdf076cab8ceb8f2e18fe18c895cd747834 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Wed, 17 Apr 2019 13:53:46 +0200 Subject: [PATCH 06/49] [11.0][IMP] sale_margin_delivered: Compute avoid use product_uom_qty to compute delivered margin. Other module tests fails [UPD] README.rst --- sale_margin_delivered/models/sale_margin.py | 5 +++-- sale_margin_delivered/static/description/index.html | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sale_margin_delivered/models/sale_margin.py b/sale_margin_delivered/models/sale_margin.py index a87f6a408..2d0e429aa 100644 --- a/sale_margin_delivered/models/sale_margin.py +++ b/sale_margin_delivered/models/sale_margin.py @@ -49,8 +49,9 @@ def _compute_margin_delivered(self): line.qty_delivered) or line.purchase_price line.purchase_price_delivery = tools.float_round( average_price, precision_digits=digits) - line.margin_delivered = ( - line.qty_delivered * line.margin / line.product_uom_qty) + line.margin_delivered = line.qty_delivered * ( + line.price_reduce - line.purchase_price_delivery + ) # compute percent margin based on delivered quantities or ordered # quantities line.margin_delivered_percent = qty and ( diff --git a/sale_margin_delivered/static/description/index.html b/sale_margin_delivered/static/description/index.html index a89519e54..ca39aa3cf 100644 --- a/sale_margin_delivered/static/description/index.html +++ b/sale_margin_delivered/static/description/index.html @@ -3,7 +3,7 @@ - + Sale Margin Delivered + + +
+

Sale Margin Delivered - Sale Margin Security

+ + +

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

+

Glue auto installable module between ‘Sale Margin Delivered’ +and ‘Sale Margin Security’ modules.

+

It restrict usage of fields introduced by margin delivered module +to a group of users, defined in the margin security modules.

+

Table of contents

+ +
+

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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
  • GRAP
  • +
+
+
+

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.

+

Current maintainer:

+

sergio-teruel

+

This module is part of the OCA/margin-analysis project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_margin_delivered_security/views/sale_margin_delivered_view.xml b/sale_margin_delivered_security/views/sale_margin_delivered_view.xml new file mode 100644 index 000000000..65e1e4d5c --- /dev/null +++ b/sale_margin_delivered_security/views/sale_margin_delivered_view.xml @@ -0,0 +1,26 @@ + + + + + sale.order + + + + sale_margin_security.group_sale_margin_security + + + sale_margin_security.group_sale_margin_security + + + sale_margin_security.group_sale_margin_security + + + + From d25c94f21f4b7668423f0f8de93c25a6d8bc3853 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 15 Sep 2023 07:16:44 +0000 Subject: [PATCH 37/49] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sale_margin_delivered_security/static/description/icon.png diff --git a/sale_margin_delivered_security/static/description/icon.png b/sale_margin_delivered_security/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 From 4b4de937bc3beeb5ad08490caa35cd687daa4499 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 22 Jan 2024 07:28:44 +0000 Subject: [PATCH 38/49] Added translation using Weblate (Italian) --- sale_margin_delivered_security/i18n/it.po | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sale_margin_delivered_security/i18n/it.po diff --git a/sale_margin_delivered_security/i18n/it.po b/sale_margin_delivered_security/i18n/it.po new file mode 100644 index 000000000..73388557f --- /dev/null +++ b/sale_margin_delivered_security/i18n/it.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" From dd1ded0ce71a379b621d9fd800e8d88cc2833bfa Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 8 Mar 2024 09:25:26 +0000 Subject: [PATCH 39/49] [IMP] sale_margin_delivered_security: combine with product_cost_security Following https://github.com/OCA/product-attribute/pull/1538, the security is now done via mixin and the view can be removed. @moduon MT-5158 --- sale_margin_delivered_security/README.rst | 12 ++++++--- sale_margin_delivered_security/__init__.py | 1 + .../__manifest__.py | 5 ++-- sale_margin_delivered_security/i18n/it.po | 25 ++++++++++++++++++ .../i18n/sale_margin_delivered_security.pot | 26 +++++++++++++++++++ .../models/__init__.py | 1 + .../models/sale_order.py | 17 ++++++++++++ .../static/description/index.html | 7 +++-- .../views/sale_margin_delivered_view.xml | 26 ------------------- 9 files changed, 84 insertions(+), 36 deletions(-) create mode 100644 sale_margin_delivered_security/models/__init__.py create mode 100644 sale_margin_delivered_security/models/sale_order.py delete mode 100644 sale_margin_delivered_security/views/sale_margin_delivered_view.xml diff --git a/sale_margin_delivered_security/README.rst b/sale_margin_delivered_security/README.rst index 35f515620..a9312e5f4 100644 --- a/sale_margin_delivered_security/README.rst +++ b/sale_margin_delivered_security/README.rst @@ -7,7 +7,7 @@ Sale Margin Delivered - Sale Margin Security !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:776fdc7ba6f0b52c2bb9229c972b8a5ff2dc59b45c29d69b48d2d7fcd8777579 + !! source digest: sha256:3ea1a4f92b3f8bc054e2c61a0403283f8b9e94c6162d01689ed30b26fd86bf76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -87,10 +87,16 @@ promote its widespread use. .. |maintainer-sergio-teruel| image:: https://github.com/sergio-teruel.png?size=40px :target: https://github.com/sergio-teruel :alt: sergio-teruel +.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px + :target: https://github.com/rafaelbn + :alt: rafaelbn +.. |maintainer-yajo| image:: https://github.com/yajo.png?size=40px + :target: https://github.com/yajo + :alt: yajo -Current `maintainer `__: +Current `maintainers `__: -|maintainer-sergio-teruel| +|maintainer-sergio-teruel| |maintainer-rafaelbn| |maintainer-yajo| This module is part of the `OCA/margin-analysis `_ project on GitHub. diff --git a/sale_margin_delivered_security/__init__.py b/sale_margin_delivered_security/__init__.py index e69de29bb..0650744f6 100644 --- a/sale_margin_delivered_security/__init__.py +++ b/sale_margin_delivered_security/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_margin_delivered_security/__manifest__.py b/sale_margin_delivered_security/__manifest__.py index 09237af44..78a71f100 100644 --- a/sale_margin_delivered_security/__manifest__.py +++ b/sale_margin_delivered_security/__manifest__.py @@ -4,13 +4,12 @@ "name": "Sale Margin Delivered - Sale Margin Security", "summary": "Glue module between sale margin delivered" " and sale margin security modules", - "version": "16.0.1.0.0", + "version": "16.0.1.2.0", "author": "Tecnativa, GRAP, Odoo Community Association (OCA)", "website": "https://github.com/OCA/margin-analysis", "category": "Sales", "license": "AGPL-3", "depends": ["sale_margin_delivered", "sale_margin_security"], - "data": ["views/sale_margin_delivered_view.xml"], "auto_install": True, - "maintainers": ["sergio-teruel"], + "maintainers": ["sergio-teruel", "rafaelbn", "yajo"], } diff --git a/sale_margin_delivered_security/i18n/it.po b/sale_margin_delivered_security/i18n/it.po index 73388557f..cfcd7b86a 100644 --- a/sale_margin_delivered_security/i18n/it.po +++ b/sale_margin_delivered_security/i18n/it.po @@ -12,3 +12,28 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered +msgid "Margin Delivered" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered_percent +msgid "Margin Delivered Percent" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__purchase_price_delivery +msgid "Purchase Price Delivery" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model,name:sale_margin_delivered_security.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__user_can_update_cost +msgid "User Can Update Cost" +msgstr "" diff --git a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot index 78d58d53f..9172231a1 100644 --- a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot +++ b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot @@ -1,5 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: +# * sale_margin_delivered_security # msgid "" msgstr "" @@ -11,3 +12,28 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered +msgid "Margin Delivered" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered_percent +msgid "Margin Delivered Percent" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__purchase_price_delivery +msgid "Purchase Price Delivery" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model,name:sale_margin_delivered_security.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__user_can_update_cost +msgid "User Can Update Cost" +msgstr "" diff --git a/sale_margin_delivered_security/models/__init__.py b/sale_margin_delivered_security/models/__init__.py new file mode 100644 index 000000000..6aacb7531 --- /dev/null +++ b/sale_margin_delivered_security/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order diff --git a/sale_margin_delivered_security/models/sale_order.py b/sale_margin_delivered_security/models/sale_order.py new file mode 100644 index 000000000..bda552338 --- /dev/null +++ b/sale_margin_delivered_security/models/sale_order.py @@ -0,0 +1,17 @@ +# Copyright 2024 Moduon Team S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0) +from odoo import fields, models + + +class SaleOrder(models.Model): + _name = "sale.order" + _inherit = ["sale.order", "product.cost.security.mixin"] + + # Inherited fields + purchase_price_delivery = fields.Float( + groups="product_cost_security.group_product_cost" + ) + margin_delivered_percent = fields.Float( + groups="product_cost_security.group_product_cost" + ) + margin_delivered = fields.Float(groups="product_cost_security.group_product_cost") diff --git a/sale_margin_delivered_security/static/description/index.html b/sale_margin_delivered_security/static/description/index.html index fae4e509f..ecf4abf3f 100644 --- a/sale_margin_delivered_security/static/description/index.html +++ b/sale_margin_delivered_security/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

Sale Margin Delivered - Sale Margin Security

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:776fdc7ba6f0b52c2bb9229c972b8a5ff2dc59b45c29d69b48d2d7fcd8777579 +!! source digest: sha256:3ea1a4f92b3f8bc054e2c61a0403283f8b9e94c6162d01689ed30b26fd86bf76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

Glue auto installable module between ‘Sale Margin Delivered’ @@ -423,8 +422,8 @@

Maintainers

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.

-

Current maintainer:

-

sergio-teruel

+

Current maintainers:

+

sergio-teruel rafaelbn yajo

This module is part of the OCA/margin-analysis project on GitHub.

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

diff --git a/sale_margin_delivered_security/views/sale_margin_delivered_view.xml b/sale_margin_delivered_security/views/sale_margin_delivered_view.xml deleted file mode 100644 index 65e1e4d5c..000000000 --- a/sale_margin_delivered_security/views/sale_margin_delivered_view.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - sale.order - - - - sale_margin_security.group_sale_margin_security - - - sale_margin_security.group_sale_margin_security - - - sale_margin_security.group_sale_margin_security - - - - From ce12410f9b49eee0b0fba60010d218db632776ad Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 8 Apr 2024 06:34:10 +0000 Subject: [PATCH 40/49] Translated using Weblate (Italian) Currently translated at 100.0% (5 of 5 strings) Translation: margin-analysis-16.0/margin-analysis-16.0-sale_margin_delivered_security Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-sale_margin_delivered_security/it/ --- sale_margin_delivered_security/i18n/it.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sale_margin_delivered_security/i18n/it.po b/sale_margin_delivered_security/i18n/it.po index cfcd7b86a..a28538de3 100644 --- a/sale_margin_delivered_security/i18n/it.po +++ b/sale_margin_delivered_security/i18n/it.po @@ -5,35 +5,37 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-04-08 08:37+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered msgid "Margin Delivered" -msgstr "" +msgstr "Margine consegnato" #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered_percent msgid "Margin Delivered Percent" -msgstr "" +msgstr "Percentuale margine consegnato" #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__purchase_price_delivery msgid "Purchase Price Delivery" -msgstr "" +msgstr "Prezzo consegna acquisto" #. module: sale_margin_delivered_security #: model:ir.model,name:sale_margin_delivered_security.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Ordine di vendita" #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__user_can_update_cost msgid "User Can Update Cost" -msgstr "" +msgstr "L'utente può aggiornare il costo" From 8bb8c8caa058afe756b908bb44a5b5d1ae1b867b Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Mon, 10 Jun 2024 16:58:05 +0200 Subject: [PATCH 41/49] [FIX] sale_margin_delivered_security: Add security groups to right fields The fields to secure are defined on the sale.order.line model not on sale.order --- sale_margin_delivered_security/README.rst | 2 +- .../__manifest__.py | 2 +- sale_margin_delivered_security/i18n/it.po | 56 ++++++++++++++++--- .../i18n/sale_margin_delivered_security.pot | 42 ++++++++++++-- .../models/__init__.py | 2 +- .../{sale_order.py => sale_order_line.py} | 6 +- .../static/description/index.html | 2 +- 7 files changed, 92 insertions(+), 20 deletions(-) rename sale_margin_delivered_security/models/{sale_order.py => sale_order_line.py} (77%) diff --git a/sale_margin_delivered_security/README.rst b/sale_margin_delivered_security/README.rst index a9312e5f4..a4daca2e1 100644 --- a/sale_margin_delivered_security/README.rst +++ b/sale_margin_delivered_security/README.rst @@ -7,7 +7,7 @@ Sale Margin Delivered - Sale Margin Security !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3ea1a4f92b3f8bc054e2c61a0403283f8b9e94c6162d01689ed30b26fd86bf76 + !! source digest: sha256:1e56ac10fc23a7eecce2fecdd15aafcf3bb302a0feb3436279cb1fb9e3196c3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/sale_margin_delivered_security/__manifest__.py b/sale_margin_delivered_security/__manifest__.py index 78a71f100..63697baab 100644 --- a/sale_margin_delivered_security/__manifest__.py +++ b/sale_margin_delivered_security/__manifest__.py @@ -4,7 +4,7 @@ "name": "Sale Margin Delivered - Sale Margin Security", "summary": "Glue module between sale margin delivered" " and sale margin security modules", - "version": "16.0.1.2.0", + "version": "16.0.1.2.1", "author": "Tecnativa, GRAP, Odoo Community Association (OCA)", "website": "https://github.com/OCA/margin-analysis", "category": "Sales", diff --git a/sale_margin_delivered_security/i18n/it.po b/sale_margin_delivered_security/i18n/it.po index a28538de3..e18f4f556 100644 --- a/sale_margin_delivered_security/i18n/it.po +++ b/sale_margin_delivered_security/i18n/it.po @@ -16,26 +16,68 @@ msgstr "" "X-Generator: Weblate 4.17\n" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__purchase_price_delivery +msgid "" +"Average Unit Cost of delivered products.\n" +"\n" +"Formula: Value Delivered / Quantity Delivered\n" +"\n" +"When using the FIFO method, the value of this field may not match the actual " +"cost of the product delivered.\n" +"There may also be differences with the costing of the Sales from Deliveries " +"report, because when the sales order is created, it is not known exactly " +"which units will actually be delivered to calculate their cost.\n" +"This is because when the sales order is created, it is not known which units " +"will actually be delivered to calculate their actual cost. You do not have " +"this information until you validate the corresponding delivery note." +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__margin_delivered msgid "Margin Delivered" msgstr "Margine consegnato" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered_percent +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__margin_delivered_percent msgid "Margin Delivered Percent" msgstr "Percentuale margine consegnato" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__purchase_price_delivery +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__margin_delivered_percent +msgid "" +"Margin percent between the Unit Price with discounts and Delivered Unit " +"Cost.\n" +"\n" +"Formula: ((Unit Price with Discounts - Average Unit Cost of delivered " +"products) / Unit Price with Discounts)" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__purchase_price_delivery msgid "Purchase Price Delivery" msgstr "Prezzo consegna acquisto" #. module: sale_margin_delivered_security -#: model:ir.model,name:sale_margin_delivered_security.model_sale_order -msgid "Sales Order" -msgstr "Ordine di vendita" +#: model:ir.model,name:sale_margin_delivered_security.model_sale_order_line +msgid "Sales Order Line" +msgstr "" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__user_can_update_cost +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__margin_delivered +msgid "" +"Total Margin of all delivered products.\n" +"\n" +"Formula: Delivered Quantities * (Unit Price with Discounts - Average Unit " +"Cost of Delivered Products)\n" +"\n" +"Value may differ from Cost Price because Stock Valuation Layers are used " +"instead of Cost on line." +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__user_can_update_cost msgid "User Can Update Cost" msgstr "L'utente può aggiornare il costo" + +#~ msgid "Sales Order" +#~ msgstr "Ordine di vendita" diff --git a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot index 9172231a1..9da4fd6a1 100644 --- a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot +++ b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot @@ -14,26 +14,56 @@ msgstr "" "Plural-Forms: \n" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__purchase_price_delivery +msgid "" +"Average Unit Cost of delivered products.\n" +"\n" +"Formula: Value Delivered / Quantity Delivered\n" +"\n" +"When using the FIFO method, the value of this field may not match the actual cost of the product delivered.\n" +"There may also be differences with the costing of the Sales from Deliveries report, because when the sales order is created, it is not known exactly which units will actually be delivered to calculate their cost.\n" +"This is because when the sales order is created, it is not known which units will actually be delivered to calculate their actual cost. You do not have this information until you validate the corresponding delivery note." +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__margin_delivered msgid "Margin Delivered" msgstr "" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__margin_delivered_percent +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__margin_delivered_percent msgid "Margin Delivered Percent" msgstr "" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__purchase_price_delivery +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__margin_delivered_percent +msgid "" +"Margin percent between the Unit Price with discounts and Delivered Unit Cost.\n" +"\n" +"Formula: ((Unit Price with Discounts - Average Unit Cost of delivered products) / Unit Price with Discounts)" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__purchase_price_delivery msgid "Purchase Price Delivery" msgstr "" #. module: sale_margin_delivered_security -#: model:ir.model,name:sale_margin_delivered_security.model_sale_order -msgid "Sales Order" +#: model:ir.model,name:sale_margin_delivered_security.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_margin_delivered_security +#: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__margin_delivered +msgid "" +"Total Margin of all delivered products.\n" +"\n" +"Formula: Delivered Quantities * (Unit Price with Discounts - Average Unit Cost of Delivered Products)\n" +"\n" +"Value may differ from Cost Price because Stock Valuation Layers are used instead of Cost on line." msgstr "" #. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order__user_can_update_cost +#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__user_can_update_cost msgid "User Can Update Cost" msgstr "" diff --git a/sale_margin_delivered_security/models/__init__.py b/sale_margin_delivered_security/models/__init__.py index 6aacb7531..8eb9d1d40 100644 --- a/sale_margin_delivered_security/models/__init__.py +++ b/sale_margin_delivered_security/models/__init__.py @@ -1 +1 @@ -from . import sale_order +from . import sale_order_line diff --git a/sale_margin_delivered_security/models/sale_order.py b/sale_margin_delivered_security/models/sale_order_line.py similarity index 77% rename from sale_margin_delivered_security/models/sale_order.py rename to sale_margin_delivered_security/models/sale_order_line.py index bda552338..68b081a59 100644 --- a/sale_margin_delivered_security/models/sale_order.py +++ b/sale_margin_delivered_security/models/sale_order_line.py @@ -3,9 +3,9 @@ from odoo import fields, models -class SaleOrder(models.Model): - _name = "sale.order" - _inherit = ["sale.order", "product.cost.security.mixin"] +class SaleOrderLine(models.Model): + _name = "sale.order.line" + _inherit = ["sale.order.line", "product.cost.security.mixin"] # Inherited fields purchase_price_delivery = fields.Float( diff --git a/sale_margin_delivered_security/static/description/index.html b/sale_margin_delivered_security/static/description/index.html index ecf4abf3f..d89a40d9f 100644 --- a/sale_margin_delivered_security/static/description/index.html +++ b/sale_margin_delivered_security/static/description/index.html @@ -366,7 +366,7 @@

Sale Margin Delivered - Sale Margin Security

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:3ea1a4f92b3f8bc054e2c61a0403283f8b9e94c6162d01689ed30b26fd86bf76 +!! source digest: sha256:1e56ac10fc23a7eecce2fecdd15aafcf3bb302a0feb3436279cb1fb9e3196c3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

Glue auto installable module between ‘Sale Margin Delivered’ From 91d58100443fe97420453dfa65df318400874c52 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 24 Jun 2024 12:09:07 +0000 Subject: [PATCH 42/49] Translated using Weblate (Italian) Currently translated at 100.0% (8 of 8 strings) Translation: margin-analysis-16.0/margin-analysis-16.0-sale_margin_delivered_security Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-sale_margin_delivered_security/it/ --- sale_margin_delivered_security/i18n/it.po | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/sale_margin_delivered_security/i18n/it.po b/sale_margin_delivered_security/i18n/it.po index e18f4f556..124fa1c69 100644 --- a/sale_margin_delivered_security/i18n/it.po +++ b/sale_margin_delivered_security/i18n/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-04-08 08:37+0000\n" +"PO-Revision-Date: 2024-06-24 14:35+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -31,6 +31,19 @@ msgid "" "will actually be delivered to calculate their actual cost. You do not have " "this information until you validate the corresponding delivery note." msgstr "" +"Costo unitario medio dei prodotti consegnati.\n" +"\n" +"Formula: valore consegnato / quantità consegnata\n" +"\n" +"Quando si utilizza il metodo FIFO, il valore di questo campo potrebbe non " +"corrispondere al costo effettivo del prodotto consegnato.\n" +"Potrebbero inoltre esserci differenze con la determinazione dei costi del " +"resoconto vendite da consegne, poiché quando viene creato l'ordine cliente, " +"non è noto esattamente quali unità verranno effettivamente consegnate per " +"calcolarne il costo.\n" +"Questo perché quando viene creato l'ordine cliente, non è noto quali unità " +"verranno effettivamente consegnate per calcolarne il costo effettivo. Non si " +"avranno queste informazioni finché non si convaliderà il DDT corrispondente." #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__margin_delivered @@ -51,6 +64,11 @@ msgid "" "Formula: ((Unit Price with Discounts - Average Unit Cost of delivered " "products) / Unit Price with Discounts)" msgstr "" +"Percentuale di margine tra il prezzo unitario con sconti e il costo unitario " +"di consegna.\n" +"\n" +"Formula: ((prezzo unitario con sconti - costo medio unitario dei prodotti " +"consegnati) / prezzo unitario con sconti)" #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__purchase_price_delivery @@ -60,7 +78,7 @@ msgstr "Prezzo consegna acquisto" #. module: sale_margin_delivered_security #: model:ir.model,name:sale_margin_delivered_security.model_sale_order_line msgid "Sales Order Line" -msgstr "" +msgstr "Riga ordine di vendita" #. module: sale_margin_delivered_security #: model:ir.model.fields,help:sale_margin_delivered_security.field_sale_order_line__margin_delivered @@ -73,6 +91,13 @@ msgid "" "Value may differ from Cost Price because Stock Valuation Layers are used " "instead of Cost on line." msgstr "" +"Margine totale di tutti i prodotti consegnati.\n" +"\n" +"Formula: quantità consegnate * (prezzo unitario con sconti - costo unitario " +"medio dei prodotti consegnati)\n" +"\n" +"Il valore può differire dal prezzo di costo poiché vengono utilizzati i " +"livelli di valutazione delle scorte anziché il costo in linea." #. module: sale_margin_delivered_security #: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__user_can_update_cost From c975c6f49bff07a35da408e544322bb6f560f54f Mon Sep 17 00:00:00 2001 From: Andrii Kompaniiets Date: Mon, 24 Nov 2025 12:42:28 +0100 Subject: [PATCH 43/49] [IMP] sale_margin_delivered_security: pre-commit auto fixes --- sale_margin_delivered_security/README.rst | 37 +++++++++---------- sale_margin_delivered_security/pyproject.toml | 3 ++ .../readme/CONTRIBUTORS.md | 6 +++ .../readme/CONTRIBUTORS.rst | 9 ----- .../readme/DESCRIPTION.md | 5 +++ .../readme/DESCRIPTION.rst | 5 --- .../static/description/index.html | 25 +++++++------ 7 files changed, 46 insertions(+), 44 deletions(-) create mode 100644 sale_margin_delivered_security/pyproject.toml create mode 100644 sale_margin_delivered_security/readme/CONTRIBUTORS.md delete mode 100644 sale_margin_delivered_security/readme/CONTRIBUTORS.rst create mode 100644 sale_margin_delivered_security/readme/DESCRIPTION.md delete mode 100644 sale_margin_delivered_security/readme/DESCRIPTION.rst diff --git a/sale_margin_delivered_security/README.rst b/sale_margin_delivered_security/README.rst index a4daca2e1..b5ff6de65 100644 --- a/sale_margin_delivered_security/README.rst +++ b/sale_margin_delivered_security/README.rst @@ -17,22 +17,22 @@ Sale Margin Delivered - Sale Margin Security :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github - :target: https://github.com/OCA/margin-analysis/tree/16.0/sale_margin_delivered_security + :target: https://github.com/OCA/margin-analysis/tree/18.0/sale_margin_delivered_security :alt: OCA/margin-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-sale_margin_delivered_security + :target: https://translation.odoo-community.org/projects/margin-analysis-18-0/margin-analysis-18-0-sale_margin_delivered_security :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/margin-analysis&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -Glue auto installable module between 'Sale Margin Delivered' -and 'Sale Margin Security' modules. +Glue auto installable module between 'Sale Margin Delivered' and 'Sale +Margin Security' modules. -It restrict usage of fields introduced by margin delivered module -to a group of users, defined in the margin security modules. +It restrict usage of fields introduced by margin delivered module to a +group of users, defined in the margin security modules. **Table of contents** @@ -45,7 +45,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. @@ -53,26 +53,25 @@ Credits ======= Authors -~~~~~~~ +------- * Tecnativa * GRAP Contributors -~~~~~~~~~~~~ +------------ +- `Tecnativa `__: -* `Tecnativa `_: + - Sergio Teruel + - David Vidal + - Carlos Roca + - Pilar Vargas - * Sergio Teruel - * David Vidal - * Carlos Roca - * Pilar Vargas - -* Sylvain Le Gal (https://twitter.com/legalsylvain) +- Sylvain Le Gal (https://twitter.com/legalsylvain) Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -98,6 +97,6 @@ Current `maintainers `__: |maintainer-sergio-teruel| |maintainer-rafaelbn| |maintainer-yajo| -This module is part of the `OCA/margin-analysis `_ project on GitHub. +This module is part of the `OCA/margin-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_margin_delivered_security/pyproject.toml b/sale_margin_delivered_security/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/sale_margin_delivered_security/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_margin_delivered_security/readme/CONTRIBUTORS.md b/sale_margin_delivered_security/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..9011b1267 --- /dev/null +++ b/sale_margin_delivered_security/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- [Tecnativa](https://www.tecnativa.com): + - Sergio Teruel + - David Vidal + - Carlos Roca + - Pilar Vargas +- Sylvain Le Gal () diff --git a/sale_margin_delivered_security/readme/CONTRIBUTORS.rst b/sale_margin_delivered_security/readme/CONTRIBUTORS.rst deleted file mode 100644 index c64b349de..000000000 --- a/sale_margin_delivered_security/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,9 +0,0 @@ - -* `Tecnativa `_: - - * Sergio Teruel - * David Vidal - * Carlos Roca - * Pilar Vargas - -* Sylvain Le Gal (https://twitter.com/legalsylvain) diff --git a/sale_margin_delivered_security/readme/DESCRIPTION.md b/sale_margin_delivered_security/readme/DESCRIPTION.md new file mode 100644 index 000000000..2623dc4c2 --- /dev/null +++ b/sale_margin_delivered_security/readme/DESCRIPTION.md @@ -0,0 +1,5 @@ +Glue auto installable module between 'Sale Margin Delivered' and 'Sale +Margin Security' modules. + +It restrict usage of fields introduced by margin delivered module to a +group of users, defined in the margin security modules. diff --git a/sale_margin_delivered_security/readme/DESCRIPTION.rst b/sale_margin_delivered_security/readme/DESCRIPTION.rst deleted file mode 100644 index 17fc0e4e7..000000000 --- a/sale_margin_delivered_security/readme/DESCRIPTION.rst +++ /dev/null @@ -1,5 +0,0 @@ -Glue auto installable module between 'Sale Margin Delivered' -and 'Sale Margin Security' modules. - -It restrict usage of fields introduced by margin delivered module -to a group of users, defined in the margin security modules. diff --git a/sale_margin_delivered_security/static/description/index.html b/sale_margin_delivered_security/static/description/index.html index d89a40d9f..b68ccd673 100644 --- a/sale_margin_delivered_security/static/description/index.html +++ b/sale_margin_delivered_security/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -368,11 +369,11 @@

Sale Margin Delivered - Sale Margin Security

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:1e56ac10fc23a7eecce2fecdd15aafcf3bb302a0feb3436279cb1fb9e3196c3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

-

Glue auto installable module between ‘Sale Margin Delivered’ -and ‘Sale Margin Security’ modules.

-

It restrict usage of fields introduced by margin delivered module -to a group of users, defined in the margin security modules.

+

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

+

Glue auto installable module between ‘Sale Margin Delivered’ and ‘Sale +Margin Security’ modules.

+

It restrict usage of fields introduced by margin delivered module to a +group of users, defined in the margin security modules.

Table of contents

    @@ -390,7 +391,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.

@@ -418,13 +419,15 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +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.

Current maintainers:

sergio-teruel rafaelbn yajo

-

This module is part of the OCA/margin-analysis project on GitHub.

+

This module is part of the OCA/margin-analysis project on GitHub.

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

From 6f584c7e588ea88a502bd41c276db28630f7709a Mon Sep 17 00:00:00 2001 From: Andrii Kompaniiets Date: Mon, 24 Nov 2025 13:25:59 +0100 Subject: [PATCH 44/49] [MIG] sale_margin_delivered_security: Migration to 18.0 --- sale_margin_delivered_security/__manifest__.py | 2 +- sale_margin_delivered_security/models/sale_order_line.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sale_margin_delivered_security/__manifest__.py b/sale_margin_delivered_security/__manifest__.py index 63697baab..3aecf491a 100644 --- a/sale_margin_delivered_security/__manifest__.py +++ b/sale_margin_delivered_security/__manifest__.py @@ -4,7 +4,7 @@ "name": "Sale Margin Delivered - Sale Margin Security", "summary": "Glue module between sale margin delivered" " and sale margin security modules", - "version": "16.0.1.2.1", + "version": "18.0.1.0.0", "author": "Tecnativa, GRAP, Odoo Community Association (OCA)", "website": "https://github.com/OCA/margin-analysis", "category": "Sales", diff --git a/sale_margin_delivered_security/models/sale_order_line.py b/sale_margin_delivered_security/models/sale_order_line.py index 68b081a59..0e9066e4c 100644 --- a/sale_margin_delivered_security/models/sale_order_line.py +++ b/sale_margin_delivered_security/models/sale_order_line.py @@ -4,8 +4,7 @@ class SaleOrderLine(models.Model): - _name = "sale.order.line" - _inherit = ["sale.order.line", "product.cost.security.mixin"] + _inherit = "sale.order.line" # Inherited fields purchase_price_delivery = fields.Float( From c2d6136e18fbf1c25cd91deefc51d279c0b32938 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 27 Nov 2025 16:59:43 +0000 Subject: [PATCH 45/49] [UPD] Update sale_margin_delivered_security.pot --- .../i18n/sale_margin_delivered_security.pot | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot index 9da4fd6a1..099013310 100644 --- a/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot +++ b/sale_margin_delivered_security/i18n/sale_margin_delivered_security.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -62,8 +62,3 @@ msgid "" "\n" "Value may differ from Cost Price because Stock Valuation Layers are used instead of Cost on line." msgstr "" - -#. module: sale_margin_delivered_security -#: model:ir.model.fields,field_description:sale_margin_delivered_security.field_sale_order_line__user_can_update_cost -msgid "User Can Update Cost" -msgstr "" From e36dd3f41645078fea27747ba10b764e8b8a3377 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 27 Nov 2025 17:02:30 +0000 Subject: [PATCH 46/49] [BOT] post-merge updates --- sale_margin_delivered_security/README.rst | 8 ++++-- .../__manifest__.py | 2 +- .../static/description/index.html | 26 ++++++++++++------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/sale_margin_delivered_security/README.rst b/sale_margin_delivered_security/README.rst index b5ff6de65..81300aa2c 100644 --- a/sale_margin_delivered_security/README.rst +++ b/sale_margin_delivered_security/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ============================================ Sale Margin Delivered - Sale Margin Security ============================================ @@ -7,13 +11,13 @@ Sale Margin Delivered - Sale Margin Security !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:1e56ac10fc23a7eecce2fecdd15aafcf3bb302a0feb3436279cb1fb9e3196c3c + !! source digest: sha256:7db97d339ed76ce97e637dacc344f608fd9d4af345825a28df482f955a5dc888 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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%2Fmargin--analysis-lightgray.png?logo=github diff --git a/sale_margin_delivered_security/__manifest__.py b/sale_margin_delivered_security/__manifest__.py index 3aecf491a..c546d258e 100644 --- a/sale_margin_delivered_security/__manifest__.py +++ b/sale_margin_delivered_security/__manifest__.py @@ -4,7 +4,7 @@ "name": "Sale Margin Delivered - Sale Margin Security", "summary": "Glue module between sale margin delivered" " and sale margin security modules", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "author": "Tecnativa, GRAP, Odoo Community Association (OCA)", "website": "https://github.com/OCA/margin-analysis", "category": "Sales", diff --git a/sale_margin_delivered_security/static/description/index.html b/sale_margin_delivered_security/static/description/index.html index b68ccd673..af0f881f9 100644 --- a/sale_margin_delivered_security/static/description/index.html +++ b/sale_margin_delivered_security/static/description/index.html @@ -3,7 +3,7 @@ -Sale Margin Delivered - Sale Margin Security +README.rst -
-

Sale Margin Delivered - Sale Margin Security

+
+ + +Odoo Community Association + +
+

Sale Margin Delivered - Sale Margin Security

-

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

Glue auto installable module between ‘Sale Margin Delivered’ and ‘Sale Margin Security’ modules.

It restrict usage of fields introduced by margin delivered module to a @@ -387,7 +392,7 @@

Sale Margin Delivered - Sale Margin Security

-

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 @@ -395,16 +400,16 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
  • GRAP
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -432,5 +437,6 @@

Maintainers

+
From ea3f2594c25b64000ad4a49b0994056217043112 Mon Sep 17 00:00:00 2001 From: "r.perez" Date: Sat, 28 Feb 2026 12:38:00 -0500 Subject: [PATCH 47/49] [IMP] sale_margin_delivered_security: pre-commit auto fixes --- sale_margin_delivered/README.rst | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sale_margin_delivered/README.rst b/sale_margin_delivered/README.rst index b02cd9e7a..d643a614c 100644 --- a/sale_margin_delivered/README.rst +++ b/sale_margin_delivered/README.rst @@ -45,8 +45,8 @@ sale order lines. If you need this module for those reasons, these might interest you too: -- sale_margin_delivered_dropshipping -- sale_report_delivered +- sale_margin_delivered_dropshipping +- sale_report_delivered Configuration ============= @@ -96,18 +96,18 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Sergio Teruel - - David Vidal - - Carlos Roca - - Pilar Vargas + - Sergio Teruel + - David Vidal + - Carlos Roca + - Pilar Vargas -- Eduardo de Miguel (`Moduon `__) -- Rafael Blasco (`Moduon `__) -- `Heliconia Solutions Pvt. Ltd. `__ +- Eduardo de Miguel (`Moduon `__) +- Rafael Blasco (`Moduon `__) +- `Heliconia Solutions Pvt. Ltd. `__ - - Bhavesh Heliconia + - Bhavesh Heliconia Maintainers ----------- From d595d08cc20b9d8ae118205a87949e6086973830 Mon Sep 17 00:00:00 2001 From: "r.perez" Date: Sat, 28 Feb 2026 12:39:41 -0500 Subject: [PATCH 48/49] [MIG] sale_margin_delivered_security: migration to 17.0 (backport from 18.0) --- sale_margin_delivered_security/README.rst | 28 ++++++++----------- .../__manifest__.py | 2 +- .../static/description/index.html | 28 ++++++++----------- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/sale_margin_delivered_security/README.rst b/sale_margin_delivered_security/README.rst index 81300aa2c..ac144a101 100644 --- a/sale_margin_delivered_security/README.rst +++ b/sale_margin_delivered_security/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ============================================ Sale Margin Delivered - Sale Margin Security ============================================ @@ -17,17 +13,17 @@ Sale Margin Delivered - Sale Margin Security .. |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/license-AGPL--3-blue.png +.. |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%2Fmargin--analysis-lightgray.png?logo=github - :target: https://github.com/OCA/margin-analysis/tree/18.0/sale_margin_delivered_security + :target: https://github.com/OCA/margin-analysis/tree/17.0/sale_margin_delivered_security :alt: OCA/margin-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/margin-analysis-18-0/margin-analysis-18-0-sale_margin_delivered_security + :target: https://translation.odoo-community.org/projects/margin-analysis-17-0/margin-analysis-17-0-sale_margin_delivered_security :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/margin-analysis&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -49,7 +45,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. @@ -65,14 +61,14 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Sergio Teruel - - David Vidal - - Carlos Roca - - Pilar Vargas + - Sergio Teruel + - David Vidal + - Carlos Roca + - Pilar Vargas -- Sylvain Le Gal (https://twitter.com/legalsylvain) +- Sylvain Le Gal (https://twitter.com/legalsylvain) Maintainers ----------- @@ -101,6 +97,6 @@ Current `maintainers `__: |maintainer-sergio-teruel| |maintainer-rafaelbn| |maintainer-yajo| -This module is part of the `OCA/margin-analysis `_ project on GitHub. +This module is part of the `OCA/margin-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_margin_delivered_security/__manifest__.py b/sale_margin_delivered_security/__manifest__.py index c546d258e..20e4b5cf8 100644 --- a/sale_margin_delivered_security/__manifest__.py +++ b/sale_margin_delivered_security/__manifest__.py @@ -4,7 +4,7 @@ "name": "Sale Margin Delivered - Sale Margin Security", "summary": "Glue module between sale margin delivered" " and sale margin security modules", - "version": "18.0.1.0.1", + "version": "17.0.1.0.1", "author": "Tecnativa, GRAP, Odoo Community Association (OCA)", "website": "https://github.com/OCA/margin-analysis", "category": "Sales", diff --git a/sale_margin_delivered_security/static/description/index.html b/sale_margin_delivered_security/static/description/index.html index af0f881f9..6555c3efe 100644 --- a/sale_margin_delivered_security/static/description/index.html +++ b/sale_margin_delivered_security/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Sale Margin Delivered - Sale Margin Security -
+
+

Sale Margin Delivered - Sale Margin Security

- - -Odoo Community Association - -
-

Sale Margin Delivered - Sale Margin Security

-

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

Glue auto installable module between ‘Sale Margin Delivered’ and ‘Sale Margin Security’ modules.

It restrict usage of fields introduced by margin delivered module to a @@ -392,24 +387,24 @@

Sale Margin Delivered - Sale Margin Security

-

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

  • Tecnativa
  • GRAP
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -432,11 +427,10 @@

Maintainers

promote its widespread use.

Current maintainers:

sergio-teruel rafaelbn yajo

-

This module is part of the OCA/margin-analysis project on GitHub.

+

This module is part of the OCA/margin-analysis project on GitHub.

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

-
From 3b3eb871c78229957fe47509ae8ba67783f88eb1 Mon Sep 17 00:00:00 2001 From: "r.perez" Date: Sat, 28 Feb 2026 12:43:12 -0500 Subject: [PATCH 49/49] [DON'T MERGE] test-requirements.txt --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..f23446af9 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +odoo-addon-sale_margin_delivered @ git+https://github.com/OCA/margin-analysis.git@refs/pull/239/head#subdirectory=sale_margin_delivered