diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp/models/stock_picking.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mrp/models/stock_picking.py')
| -rw-r--r-- | addons/mrp/models/stock_picking.py | 72 |
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} |
