Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化最新版报废

This commit is contained in:
jinling.yang
2024-08-09 15:45:11 +08:00
3 changed files with 75 additions and 49 deletions

View File

@@ -137,9 +137,23 @@ class ResMrpWorkOrder(models.Model):
@api.depends('name', 'production_id.name') @api.depends('name', 'production_id.name')
def _compute_surface_technics_picking_ids(self): def _compute_surface_technics_picking_ids(self):
for order in self: for workorder in self:
picking_ids = self.env['stock.picking'].search([('id', 'in', order.picking_ids.ids)]) if workorder.routing_type == '表面工艺':
order.surface_technics_picking_count = len(picking_ids) domain = [('origin', '=', workorder.production_id.name)]
previous_workorder = self.env['mrp.workorder'].search(
[('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'),
('production_id', '=', workorder.production_id.id)])
if previous_workorder:
process_product = self.env['product.template']._get_process_parameters_product(
previous_workorder.surface_technics_parameters_id)
domain += [('partner_id', '=', process_product.partner_id.id)]
else:
domain += [('surface_technics_parameters_id', '=', workorder.surface_technics_parameters_id.id)]
picking_ids = self.env['stock.picking'].search(domain, order='id asc')
workorder.surface_technics_picking_count = len(picking_ids)
workorder.picking_ids = picking_ids.ids
else:
workorder.surface_technics_picking_count = 0
def action_view_surface_technics_picking(self): def action_view_surface_technics_picking(self):
self.ensure_one() self.ensure_one()
@@ -1061,7 +1075,7 @@ class ResMrpWorkOrder(models.Model):
('location_dest_id', '=', self.env['stock.location'].search( ('location_dest_id', '=', self.env['stock.location'].search(
[('barcode', 'ilike', 'VL-SPOC')]).id), [('barcode', 'ilike', 'VL-SPOC')]).id),
('origin', '=', self.production_id.name)]) ('origin', '=', self.production_id.name)])
if move_out: if move_out.state != 'done':
move_out.write({'state': 'assigned'}) move_out.write({'state': 'assigned'})
self.env['stock.move.line'].create(move_out.get_move_line(self.production_id, self)) self.env['stock.move.line'].create(move_out.get_move_line(self.production_id, self))

View File

@@ -755,7 +755,11 @@ class ResProductMo(models.Model):
# 产品名称唯一性校验 # 产品名称唯一性校验
for item in templates: for item in templates:
if len(self.search([('name', '=', item.name)])) > 1: if len(self.search([('name', '=', item.name)])) > 1:
raise ValidationError('产品名称【%s】已存在' % item.name) raise UserError('产品名称【%s】已存在' % item.name)
if item.categ_type == '表面工艺':
if len(self.search([('server_product_process_parameters_id', '=',
item.server_product_process_parameters_id.id)])) > 1:
raise UserError('表面工艺参数为【%s】的产品已存在' % item.server_product_process_parameters_id.name)
if "create_product_product" not in self._context: if "create_product_product" not in self._context:
templates._create_variant_ids() templates._create_variant_ids()

View File

