isNightShift: Sync with sql query
This commit is contained in:
parent
f56e9c534c
commit
4ad8385386
|
@ -123,13 +123,14 @@ function User_get_shifts_sum_query()
|
||||||
return 'COALESCE(SUM(UNIX_TIMESTAMP(shifts.end) - UNIX_TIMESTAMP(shifts.start)), 0)';
|
return 'COALESCE(SUM(UNIX_TIMESTAMP(shifts.end) - UNIX_TIMESTAMP(shifts.start)), 0)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* @see \Engelsystem\Helpers\Shifts::isNightShift to keep it in sync */
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'
|
'
|
||||||
COALESCE(SUM(
|
COALESCE(SUM(
|
||||||
(1 + (
|
(1 + (
|
||||||
(HOUR(shifts.end) > %1$d AND HOUR(shifts.end) < %2$d)
|
HOUR(shifts.start) > %1$d AND HOUR(shifts.start) < %2$d
|
||||||
OR (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.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))
|
||||||
* (1 - (%3$d + 1) * `shift_entries`.`freeloaded`)
|
* (1 - (%3$d + 1) * `shift_entries`.`freeloaded`)
|
||||||
|
|
|
@ -16,9 +16,11 @@ class Shifts
|
||||||
{
|
{
|
||||||
$config = config('night_shifts');
|
$config = config('night_shifts');
|
||||||
|
|
||||||
|
/** @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['end']
|
||||||
|
|| $start->hour <= $config['start'] && $end->hour >= $config['end']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,22 +32,24 @@ class ShiftsTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array{0: Carbon, 1: Carbon, 2: boolean}[]
|
* @return array{0: string, 1: string, 2: boolean}[]
|
||||||
*/
|
*/
|
||||||
public function nightShiftData(): array
|
public function nightShiftData(): array
|
||||||
{
|
{
|
||||||
// $start, $end, $isNightShift
|
// $start, $end, $isNightShift
|
||||||
return [
|
return [
|
||||||
// Is night shift
|
// Is night shift
|
||||||
[new Carbon('2042-01-01 04:00'), new Carbon('2042-01-01 05:00'), true],
|
['2042-01-01 04:00', '2042-01-01 05:00', true],
|
||||||
// Starts as night shift
|
// Starts as night shift
|
||||||
[new Carbon('2042-01-01 05:45'), new Carbon('2042-01-01 07:00'), true],
|
['2042-01-01 05:45', '2042-01-01 07:00', true],
|
||||||
// Ends as night shift
|
// Ends as night shift
|
||||||
[new Carbon('2042-01-01 00:00'), new Carbon('2042-01-01 02:15'), true],
|
['2042-01-01 00:00', '2042-01-01 03:00', true],
|
||||||
|
// Contains night shift
|
||||||
|
['2042-01-01 01:00', '2042-01-01 09:00', true],
|
||||||
// Too early
|
// Too early
|
||||||
[new Carbon('2042-01-01 00:00'), new Carbon('2042-01-01 01:59'), false],
|
['2042-01-01 00:00', '2042-01-01 02:00', false],
|
||||||
// Too late
|
// Too late
|
||||||
[new Carbon('2042-01-01 06:00'), new Carbon('2042-01-01 09:59'), false],
|
['2042-01-01 06:00', '2042-01-01 10:00', false],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +57,7 @@ class ShiftsTest extends TestCase
|
||||||
* @covers \Engelsystem\Helpers\Shifts::isNightShift
|
* @covers \Engelsystem\Helpers\Shifts::isNightShift
|
||||||
* @dataProvider nightShiftData
|
* @dataProvider nightShiftData
|
||||||
*/
|
*/
|
||||||
public function testIsNightShiftEnabled(Carbon $start, Carbon $end, bool $isNightShift): void
|
public function testIsNightShiftEnabled(string $start, string $end, bool $isNightShift): void
|
||||||
{
|
{
|
||||||
$config = new Config(['night_shifts' => [
|
$config = new Config(['night_shifts' => [
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
@ -65,7 +67,7 @@ class ShiftsTest extends TestCase
|
||||||
]]);
|
]]);
|
||||||
$this->app->instance('config', $config);
|
$this->app->instance('config', $config);
|
||||||
|
|
||||||
$this->assertEquals($isNightShift, Shifts::isNightShift($start, $end));
|
$this->assertEquals($isNightShift, Shifts::isNightShift(new Carbon($start), new Carbon($end)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue