From 1ac9e411f3eed29b083c7dfb5ab842a9c0ae519f Mon Sep 17 00:00:00 2001 From: Alex Comba Date: Fri, 17 Feb 2017 15:46:59 +0100 Subject: [PATCH] mrp_repair_discount: fix wrong AGPL badge image in README [MIG] Mig mrp_discount to v10 and added discount on fees lines --- mrp_repair_discount/README.rst | 22 ++-- mrp_repair_discount/__init__.py | 2 +- .../{__openerp__.py => __manifest__.py} | 11 +- mrp_repair_discount/models/__init__.py | 2 +- mrp_repair_discount/models/mrp_repair.py | 120 ++++++++++++++---- .../tests/test_mrp_repair_discount.py | 15 +-- mrp_repair_discount/views/mrp_repair_view.xml | 13 +- 7 files changed, 124 insertions(+), 61 deletions(-) rename mrp_repair_discount/{__openerp__.py => __manifest__.py} (61%) diff --git a/mrp_repair_discount/README.rst b/mrp_repair_discount/README.rst index db58bc437..af6861745 100644 --- a/mrp_repair_discount/README.rst +++ b/mrp_repair_discount/README.rst @@ -1,4 +1,4 @@ -... image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 @@ -7,12 +7,14 @@ MRP Repair Discount =================== This module extends the functionality of mrp repair adding -new field discount on operation's lines +new field discount on operations lines + +Usage +===== .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/129/8.0 - + :target: https://runbot.odoo-community.org/runbot/129/10.0 Bug Tracker =========== @@ -20,25 +22,17 @@ 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 -`_. +help us smash it by providing detailed and welcomed feedback. Credits ======= -Images ------- - -* Odoo Community Association: `Icon `_. - Contributors ------------ * Nicola Malcontenti * Pedro M. Baeza +* Lorenzo Battistini Maintainer ---------- diff --git a/mrp_repair_discount/__init__.py b/mrp_repair_discount/__init__.py index 421162bb0..df4a96296 100644 --- a/mrp_repair_discount/__init__.py +++ b/mrp_repair_discount/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2015 Nicola Malcontenti - Agile Business Group +# Copyright 2015 Nicola Malcontenti - Agile Business Group # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/mrp_repair_discount/__openerp__.py b/mrp_repair_discount/__manifest__.py similarity index 61% rename from mrp_repair_discount/__openerp__.py rename to mrp_repair_discount/__manifest__.py index 527adf515..01e764519 100644 --- a/mrp_repair_discount/__openerp__.py +++ b/mrp_repair_discount/__manifest__.py @@ -1,20 +1,17 @@ # -*- coding: utf-8 -*- -# © 2015 Nicola Malcontenti - Agile Business Group -# © 2016 Pedro M. Baeza +# Copyright 2015 Nicola Malcontenti - Agile Business Group +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "MRP Repair Discount", - "version": "8.0.1.0.0", - "category": "Manufactoring", + "version": "10.0.1.0.0", + "category": "Manufacturing", "license": "AGPL-3", "author": "Agile Business Group, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "http://www.agilebg.com", - "contributors": [ - "Nicola Malcontenti ", - ], 'depends': ['mrp_repair'], "data": ["views/mrp_repair_view.xml"], "installable": True, diff --git a/mrp_repair_discount/models/__init__.py b/mrp_repair_discount/models/__init__.py index a84a56b6f..f579834b0 100644 --- a/mrp_repair_discount/models/__init__.py +++ b/mrp_repair_discount/models/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2015 Nicola Malcontenti - Agile Business Group +# Copyright 2015 Nicola Malcontenti - Agile Business Group # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import mrp_repair diff --git a/mrp_repair_discount/models/mrp_repair.py b/mrp_repair_discount/models/mrp_repair.py index 90961d3e9..91160ca48 100644 --- a/mrp_repair_discount/models/mrp_repair.py +++ b/mrp_repair_discount/models/mrp_repair.py @@ -1,32 +1,66 @@ # -*- coding: utf-8 -*- -# © 2015 Nicola Malcontenti - Agile Business Group -# © 2016 Pedro M. Baeza +# Copyright 2015 Nicola Malcontenti - Agile Business Group +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import api, fields, models -from openerp.osv import fields as old_fields +from odoo import api, fields, models import openerp.addons.decimal_precision as dp +class RepairFee(models.Model): + _inherit = 'mrp.repair.fee' + + @api.one + @api.depends( + 'to_invoice', + 'price_unit', + 'repair_id', + 'product_uom_qty', + 'product_id') + def _compute_price_subtotal(self): + if not self.to_invoice: + self.price_subtotal = 0.0 + else: + taxes = self.env['account.tax'].compute_all( + self.price_unit, self.repair_id.pricelist_id.currency_id, + self.product_uom_qty, self.product_id, + self.repair_id.partner_id) + self.price_subtotal = ( + taxes['total_excluded'] * (1 - (self.discount or 0.0) / 100.0)) + + discount = fields.Float(string='Discount (%)') + price_subtotal = fields.Float( + 'Subtotal', + compute='_compute_price_subtotal', + digits=dp.get_precision('Account')) + + class MrpRepairLine(models.Model): _inherit = 'mrp.repair.line' + @api.one + @api.depends( + 'to_invoice', + 'price_unit', + 'repair_id', + 'product_uom_qty', + 'product_id') + def _compute_price_subtotal(self): + if not self.to_invoice: + self.price_subtotal = 0.0 + else: + taxes = self.env['account.tax'].compute_all( + self.price_unit, self.repair_id.pricelist_id.currency_id, + self.product_uom_qty, self.product_id, + self.repair_id.partner_id) + self.price_subtotal = ( + taxes['total_excluded'] * (1 - (self.discount or 0.0) / 100.0)) + discount = fields.Float(string='Discount (%)') - - @api.multi - def _amount_line(self, field_name, arg): - res = super(MrpRepairLine, self)._amount_line(field_name, arg) - for line in self.filtered('discount'): - price = res[line.id] * (1 - (line.discount or 0.0) / 100.0) - res[line.id] = price - return res - - _columns = { - # Must be defined in old API so that we can call super in the compute - 'price_subtotal': old_fields.function( - _amount_line, string='Subtotal', - digits_compute=dp.get_precision('Account')), - } + price_subtotal = fields.Float( + 'Subtotal', + compute='_compute_price_subtotal', + digits=dp.get_precision('Account')) class MrpRepair(models.Model): @@ -37,8 +71,48 @@ class MrpRepair(models.Model): res = super(MrpRepair, self).action_invoice_create(group) for repair in self: operations = repair.operations.filtered('to_invoice') - for op in operations: - op.invoice_line_id.discount = op.discount - if operations: - repair.invoice_id.button_reset_taxes() + fees_lines = repair.fees_lines.filtered('to_invoice') + if repair.invoice_method != 'none': + for op in operations: + op.invoice_line_id.discount = op.discount + if operations: + repair.invoice_id.compute_taxes() + for fl in fees_lines: + fl.invoice_line_id.discount = fl.discount + if fees_lines: + repair.invoice_id.compute_taxes() return res + + def _calc_line_base_price(self, line): + return line.price_unit * (1 - (line.discount or 0.0) / 100.0) + + @api.multi + @api.depends('operations', 'fees_lines') + def _compute_tax(self): + for repair in self: + val = 0.0 + cur = repair.pricelist_id.currency_id + for line in repair.operations: + if line.to_invoice: + tax_calculate = line.tax_id.compute_all( + self._calc_line_base_price(line), + self.pricelist_id.currency_id, + line.product_uom_qty, + line.product_id, + repair.partner_id) + for c in tax_calculate['taxes']: + val += c['amount'] + for line in repair.fees_lines: + if line.to_invoice: + tax_calculate = line.tax_id.compute_all( + self._calc_line_base_price(line), + self.pricelist_id.currency_id, + line.product_uom_qty, + line.product_id, + repair.partner_id) + for c in tax_calculate['taxes']: + val += c['amount'] + repair.amount_tax = cur.round(val) + + amount_tax = fields.Float( + string='Taxes', compute='_compute_tax') diff --git a/mrp_repair_discount/tests/test_mrp_repair_discount.py b/mrp_repair_discount/tests/test_mrp_repair_discount.py index 96346804c..8cf3ed735 100644 --- a/mrp_repair_discount/tests/test_mrp_repair_discount.py +++ b/mrp_repair_discount/tests/test_mrp_repair_discount.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# © 2016 Pedro M. Baeza +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests import common +from odoo.tests import common class TestMrpRepairDiscount(common.SavepointCase): @@ -45,18 +45,15 @@ class TestMrpRepairDiscount(common.SavepointCase): def test_discount(self): self.assertAlmostEqual( - self.repair_line.price_subtotal, 10, - self.repair_line._columns['price_subtotal'].digits[1]) + self.repair_line.price_subtotal, 10) self.assertAlmostEqual( - self.repair.amount_total, 10, - self.repair._columns['amount_total'].digits[1]) + self.repair.amount_total, 10) def test_invoice_create(self): self.repair.state = '2binvoiced' res = self.repair.action_invoice_create() invoice = self.env['account.invoice'].browse(res.values()[0]) - invoice_line = invoice.invoice_line[0] + invoice_line = invoice.invoice_line_ids[0] self.assertEqual(invoice_line.discount, 50) self.assertAlmostEqual( - invoice_line.price_subtotal, 10, - invoice_line._columns['price_subtotal'].digits[1]) + invoice_line.price_subtotal, 10) diff --git a/mrp_repair_discount/views/mrp_repair_view.xml b/mrp_repair_discount/views/mrp_repair_view.xml index 13d5c7365..72a8f92bc 100644 --- a/mrp_repair_discount/views/mrp_repair_view.xml +++ b/mrp_repair_discount/views/mrp_repair_view.xml @@ -1,7 +1,6 @@ - - - + + mrp.repair.discount.form mrp.repair @@ -9,7 +8,9 @@ + + + - - - + +