Files

103 lines
3.1 KiB
PHP

<?php
if (!function_exists('vacationAbsenceTableExists')) {
function vacationAbsenceTableExists(PDO $pdo, string $table): bool
{
$stmt = $pdo->prepare(
"SELECT COUNT(*)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = :table_name"
);
$stmt->execute(['table_name' => $table]);
return (int)$stmt->fetchColumn() > 0;
}
}
if (!function_exists('vacationAbsenceTableHasColumn')) {
function vacationAbsenceTableHasColumn(PDO $pdo, string $table, string $column): bool
{
$stmt = $pdo->prepare(
"SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = :table_name
AND COLUMN_NAME = :column_name"
);
$stmt->execute([
'table_name' => $table,
'column_name' => $column,
]);
return (int)$stmt->fetchColumn() > 0;
}
}
if (!function_exists('vacationAbsenceReasonOptions')) {
function vacationAbsenceReasonOptions(): array
{
return [
'urlaub' => 'Urlaub',
'krankheit_mit_atest' => 'Krankheit mit Attest',
'krankheit_ohne_atest' => 'Krankheit ohne Attest',
'berufsschule' => 'Berufsschule',
'weiterbildung' => 'Weiterbildung',
'persoenliche_gruende' => 'Persoenliche Gründe',
'sonstiges' => 'Sonstiges',
];
}
}
if (!function_exists('vacationAbsenceDefaultReason')) {
function vacationAbsenceDefaultReason(): string
{
return 'urlaub';
}
}
if (!function_exists('vacationAbsenceNormalizeReason')) {
function vacationAbsenceNormalizeReason($reason): string
{
$reason = trim((string)$reason);
$options = vacationAbsenceReasonOptions();
return array_key_exists($reason, $options) ? $reason : vacationAbsenceDefaultReason();
}
}
if (!function_exists('vacationAbsenceReasonLabel')) {
function vacationAbsenceReasonLabel($reason): string
{
$reason = vacationAbsenceNormalizeReason($reason);
$options = vacationAbsenceReasonOptions();
return $options[$reason] ?? $options[vacationAbsenceDefaultReason()];
}
}
if (!function_exists('vacationAbsenceCountsAgainstEntitlement')) {
function vacationAbsenceCountsAgainstEntitlement($reason): bool
{
return vacationAbsenceNormalizeReason($reason) === 'urlaub';
}
}
if (!function_exists('vacationAbsenceEnsureSchema')) {
function vacationAbsenceEnsureSchema(PDO $pdo): void
{
if (!vacationAbsenceTableExists($pdo, 'vacations')) {
return;
}
if (!vacationAbsenceTableHasColumn($pdo, 'vacations', 'absence_reason')) {
$pdo->exec("ALTER TABLE vacations ADD COLUMN absence_reason VARCHAR(50) NOT NULL DEFAULT 'urlaub'");
}
$pdo->exec("
UPDATE vacations
SET absence_reason = 'urlaub'
WHERE absence_reason IS NULL OR TRIM(absence_reason) = ''
");
}
}