diff --git a/sale_margin_no_onchange/__init__.py b/sale_margin_no_onchange/__init__.py index 64f77eb..abd84e7 100644 --- a/sale_margin_no_onchange/__init__.py +++ b/sale_margin_no_onchange/__init__.py @@ -1,4 +1,2 @@ -# -*- encoding: utf-8 -*- - from . import sale from . import sale_report diff --git a/sale_margin_no_onchange/__manifest__.py b/sale_margin_no_onchange/__manifest__.py index 22e7e3b..93091c6 100644 --- a/sale_margin_no_onchange/__manifest__.py +++ b/sale_margin_no_onchange/__manifest__.py @@ -1,17 +1,18 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2015-2018 Akretion (http://www.akretion.com) +# Copyright (C) 2015-2019 Akretion (http://www.akretion.com) # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Sale Margin No Onchange', - 'version': '10.0.1.0.0', - 'category': 'Accounting', + 'version': '12.0.1.0.0', + 'category': 'Sales', 'license': 'AGPL-3', 'summary': 'Copy standard price on sale order line and compute margins', 'description': """ -This module copies the field *standard_price* of the product on the sale order line when the sale order line is created. The allows the computation of the margin of the sale order. +This module copies the field *standard_price* of the product on the sale order line when the sale order line is created and then computes the margin of the sale order and the sale order line (in the currency of the quotation, in the currency of the company and the margin rate). + +I decided to develop this module as an alternative to the OCA sale margin modules because I wanted a small and simple module. The module *account_invoice_margin*, available in the same Github repository, do the same thing on customer invoices. This module has been written by Alexis de Lattre from Akretion . @@ -19,8 +20,6 @@ This module has been written by Alexis de Lattre from Akretion 'author': 'Akretion', 'website': 'http://www.akretion.com', 'depends': ['sale'], - 'data': [ - 'sale_view.xml', - ], + 'data': ['sale_view.xml'], 'installable': True, } diff --git a/sale_margin_no_onchange/sale.py b/sale_margin_no_onchange/sale.py index e182425..bd4a6a7 100644 --- a/sale_margin_no_onchange/sale.py +++ b/sale_margin_no_onchange/sale.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2015-2018 Akretion (http://www.akretion.com) +# Copyright (C) 2015-2019 Akretion (http://www.akretion.com) # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, fields, api +from odoo import api, fields, models import odoo.addons.decimal_precision as dp @@ -14,7 +13,7 @@ class SaleOrderLine(models.Model): # Also defined in bi_sale_company_currency company_currency_id = fields.Many2one( related='order_id.company_id.currency_id', - readonly=True, store=True, string='Company Currency') + store=True, string='Company Currency') standard_price_company_currency = fields.Float( string='Cost Price in Company Currency', readonly=True, digits=dp.get_precision('Product Price'), @@ -48,17 +47,19 @@ class SaleOrderLine(models.Model): margin_comp_cur = 0.0 margin_rate = 0.0 order_cur = line.order_id.pricelist_id.currency_id - company_cur = line.order_id.company_id.currency_id + company = line.order_id.company_id + company_cur = company.currency_id if order_cur and company_cur: date = line.order_id.date_order standard_price_sale_cur =\ - company_cur.with_context(date=date).compute( - line.standard_price_company_currency, order_cur) + company_cur._convert( + line.standard_price_company_currency, order_cur, + company, date) margin_sale_cur =\ line.price_subtotal\ - line.product_uom_qty * standard_price_sale_cur - margin_comp_cur = order_cur.with_context(date=date).compute( - margin_sale_cur, company_cur) + margin_comp_cur = order_cur._convert( + margin_sale_cur, company_cur, company, date) if line.price_subtotal: margin_rate = 100 * margin_sale_cur / line.price_subtotal line.standard_price_sale_currency = standard_price_sale_cur @@ -74,7 +75,7 @@ class SaleOrderLine(models.Model): std_price = pp.standard_price sale_uom_id = vals.get('product_uom') if sale_uom_id and sale_uom_id != pp.uom_id.id: - sale_uom = self.env['product.uom'].browse(sale_uom_id) + sale_uom = self.env['uom.uom'].browse(sale_uom_id) # convert from product UoM to sale UoM std_price = pp.uom_id._compute_price( pp.standard_price, sale_uom) @@ -92,7 +93,7 @@ class SaleOrderLine(models.Model): else: pp = sol.product_id if 'product_uom' in vals: - sale_uom = self.env['product.uom'].browse( + sale_uom = self.env['uom.uom'].browse( vals['product_uom']) else: sale_uom = sol.product_uom @@ -108,7 +109,7 @@ class SaleOrder(models.Model): # Also defined in bi_sale_company_currency company_currency_id = fields.Many2one( - related='company_id.currency_id', readonly=True, store=True, + related='company_id.currency_id', store=True, string="Company Currency") margin_sale_currency = fields.Monetary( string='Margin in Sale Currency', diff --git a/sale_margin_no_onchange/sale_report.py b/sale_margin_no_onchange/sale_report.py index 9308931..1d2a0eb 100644 --- a/sale_margin_no_onchange/sale_report.py +++ b/sale_margin_no_onchange/sale_report.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright 2018 Akretion (http://www.akretion.com) +# Copyright 2018-2019 Akretion (http://www.akretion.com) # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -11,7 +10,10 @@ class SaleReport(models.Model): margin = fields.Float(string='Margin', readonly=True) - def _select(self): - select_str = super(SaleReport, self)._select() - select_str += ", SUM(l.margin_company_currency) AS margin" - return select_str + def _query(self, with_clause='', fields={}, groupby='', from_clause=''): + fields['margin_company_currency'] =\ + ", SUM(l.margin_company_currency) AS margin" + res = super(SaleReport, self)._query( + with_clause=with_clause, fields=fields, groupby=groupby, + from_clause=from_clause) + return res diff --git a/sale_margin_no_onchange/sale_view.xml b/sale_margin_no_onchange/sale_view.xml index a1825d1..cfb9056 100644 --- a/sale_margin_no_onchange/sale_view.xml +++ b/sale_margin_no_onchange/sale_view.xml @@ -1,6 +1,6 @@ @@ -13,13 +13,13 @@ sale.order - + - + @@ -41,12 +41,13 @@ - - - + + + +