From 675fb54d375d9a81acabdbbed298c7297bd2d924 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Fri, 27 Dec 2024 17:28:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/maintenance_equipment.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sf_tool_management/models/maintenance_equipment.py b/sf_tool_management/models/maintenance_equipment.py index 5da56016..af9d4931 100644 --- a/sf_tool_management/models/maintenance_equipment.py +++ b/sf_tool_management/models/maintenance_equipment.py @@ -126,16 +126,16 @@ class StockLot(models.Model): tool_material_search_id = fields.Many2one('sf.tool.material.search', string='刀具物料搜索') fixture_material_search_id = fields.Many2one('sf.fixture.material.search', string='夹具物料搜索') tool_material_status = fields.Selection( - [('未入库', '未入库'), ('可用', '可用'), ('在用', '空闲'), ('报废', '报废')], string='状态', + [('未入库', '未入库'), ('可用', '空闲'), ('在用', '占用'), ('报废', '报废')], string='状态', compute='_compute_tool_material_status', store=True) @api.depends('quant_ids') def _compute_tool_material_status(self): for record in self: if record: - if record.product_id.categ_id.name in ['刀具', '夹具']: + if record.product_id.categ_id.name in ['刀具']: if record.quant_ids: - if record.quant_ids[-1].location_id.name in ['刀具房', '夹具房']: + if record.quant_ids[-1].location_id.name in ['刀具房']: record.tool_material_status = '可用' elif record.quant_ids[-1].location_id.name == '刀具组装位置': record.tool_material_status = '在用' From 6780d4e758dfeeb90b0f71a74bbaf7eab6b63cbd Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Sat, 28 Dec 2024 09:07:02 +0800 Subject: [PATCH 2/5] =?UTF-8?q?sorted=5Fworkorders=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index b4367212..011c5f7e 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -794,6 +794,7 @@ class MrpProduction(models.Model): groupby(production_all, key=lambda x: x.product_id.id)} for product_id, pd in grouped_product_ids.items(): product_id_to_production_names[product_id] = [p.name for p in pd] + sorted_workorders = None for production in production_all: proc_workorders = [] process_parameter_workorder = self.env['mrp.workorder'].search( From abfac280940606e0fba7ee344b3653a0b048966e Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Sat, 28 Dec 2024 09:12:27 +0800 Subject: [PATCH 3/5] =?UTF-8?q?sorted=5Fworkorders=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 011c5f7e..5c304de4 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -846,6 +846,8 @@ class MrpProduction(models.Model): # self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) # self.env['purchase.order'].get_purchase_order(consecutive_workorders, production, # product_id_to_production_names) + if not sorted_workorders: + return for workorders in reversed(sorted_workorders): self.env['stock.picking'].create_outcontract_picking(workorders, production, sorted_workorders) self.env['purchase.order'].get_purchase_order(workorders, production, product_id_to_production_names) From 889049b1074578e374aad5a7989fca6efe495694 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Sat, 28 Dec 2024 14:28:34 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=A1=A8=E9=9D=A2=E5=B7=A5=E8=89=BA?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E5=9B=9E=E9=80=80=E5=86=8D=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E8=B0=83=E6=8B=A8=E5=8D=95=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/stock.py | 85 +++++++++++++++++--------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 4aba2693..d43dc0b7 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -657,52 +657,59 @@ class StockPicking(models.Model): if move_out: workorder = move_out.subcontract_workorder_id workorder.button_start() + # if self.location_id.name == '成品存货区' and self.location_dest_id == '客户': + # sale_id = self.env['sale.order'].sudo().search( + # [('name', '=', self.origin)]) + # if sale_id: + # sale_id.write({'state':'delivered'}) return res # 创建 外协出库入单 def create_outcontract_picking(self, workorders, item, sorted_workorders): for workorder in workorders: if workorder.move_subcontract_workorder_ids: - workorder.move_subcontract_workorder_ids.write({'state': 'waiting'}) - workorder.move_subcontract_workorder_ids.picking_id.write({'state': 'waiting'}) + workorder.move_subcontract_workorder_ids.write({'state': 'cancel'}) + workorder.move_subcontract_workorder_ids.picking_id.write({'state': 'cancel'}) + # 创建一个新的补货组 + procurement_group_id = self.env['procurement.group'].create({ + 'name': workorder.name, + 'partner_id': self.partner_id.id, + }) + move_dest_id = False + # 如果当前工单是是制造订单的最后一个工艺外协工单 + if workorder == next((workorder for workorder in reversed(sorted_workorders) if workorder.is_subcontract), None): + move_dest_id = item.move_raw_ids[0].id else: - # 创建一个新的补货组 - procurement_group_id = self.env['procurement.group'].create({ - 'name': workorder.name, - 'partner_id': self.partner_id.id, - }) - move_dest_id = False - # 如果当前工单是是制造订单的最后一个工艺外协工单 - if workorder == next((workorder for workorder in reversed(item.workorder_ids) if workorder.is_subcontract), None): - move_dest_id = item.move_raw_ids[0].id - else: - # 从sorted_workorders中找到上一工单的move - if len(sorted_workorders) > 1: - move_dest_id = sorted_workorders[sorted_workorders.index(workorder)+1].move_subcontract_workorder_ids[1].id - new_picking = True - outcontract_picking_type_in = self.env.ref( - 'sf_manufacturing.outcontract_picking_in').id, - outcontract_picking_type_out = self.env.ref( - 'sf_manufacturing.outcontract_picking_out').id, - moves_in = self.env['stock.move'].sudo().create( - self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in, - procurement_group_id.id, move_dest_id)) - picking_in = self.create( - moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/')) - # pick_ids.append(picking_in.id) - moves_in.write( - {'picking_id': picking_in.id, 'state': 'waiting'}) - moves_in._assign_picking_post_process(new=new_picking) - moves_out = self.env['stock.move'].sudo().create( - self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out, - procurement_group_id.id, moves_in.id)) - workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]}) - picking_out = self.create( - moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/')) - # pick_ids.append(picking_out.id) - moves_out.write( - {'picking_id': picking_out.id, 'state': 'waiting'}) - moves_out._assign_picking_post_process(new=new_picking) + # 从sorted_workorders中找到上一工单的move + if len(sorted_workorders) > 1: + move_dest_id = sorted_workorders[sorted_workorders.index(workorder)+1].move_subcontract_workorder_ids[1].id + new_picking = True + outcontract_picking_type_in = self.env.ref( + 'sf_manufacturing.outcontract_picking_in').id, + outcontract_picking_type_out = self.env.ref( + 'sf_manufacturing.outcontract_picking_out').id, + moves_in = self.env['stock.move'].sudo().create( + self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in, + procurement_group_id.id, move_dest_id)) + picking_in = self.create( + moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/')) + # pick_ids.append(picking_in.id) + moves_in.write( + {'picking_id': picking_in.id, 'state': 'waiting'}) + moves_in._assign_picking_post_process(new=new_picking) + moves_out = self.env['stock.move'].sudo().create( + self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out, + procurement_group_id.id, moves_in.id)) + workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]}) + picking_out = self.create( + moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/')) + # pick_ids.append(picking_out.id) + moves_out.write( + {'picking_id': picking_out.id, 'state': 'waiting'}) + moves_out._assign_picking_post_process(new=new_picking) + + + @api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id') def _compute_state(self): From 8b40714daddc1f499dc7a6aa1e39e49bf20f543a Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Sat, 28 Dec 2024 14:55:17 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BA=A4=E4=BB=98=E7=8A=B6=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/stock.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index d43dc0b7..e0e0782f 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -657,11 +657,11 @@ class StockPicking(models.Model): if move_out: workorder = move_out.subcontract_workorder_id workorder.button_start() - # if self.location_id.name == '成品存货区' and self.location_dest_id == '客户': - # sale_id = self.env['sale.order'].sudo().search( - # [('name', '=', self.origin)]) - # if sale_id: - # sale_id.write({'state':'delivered'}) + if self.location_id.name == '成品存货区' and self.location_dest_id.name == '客户': + sale_id = self.env['sale.order'].sudo().search( + [('name', '=', self.origin)]) + if sale_id and all(move.product_uom_qty == move.quantity_done for move in self.move_ids): + sale_id.write({'state':'delivered'}) return res # 创建 外协出库入单