From d441f0e1049c0c9fe4a409fcae72db0858d8ff52 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Tue, 11 Jul 2017 16:43:11 +0200 Subject: [PATCH 01/60] [9.0][WIP] account_invoice_margin: New module --- account_invoice_margin/README.rst | 60 +++++++++++++ account_invoice_margin/__init__.py | 6 ++ account_invoice_margin/__openerp__.py | 23 +++++ account_invoice_margin/i18n/es.po | 49 ++++++++++ account_invoice_margin/models/__init__.py | 5 ++ .../models/account_invoice.py | 63 +++++++++++++ account_invoice_margin/report/__init__.py | 3 + .../report/account_invoice_report.py | 19 ++++ .../account_invoice_margin_security.xml | 11 +++ .../static/description/icon.png | Bin 0 -> 9455 bytes account_invoice_margin/tests/__init__.py | 5 ++ .../tests/test_account_invoice_margin.py | 85 ++++++++++++++++++ .../views/account_invoice_margin_view.xml | 49 ++++++++++ 13 files changed, 378 insertions(+) create mode 100644 account_invoice_margin/README.rst create mode 100644 account_invoice_margin/__init__.py create mode 100644 account_invoice_margin/__openerp__.py create mode 100644 account_invoice_margin/i18n/es.po create mode 100644 account_invoice_margin/models/__init__.py create mode 100644 account_invoice_margin/models/account_invoice.py create mode 100644 account_invoice_margin/report/__init__.py create mode 100644 account_invoice_margin/report/account_invoice_report.py create mode 100644 account_invoice_margin/security/account_invoice_margin_security.xml create mode 100644 account_invoice_margin/static/description/icon.png create mode 100644 account_invoice_margin/tests/__init__.py create mode 100644 account_invoice_margin/tests/test_account_invoice_margin.py create mode 100644 account_invoice_margin/views/account_invoice_margin_view.xml diff --git a/account_invoice_margin/README.rst b/account_invoice_margin/README.rst new file mode 100644 index 000000000..09746f3e0 --- /dev/null +++ b/account_invoice_margin/README.rst @@ -0,0 +1,60 @@ +.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +====================== +Account Invoice Margin +====================== + +This module allows to show sale margin in invoices. + +Configuration +============= + +This module also adds a security group. + +#. To activate it go to user and active "Show Invoice Margin" in + security options. + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/95/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + + +Contributors +------------ + +* Sergio Teruel + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/account_invoice_margin/__init__.py b/account_invoice_margin/__init__.py new file mode 100644 index 000000000..1c2dcad6c --- /dev/null +++ b/account_invoice_margin/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import models +from . import report diff --git a/account_invoice_margin/__openerp__.py b/account_invoice_margin/__openerp__.py new file mode 100644 index 000000000..627690623 --- /dev/null +++ b/account_invoice_margin/__openerp__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Account Invoice Margin", + "summary": "Show margin in invoices", + "version": "9.0.1.0.0", + "category": "Account", + "website": "http://www.tecnativa.com", + "author": "Tecnativa, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "account", + ], + "data": [ + 'security/account_invoice_margin_security.xml', + 'views/account_invoice_margin_view.xml', + ], +} diff --git a/account_invoice_margin/i18n/es.po b/account_invoice_margin/i18n/es.po new file mode 100644 index 000000000..17be8c209 --- /dev/null +++ b/account_invoice_margin/i18n/es.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-20 12:30+0200\n" +"PO-Revision-Date: 2017-07-20 12:30+0200\n" +"Last-Translator: Sergio Teruel \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin_percent +msgid "% Margin" +msgstr "% Margen" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_purchase_price +msgid "Cost" +msgstr "Coste" + +#. module: account_invoice_margin +#: model:ir.model,name:account_invoice_margin.model_account_invoice_line +msgid "Invoice Line" +msgstr "Línea factura" + +#. module: account_invoice_margin +#: model:ir.model,name:account_invoice_margin.model_account_invoice_report +msgid "Invoices Statistics" +msgstr "Estadísticas de facturas" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_report_margin +msgid "Margin" +msgstr "Margen" + +#. module: account_invoice_margin +#: model:res.groups,name:account_invoice_margin.group_account_invoice_margin_security +msgid "Show Invoice Margin" +msgstr "Mostrar margen en facturas" diff --git a/account_invoice_margin/models/__init__.py b/account_invoice_margin/models/__init__.py new file mode 100644 index 000000000..44257e378 --- /dev/null +++ b/account_invoice_margin/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import account_invoice diff --git a/account_invoice_margin/models/account_invoice.py b/account_invoice_margin/models/account_invoice.py new file mode 100644 index 000000000..ccf408f08 --- /dev/null +++ b/account_invoice_margin/models/account_invoice.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import api, fields, models +import openerp.addons.decimal_precision as dp + + +class AccountInvoiceLine(models.Model): + _inherit = 'account.invoice.line' + + margin = fields.Float( + compute='_compute_margin', + digits=dp.get_precision('Product Price'), + store=True, + string='Margin', + ) + margin_signed = fields.Float( + compute='_compute_margin', + digits=dp.get_precision('Product Price'), + store=True, + string='Margin Signed', + ) + margin_percent = fields.Float( + string='% Margin', + compute='_compute_margin', + store=True, + readonly=True, + ) + purchase_price = fields.Float( + digits=dp.get_precision('Product Price'), + string='Cost', + ) + + @api.multi + @api.depends('purchase_price', 'price_subtotal') + def _compute_margin(self): + for line in self.filtered(lambda x: x.invoice_id.type[:2] != 'in'): + tmp_margin = line.price_subtotal - ( + line.purchase_price * line.quantity) + sign = line.invoice_id.type in [ + 'in_refund', 'out_refund'] and -1 or 1 + line.update({ + 'margin': tmp_margin, + 'margin_signed': tmp_margin * sign, + 'margin_percent': (tmp_margin / line.price_subtotal * 100.0 if + line.price_subtotal else 0.0), + }) + + @api.onchange('product_id', 'uom_id') + def _onchange_product_id_account_invoice_margin(self): + if self.invoice_id.type in ['out_invoice', 'out_refund']: + purchase_price = self.product_id.standard_price + if any(self.product_id.supplier_taxes_id.mapped('price_include')): + taxes = self.product_id.supplier_taxes_id.compute_all( + purchase_price, self.invoice_id.currency_id, 1, + product=self.product_id, + partner=self.invoice_id.partner_id) + purchase_price = taxes['total_excluded'] + if self.uom_id != self.product_id.uom_id: + purchase_price = self.product_id.uom_id._compute_price( + self.product_id.uom_id.id, purchase_price, self.uom_id.id) + self.purchase_price = purchase_price diff --git a/account_invoice_margin/report/__init__.py b/account_invoice_margin/report/__init__.py new file mode 100644 index 000000000..a486fa726 --- /dev/null +++ b/account_invoice_margin/report/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import account_invoice_report diff --git a/account_invoice_margin/report/account_invoice_report.py b/account_invoice_margin/report/account_invoice_report.py new file mode 100644 index 000000000..c1283c29a --- /dev/null +++ b/account_invoice_margin/report/account_invoice_report.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import fields, models + + +class AccountInvoiceReport(models.Model): + _inherit = "account.invoice.report" + + margin = fields.Float(string='Margin', readonly=True) + + def _select(self): + select_str = super(AccountInvoiceReport, self)._select() + return '%s, sub.margin' % select_str + + def _sub_select(self): + select_str = super(AccountInvoiceReport, self)._sub_select() + return '%s, SUM(ail.margin_signed) AS margin' % select_str diff --git a/account_invoice_margin/security/account_invoice_margin_security.xml b/account_invoice_margin/security/account_invoice_margin_security.xml new file mode 100644 index 000000000..c5bde809b --- /dev/null +++ b/account_invoice_margin/security/account_invoice_margin_security.xml @@ -0,0 +1,11 @@ + + + + + + Show Invoice Margin + + + + diff --git a/account_invoice_margin/static/description/icon.png b/account_invoice_margin/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_invoice_margin/tests/__init__.py b/account_invoice_margin/tests/__init__.py new file mode 100644 index 000000000..fb61530ee --- /dev/null +++ b/account_invoice_margin/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_account_invoice_margin diff --git a/account_invoice_margin/tests/test_account_invoice_margin.py b/account_invoice_margin/tests/test_account_invoice_margin.py new file mode 100644 index 000000000..6bf77cfe1 --- /dev/null +++ b/account_invoice_margin/tests/test_account_invoice_margin.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# © 2016 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests.common import SavepointCase + + +class TestAccountInvoiceMargin(SavepointCase): + @classmethod + def setUpClass(cls): + super(TestAccountInvoiceMargin, cls).setUpClass() + cls.Product = cls.env['product.template'] + + cls.journal = cls.env["account.journal"].create({ + "name": "Test journal", + "type": "sale", + "code": "TEST_J", + }) + cls.account_type = cls.env["account.account.type"].create({ + "name": "Test account type", + "type": "receivable", + }) + cls.account = cls.env["account.account"].create({ + "name": "Test account", + "code": "TEST_A", + "user_type_id": cls.account_type.id, + "reconcile": True, + }) + cls.partner = cls.env["res.partner"].create({ + "name": "Test partner", + "customer": True, + "is_company": True, + }) + cls.partner.property_account_receivable_id = cls.account + cls.product_categ = cls.env["product.category"].create({ + "name": "Test category" + }) + + cls.product = cls.env["product.product"].create({ + "name": "test product", + "categ_id": cls.product_categ.id, + "uom_id": cls.env.ref('product.product_uom_unit').id, + "uom_po_id": cls.env.ref('product.product_uom_unit').id, + "default_code": "test-margin", + "list_price": 200.00, + "standard_price": 100.00, + }) + cls.product.property_account_receivable_id = cls.account + cls.invoice = cls.env['account.invoice'].create({ + 'partner_id': cls.partner.id, + 'date_invoice': '2017-06-19', + 'type': 'out_invoice', + 'currency_id': cls.env.user.company_id.currency_id.id, + 'account_id': cls.partner.property_account_receivable_id.id, + 'invoice_line_ids': [ + (0, 0, { + 'product_id': cls.product.id, + 'account_id': + cls.product.property_account_receivable_id.id, + 'name': 'Test Margin', + 'price_unit': cls.product.list_price, + 'quantity': 10, + 'purchase_price': cls.product.standard_price, + })], + }) + + def test_invoice_margin(self): + self.assertEqual(self.invoice.invoice_line_ids.purchase_price, 100.00) + self.assertEqual(self.invoice.invoice_line_ids.margin, 1000.00) + + self.invoice.invoice_line_ids.discount = 50 + self.assertEqual(self.invoice.invoice_line_ids.margin, 0.0) + + def test_invoice_margin_uom(self): + self.invoice.invoice_line_ids.write({ + 'uom_id': self.env.ref('product.product_uom_dozen').id, + }) + self.invoice.invoice_line_ids._onchange_uom_id() + self.invoice.invoice_line_ids._onchange_product_id_margin() + self.assertEqual(self.invoice.invoice_line_ids.margin, 12000.00) + + def test_invoice_refund(self): + new_invoice = self.invoice.refund() + self.assertEqual(new_invoice.invoice_line_ids.margin, 1000.00) + self.assertEqual(new_invoice.invoice_line_ids.margin_signed, -1000.00) diff --git a/account_invoice_margin/views/account_invoice_margin_view.xml b/account_invoice_margin/views/account_invoice_margin_view.xml new file mode 100644 index 000000000..3704085a6 --- /dev/null +++ b/account_invoice_margin/views/account_invoice_margin_view.xml @@ -0,0 +1,49 @@ + + + + + + account.invoice + + + + + + + + + + + + + account.invoice.line + + + + + + + + + + + + + account.invoice.line + + + + + + + + + + + + From db69e3c02fd8900540ede3a784ae593dd1d69f58 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Tue, 9 Oct 2018 13:22:29 +0200 Subject: [PATCH 02/60] [MIG] account_invoice_margin: Migration to v11 --- account_invoice_margin/README.rst | 79 ++-- account_invoice_margin/__init__.py | 1 - .../{__openerp__.py => __manifest__.py} | 3 +- account_invoice_margin/models/__init__.py | 1 - .../models/account_invoice.py | 7 +- .../readme/CONTRIBUTORS.rst | 3 + account_invoice_margin/readme/DESCRIPTION.rst | 1 + account_invoice_margin/readme/USAGE.rst | 4 + account_invoice_margin/report/__init__.py | 1 - .../report/account_invoice_report.py | 3 +- .../static/description/index.html | 431 ++++++++++++++++++ account_invoice_margin/tests/__init__.py | 1 - .../tests/test_account_invoice_margin.py | 15 +- .../views/account_invoice_margin_view.xml | 6 +- 14 files changed, 507 insertions(+), 49 deletions(-) rename account_invoice_margin/{__openerp__.py => __manifest__.py} (91%) create mode 100644 account_invoice_margin/readme/CONTRIBUTORS.rst create mode 100644 account_invoice_margin/readme/DESCRIPTION.rst create mode 100644 account_invoice_margin/readme/USAGE.rst create mode 100644 account_invoice_margin/static/description/index.html diff --git a/account_invoice_margin/README.rst b/account_invoice_margin/README.rst index 09746f3e0..040e7a722 100644 --- a/account_invoice_margin/README.rst +++ b/account_invoice_margin/README.rst @@ -1,60 +1,83 @@ -.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 - ====================== Account Invoice Margin ====================== -This module allows to show sale margin in invoices. +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Faccount--invoicing-lightgray.png?logo=github + :target: https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_margin + :alt: OCA/account-invoicing +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-invoicing-11-0/account-invoicing-11-0-account_invoice_margin + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/95/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to show sales margin in invoices. -Configuration -============= +**Table of contents** + +.. contents:: + :local: + +Usage +===== This module also adds a security group. #. To activate it go to user and active "Show Invoice Margin" in security options. - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/95/9.0 - Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- - -* Odoo Community Association: `Icon `_. +Authors +~~~~~~~ +* Tecnativa Contributors ------------- +~~~~~~~~~~~~ + +* `Tecnativa `__: + + * Sergio Teruel -* Sergio Teruel +Maintainers +~~~~~~~~~~~ -Maintainer ----------- +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/account-invoicing `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_invoice_margin/__init__.py b/account_invoice_margin/__init__.py index 1c2dcad6c..d5d50f3f2 100644 --- a/account_invoice_margin/__init__.py +++ b/account_invoice_margin/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/account_invoice_margin/__openerp__.py b/account_invoice_margin/__manifest__.py similarity index 91% rename from account_invoice_margin/__openerp__.py rename to account_invoice_margin/__manifest__.py index 627690623..6ef2b5e0f 100644 --- a/account_invoice_margin/__openerp__.py +++ b/account_invoice_margin/__manifest__.py @@ -1,11 +1,10 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { "name": "Account Invoice Margin", "summary": "Show margin in invoices", - "version": "9.0.1.0.0", + "version": "11.0.1.0.0", "category": "Account", "website": "http://www.tecnativa.com", "author": "Tecnativa, " diff --git a/account_invoice_margin/models/__init__.py b/account_invoice_margin/models/__init__.py index 44257e378..06ea9c09e 100644 --- a/account_invoice_margin/models/__init__.py +++ b/account_invoice_margin/models/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/account_invoice_margin/models/account_invoice.py b/account_invoice_margin/models/account_invoice.py index ccf408f08..f40e188a2 100644 --- a/account_invoice_margin/models/account_invoice.py +++ b/account_invoice_margin/models/account_invoice.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import api, fields, models -import openerp.addons.decimal_precision as dp +from odoo import api, fields, models +from odoo.addons import decimal_precision as dp class AccountInvoiceLine(models.Model): @@ -59,5 +58,5 @@ def _onchange_product_id_account_invoice_margin(self): purchase_price = taxes['total_excluded'] if self.uom_id != self.product_id.uom_id: purchase_price = self.product_id.uom_id._compute_price( - self.product_id.uom_id.id, purchase_price, self.uom_id.id) + purchase_price, self.uom_id) self.purchase_price = purchase_price diff --git a/account_invoice_margin/readme/CONTRIBUTORS.rst b/account_invoice_margin/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..9a9abcf49 --- /dev/null +++ b/account_invoice_margin/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `__: + + * Sergio Teruel diff --git a/account_invoice_margin/readme/DESCRIPTION.rst b/account_invoice_margin/readme/DESCRIPTION.rst new file mode 100644 index 000000000..58b140f60 --- /dev/null +++ b/account_invoice_margin/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to show sales margin in invoices. diff --git a/account_invoice_margin/readme/USAGE.rst b/account_invoice_margin/readme/USAGE.rst new file mode 100644 index 000000000..a30bc2696 --- /dev/null +++ b/account_invoice_margin/readme/USAGE.rst @@ -0,0 +1,4 @@ +This module also adds a security group. + +#. To activate it go to user and active "Show Invoice Margin" in + security options. diff --git a/account_invoice_margin/report/__init__.py b/account_invoice_margin/report/__init__.py index a486fa726..fff5b80a1 100644 --- a/account_invoice_margin/report/__init__.py +++ b/account_invoice_margin/report/__init__.py @@ -1,3 +1,2 @@ -# -*- coding: utf-8 -*- from . import account_invoice_report diff --git a/account_invoice_margin/report/account_invoice_report.py b/account_invoice_margin/report/account_invoice_report.py index c1283c29a..35472f99c 100644 --- a/account_invoice_margin/report/account_invoice_report.py +++ b/account_invoice_margin/report/account_invoice_report.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import fields, models +from odoo import fields, models class AccountInvoiceReport(models.Model): diff --git a/account_invoice_margin/static/description/index.html b/account_invoice_margin/static/description/index.html new file mode 100644 index 000000000..8527043a5 --- /dev/null +++ b/account_invoice_margin/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +Account Invoice Margin + + + +
+

