Config: Removed nightshifts query

This commit is contained in:
Igor Scheller 2018-09-17 12:33:15 +02:00 committed by msquare
parent 0734807eef
commit 2a134e6c0b
9 changed files with 63 additions and 32 deletions

View File

@ -79,23 +79,13 @@ return [
// local timezone
'timezone' => env('TIMEZONE', 'Europe/Berlin'),
// weigh every shift the same
//'shift_sum_formula' => 'SUM(`end` - `start`)',
// Multiply 'night shifts' and freeloaded shifts (start or end between 2 and 6 exclusive) by 2
'shift_sum_formula' => '
SUM(
(1 +
(
(HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6)
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6)
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6)
)
)
* (`Shifts`.`end` - `Shifts`.`start`)
* (1 - 3 * `ShiftEntry`.`freeloaded`)
)
',
'night_shifts' => [
'enabled' => true, // Disable to weigh every shift the same
'start' => 2,
'end' => 6,
'multiplier' => 2,
],
// Voucher calculation
'voucher_settings' => [

View File

@ -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

View File

@ -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']
);
}

View File

@ -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 = '';

View File

@ -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

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Engelsystem 2.0\n"
"POT-Creation-Date: 2017-12-29 19:01+0100\n"
"PO-Revision-Date: 2018-08-27 22:26+0200\n"
"PO-Revision-Date: 2018-09-17 12:10+0200\n"
"Last-Translator: msquare <msquare@notrademark.de>\n"
"Language-Team: \n"
"Language: de_DE\n"
@ -2768,8 +2768,9 @@ msgid "JSON Export"
msgstr "JSON Export"
#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:598
msgid "Your night shifts between 2 and 8 am count twice."
msgstr "Deine Nachtschichten zwischen 2 und 8 Uhr zählen doppelt."
#, php-format
msgid "Your night shifts between %d and %d am count twice."
msgstr "Deine Nachtschichten zwischen %d und %d Uhr zählen doppelt."
#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:603
#, php-format

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Engelsystem 2.0\n"
"POT-Creation-Date: 2017-04-25 05:23+0200\n"
"PO-Revision-Date: 2017-04-25 05:23+0200\n"
"PO-Revision-Date: 2018-09-17 12:11+0200\n"
"Last-Translator: samba <samba@autistici.org>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@ -2385,8 +2385,9 @@ msgid "Action"
msgstr "Ação"
#: includes/view/User_view.php:373
msgid "Your night shifts between 2 and 8 am count twice."
msgstr "Os seus turnos noturnos entre 2h e 8h contam como dois."
#, php-format
msgid "Your night shifts between %d and %d am count twice."
msgstr "Os seus turnos noturnos entre %dh e %dh contam como dois."
#: includes/view/User_view.php:374
#, php-format