summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/model/Stats.php10
-rw-r--r--includes/model/User_model.php34
-rw-r--r--includes/pages/admin_active.php2
-rw-r--r--includes/view/User_view.php9
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