From 9f67dbe9aac41467f74d5eec893b10de7a994009 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Thu, 12 Dec 2024 16:06:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E5=A4=96=E5=8D=8F=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=B2=A1=E6=9C=89=E8=87=AA=E5=8A=A8=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=BC=80=E5=A7=8B=E3=80=81=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E7=9A=84=E4=BC=98=E5=8C=96=E9=9C=80=E6=B1=82=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/__init__.py | 1 + sf_manufacturing/models/purchase_order.py | 31 +++++++++++++++++++ sf_manufacturing/models/stock.py | 37 +++++++++++++++-------- 3 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 sf_manufacturing/models/purchase_order.py diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py index 9f77d841..c4d8ad94 100644 --- a/sf_manufacturing/models/__init__.py +++ b/sf_manufacturing/models/__init__.py @@ -15,3 +15,4 @@ from . import sf_technology_design from . import sf_production_common from . import sale_order from . import quick_easy_order +from . import purchase_order \ No newline at end of file diff --git a/sf_manufacturing/models/purchase_order.py b/sf_manufacturing/models/purchase_order.py new file mode 100644 index 00000000..e54e96bf --- /dev/null +++ b/sf_manufacturing/models/purchase_order.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from collections import defaultdict + +from odoo import api, fields, models, _ +from odoo.tools import OrderedSet + + +# _get_surface_technics_purchase_ids +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + def button_confirm(self): + super().button_confirm() + workorders = self.env['mrp.workorder'].search([('purchase_id', '=', self.id)]) + for workorder in workorders: + if workorder.routing_type == '表面工艺' and workorder.is_subcontract is True: + move_out = workorder.move_subcontract_workorder_ids[1] + # move_out = self.env['stock.move'].search( + # [('location_id', '=', self.env['stock.location'].search( + # [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id), + # ('location_dest_id', '=', self.env['stock.location'].search( + # [('barcode', 'ilike', 'VL-SPOC')]).id), + # ('origin', '=', self.production_id.name), ('state', 'not in', ['cancel', 'done'])]) + for mo in move_out: + if mo.state != 'done': + mo.write({'state': 'assigned', 'production_id': False}) + if not mo.move_line_ids: + self.env['stock.move.line'].create(mo.get_move_line(workorder.production_id, workorder)) + return True diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index fbe3be8c..6506cc1a 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -644,12 +644,19 @@ class StockPicking(models.Model): workorder = move_in.subcontract_workorder_id workorders = workorder.production_id.workorder_ids subcontract_workorders = workorders.filtered(lambda wo: wo.is_subcontract == True).sorted('sequence') - if workorder == subcontract_workorders[-1]: + if workorder == subcontract_workorders[-1]: self.env['stock.quant']._update_reserved_quantity( - move_in.product_id, move_in.location_dest_id, move_in.product_uom_qty, lot_id=move_in.move_line_ids.lot_id, + move_in.product_id, move_in.location_dest_id, move_in.product_uom_qty, + lot_id=move_in.move_line_ids.lot_id, package_id=False, owner_id=False, strict=False ) - + workorder.button_finish() + picking_type_out = self.env.ref('sf_manufacturing.outcontract_picking_out').id + if res and self.picking_type_id.id == picking_type_out: + move_out = self.move_ids + if move_out: + workorder = move_out.subcontract_workorder_id + workorder.button_start() return res # 创建 外协出库入单 @@ -671,14 +678,16 @@ class StockPicking(models.Model): else: # 从sorted_workorders中找到上一工单的move if sorted_workorders.index(workorder) > 0: - move_dest_id = sorted_workorders[sorted_workorders.index(workorder) - 1].move_subcontract_workorder_ids[1].id + 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)) + 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) @@ -686,7 +695,8 @@ class StockPicking(models.Model): {'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)) + 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/')) @@ -694,8 +704,7 @@ class StockPicking(models.Model): 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): super(StockPicking, self)._compute_state() @@ -706,7 +715,9 @@ class StockPicking(models.Model): if picking.move_ids: workorder = picking.move_ids[0].subcontract_workorder_id if picking.state == 'assigned': - if workorder.state in ['pending', 'waiting'] or workorder._get_surface_technics_purchase_ids().state in ['draft', 'sent']: + if workorder.state in ['pending', + 'waiting'] or workorder._get_surface_technics_purchase_ids().state in [ + 'draft', 'sent']: picking.state = 'waiting' @@ -719,7 +730,8 @@ class ReStockMove(models.Model): def _get_stock_move_values_Res(self, item, picking_type_id, group_id, move_dest_ids=False): route_id = self.env.ref('sf_manufacturing.route_surface_technology_outsourcing').id - stock_rule = self.env['stock.rule'].sudo().search([('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)]) + stock_rule = self.env['stock.rule'].sudo().search( + [('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)]) move_values = { 'name': '推', 'company_id': item.company_id.id, @@ -997,8 +1009,9 @@ class ReStockMove(models.Model): res['origin'] = ','.join(productions.mapped('name')) res['retrospect_ref'] = production.product_id.name return res - - subcontract_workorder_id = fields.Many2one('mrp.workorder', '外协工单组件', check_company=True, index='btree_not_null') + + subcontract_workorder_id = fields.Many2one('mrp.workorder', '外协工单组件', check_company=True, + index='btree_not_null') class ReStockQuant(models.Model):