Calculations and inputs corrected
This commit is contained in:
parent
2ea0d9363e
commit
9b717ee6d6
4 changed files with 174 additions and 54 deletions
90
api.php
90
api.php
|
|
@ -20,6 +20,8 @@ try {
|
|||
'settings' => get_settings($db),
|
||||
'entries' => get_entries($db),
|
||||
'corrections' => get_corrections($db),
|
||||
'feriefridage_overrides' => get_feriefridage_overrides($db),
|
||||
'flex_overrides' => get_flex_overrides($db),
|
||||
]);
|
||||
}
|
||||
fail('Unknown GET action', 404);
|
||||
|
|
@ -39,10 +41,20 @@ try {
|
|||
break;
|
||||
|
||||
case 'saveCorrection':
|
||||
save_correction($db, (int)($payload['year'] ?? 0), (int)($payload['month'] ?? 0), (float)($payload['value'] ?? 0));
|
||||
save_correction($db, (int)($payload['year'] ?? 0), (int)($payload['month'] ?? 0), $payload['value'] ?? null);
|
||||
respond(['ok' => true, 'corrections' => get_corrections($db)]);
|
||||
break;
|
||||
|
||||
case 'saveFeriefridageOverride':
|
||||
save_feriefridage_override($db, (int)($payload['year'] ?? 0), (int)($payload['month'] ?? 0), $payload['value'] ?? null);
|
||||
respond(['ok' => true, 'feriefridage_overrides' => get_feriefridage_overrides($db)]);
|
||||
break;
|
||||
|
||||
case 'saveFlexOverride':
|
||||
save_flex_override($db, (int)($payload['year'] ?? 0), (int)($payload['month'] ?? 0), $payload['value'] ?? null);
|
||||
respond(['ok' => true, 'flex_overrides' => get_flex_overrides($db)]);
|
||||
break;
|
||||
|
||||
case 'createEntry':
|
||||
$id = save_entry($db, $payload['entry'] ?? []);
|
||||
respond(['ok' => true, 'id' => $id, 'entries' => get_entries($db)]);
|
||||
|
|
@ -117,6 +129,20 @@ function migrate(PDO $db): void
|
|||
PRIMARY KEY (year, month)
|
||||
)");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS monthly_feriefridage_overrides (
|
||||
year INTEGER NOT NULL,
|
||||
month INTEGER NOT NULL,
|
||||
feriefridage_days REAL NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (year, month)
|
||||
)");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS monthly_flex_overrides (
|
||||
year INTEGER NOT NULL,
|
||||
month INTEGER NOT NULL,
|
||||
flex_hours REAL NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (year, month)
|
||||
)");
|
||||
|
||||
$defaults = [
|
||||
'planning_start_year' => '2026',
|
||||
'planning_start_month' => '1',
|
||||
|
|
@ -191,13 +217,13 @@ function get_corrections(PDO $db): array
|
|||
return $corrections;
|
||||
}
|
||||
|
||||
function save_correction(PDO $db, int $year, int $month, float $value): void
|
||||
function save_correction(PDO $db, int $year, int $month, mixed $value): void
|
||||
{
|
||||
if ($year < 1900 || $year > 2200 || $month < 1 || $month > 12) {
|
||||
fail('Invalid correction year/month', 400);
|
||||
}
|
||||
|
||||
if (abs($value) < 0.000001) {
|
||||
if ($value === null || $value === '') {
|
||||
$stmt = $db->prepare('DELETE FROM monthly_corrections WHERE year = :year AND month = :month');
|
||||
$stmt->execute([':year' => $year, ':month' => $month]);
|
||||
return;
|
||||
|
|
@ -206,7 +232,63 @@ function save_correction(PDO $db, int $year, int $month, float $value): void
|
|||
$stmt = $db->prepare('INSERT INTO monthly_corrections (year, month, vacation_days)
|
||||
VALUES (:year, :month, :value)
|
||||
ON CONFLICT(year, month) DO UPDATE SET vacation_days = excluded.vacation_days');
|
||||
$stmt->execute([':year' => $year, ':month' => $month, ':value' => $value]);
|
||||
$stmt->execute([':year' => $year, ':month' => $month, ':value' => (float)$value]);
|
||||
}
|
||||
|
||||
function get_feriefridage_overrides(PDO $db): array
|
||||
{
|
||||
$rows = $db->query('SELECT year, month, feriefridage_days FROM monthly_feriefridage_overrides ORDER BY year, month')->fetchAll();
|
||||
$overrides = [];
|
||||
foreach ($rows as $row) {
|
||||
$overrides[$row['year'] . '-' . str_pad((string)$row['month'], 2, '0', STR_PAD_LEFT)] = (float)$row['feriefridage_days'];
|
||||
}
|
||||
return $overrides;
|
||||
}
|
||||
|
||||
function save_feriefridage_override(PDO $db, int $year, int $month, mixed $value): void
|
||||
{
|
||||
if ($year < 1900 || $year > 2200 || $month < 1 || $month > 12) {
|
||||
fail('Invalid feriefridage override year/month', 400);
|
||||
}
|
||||
|
||||
if ($value === null || $value === '') {
|
||||
$stmt = $db->prepare('DELETE FROM monthly_feriefridage_overrides WHERE year = :year AND month = :month');
|
||||
$stmt->execute([':year' => $year, ':month' => $month]);
|
||||
return;
|
||||
}
|
||||
|
||||
$stmt = $db->prepare('INSERT INTO monthly_feriefridage_overrides (year, month, feriefridage_days)
|
||||
VALUES (:year, :month, :value)
|
||||
ON CONFLICT(year, month) DO UPDATE SET feriefridage_days = excluded.feriefridage_days');
|
||||
$stmt->execute([':year' => $year, ':month' => $month, ':value' => (float)$value]);
|
||||
}
|
||||
|
||||
function get_flex_overrides(PDO $db): array
|
||||
{
|
||||
$rows = $db->query('SELECT year, month, flex_hours FROM monthly_flex_overrides ORDER BY year, month')->fetchAll();
|
||||
$overrides = [];
|
||||
foreach ($rows as $row) {
|
||||
$overrides[$row['year'] . '-' . str_pad((string)$row['month'], 2, '0', STR_PAD_LEFT)] = (float)$row['flex_hours'];
|
||||
}
|
||||
return $overrides;
|
||||
}
|
||||
|
||||
function save_flex_override(PDO $db, int $year, int $month, mixed $value): void
|
||||
{
|
||||
if ($year < 1900 || $year > 2200 || $month < 1 || $month > 12) {
|
||||
fail('Invalid FLEX override year/month', 400);
|
||||
}
|
||||
|
||||
if ($value === null || $value === '') {
|
||||
$stmt = $db->prepare('DELETE FROM monthly_flex_overrides WHERE year = :year AND month = :month');
|
||||
$stmt->execute([':year' => $year, ':month' => $month]);
|
||||
return;
|
||||
}
|
||||
|
||||
$stmt = $db->prepare('INSERT INTO monthly_flex_overrides (year, month, flex_hours)
|
||||
VALUES (:year, :month, :value)
|
||||
ON CONFLICT(year, month) DO UPDATE SET flex_hours = excluded.flex_hours');
|
||||
$stmt->execute([':year' => $year, ':month' => $month, ':value' => (float)$value]);
|
||||
}
|
||||
|
||||
function get_entries(PDO $db): array
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue