diff --git a/sf_mrs_connect/models/mrp_production.py b/sf_mrs_connect/models/mrp_production.py index ec740abd..9da2f7aa 100644 --- a/sf_mrs_connect/models/mrp_production.py +++ b/sf_mrs_connect/models/mrp_production.py @@ -18,25 +18,34 @@ class MrpProduction(models.Model): 生成编程单 """ productions = super().create(vals_list) + # 定义变量存储编程单 grouped_product_programming_no = {} # 定义产品拼接成的制造订单名称 grouped_product_production_name = {} - # 查出所有的制造订单,为了适配通过补货生成的制造订单 - all_productions = self.env['mrp.production'].search([('origin', '=', productions[0].origin)]) - # 将不同产品的制造订单进行分组 - grouped_product_productions = {k: list(g) for k, g in groupby(all_productions, key=lambda x: x.product_id.id)} - for product_id, grouped_productions in grouped_product_productions.items(): - # 产品对应的编程单号 - if product_id not in grouped_product_programming_no: - # 使用列表推导式获取非空的programming_no - programming_nos = [p.programming_no for p in grouped_productions if p.programming_no if p.programming_no is not False] - if programming_nos: - grouped_product_programming_no[product_id] = programming_nos[0] - grouped_product_production_name[product_id] = ','.join(list(map(lambda p:p.name, grouped_productions))) + if productions and productions[0].origin: + # 查出所有的制造订单,为了适配通过补货生成的制造订单 + all_productions = self.env['mrp.production'].search([('origin', '=', productions[0].origin)]) + # 将不同产品的制造订单进行分组 + grouped_product_productions = {k: list(g) for k, g in groupby(all_productions, key=lambda x: x.product_id.id)} + + for product_id, grouped_productions in grouped_product_productions.items(): + # 产品对应的编程单号 + if product_id not in grouped_product_programming_no: + # 使用列表推导式获取非空的programming_no + programming_nos = [p.programming_no for p in grouped_productions if p.programming_no if p.programming_no is not False] + if programming_nos: + grouped_product_programming_no[product_id] = programming_nos[0] + grouped_product_production_name[product_id] = ','.join(list(map(lambda p:p.name, grouped_productions))) # 同一个产品的制造订单只请求一次CNC编程 for production in productions: + # 如果是委外产生的制造订单,则不请求编程 + if production.subcontractor_id: + continue + # 没有模型ID的制造订单不请求编程 + if not production.model_id: + continue if not production.programming_no and production.production_type in ['自动化产线加工','人工线下加工']: if production.product_id.id not in grouped_product_programming_no: production.fetchCNC(grouped_product_production_name[production.product_id.id])