diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 6c4ba7ff..daf049eb 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -292,78 +292,78 @@ class StockRule(models.Model): for product_id, all_production in grouped_product_ids.items(): # 为同一个product_id创建一个生产订单名称列表 product_id_to_production_names[product_id] = [production.name for production in all_production] - # for production_item in productions: - # - # production_programming = self.env['mrp.production'].search( - # [('product_id.id', '=', production_item.product_id.id), - # ('origin', '=', production_item.origin)], - # limit=1, order='id asc') - # if production_item.product_id.id in product_id_to_production_names: - # if not production_programming.programming_no: - # if production_item.product_id.model_process_parameters_ids: - # is_purchase = False - # sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids, - # key=lambda w: w.id) - # - # consecutive_process_parameters = [] - # m = 0 - # for i in range(len(sorted_process_parameters) - 1): - # if m == 0: - # is_purchase = False - # if self.env['product.template']._get_process_parameters_product( - # sorted_process_parameters[i]).partner_id == self.env[ - # 'product.template']._get_process_parameters_product(sorted_process_parameters[ - # i + 1]).partner_id and \ - # sorted_process_parameters[i].gain_way == '外协': - # if sorted_process_parameters[i] not in consecutive_process_parameters: - # consecutive_process_parameters.append(sorted_process_parameters[i]) - # consecutive_process_parameters.append(sorted_process_parameters[i + 1]) - # m += 1 - # continue - # else: - # if m == len(consecutive_process_parameters) - 1 and m != 0: - # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - # production_item, - # product_id_to_production_names) - # if sorted_process_parameters[i] in consecutive_process_parameters: - # is_purchase = True - # consecutive_process_parameters = [] - # m = 0 - # # 当前面的连续外协采购单生成再生成当前外协采购单 - # if is_purchase is False: - # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - # production_item, - # product_id_to_production_names) - # if m == len(consecutive_process_parameters) - 1 and m != 0: - # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - # production_item, - # product_id_to_production_names) - # if sorted_process_parameters[i] in consecutive_process_parameters: - # is_purchase = True - # consecutive_process_parameters = [] - # m = 0 - # if m == len(consecutive_process_parameters) - 1 and m != 0: - # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - # production_item, - # product_id_to_production_names) - # if is_purchase is False and m == 0: - # if len(sorted_process_parameters) == 1: - # self.env['purchase.order'].get_purchase_order(sorted_process_parameters, - # production_item, - # product_id_to_production_names) - # else: - # self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], - # production_item, - # product_id_to_production_names) - # # # 同一个产品多个制造订单对应一个编程单和模型库 - # # # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递 - # if not production_item.programming_no: - # if not production_programming.programming_no: - # production_item.fetchCNC( - # ', '.join(product_id_to_production_names[production_item.product_id.id])) - # else: - # production_item.write({'programming_no': production_programming.programming_no, - # 'programming_state': '编程中'}) + for production_item in productions: + + production_programming = self.env['mrp.production'].search( + [('product_id.id', '=', production_item.product_id.id), + ('origin', '=', production_item.origin)], + limit=1, order='id asc') + if production_item.product_id.id in product_id_to_production_names: + if not production_programming.programming_no: + if production_item.product_id.model_process_parameters_ids: + is_purchase = False + sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids, + key=lambda w: w.id) + + consecutive_process_parameters = [] + m = 0 + for i in range(len(sorted_process_parameters) - 1): + if m == 0: + is_purchase = False + if self.env['product.template']._get_process_parameters_product( + sorted_process_parameters[i]).partner_id == self.env[ + 'product.template']._get_process_parameters_product(sorted_process_parameters[ + i + 1]).partner_id and \ + sorted_process_parameters[i].gain_way == '外协': + if sorted_process_parameters[i] not in consecutive_process_parameters: + consecutive_process_parameters.append(sorted_process_parameters[i]) + consecutive_process_parameters.append(sorted_process_parameters[i + 1]) + m += 1 + continue + else: + if m == len(consecutive_process_parameters) - 1 and m != 0: + self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + production_item, + product_id_to_production_names) + if sorted_process_parameters[i] in consecutive_process_parameters: + is_purchase = True + consecutive_process_parameters = [] + m = 0 + # 当前面的连续外协采购单生成再生成当前外协采购单 + if is_purchase is False: + self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + production_item, + product_id_to_production_names) + if m == len(consecutive_process_parameters) - 1 and m != 0: + self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + production_item, + product_id_to_production_names) + if sorted_process_parameters[i] in consecutive_process_parameters: + is_purchase = True + consecutive_process_parameters = [] + m = 0 + if m == len(consecutive_process_parameters) - 1 and m != 0: + self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + production_item, + product_id_to_production_names) + if is_purchase is False and m == 0: + if len(sorted_process_parameters) == 1: + self.env['purchase.order'].get_purchase_order(sorted_process_parameters, + production_item, + product_id_to_production_names) + else: + self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], + production_item, + product_id_to_production_names) + # # 同一个产品多个制造订单对应一个编程单和模型库 + # # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递 + if not production_item.programming_no: + if not production_programming.programming_no: + production_item.fetchCNC( + ', '.join(product_id_to_production_names[production_item.product_id.id])) + else: + production_item.write({'programming_no': production_programming.programming_no, + 'programming_state': '编程中'}) return True