Improvement of the coffee breaks implementation (avoiding too much logic in report generation) - thanks to P. Elson
This commit is contained in:
parent
3ee7931a6e
commit
a427898126
2 changed files with 28 additions and 31 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -121,18 +121,9 @@
|
|||
each of {{ form.coffee_duration }} minutes duration
|
||||
</p></li>
|
||||
<ul>
|
||||
{% if form.lunch_option%}
|
||||
{%- for start_time, end_time in form.coffee_break_times(form.activity_start,form.lunch_start,form.coffee_breaks//2) %}
|
||||
{%- for start_time, end_time in form.coffee_break_times() %}
|
||||
<li><p class="data_subtext">Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}</p></li>
|
||||
{%- endfor %}
|
||||
{%- for start_time, end_time in form.coffee_break_times(form.lunch_finish,form.activity_finish,form.coffee_breaks//2) %}
|
||||
<li><p class="data_subtext">Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}</p></li>
|
||||
{%- endfor %}
|
||||
{% else%}
|
||||
{%- for start_time, end_time in form.coffee_break_times(form.activity_start,form.activity_finish,form.coffee_breaks) %}
|
||||
<li><p class="data_subtext">Coffee break {{ loop.index }}: Start: {{ start_time | minutes_to_time }}    End: {{ end_time | minutes_to_time }}</p></li>
|
||||
{%- endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Reference in a new issue