bemade_fsm: Marking visit task done completes its descendants.

Re: Dur-Pro/bemade-addons#93
This commit is contained in:
Marc Durepos 2023-08-03 10:13:43 -04:00
parent c966af3343
commit 0980f6fbb3
2 changed files with 25 additions and 9 deletions

View file

@ -49,8 +49,6 @@ class Task(models.Model):
visit_id = fields.Many2one(comodel_name='bemade_fsm.visit')
is_complete = fields.Boolean(compute="_compute_is_complete")
# user_id = fields.Many2one('res.users', compute='_compute_user_id')
#
# @api.depends('user_ids')
@ -71,13 +69,6 @@ class Task(models.Model):
for project in self.project_id
}
@api.depends('project_id', 'stage_id.is_closed')
def _compute_is_complete(self):
closing_stages = self._get_closed_stage_by_project()
for rec in self:
rec.is_complete = rec.stage_id == (rec.project_id
and closing_stages[rec.project_id])
def _get_related_planning_slots(self):
domain = expression.AND([
self._get_domain_compute_forecast_hours(),
@ -148,3 +139,15 @@ class Task(models.Model):
rec.allow_billable = False
else:
rec.allow_billable = rec.project_id.allow_billable
def action_fsm_validate(self):
visits = self.filtered(lambda t: t.visit_id)
non_visits = self - visits
super(Task, non_visits).action_fsm_validate()
visits._stop_all_timers_and_create_timesheets()
closed_stage_by_project = visits._get_closed_stage_by_project()
super(Task, visits.child_ids).action_fsm_validate()
for visit in visits:
stage = closed_stage_by_project[visit.project_id]
visits.write({'stage_id': stage.id, 'fsm_done': True})

View file

@ -101,3 +101,16 @@ class FSMVisitTest(BemadeFSMBaseTest):
self.assertEqual(len(so.order_line), 3)
def test_marking_visit_task_done_completes_descendants(self):
so, visit, sol1, sol2 = self._generate_so_with_one_visit_two_lines()
so.action_confirm()
parent, child1, child2 = visit.task_id, sol1.task_id, sol2.task_id
parent.action_fsm_validate()
self.assertTrue(parent.is_closed)
self.assertTrue(child1.is_closed)
self.assertTrue(child2.is_closed)
self.assertEqual(sol1.qty_to_deliver, 0)
self.assertEqual(sol2.qty_to_deliver, 0)
self.assertTrue(visit.is_completed)