diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py index 2ea63d25..2bf973ae 100644 --- a/fusion_plating/fusion_plating/__manifest__.py +++ b/fusion_plating/fusion_plating/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating', - 'version': '19.0.8.6.0', + 'version': '19.0.8.6.1', 'category': 'Manufacturing/Plating', 'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.', 'description': """ diff --git a/fusion_plating/fusion_plating/models/fp_job_step.py b/fusion_plating/fusion_plating/models/fp_job_step.py index cf999da2..33730f48 100644 --- a/fusion_plating/fusion_plating/models/fp_job_step.py +++ b/fusion_plating/fusion_plating/models/fp_job_step.py @@ -136,8 +136,9 @@ class FpJobStep(models.Model): # ------------------------------------------------------------------ # Cost rollup (Task 1.6) # cost_per_hour comes from fp.work.centre (Task 1.2 added it there). - # cost_total recomputes when duration_actual or rate changes — - # duration_actual will be sum of timelog rows once Task 1.7 lands. + # cost_total recomputes when duration_actual or rate changes. + # duration_actual is set by button_finish as the sum of timelog + # row durations (see fp.job.step.timelog). # ------------------------------------------------------------------ cost_per_hour = fields.Monetary( related='work_centre_id.cost_per_hour', @@ -197,16 +198,19 @@ class FpJobStep(models.Model): raise UserError(_( "Step '%s' is in state '%s' — only ready/paused steps can start." ) % (step.name, step.state)) + now = fields.Datetime.now() step.state = 'in_progress' # First-start audit (mirrors button_finish first-finish guard) if not step.date_started: - step.date_started = fields.Datetime.now() + step.date_started = now step.started_by_user_id = self.env.user - # Open a fresh timelog row for this start interval + # Open a fresh timelog row for this start interval — uses the + # same `now` as the first-start stamp so the step and its + # first log share a single instant. self.env['fp.job.step.timelog'].create({ 'step_id': step.id, 'user_id': self.env.user.id, - 'date_started': fields.Datetime.now(), + 'date_started': now, }) return True diff --git a/fusion_plating/fusion_plating/security/ir.model.access.csv b/fusion_plating/fusion_plating/security/ir.model.access.csv index 3f165844..39042737 100644 --- a/fusion_plating/fusion_plating/security/ir.model.access.csv +++ b/fusion_plating/fusion_plating/security/ir.model.access.csv @@ -54,4 +54,5 @@ access_fp_job_step_operator,fp.job.step.operator,model_fp_job_step,fusion_platin access_fp_job_step_supervisor,fp.job.step.supervisor,model_fp_job_step,fusion_plating.group_fusion_plating_supervisor,1,1,1,0 access_fp_job_step_manager,fp.job.step.manager,model_fp_job_step,fusion_plating.group_fusion_plating_manager,1,1,1,1 access_fp_job_step_timelog_operator,fp.job.step.timelog.operator,model_fp_job_step_timelog,fusion_plating.group_fusion_plating_operator,1,1,1,0 +access_fp_job_step_timelog_supervisor,fp.job.step.timelog.supervisor,model_fp_job_step_timelog,fusion_plating.group_fusion_plating_supervisor,1,1,1,0 access_fp_job_step_timelog_manager,fp.job.step.timelog.manager,model_fp_job_step_timelog,fusion_plating.group_fusion_plating_manager,1,1,1,1