Abwesenheitskalender erweitert
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
<?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) = ''
|
||||
");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user