mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
mrp_repair_discount: fix wrong AGPL badge image in README
[MIG] Mig mrp_discount to v10 and added discount on fees lines
This commit is contained in:
@@ -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
|
||||
<https://github.com/OCA/manufacture/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
|
||||
<https://github.com/OCA/
|
||||
manufacture/issues/new?body=module:%20
|
||||
mrp_repair_discount%0Aversion:%20
|
||||
8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
help us smash it by providing detailed and welcomed feedback.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Images
|
||||
------
|
||||
|
||||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Nicola Malcontenti <nicola.malcontenti@agilebg.com>
|
||||
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2015 Nicola Malcontenti - Agile Business Group
|
||||
# © 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# Copyright 2015 Nicola Malcontenti - Agile Business Group
|
||||
# Copyright 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# 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 <nicola.malcontenti@gmail.com>",
|
||||
],
|
||||
'depends': ['mrp_repair'],
|
||||
"data": ["views/mrp_repair_view.xml"],
|
||||
"installable": True,
|
||||
@@ -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
|
||||
|
||||
@@ -1,32 +1,66 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2015 Nicola Malcontenti - Agile Business Group
|
||||
# © 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# Copyright 2015 Nicola Malcontenti - Agile Business Group
|
||||
# Copyright 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# 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')
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# Copyright 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
||||
# 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)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_repair_order_discount_form" model="ir.ui.view">
|
||||
<odoo>
|
||||
<record id="view_repair_order_discount_form" model="ir.ui.view">
|
||||
<field name="name">mrp.repair.discount.form</field>
|
||||
<field name="model">mrp.repair</field>
|
||||
<field name="inherit_id" ref="mrp_repair.view_repair_order_form" />
|
||||
@@ -9,7 +8,9 @@
|
||||
<xpath expr="//field[@name='operations']/tree/field[@name='price_subtotal']" position='before'>
|
||||
<field name="discount"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='fees_lines']/tree/field[@name='price_unit']" position='after'>
|
||||
<field name="discount"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user