diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index e467c5dc..bd63f625 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -242,37 +242,43 @@ class FormData: ) return exposed - def coffee_break_times(self, start, finish, nbreaks) -> typing.Tuple[typing.Tuple[int, int]]: - if not self.coffee_breaks: - return () - break_delay = ((finish - start) - (nbreaks * self.coffee_duration)) // (nbreaks+1) - coffee_times = [] + def _compute_breaks_in_interval(self, start, finish, n_breaks) -> typing.Tuple[typing.Tuple[int, int]]: + break_delay = ((finish - start) - (n_breaks * self.coffee_duration)) // (n_breaks+1) + break_times = [] end = start - for n in range(nbreaks): + for n in range(n_breaks): begin = end + break_delay end = begin + self.coffee_duration - coffee_times.append((begin, end)) - return tuple(coffee_times) + break_times.append((begin, end)) + return tuple(break_times) + + def coffee_break_times(self) -> typing.Tuple[typing.Tuple[int, int]]: + if not self.coffee_breaks: + return () + if self.lunch_option: + n_morning_breaks = self.coffee_breaks // 2 + breaks = ( + self._compute_breaks_in_interval( + self.activity_start, self.lunch_start, n_morning_breaks + ) + + self._compute_breaks_in_interval( + self.lunch_finish, self.activity_finish, self.coffee_breaks - n_morning_breaks + ) + ) + else: + breaks = self._compute_breaks_in_interval(self.activity_start, self.activity_finish, self.coffee_breaks) + return breaks def present_interval(self, start, finish) -> models.Interval: leave_times = [] enter_times = [] if self.lunch_option: - for coffee_start, coffee_end in self.coffee_break_times( - self.activity_start,self.lunch_start,self.coffee_breaks // 2): - leave_times.append(coffee_start) - enter_times.append(coffee_end) leave_times.append(self.lunch_start) enter_times.append(self.lunch_finish) - for coffee_start, coffee_end in self.coffee_break_times( - self.lunch_finish,self.activity_finish,self.coffee_breaks // 2): - leave_times.append(coffee_start) - enter_times.append(coffee_end) - else: - for coffee_start, coffee_end in self.coffee_break_times( - self.activity_start,self.activity_finish,self.coffee_breaks): - leave_times.append(coffee_start) - enter_times.append(coffee_end) + + for coffee_start, coffee_end in self.coffee_break_times(): + leave_times.append(coffee_start) + enter_times.append(coffee_end) # These lists represent the times where the infected person leaves or enters the room, respectively, sorted in # reverse order. Note that these lists allows the person to "leave" when they should not even be present in the diff --git a/cara/apps/calculator/templates/report.html.j2 b/cara/apps/calculator/templates/report.html.j2 index 8d50348b..3701f2e2 100644 --- a/cara/apps/calculator/templates/report.html.j2 +++ b/cara/apps/calculator/templates/report.html.j2 @@ -121,18 +121,9 @@ each of {{ form.coffee_duration }} minutes duration
Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}
Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}
Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}