@@ -289,6 +289,8 @@ class StockRule(models.Model):
product_id_to_production_names[product_id] = [production.name for production in all_production] product_id_to_production_names[product_id] = [production.name for production in all_production]
for production_item in productions: for production_item in productions:
if production_item.product_id.id in product_id_to_production_names: if production_item.product_id.id in product_id_to_production_names:
if production_item.product_id.model_process_parameters_ids:
is_purchase = False
sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids, sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids,
key=lambda w: w.id) key=lambda w: w.id)
@@ -316,26 +318,31 @@ class StockRule(models.Model):
is_purchase = True is_purchase = True
consecutive_process_parameters = [] consecutive_process_parameters = []
m = 0 m = 0
# 当前面的连续采购单生成再生成当前工序的外协采购单 # 当前面的连续外协采购单生成再生成当前外协采购单
if is_purchase is False: if is_purchase is False:
self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, self.env['purchase.order'].get_purchase_order(consecutive_process_parameters,
production_item, product_id_to_production_names) production_item,
product_id_to_production_names)
if m == len(consecutive_process_parameters) - 1 and m != 0: if m == len(consecutive_process_parameters) - 1 and m != 0:
self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, self.env['purchase.order'].get_purchase_order(consecutive_process_parameters,
production_item, product_id_to_production_names) production_item,
product_id_to_production_names)
if sorted_process_parameters[i] in consecutive_process_parameters: if sorted_process_parameters[i] in consecutive_process_parameters:
is_purchase = True is_purchase = True
consecutive_process_parameters = [] consecutive_process_parameters = []
m = 0 m = 0
if m == len(consecutive_process_parameters) - 1 and m != 0: if m == len(consecutive_process_parameters) - 1 and m != 0:
self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, production_item, self.env['purchase.order'].get_purchase_order(consecutive_process_parameters,
production_item,
product_id_to_production_names) product_id_to_production_names)
if is_purchase is False and m == 0: if is_purchase is False and m == 0:
if len(sorted_process_parameters) == 1: if len(sorted_process_parameters) == 1:
self.env['purchase.order'].get_purchase_order(sorted_process_parameters, production_item, self.env['purchase.order'].get_purchase_order(sorted_process_parameters,
production_item,
product_id_to_production_names) product_id_to_production_names)
else: else:
self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], production_item, self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i],
production_item,
product_id_to_production_names) product_id_to_production_names)
# # 同一个产品多个制造订单对应一个编程单和模型库 # # 同一个产品多个制造订单对应一个编程单和模型库
# # 只调用一次fetchCNC并将所有生产订单的名称作为字符串传递 # # 只调用一次fetchCNC并将所有生产订单的名称作为字符串传递
@@ -580,7 +587,7 @@ class StockPicking(models.Model):
[('barcode', 'ilike', 'VL-SPOC')]).id), [('barcode', 'ilike', 'VL-SPOC')]).id),
('origin', '=', self.origin)]) ('origin', '=', self.origin)])
production = self.env['mrp.production'].search([('name', '=', self.origin)]) production = self.env['mrp.production'].search([('name', '=', self.origin)])
if move_in: if move_in.state != 'done':
move_in.write({'state': 'assigned'}) move_in.write({'state': 'assigned'})
self.env['stock.move.line'].create(move_in.get_move_line(production, None)) self.env['stock.move.line'].create(move_in.get_move_line(production, None))
@@ -590,7 +597,7 @@ class StockPicking(models.Model):
def create_outcontract_picking(self, sorted_workorders_arr, item): def create_outcontract_picking(self, sorted_workorders_arr, item):
m = 0 m = 0
for sorted_workorders in sorted_workorders_arr: for sorted_workorders in sorted_workorders_arr:
pick_ids = [] # pick_ids = []
if m == 0: if m == 0:
outcontract_stock_move = self.env['stock.move'].search( outcontract_stock_move = self.env['stock.move'].search(
[('workorder_id', '=', sorted_workorders.id), ('production_id', '=', item.id)]) [('workorder_id', '=', sorted_workorders.id), ('production_id', '=', item.id)])
@@ -609,7 +616,7 @@ class StockPicking(models.Model):
outcontract_picking_type_out)) outcontract_picking_type_out))
picking_out = self.create( picking_out = self.create(
moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/')) moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/'))
pick_ids.append(picking_out.id) # pick_ids.append(picking_out.id)
moves_out.write( moves_out.write(
{'picking_id': picking_out.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) {'picking_id': picking_out.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id})
moves_out._assign_picking_post_process(new=new_picking) moves_out._assign_picking_post_process(new=new_picking)
@@ -618,12 +625,12 @@ class StockPicking(models.Model):
outcontract_picking_type_in)) outcontract_picking_type_in))
picking_in = self.create( picking_in = self.create(
moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/')) moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/'))
pick_ids.append(picking_in.id) # pick_ids.append(picking_in.id)
moves_in.write( moves_in.write(
{'picking_id': picking_in.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) {'picking_id': picking_in.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id})
moves_in._assign_picking_post_process(new=new_picking) moves_in._assign_picking_post_process(new=new_picking)
m += 1 m += 1
sorted_workorders.write({'picking_ids': [(6, 0, pick_ids)]}) # sorted_workorders.write({'picking_ids': [(6, 0, pick_ids)]})
class ReStockMove(models.Model): class ReStockMove(models.Model):
@@ -654,6 +661,7 @@ class ReStockMove(models.Model):
return { return {
'name': self.env['stock.picking']._get_name_Res(rescode), 'name': self.env['stock.picking']._get_name_Res(rescode),
'origin': item.name, 'origin': item.name,
'surface_technics_parameters_id': sorted_workorders.surface_technics_parameters_id.id,
'company_id': self.mapped('company_id').id, 'company_id': self.mapped('company_id').id,
'user_id': False, 'user_id': False,
'move_type': self.mapped('group_id').move_type or 'direct', 'move_type': self.mapped('group_id').move_type or 'direct',