summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorRémy Voet (ryv) <ryv@odoo.com>2020-01-08 09:45:52 +0000
committerRémy Voet (ryv) <ryv@odoo.com>2020-01-23 15:00:01 +0000
commite1b3a17c3bda2b2d585d930386244e3f2b0bed31 (patch)
tree21c69efe57c6080c32b1e9c14338bb0e8a3619f0 /addons
parent5a1645a8f8f3560eb778da90b6160b322ce0722e (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')
-rw-r--r--addons/sale_mrp/__manifest__.py2
-rw-r--r--addons/sale_mrp/models/__init__.py3
-rw-r--r--addons/sale_mrp/models/mrp_production.py38
-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.xml18
-rw-r--r--addons/sale_mrp/views/sale_order_views.xml18
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