diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 1145679c..69e6afb1 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -145,8 +145,6 @@ class MrpProduction(models.Model): else: return 0.0 - - @api.depends('workorder_ids.tool_state_remark') def _compute_tool_state_remark(self): for item in self: @@ -308,7 +306,7 @@ class MrpProduction(models.Model): precision_rounding=move.product_uom.rounding or move.product_id.uom_id.rounding) for move in production.move_raw_ids if move.product_id): production.state = 'progress' - + # 新添加的状态逻辑 if ( production.state == 'to_close' or production.state == 'progress') and production.schedule_state == '未排': @@ -810,7 +808,6 @@ class MrpProduction(models.Model): if td_ids: work.sequence = td_ids[0].sequence - def _reset_work_order_sequence_1(self): """ 工单工序排序方法(旧) @@ -910,54 +907,30 @@ class MrpProduction(models.Model): self._reset_work_order_sequence() return True + def production_process(self, pro_plan): + type_map = {'装夹预调': False, 'CNC加工': False, '解除装夹': False} + # 最后一次加工结束时间 + last_time = pro_plan.date_planned_start + # 预置时间 + works = self.workorder_ids + for index,work in enumerate(works): + count = type_map.get(work.routing_type) + date_planned_end = None + date_planned_start = None + if self.production_type=='自动化产线加工': + date_planned_start,date_planned_end,last_time = work.auto_production_process(last_time,count,type_map) + elif self.production_type=='': + date_planned_start,date_planned_end,last_time = work.manual_offline_process(last_time,index) + work.update_work_start_end(date_planned_start,date_planned_end) + # def def process_range_time(self): for production in self: works = production.workorder_ids pro_plan = self.env['sf.production.plan'].search([('production_id', '=', production.id)], limit=1) if not pro_plan: continue - type_map = {'装夹预调': False, 'CNC加工': False, '解除装夹': False} - # 最后一次加工结束时间 - last_time = pro_plan.date_planned_start - # 预置时间 - for work in works: - count = type_map.get(work.routing_type) - date_planned_end = None - date_planned_start = None - duration_expected = datetime.timedelta(minutes=work.duration_expected) - reserve_time = datetime.timedelta(minutes=work.reserved_duration) - if not count: - # 第一轮加工 - if work.routing_type == '装夹预调': - date_planned_end = last_time - reserve_time - date_planned_start = date_planned_end - duration_expected - elif work.routing_type == 'CNC加工': - date_planned_start = last_time - date_planned_end = last_time + duration_expected - last_time = date_planned_end - else: - date_planned_start = last_time + reserve_time - date_planned_end = date_planned_start + duration_expected - last_time = date_planned_end - type_map.update({work.routing_type: True}) - else: - date_planned_start = last_time + reserve_time - date_planned_end = date_planned_start + duration_expected - last_time = date_planned_end - work.leave_id.write({ - 'date_from': date_planned_start, - 'date_to': date_planned_end, - }) - # work.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end}) - # 设置一个较大的结束时间,防止在设置开始时间时,结束时间小于开始时间 - work.date_planned_finished = datetime.datetime.today() + datetime.timedelta(days=100) - work.date_planned_start = date_planned_start - work.date_planned_finished = date_planned_end - routing_workcenter = self.env['mrp.routing.workcenter'].sudo().search( - [('name', '=', work.routing_type)]) - - work.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end, - 'duration_expected': routing_workcenter.time_cycle}) + if production.production_type: + production.production_process(pro_plan) # 修改标记已完成方法 def button_mark_done1(self): diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index a61b0986..22a7317a 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1980,3 +1980,55 @@ class CMMprogram(models.Model): 'program_create_date': datetime.strptime(item['program_create_date'], '%Y-%m-%d %H:%M:%S'), })) return cmm_program + + def update_work_start_end(self,date_planned_start,date_planned_end): + self.leave_id.write({ + 'date_from': date_planned_start, + 'date_to': date_planned_end, + }) + self.date_planned_finished = datetime.datetime.today() + datetime.timedelta(days=100) + self.date_planned_start = date_planned_start + self.date_planned_finished = date_planned_end + routing_workcenter = self.env['mrp.routing.workcenter'].sudo().search( + [('name', '=', self.routing_type)]) + + self.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end, + 'duration_expected': routing_workcenter.time_cycle}) + + def auto_production_process(self, last_time, is_first, type_map): + date_planned_end = None + date_planned_start = None + duration_expected = datetime.timedelta(minutes=self.duration_expected) + reserve_time = datetime.timedelta(minutes=self.reserved_duration) + if is_first: + # 第一轮加工 + if self.routing_type == '装夹预调': + date_planned_end = last_time - reserve_time + date_planned_start = date_planned_end - duration_expected + elif self.routing_type == 'CNC加工': + date_planned_start = last_time + date_planned_end = last_time + duration_expected + last_time = date_planned_end + else: + date_planned_start = last_time + reserve_time + date_planned_end = date_planned_start + duration_expected + last_time = date_planned_end + type_map.update({self.routing_type: True}) + else: + date_planned_start = last_time + reserve_time + date_planned_end = date_planned_start + duration_expected + last_time = date_planned_end + return date_planned_start, date_planned_end, last_time + def manual_offline_process(self,last_time,is_first): + date_planned_end = None + date_planned_start = None + duration_expected = datetime.timedelta(minutes=self.duration_expected) + reserve_time = datetime.timedelta(minutes=self.reserved_duration) + if is_first: + date_planned_start = last_time + date_planned_end = last_time + duration_expected + + else: + date_planned_start = last_time + reserve_time + date_planned_end = date_planned_start + duration_expected + return date_planned_start, date_planned_end,last_time \ No newline at end of file