bemade_fsm: Marking visit task done completes its descendants.
Re: Dur-Pro/bemade-addons#93
This commit is contained in:
parent
c966af3343
commit
0980f6fbb3
2 changed files with 25 additions and 9 deletions
|
|
@ -49,8 +49,6 @@ class Task(models.Model):
|
||||||
|
|
||||||
visit_id = fields.Many2one(comodel_name='bemade_fsm.visit')
|
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')
|
# user_id = fields.Many2one('res.users', compute='_compute_user_id')
|
||||||
#
|
#
|
||||||
# @api.depends('user_ids')
|
# @api.depends('user_ids')
|
||||||
|
|
@ -71,13 +69,6 @@ class Task(models.Model):
|
||||||
for project in self.project_id
|
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):
|
def _get_related_planning_slots(self):
|
||||||
domain = expression.AND([
|
domain = expression.AND([
|
||||||
self._get_domain_compute_forecast_hours(),
|
self._get_domain_compute_forecast_hours(),
|
||||||
|
|
@ -148,3 +139,15 @@ class Task(models.Model):
|
||||||
rec.allow_billable = False
|
rec.allow_billable = False
|
||||||
else:
|
else:
|
||||||
rec.allow_billable = rec.project_id.allow_billable
|
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})
|
||||||
|
|
|
||||||
|
|
@ -101,3 +101,16 @@ class FSMVisitTest(BemadeFSMBaseTest):
|
||||||
|
|
||||||
self.assertEqual(len(so.order_line), 3)
|
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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue