103 lines
3.1 KiB
PHP
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) = ''
|
|
");
|
|
}
|
|
}
|
|
|