diff options
| author | Rémy Voet (ryv) <ryv@odoo.com> | 2020-01-08 09:45:52 +0000 |
|---|---|---|
| committer | Rémy Voet (ryv) <ryv@odoo.com> | 2020-01-23 15:00:01 +0000 |
| commit | e1b3a17c3bda2b2d585d930386244e3f2b0bed31 (patch) | |
| tree | 21c69efe57c6080c32b1e9c14338bb0e8a3619f0 /addons/sale_mrp | |
| parent | 5a1645a8f8f3560eb778da90b6160b322ce0722e (diff) | |
[IMP] sale_mrp: link SO<->MO in case of MTO
In case of MTO+Mufacturing on product in a confirmed sale order,
add a stat button to the MO generated by this SO. Also add the inverse,
from MO to SO source document.
task-1913392
Diffstat (limited to 'addons/sale_mrp')
| -rw-r--r-- | addons/sale_mrp/__manifest__.py | 2 | ||||
| -rw-r--r-- | addons/sale_mrp/models/__init__.py | 3 | ||||
| -rw-r--r-- | addons/sale_mrp/models/mrp_production.py | 38 | ||||
| -rw-r--r-- | addons/sale_mrp/models/sale.py (renamed from addons/sale_mrp/models/sale_mrp.py) | 35 | ||||
| -rw-r--r-- | addons/sale_mrp/views/mrp_production_views.xml | 18 | ||||
| -rw-r--r-- | addons/sale_mrp/views/sale_order_views.xml | 18 |
6 files changed, 112 insertions, 2 deletions
diff --git a/addons/sale_mrp/__manifest__.py b/addons/sale_mrp/__manifest__.py index 29c3636d80a..5ea5defff6e 100644 --- a/addons/sale_mrp/__manifest__.py +++ b/addons/sale_mrp/__manifest__.py @@ -16,6 +16,8 @@ from sales order. It adds sales name and sales Reference on production order. 'depends': ['mrp', 'sale_stock'], 'data': [ 'security/ir.model.access.csv', + 'views/mrp_production_views.xml', + 'views/sale_order_views.xml' ], 'demo': [], 'installable': True, diff --git a/addons/sale_mrp/models/__init__.py b/addons/sale_mrp/models/__init__.py index 9a9609e5400..6e09b9faac4 100644 --- a/addons/sale_mrp/models/__init__.py +++ b/addons/sale_mrp/models/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import sale_mrp +from . import sale from . import account_move +from . import mrp_production diff --git a/addons/sale_mrp/models/mrp_production.py b/addons/sale_mrp/models/mrp_production.py new file mode 100644 index 00000000000..e05fd996a2b --- /dev/null +++ b/addons/sale_mrp/models/mrp_production.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ + + +class MrpProduction(models.Model): + _inherit = 'mrp.production' + + sale_order_count = fields.Integer( + "Count of Source SO", + compute='_compute_sale_order_count', + groups='sales_team.group_sale_salesman') + + @api.depends('move_dest_ids.group_id.sale_id') + def _compute_sale_order_count(self): + for production in self: + production.sale_order_count = len(production.move_dest_ids.group_id.sale_id) + + def action_view_sale_orders(self): + self.ensure_one() + sale_order_ids = self.move_dest_ids.group_id.sale_id.ids + action = { + 'res_model': 'sale.order', + 'type': 'ir.actions.act_window', + } + if len(sale_order_ids) == 1: + action.update({ + 'view_mode': 'form', + 'res_id': sale_order_ids[0], + }) + else: + action.update({ + 'name': _("Sources Sale Orders of %s" % self.name), + 'domain': [('id', 'in', sale_order_ids)], + 'view_mode': 'tree,form', + }) + return action diff --git a/addons/sale_mrp/models/sale_mrp.py b/addons/sale_mrp/models/sale.py index 3fa0d216235..a5da78cc4a5 100644 --- a/addons/sale_mrp/models/sale_mrp.py +++ b/addons/sale_mrp/models/sale.py @@ -2,7 +2,40 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, _ -from odoo.tools import float_compare, float_round + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + mrp_production_count = fields.Integer( + "Count of MO generated", + compute='_compute_mrp_production_count', + groups='mrp.group_mrp_user') + + @api.depends('procurement_group_id.stock_move_ids.created_production_id') + def _compute_mrp_production_count(self): + for sale in self: + sale.mrp_production_count = len(sale.procurement_group_id.stock_move_ids.created_production_id) + + def action_view_mrp_production(self): + self.ensure_one() + mrp_production_ids = self.procurement_group_id.stock_move_ids.created_production_id.ids + action = { + 'res_model': 'mrp.production', + 'type': 'ir.actions.act_window', + } + if len(mrp_production_ids) == 1: + action.update({ + 'view_mode': 'form', + 'res_id': mrp_production_ids[0], + }) + else: + action.update({ + 'name': _("Manufacturing Orders Generated by %s" % self.name), + 'domain': [('id', 'in', mrp_production_ids)], + 'view_mode': 'tree,form', + }) + return action class SaleOrderLine(models.Model): diff --git a/addons/sale_mrp/views/mrp_production_views.xml b/addons/sale_mrp/views/mrp_production_views.xml new file mode 100644 index 00000000000..c7ba8742f98 --- /dev/null +++ b/addons/sale_mrp/views/mrp_production_views.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo><data> + <record id="mrp_production_form_view_sale" model="ir.ui.view"> + <field name="name">mrp.production.inherited.form.sale</field> + <field name="model">mrp.production</field> + <field name="inherit_id" ref="mrp.mrp_production_form_view"/> + <field name="arch" type="xml"> + <xpath expr="//div[@name='button_box']" position="inside"> + <button class="oe_stat_button" name="action_view_sale_orders" type="object" icon="fa-dollar" attrs="{'invisible': [('sale_order_count', '=', 0)]}" groups="sales_team.group_sale_salesman"> + <div class="o_field_widget o_stat_info"> + <span class="o_stat_value"><field name="sale_order_count"/></span> + <span class="o_stat_text">Sales</span> + </div> + </button> + </xpath> + </field> + </record> +</data></odoo>
\ No newline at end of file diff --git a/addons/sale_mrp/views/sale_order_views.xml b/addons/sale_mrp/views/sale_order_views.xml new file mode 100644 index 00000000000..8777431f94c --- /dev/null +++ b/addons/sale_mrp/views/sale_order_views.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo><data> + <record id="sale_order_form_mrp" model="ir.ui.view"> + <field name="name">sale.order.inherited.form.mrp</field> + <field name="model">sale.order</field> + <field name="inherit_id" ref="sale.view_order_form"/> + <field name="arch" type="xml"> + <xpath expr="//div[@name='button_box']" position="inside"> + <button class="oe_stat_button" name="action_view_mrp_production" type="object" icon="fa-wrench" attrs="{'invisible': [('mrp_production_count', '=', 0)]}" groups="mrp.group_mrp_user"> + <div class="o_field_widget o_stat_info"> + <span class="o_stat_value"><field name="mrp_production_count"/></span> + <span class="o_stat_text">Manufacturing</span> + </div> + </button> + </xpath> + </field> + </record> +</data></odoo>
\ No newline at end of file |
