diff --git a/sf_manufacturing/models/purchase_order.py b/sf_manufacturing/models/purchase_order.py index fc8a96b1..71e4e045 100644 --- a/sf_manufacturing/models/purchase_order.py +++ b/sf_manufacturing/models/purchase_order.py @@ -10,10 +10,11 @@ from odoo.tools import OrderedSet # _get_surface_technics_purchase_ids class PurchaseOrder(models.Model): _inherit = 'purchase.order' + production_count = fields.Integer( "关联制造订单", compute='_compute_workorder_count', - ) + ) def action_view_production(self): origins = [order.name for order in self.picking_ids] @@ -37,17 +38,17 @@ class PurchaseOrder(models.Model): }) return action - def _compute_workorder_count(self): for purchase in self: origins = [order.name for order in purchase.picking_ids] production_id = self.env['mrp.production'].search([('origin', 'in', origins)]) purchase.production_count = len(production_id) + def button_confirm(self): super().button_confirm() - workorders = self.env['mrp.workorder'].search([('purchase_id', '=', self.id),('state', '!=', 'cancel')]) + workorders = self.env['mrp.workorder'].search([('purchase_id', '=', self.id), ('state', '!=', 'cancel')]) for workorder in workorders: - if workorder.routing_type == '表面工艺' and workorder.is_subcontract is True: + 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( @@ -61,10 +62,39 @@ class PurchaseOrder(models.Model): if not mo.move_line_ids: self.env['stock.move.line'].create(mo.get_move_line(workorder.production_id, workorder)) return True + + origin_sale_id = fields.Many2one('sale.order', string='销售订单号', store=True, compute='_compute_origin_sale_id') + origin_sale_ids = fields.Many2many('sale.order', string='销售订单号(多个)', store=True, + compute='_compute_origin_sale_id') + + @api.depends('origin') + def _compute_origin_sale_id(self): + for purchase in self: + if not purchase.origin: + continue + elif 'MO' in purchase.origin: + mp_name_list = [name.strip() for name in purchase['origin'].split(',')] + os_ids = list({mp_id.sale_order_id.id for mp_id in self.env['mrp.production'].sudo().search([ + ('name', 'in', mp_name_list)])}) + if len(os_ids) == 1: + purchase.origin_sale_id = os_ids[0] + elif len(os_ids) >= 2: + purchase.origin_sale_ids = os_ids + elif 'S' in purchase.origin: + os_name_list = [name.strip() for name in purchase['origin'].split(',')] + os_ids = self.env['sale.order'].sudo().search([('name', 'in', os_name_list)]) + if len(os_ids) == 1: + purchase.origin_sale_id = os_ids.id + elif len(os_ids) >= 2: + purchase.origin_sale_ids = os_ids.ids + + class PurchaseOrderLine(models.Model): _inherit = 'purchase.order.line' part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True) - related_product = fields.Many2one('product.product',compute='_compute_related_product', string='关联产品',help='经此产品工艺加工成的成品') + related_product = fields.Many2one('product.product', compute='_compute_related_product', string='关联产品', + help='经此产品工艺加工成的成品') + @api.depends('order_id.origin') def _compute_related_product(self): for record in self: @@ -73,4 +103,3 @@ class PurchaseOrderLine(models.Model): record.related_product = production_id.product_id if production_id else False else: record.related_product = False - diff --git a/sf_manufacturing/views/purchase_order_view.xml b/sf_manufacturing/views/purchase_order_view.xml index 83562f2c..3b1518fb 100644 --- a/sf_manufacturing/views/purchase_order_view.xml +++ b/sf_manufacturing/views/purchase_order_view.xml @@ -22,6 +22,13 @@ + + + + + diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index c9c06b9b..ac246da9 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -285,8 +285,6 @@ class RePurchaseOrder(models.Model): [('standard', '标准采购'), ('consignment', '工序外协'), ('outsourcing', '委外加工'), ('outside', '外购订单')], string='采购类型', default='standard', store=True, compute='_compute_purchase_type') - origin_sale_id = fields.Many2one('sale.order', string='销售订单号', compute='_compute_origin_sale_id') - # 合同编号 contract_number = fields.Char(string='合同编号', size=20) # 合同概况 @@ -311,21 +309,6 @@ class RePurchaseOrder(models.Model): purchase.purchase_type = 'outsourcing' break - @api.depends('order_line.move_dest_ids.group_id.mrp_production_ids', - 'order_line.move_ids.move_dest_ids.group_id.mrp_production_ids', 'origin') - def _compute_origin_sale_id(self): - for purchase in self: - productions_ids = purchase._get_mrp_productions() - if productions_ids: - if productions_ids[0].sale_order_id: - purchase.origin_sale_id = productions_ids[0].sale_order_id.id - continue - order_id = self.env['sale.order'].sudo().search([('name', '=', purchase.origin)]) - if order_id: - purchase.origin_sale_id = order_id.id - continue - purchase.origin_sale_id = False - delivery_warning = fields.Selection([('normal', '正常'), ('warning', '预警'), ('overdue', '已逾期')], string='交期状态', default='normal', tracking=True) diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml index eec616f4..ecc061fa 100644 --- a/sf_sale/views/purchase_order_view.xml +++ b/sf_sale/views/purchase_order_view.xml @@ -190,11 +190,6 @@ - - - - - 1