Account Invoice Margin

+ + +

Beta License: AGPL-3 OCA/account-invoicing Translate me on Weblate Try me on Runbot

+

This module allows to show sales margin in invoices.

+

Table of contents

+ +
+

Usage

+

This module also adds a security group.

+
    +
  1. To activate it go to user and active “Show Invoice Margin” in +security options.
  2. +
+
+
+

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

+ +
+
+

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/account-invoicing project on GitHub.

+

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

+
+
+
+ + diff --git a/account_invoice_margin/tests/__init__.py b/account_invoice_margin/tests/__init__.py index fb61530ee..e36b73435 100644 --- a/account_invoice_margin/tests/__init__.py +++ b/account_invoice_margin/tests/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/account_invoice_margin/tests/test_account_invoice_margin.py b/account_invoice_margin/tests/test_account_invoice_margin.py index 6bf77cfe1..2195626ab 100644 --- a/account_invoice_margin/tests/test_account_invoice_margin.py +++ b/account_invoice_margin/tests/test_account_invoice_margin.py @@ -1,11 +1,13 @@ -# -*- coding: utf-8 -*- # © 2016 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp.tests.common import SavepointCase +from odoo.tests.common import SavepointCase class TestAccountInvoiceMargin(SavepointCase): + at_install = False + post_install = True + @classmethod def setUpClass(cls): super(TestAccountInvoiceMargin, cls).setUpClass() @@ -72,12 +74,13 @@ def test_invoice_margin(self): self.assertEqual(self.invoice.invoice_line_ids.margin, 0.0) def test_invoice_margin_uom(self): - self.invoice.invoice_line_ids.write({ + inv_line = self.invoice.invoice_line_ids + inv_line.write({ 'uom_id': self.env.ref('product.product_uom_dozen').id, }) - self.invoice.invoice_line_ids._onchange_uom_id() - self.invoice.invoice_line_ids._onchange_product_id_margin() - self.assertEqual(self.invoice.invoice_line_ids.margin, 12000.00) + inv_line._onchange_uom_id() + inv_line._onchange_product_id_account_invoice_margin() + self.assertEqual(inv_line.margin, -10000.00) def test_invoice_refund(self): new_invoice = self.invoice.refund() diff --git a/account_invoice_margin/views/account_invoice_margin_view.xml b/account_invoice_margin/views/account_invoice_margin_view.xml index 3704085a6..7d01fc3e9 100644 --- a/account_invoice_margin/views/account_invoice_margin_view.xml +++ b/account_invoice_margin/views/account_invoice_margin_view.xml @@ -7,7 +7,7 @@ account.invoice + eval="[(4, ref('account_invoice_margin.group_account_invoice_margin_security'))]"/> @@ -22,7 +22,7 @@ account.invoice.line + eval="[(4, ref('account_invoice_margin.group_account_invoice_margin_security'))]"/> @@ -36,7 +36,7 @@ account.invoice.line + eval="[(4, ref('account_invoice_margin.group_account_invoice_margin_security'))]"/> From 6b5f025cf4ccb1a8f36ab12c42ce4b958fd1e327 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 27 Nov 2018 17:28:10 +0100 Subject: [PATCH 03/60] [FIX] account_invoice_margin: Avoid error on empty invoice_id [UPD] README.rst [UPD] Update account_invoice_margin.pot Translated using Weblate (Spanish) Currently translated at 100.0% (7 of 7 strings) Translation: margin-analysis-11.0/margin-analysis-11.0-account_invoice_margin Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-11-0/margin-analysis-11-0-account_invoice_margin/es/ --- account_invoice_margin/README.rst | 16 +++--- .../i18n/account_invoice_margin.pot | 51 +++++++++++++++++++ account_invoice_margin/i18n/es.po | 13 +++-- .../models/account_invoice.py | 5 +- .../static/description/index.html | 8 +-- 5 files changed, 76 insertions(+), 17 deletions(-) create mode 100644 account_invoice_margin/i18n/account_invoice_margin.pot diff --git a/account_invoice_margin/README.rst b/account_invoice_margin/README.rst index 040e7a722..4208da259 100644 --- a/account_invoice_margin/README.rst +++ b/account_invoice_margin/README.rst @@ -13,14 +13,14 @@ Account Invoice Margin .. |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%2Faccount--invoicing-lightgray.png?logo=github - :target: https://github.com/OCA/account-invoicing/tree/11.0/account_invoice_margin - :alt: OCA/account-invoicing +.. |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/account_invoice_margin + :alt: OCA/margin-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/account-invoicing-11-0/account-invoicing-11-0-account_invoice_margin + :target: https://translation.odoo-community.org/projects/margin-analysis-11-0/margin-analysis-11-0-account_invoice_margin :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/95/11.0 + :target: https://runbot.odoo-community.org/runbot/132/11.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -43,10 +43,10 @@ This module also adds a security group. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -78,6 +78,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/account-invoicing `_ 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/account_invoice_margin/i18n/account_invoice_margin.pot b/account_invoice_margin/i18n/account_invoice_margin.pot new file mode 100644 index 000000000..748c70fbe --- /dev/null +++ b/account_invoice_margin/i18n/account_invoice_margin.pot @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin_percent +msgid "% Margin" +msgstr "" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_purchase_price +msgid "Cost" +msgstr "" + +#. module: account_invoice_margin +#: model:ir.model,name:account_invoice_margin.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: account_invoice_margin +#: model:ir.model,name:account_invoice_margin.model_account_invoice_report +msgid "Invoices Statistics" +msgstr "" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_report_margin +msgid "Margin" +msgstr "" + +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin_signed +msgid "Margin Signed" +msgstr "" + +#. module: account_invoice_margin +#: model:res.groups,name:account_invoice_margin.group_account_invoice_margin_security +msgid "Show Invoice Margin" +msgstr "" + diff --git a/account_invoice_margin/i18n/es.po b/account_invoice_margin/i18n/es.po index 17be8c209..b9e8e7ca5 100644 --- a/account_invoice_margin/i18n/es.po +++ b/account_invoice_margin/i18n/es.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-07-20 12:30+0200\n" -"PO-Revision-Date: 2017-07-20 12:30+0200\n" -"Last-Translator: Sergio Teruel \n" +"PO-Revision-Date: 2019-02-04 17:50+0000\n" +"Last-Translator: Marta Vázquez Rodríguez \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.7.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.4\n" #. module: account_invoice_margin #: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin_percent @@ -43,6 +43,11 @@ msgstr "Estadísticas de facturas" msgid "Margin" msgstr "Margen" +#. module: account_invoice_margin +#: model:ir.model.fields,field_description:account_invoice_margin.field_account_invoice_line_margin_signed +msgid "Margin Signed" +msgstr "Margen firmado" + #. module: account_invoice_margin #: model:res.groups,name:account_invoice_margin.group_account_invoice_margin_security msgid "Show Invoice Margin" diff --git a/account_invoice_margin/models/account_invoice.py b/account_invoice_margin/models/account_invoice.py index f40e188a2..e86e8b660 100644 --- a/account_invoice_margin/models/account_invoice.py +++ b/account_invoice_margin/models/account_invoice.py @@ -34,7 +34,10 @@ class AccountInvoiceLine(models.Model): @api.multi @api.depends('purchase_price', 'price_subtotal') def _compute_margin(self): - for line in self.filtered(lambda x: x.invoice_id.type[:2] != 'in'): + applicable = self.filtered( + lambda x: x.invoice_id and x.invoice_id.type[:2] != 'in' + ) + for line in applicable: tmp_margin = line.price_subtotal - ( line.purchase_price * line.quantity) sign = line.invoice_id.type in [ diff --git a/account_invoice_margin/static/description/index.html b/account_invoice_margin/static/description/index.html index 8527043a5..f06b85be0 100644 --- a/account_invoice_margin/static/description/index.html +++ b/account_invoice_margin/static/description/index.html @@ -367,7 +367,7 @@

