diff --git a/sf_demand_plan/models/sf_production_demand_plan.py b/sf_demand_plan/models/sf_production_demand_plan.py index 8f250aed..d0983cc2 100644 --- a/sf_demand_plan/models/sf_production_demand_plan.py +++ b/sf_demand_plan/models/sf_production_demand_plan.py @@ -20,12 +20,13 @@ class sf_production_plan(models.Model): ('4', '低'), ], string='优先级', default='3') status = fields.Selection([ + ('10', '草稿'), ('20', '待确认'), ('30', '需求确认'), + ('40', '待下达生产'), ('50', '已下达'), ('100', '取消'), - ], string='状态') - + ], string='状态', compute='_compute_status', store=True) sale_order_id = fields.Many2one(comodel_name="sale.order", string="销售订单") sale_order_line_id = fields.Many2one(comodel_name="sale.order.line", @@ -75,7 +76,7 @@ class sf_production_plan(models.Model): 'plan_process_parameter_rel', string='表面工艺', compute='_compute_model_process_parameters_ids' - + , store=True ) product_remark = fields.Char("产品备注", related='product_id.model_remark') order_code = fields.Char('E-SHOP订单号', related='sale_order_id.order_code') @@ -88,12 +89,35 @@ class sf_production_plan(models.Model): processing_time = fields.Char('程序工时') planned_start_date = fields.Date('计划开工日期') - actual_start_date = fields.Date('实际开工日期') + actual_start_date = fields.Date('实际开工日期', compute='_compute_actual_start_date') actual_end_date = fields.Date('实际完工日期') print_count = fields.Char('打印次数', default='T0C0') sequence = fields.Integer('序号') + @api.depends('sale_order_id.state', 'sale_order_id.mrp_production_ids.schedule_state', 'sale_order_id.order_line') + def _compute_status(self): + for record in self: + if record.sale_order_id: + sale_order_state = record.sale_order_id.state + if sale_order_state in ('draft', 'sent', 'supply method'): + record.status = '20' # 待确认 + if record.supply_method in ('purchase', 'outsourcing') and sale_order_state in ( + 'sale', 'processing', 'physical_distribution', 'delivered', + 'done') and sale_order_state != 'cancel': + record.status = '50' # 已下达 + if record.supply_method in ('automation', 'manual'): + if sale_order_state in ( + 'sale', 'processing', 'physical_distribution', 'delivered', + 'done') and sale_order_state != 'cancel': + record.status = '30' # 需求确认 + # 检查所有制造订单的排程单状态 + if all(order.product_id == record.product_id and order.schedule_state != '未排' for order in + record.sale_order_id.mrp_production_ids): + record.status = '50' # 已下达 + if sale_order_state == 'cancel' or not record.sale_order_line_id: + record.status = '100' # 取消 + @api.depends('product_id.part_number', 'product_id.model_name') def _compute_part_number(self): for line in self: @@ -151,6 +175,23 @@ class sf_production_plan(models.Model): else: line.inventory_quantity_auto_apply = 0.0 + @api.depends('sale_order_id.mrp_production_ids.workorder_ids.date_start') + def _compute_actual_start_date(self): + for record in self: + if record.sale_order_id and record.sale_order_id.mrp_production_ids: + manufacturing_orders = record.sale_order_id.mrp_production_ids.filtered( + lambda mo: mo.product_id == record.product_id) + if manufacturing_orders: + start_dates = [ + workorder.date_start.date() for mo in manufacturing_orders + for workorder in mo.workorder_ids if workorder.date_start + ] + record.actual_start_date = min(start_dates) if start_dates else None + else: + record.actual_start_date = None + else: + record.actual_start_date = None + @api.constrains('planned_start_date') def _check_planned_start_date(self): for record in self: diff --git a/sf_demand_plan/static/src/scss/style.css b/sf_demand_plan/static/src/scss/style.css index 90b00db8..6c8e57fd 100644 --- a/sf_demand_plan/static/src/scss/style.css +++ b/sf_demand_plan/static/src/scss/style.css @@ -1,3 +1,7 @@ .demand_plan_tree th:not(.o_list_record_selector,.row_no,[data-name=sequence]) { min-width: 98px !important; +} + +.demand_plan_tree .o_list_table_grouped th:not(.o_list_record_selector,.row_no,[data-name=sequence]) { + min-width: 98px !important; } \ No newline at end of file diff --git a/sf_demand_plan/views/demand_plan.xml b/sf_demand_plan/views/demand_plan.xml index 6cc6a998..1975b008 100644 --- a/sf_demand_plan/views/demand_plan.xml +++ b/sf_demand_plan/views/demand_plan.xml @@ -3,7 +3,7 @@ sf.production.demand.plan.tree sf.production.demand.plan - + @@ -24,7 +24,7 @@ - +