Optimize Overtime Calculation
The overtime calculation currently takes arount 5-7 seconds, which is a major contributor to the runtime in timesheets.helper.get_information_for_week_display
. The problem entirely lies in the computation of the required work time.
In the old version, the required work time is calculated for every day individually, which takes a very long time. The required time is calculated by management.utils.contracted_work_time_at which takes into account the following influences for a single day.
- SicknessPeriod that overlaps this day, abort and return 0
- current ContractPeriod yields work time on the given day
- public holdiays set the work time to 0
A new method shall calculate the aggregated required working time without iterating over every single day using contracted_work_time_at.