Account Invoice Margin

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-invoicing Translate me on Weblate Try me on Runbot

+

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

This module allows to show sales margin in invoices.

Table of contents

@@ -392,10 +392,10 @@

Usage

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

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

@@ -422,7 +422,7 @@

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.

-

This module is part of the OCA/account-invoicing 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 e4362d1cb4fad36c04d2f7d41d32e126b7639acc Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Wed, 17 Apr 2019 11:03:54 +0200 Subject: [PATCH 04/60] [11.0][IMP] account_invoice_margin: Minor fix in the same PR [UPD] README.rst --- account_invoice_margin/models/account_invoice.py | 6 ------ account_invoice_margin/static/description/index.html | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/account_invoice_margin/models/account_invoice.py b/account_invoice_margin/models/account_invoice.py index e86e8b660..d77ac4384 100644 --- a/account_invoice_margin/models/account_invoice.py +++ b/account_invoice_margin/models/account_invoice.py @@ -53,12 +53,6 @@ def _compute_margin(self): def _onchange_product_id_account_invoice_margin(self): if self.invoice_id.type in ['out_invoice', 'out_refund']: purchase_price = self.product_id.standard_price - if any(self.product_id.supplier_taxes_id.mapped('price_include')): - taxes = self.product_id.supplier_taxes_id.compute_all( - purchase_price, self.invoice_id.currency_id, 1, - product=self.product_id, - partner=self.invoice_id.partner_id) - purchase_price = taxes['total_excluded'] if self.uom_id != self.product_id.uom_id: purchase_price = self.product_id.uom_id._compute_price( purchase_price, self.uom_id) diff --git a/account_invoice_margin/static/description/index.html b/account_invoice_margin/static/description/index.html index f06b85be0..6d27f6b8f 100644 --- a/account_invoice_margin/static/description/index.html +++ b/account_invoice_margin/static/description/index.html @@ -3,7 +3,7 @@ - + Account Invoice Margin -
-

