summaryrefslogtreecommitdiff
path: root/addons/mrp/models/stock_picking.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp/models/stock_picking.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mrp/models/stock_picking.py')
-rw-r--r--addons/mrp/models/stock_picking.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/addons/mrp/models/stock_picking.py b/addons/mrp/models/stock_picking.py
new file mode 100644
index 00000000..9a748336
--- /dev/null
+++ b/addons/mrp/models/stock_picking.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class StockPickingType(models.Model):
+ _inherit = 'stock.picking.type'
+
+ code = fields.Selection(selection_add=[
+ ('mrp_operation', 'Manufacturing')
+ ], ondelete={'mrp_operation': 'cascade'})
+ count_mo_todo = fields.Integer(string="Number of Manufacturing Orders to Process",
+ compute='_get_mo_count')
+ count_mo_waiting = fields.Integer(string="Number of Manufacturing Orders Waiting",
+ compute='_get_mo_count')
+ count_mo_late = fields.Integer(string="Number of Manufacturing Orders Late",
+ compute='_get_mo_count')
+ use_create_components_lots = fields.Boolean(
+ string="Create New Lots/Serial Numbers for Components",
+ help="Allow to create new lot/serial numbers for the components",
+ default=False,
+ )
+
+ def _get_mo_count(self):
+ mrp_picking_types = self.filtered(lambda picking: picking.code == 'mrp_operation')
+ if not mrp_picking_types:
+ self.count_mo_waiting = False
+ self.count_mo_todo = False
+ self.count_mo_late = False
+ return
+ domains = {
+ 'count_mo_waiting': [('reservation_state', '=', 'waiting')],
+ 'count_mo_todo': [('state', 'in', ('confirmed', 'draft', 'progress'))],
+ 'count_mo_late': [('date_planned_start', '<', fields.Date.today()), ('state', '=', 'confirmed')],
+ }
+ for field in domains:
+ data = self.env['mrp.production'].read_group(domains[field] +
+ [('state', 'not in', ('done', 'cancel')), ('picking_type_id', 'in', self.ids)],
+ ['picking_type_id'], ['picking_type_id'])
+ count = {x['picking_type_id'] and x['picking_type_id'][0]: x['picking_type_id_count'] for x in data}
+ for record in mrp_picking_types:
+ record[field] = count.get(record.id, 0)
+ remaining = (self - mrp_picking_types)
+ if remaining:
+ remaining.count_mo_waiting = False
+ remaining.count_mo_todo = False
+ remaining.count_mo_late = False
+
+ def get_mrp_stock_picking_action_picking_type(self):
+ return self._get_action('mrp.mrp_production_action_picking_deshboard')
+
+class StockPicking(models.Model):
+ _inherit = 'stock.picking'
+
+ def _less_quantities_than_expected_add_documents(self, moves, documents):
+ documents = super(StockPicking, self)._less_quantities_than_expected_add_documents(moves, documents)
+
+ def _keys_in_sorted(move):
+ """ sort by picking and the responsible for the product the
+ move.
+ """
+ return (move.raw_material_production_id.id, move.product_id.responsible_id.id)
+
+ def _keys_in_groupby(move):
+ """ group by picking and the responsible for the product the
+ move.
+ """
+ return (move.raw_material_production_id, move.product_id.responsible_id)
+
+ production_documents = self._log_activity_get_documents(moves, 'move_dest_ids', 'DOWN', _keys_in_sorted, _keys_in_groupby)
+ return {**documents, **production_documents}