From 04f3cac527ad03bc9c0254918a01cd597a476675 Mon Sep 17 00:00:00 2001
From: Arnold Moyaux <arm@odoo.com>
Date: Fri, 27 Aug 2021 07:52:33 +0000
Subject: [PATCH] [IMP] stock, mrp: computed picking type on stock.move.line

Easier to access and avoid overwrite in function to check picking type
on manufacturing order

closes odoo/odoo#75691

Enterprise-pr: https://github.com/odoo/enterprise/pull/20102
Related: odoo/enterprise#20102
Related: odoo/upgrade#2785
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
---
 addons/mrp/models/stock_move.py        | 10 ++++++++++
 addons/stock/models/stock_move_line.py |  9 +++++++++
 2 files changed, 19 insertions(+)

diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py
index 1d9ea817440d..7c9aa5a7c045 100644
--- a/addons/mrp/models/stock_move.py
+++ b/addons/mrp/models/stock_move.py
@@ -11,6 +11,16 @@ class StockMoveLine(models.Model):
     workorder_id = fields.Many2one('mrp.workorder', 'Work Order', check_company=True)
     production_id = fields.Many2one('mrp.production', 'Production Order', check_company=True)
 
+    @api.depends('production_id')
+    def _compute_picking_type_id(self):
+        line_to_remove = self.env['stock.move.line']
+        for line in self:
+            if not line.production_id:
+                continue
+            line.picking_type_id = line.production_id.picking_type_id
+            line_to_remove |= line
+        return super(StockMoveLine, self - line_to_remove)._compute_picking_type_id()
+
     @api.model_create_multi
     def create(self, values):
         res = super(StockMoveLine, self).create(values)
diff --git a/addons/stock/models/stock_move_line.py b/addons/stock/models/stock_move_line.py
index 4b700923e4c3..27465cb126ec 100644
--- a/addons/stock/models/stock_move_line.py
+++ b/addons/stock/models/stock_move_line.py
@@ -58,6 +58,8 @@ class StockMoveLine(models.Model):
     location_dest_id = fields.Many2one('stock.location', 'To', domain="[('usage', '!=', 'view')]", check_company=True, required=True)
     lots_visible = fields.Boolean(compute='_compute_lots_visible')
     picking_code = fields.Selection(related='picking_id.picking_type_id.code', readonly=True)
+    picking_type_id = fields.Many2one(
+        'stock.picking.type', 'Operation type', compute='_compute_picking_type_id')
     picking_type_use_create_lots = fields.Boolean(related='picking_id.picking_type_id.use_create_lots', readonly=True)
     picking_type_use_existing_lots = fields.Boolean(related='picking_id.picking_type_id.use_existing_lots', readonly=True)
     picking_type_entire_packs = fields.Boolean(related='picking_id.picking_type_id.show_entire_packs', readonly=True)
@@ -81,6 +83,13 @@ class StockMoveLine(models.Model):
             else:
                 line.lots_visible = line.product_id.tracking != 'none'
 
+    @api.depends('picking_id')
+    def _compute_picking_type_id(self):
+        self.picking_type_id = False
+        for line in self:
+            if line.picking_id:
+                line.picking_type_id = line.picking_id.picking_type_id
+
     @api.depends('product_id', 'product_uom_id', 'product_uom_qty')
     def _compute_product_qty(self):
         for line in self:
-- 
GitLab