Account Invoice Margin

+
+ + +Odoo Community Association + +
+

Account Invoice Margin

-

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

+

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

This module allows to show sales margin in invoices.

The new information is available:

  • on the invoice form view
-

image1

+

image1

  • and on the invoice tree view
-

image2

+

image2

Table of contents

    @@ -394,7 +399,7 @@

    Account Invoice Margin

-

Usage

+

Usage

This module also adds a security group.

  1. To activate it go to user and active “Show Invoice Margin” in @@ -402,24 +407,24 @@

    Usage

-

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 @@ -462,10 +467,11 @@

Maintainers

promote its widespread use.

Current maintainer:

sergio-teruel

-

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/account_invoice_margin/tests/test_account_invoice_margin.py b/account_invoice_margin/tests/test_account_invoice_margin.py index c53c2c0a7..f996e7713 100644 --- a/account_invoice_margin/tests/test_account_invoice_margin.py +++ b/account_invoice_margin/tests/test_account_invoice_margin.py @@ -17,14 +17,18 @@ def setUpClass(cls): # cls.env.user.group_ids |= cls.env.ref( # "product_cost_security.group_product_cost" # ) - group_edit = cls.env.ref("product_cost_security.group_product_edit_cost", raise_if_not_found=False) - group_view = cls.env.ref("product_cost_security.group_product_cost", raise_if_not_found=False) + group_edit = cls.env.ref( + "product_cost_security.group_product_edit_cost", raise_if_not_found=False + ) + group_view = cls.env.ref( + "product_cost_security.group_product_cost", raise_if_not_found=False + ) if group_edit: cls.env.user.group_ids |= group_edit if group_view: cls.env.user.group_ids |= group_view - + cls.product_a.lst_price = 200 cls.product_a.standard_price = 100 cls.invoice = cls.init_invoice(