diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/model/Stats.php | 10 | ||||
-rw-r--r-- | includes/model/User_model.php | 34 | ||||
-rw-r--r-- | includes/pages/admin_active.php | 2 | ||||
-rw-r--r-- | includes/view/User_view.php | 9 |
4 files changed, 47 insertions, 8 deletions
diff --git a/includes/model/Stats.php b/includes/model/Stats.php index 20376ac6..c8342d82 100644 --- a/includes/model/Stats.php +++ b/includes/model/Stats.php @@ -128,17 +128,21 @@ function stats_angels_needed_three_hours() } /** - * Returns the number of needed angels for nightshifts (between 2 and 8) + * Returns the number of needed angels for nightshifts (see config) * * @return int|string */ function stats_angels_needed_for_nightshifts() { + $nightShiftsConfig = config('night_shifts'); + $nightStartTime = $nightShiftsConfig['start']; + $nightEndTime = $nightShiftsConfig['end']; + $night_start = parse_date( 'Y-m-d H:i', - date('Y-m-d', time() + 12 * 60 * 60) . ' 02:00' + date('Y-m-d', time() + 12 * 60 * 60) . ' ' . $nightStartTime . ':00' ); - $night_end = $night_start + 6 * 60 * 60; + $night_end = $night_start + ($nightEndTime - $nightStartTime) * 60 * 60; $result = Db::selectOne(" SELECT SUM(`count`) AS `count` FROM ( SELECT diff --git a/includes/model/User_model.php b/includes/model/User_model.php index cbdb5efe..092ddf27 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -26,8 +26,7 @@ function User_delete($user_id) */ function User_tshirt_score($user) { - $shift_sum_formula = config('shift_sum_formula'); - + $shift_sum_formula = User_get_shifts_sum_query(); $result_shifts = DB::selectOne(' SELECT ROUND((' . $shift_sum_formula . ') / 3600, 2) AS `tshirt_score` FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` @@ -530,3 +529,34 @@ function User_get_eligable_voucher_count(&$user) return $eligable_vouchers; } + +/** + * Generates the query to sum night shifts + * + * @return string + */ +function User_get_shifts_sum_query() +{ + $nightShifts = config('night_shifts'); + if (!$nightShifts['enabled']) { + return 'SUM(`end` - `start`)'; + } + + return sprintf(' + SUM( + (1 + + ( + (HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > %1$d AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < %2$d) + OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > %1$d AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < %2$d) + OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= %1$d AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= %2$d) + ) + ) + * (`Shifts`.`end` - `Shifts`.`start`) + * (1 - (%3$d + 1) * `ShiftEntry`.`freeloaded`) + ) + ', + $nightShifts['start'], + $nightShifts['end'], + $nightShifts['multiplier'] + ); +} diff --git a/includes/pages/admin_active.php b/includes/pages/admin_active.php index 7aeb249f..3a9ba8c4 100644 --- a/includes/pages/admin_active.php +++ b/includes/pages/admin_active.php @@ -16,7 +16,7 @@ function admin_active_title() function admin_active() { $tshirt_sizes = config('tshirt_sizes'); - $shift_sum_formula = config('shift_sum_formula'); + $shift_sum_formula = User_get_shifts_sum_query(); $request = request(); $msg = ''; diff --git a/includes/view/User_view.php b/includes/view/User_view.php index 40e7bfe1..3d5cfd69 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -532,6 +532,7 @@ function User_view( $admin_user_worklog_privilege, $user_worklogs ) { + $nightShiftsConfig = config('night_shifts'); $user_name = htmlspecialchars($user_source['Vorname']) . ' ' . htmlspecialchars($user_source['Name']); $myshifts_table = ''; if ($its_me || $admin_user_privilege) { @@ -619,8 +620,12 @@ function User_view( ]), ($its_me || $admin_user_privilege) ? '<h2>' . __('Shifts') . '</h2>' : '', $myshifts_table, - $its_me ? info( - glyph('info-sign') . __('Your night shifts between 2 and 8 am count twice.'), + ($its_me && $nightShiftsConfig['enabled']) ? info( + glyph('info-sign') . sprintf( + __('Your night shifts between %d and %d am count twice.'), + $nightShiftsConfig['start'], + $nightShiftsConfig['end'] + ), true ) : '', $its_me && count($shifts) == 0 |