Fix night shift calculation & update times

This commit is contained in:
Igor Scheller 2024-02-18 12:53:53 +01:00 committed by xuwhite
parent 4ad8385386
commit 8dda9a0dc3
4 changed files with 26 additions and 12 deletions

View File

@ -350,8 +350,8 @@ return [
// Goodies must be enabled to use this feature // Goodies must be enabled to use this feature
'night_shifts' => [ 'night_shifts' => [
'enabled' => (bool) env('NIGHT_SHIFTS', true), // Disable to weigh every shift the same 'enabled' => (bool) env('NIGHT_SHIFTS', true), // Disable to weigh every shift the same
'start' => env('NIGHT_SHIFTS_START', 2), 'start' => env('NIGHT_SHIFTS_START', 2), // Starting from hour
'end' => env('NIGHT_SHIFTS_END', 8), 'end' => env('NIGHT_SHIFTS_END', 8), // Ends at (without including) hour
'multiplier' => env('NIGHT_SHIFTS_MULTIPLIER', 2), 'multiplier' => env('NIGHT_SHIFTS_MULTIPLIER', 2),
], ],

View File

@ -128,8 +128,11 @@ function User_get_shifts_sum_query()
' '
COALESCE(SUM( COALESCE(SUM(
(1 + ( (1 + (
HOUR(shifts.start) > %1$d AND HOUR(shifts.start) < %2$d HOUR(shifts.start) >= %1$d AND HOUR(shifts.start) < %2$d
OR HOUR(shifts.end) > %1$d AND HOUR(shifts.end) < %2$d OR (
HOUR(shifts.end) > %1$d
|| HOUR(shifts.end) = %1$d AND MINUTE(shifts.end) > 0
) AND HOUR(shifts.end) <= %2$d
OR HOUR(shifts.start) <= %1$d AND HOUR(shifts.end) >= %2$d OR HOUR(shifts.start) <= %1$d AND HOUR(shifts.end) >= %2$d
)) ))
* (UNIX_TIMESTAMP(shifts.end) - UNIX_TIMESTAMP(shifts.start)) * (UNIX_TIMESTAMP(shifts.end) - UNIX_TIMESTAMP(shifts.start))

View File

@ -18,8 +18,11 @@ class Shifts
/** @see User_get_shifts_sum_query to keep it in sync */ /** @see User_get_shifts_sum_query to keep it in sync */
return $config['enabled'] && ( return $config['enabled'] && (
$start->hour > $config['start'] && $start->hour < $config['end'] $start->hour >= $config['start'] && $start->hour < $config['end']
|| $end->hour > $config['start'] && $end->hour < $config['end'] || (
$end->hour > $config['start']
|| $end->hour == $config['start'] && $end->minute > 0
) && $end->hour <= $config['end']
|| $start->hour <= $config['start'] && $end->hour >= $config['end'] || $start->hour <= $config['start'] && $end->hour >= $config['end']
); );
} }

View File

@ -19,7 +19,7 @@ class ShiftsTest extends TestCase
$config = new Config(['night_shifts' => [ $config = new Config(['night_shifts' => [
'enabled' => false, 'enabled' => false,
'start' => 2, 'start' => 2,
'end' => 6, 'end' => 8,
'multiplier' => 2, 'multiplier' => 2,
]]); ]]);
$this->app->instance('config', $config); $this->app->instance('config', $config);
@ -40,16 +40,24 @@ class ShiftsTest extends TestCase
return [ return [
// Is night shift // Is night shift
['2042-01-01 04:00', '2042-01-01 05:00', true], ['2042-01-01 04:00', '2042-01-01 05:00', true],
// Is night shift
['2042-01-01 02:00', '2042-01-01 02:15', true],
// Is night shift
['2042-01-01 07:45', '2042-01-01 08:00', true],
// Starts as night shift // Starts as night shift
['2042-01-01 05:45', '2042-01-01 07:00', true], ['2042-01-01 07:59', '2042-01-01 09:00', true],
// Ends as night shift // Ends as night shift
['2042-01-01 00:00', '2042-01-01 03:00', true], ['2042-01-01 00:00', '2042-01-01 02:01', true],
// Equals night shift
['2042-01-01 02:00', '2042-01-01 08:00', true],
// Contains night shift // Contains night shift
['2042-01-01 01:00', '2042-01-01 09:00', true], ['2042-01-01 01:00', '2042-01-01 09:00', true],
// Too early // Too early
['2042-01-01 00:00', '2042-01-01 02:00', false], ['2042-01-01 00:00', '2042-01-01 02:00', false],
// Too late // Too late
['2042-01-01 06:00', '2042-01-01 10:00', false], ['2042-01-01 08:00', '2042-01-01 10:00', false],
// Out of range
['2042-01-01 23:00', '2042-01-02 01:00', false],
]; ];
} }
@ -62,7 +70,7 @@ class ShiftsTest extends TestCase
$config = new Config(['night_shifts' => [ $config = new Config(['night_shifts' => [
'enabled' => true, 'enabled' => true,
'start' => 2, 'start' => 2,
'end' => 6, 'end' => 8,
'multiplier' => 2, 'multiplier' => 2,
]]); ]]);
$this->app->instance('config', $config); $this->app->instance('config', $config);
@ -78,7 +86,7 @@ class ShiftsTest extends TestCase
$config = new Config(['night_shifts' => [ $config = new Config(['night_shifts' => [
'enabled' => true, 'enabled' => true,
'start' => 2, 'start' => 2,
'end' => 6, 'end' => 8,
'multiplier' => 2, 'multiplier' => 2,
]]); ]]);
$this->app->instance('config', $config); $this->app->instance('config', $config);