Upload via GUI (49 Dateien)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"_info": "English translations for this plugin. Key = German source text, value = English. {} stands for a changing part, {#} for a number.",
|
||||
"Abwesenheit": "Absence",
|
||||
"Abwesenheit eintragen": "Enter absence",
|
||||
"Abwesenheit und Vertretung": "Absence and substitute",
|
||||
"An die Vertretung": "To the substitute",
|
||||
"Bis (einschließlich)": "Until (inclusive)",
|
||||
"Bitte Beginn und Ende als Datum angeben.": "Please enter the start and end as dates.",
|
||||
"Bitte eine aktive Vertretung wählen.": "Please choose an active substitute.",
|
||||
"Das Ende darf nicht vor dem Beginn liegen.": "The end must not be before the start.",
|
||||
"Der Zeitraum liegt schon in der Vergangenheit.": "The period is already in the past.",
|
||||
"Die Abwesenheit ist eingetragen.": "The absence has been entered.",
|
||||
"Die Abwesenheit wurde beendet, offene Tickets sind wieder bei der ursprünglichen Person.": "The absence has ended; open tickets are back with the original person.",
|
||||
"Die Vertretung muss eine andere Person sein.": "The substitute must be a different person.",
|
||||
"Diese Abwesenheit kann nicht beendet werden.": "This absence cannot be ended.",
|
||||
"Dieser Mitarbeiter ist nicht aktiv.": "This staff member is not active.",
|
||||
"Eintragen": "Enter",
|
||||
"In diesem Zeitraum ist für diese Person schon eine Abwesenheit eingetragen.": "An absence has already been entered for this person in this period.",
|
||||
"Keine Abwesenheiten eingetragen.": "No absences entered.",
|
||||
"Laufend und geplant": "Ongoing and planned",
|
||||
"Mitarbeiter tragen Abwesenheiten mit Vertretung ein. Zum Beginn werden ihre offenen Tickets an die Vertretung verteilt, neue Tickets gehen automatisch dorthin, und am Ende bekommt der Mitarbeiter seine noch offenen Tickets zurück. Baut auf dem Urlaubsstatus im Profil und auf der automatischen Zuweisung der Abteilungen auf.": "Staff enter absences with a substitute. At the start their open tickets are distributed to the substitute, new tickets go there automatically, and at the end the staff member gets back their still-open tickets. Builds on the vacation status in the profile and on the automatic assignment of the departments.",
|
||||
"Nicht angetreten": "Not started",
|
||||
"Urlaub und Vertretung": "Vacation and substitute",
|
||||
"Vertretung": "Substitute",
|
||||
"Vertretung für": "Substitute for",
|
||||
"Wer ist abwesend?": "Who is absent?",
|
||||
"zum Beispiel Sommerurlaub": "for example summer vacation",
|
||||
"– wählen –": "– choose –",
|
||||
"Die Vertretung sieht": "The substitute sees",
|
||||
"Abteilungen der übernommenen Tickets": "Departments of the tickets taken over",
|
||||
"Dieser Server ist älter als 1.0.55: Die Vertretung bekommt die Tickets, sieht sie aber nur, wenn sie auch Zugang zur Abteilung hat. Bitte den Server aktualisieren.": "This server is older than 1.0.55: the substitute receives the tickets but only sees them with access to the department. Please update the server.",
|
||||
"Zum Beginn gehen Ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei automatischer Zuweisung). Am Ende bekommen Sie die Tickets zurück, die dann noch bei der Vertretung liegen. Der Urlaubsstatus im Profil wird dafür automatisch gesetzt. Solange die Abwesenheit dauert, sieht und bearbeitet die Vertretung auch die Abteilungen der abwesenden Person, selbst wenn sie dort sonst keinen Zugang hat (Server ab 1.0.55).": "At the start your open tickets go to the substitute, as do new tickets (also with automatic assignment). At the end you get back the tickets that are still with the substitute. The vacation status in the profile is set automatically for this. While the absence lasts, the substitute also sees and handles the absent person’s departments, even without their own access (server 1.0.55 or later)."
|
||||
}
|
||||
@@ -33,7 +33,8 @@ $past = $pdo->query("SELECT a.*, (SELECT COUNT(*) FROM plugin_vertretung_moves m
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="action" value="create">
|
||||
<h3>Abwesenheit eintragen</h3>
|
||||
<p class="muted" style="font-size:.85rem">Zum Beginn gehen Ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei automatischer Zuweisung). Am Ende bekommen Sie die Tickets zurück, die dann noch bei der Vertretung liegen. Der Urlaubsstatus im Profil wird dafür automatisch gesetzt.</p>
|
||||
<p class="muted" style="font-size:.85rem">Zum Beginn gehen Ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei automatischer Zuweisung). Am Ende bekommen Sie die Tickets zurück, die dann noch bei der Vertretung liegen. Der Urlaubsstatus im Profil wird dafür automatisch gesetzt. Solange die Abwesenheit dauert, sieht und bearbeitet die Vertretung auch die Abteilungen der abwesenden Person, selbst wenn sie dort sonst keinen Zugang hat (Server ab 1.0.55).</p>
|
||||
<?php if (!function_exists('staff_substitution_department_ids')): ?><div class="flash warning">Dieser Server ist älter als 1.0.55: Die Vertretung bekommt die Tickets, sieht sie aber nur, wenn sie auch Zugang zur Abteilung hat. Bitte den Server aktualisieren.</div><?php endif; ?>
|
||||
<div style="display:flex;gap:14px;flex-wrap:wrap">
|
||||
<?php if ($isAdmin): ?>
|
||||
<div><label>Wer ist abwesend?</label><select name="staff_id"><?php foreach ($people as $p): ?><option value="<?= (int) $p['id'] ?>" <?= (int) $p['id'] === (int) $staff['id'] ? 'selected' : '' ?>><?= e($p['name']) ?></option><?php endforeach; ?></select></div>
|
||||
@@ -50,15 +51,21 @@ $past = $pdo->query("SELECT a.*, (SELECT COUNT(*) FROM plugin_vertretung_moves m
|
||||
<h3>Laufend und geplant</h3>
|
||||
<?php if (!$current): ?><p class="muted">Keine Abwesenheiten eingetragen.</p><?php else: ?>
|
||||
<table style="width:100%">
|
||||
<thead><tr><th>Wer</th><th>Vertretung</th><th>Zeitraum</th><th>Stand</th><th>Tickets</th><th></th></tr></thead>
|
||||
<thead><tr><th>Wer</th><th>Vertretung</th><th>Zeitraum</th><th>Stand</th><th>Tickets</th><th>Die Vertretung sieht</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
<?php foreach ($current as $a): ?>
|
||||
<?php foreach ($current as $a):
|
||||
$dq = $pdo->prepare('SELECT d.name FROM departments d WHERE d.id = (SELECT department_id FROM staff WHERE id = ?) OR d.id IN (SELECT department_id FROM staff_department WHERE staff_id = ?) ORDER BY d.name');
|
||||
$dq->execute([(int) $a['staff_id'], (int) $a['staff_id']]);
|
||||
$deptNames = $dq->fetchAll(PDO::FETCH_COLUMN);
|
||||
$absentAdmin = ($pdo->query('SELECT role FROM staff WHERE id = ' . (int) $a['staff_id'])->fetchColumn() === 'admin');
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $name($a['staff_id']) ?><?php if ($a['note']): ?><div class="muted" style="font-size:.76rem"><?= e((string) $a['note']) ?></div><?php endif; ?></td>
|
||||
<td><?= $name($a['substitute_id']) ?></td>
|
||||
<td><?= e(vertretung_date((string) $a['start_date'])) ?> – <?= e(vertretung_date((string) $a['end_date'])) ?></td>
|
||||
<td><?= e($labels[$a['status']] ?? $a['status']) ?></td>
|
||||
<td><?= $a['status'] === 'active' ? (int) $a['holding'] . ' bei der Vertretung' : '–' ?></td>
|
||||
<td style="font-size:.82rem"><?= $absentAdmin ? 'Abteilungen der übernommenen Tickets' : ($deptNames ? e(implode(', ', $deptNames)) : '–') ?></td>
|
||||
<td>
|
||||
<?php if (vertretung_can_manage($staff, (int) $a['staff_id'])): ?>
|
||||
<form method="post" style="display:inline" onsubmit="return confirm('Abwesenheit beenden? Offene Tickets gehen zurück.')"><?= csrf_field() ?><input type="hidden" name="action" value="cancel"><input type="hidden" name="id" value="<?= (int) $a['id'] ?>"><button class="btn secondary" type="submit"><?= $a['status'] === 'active' ? 'Jetzt beenden' : 'Löschen' ?></button></form>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"slug": "vertretung",
|
||||
"name": "Urlaub und Vertretung",
|
||||
"version": "1.0.0",
|
||||
"description": "Mitarbeiter tragen Abwesenheiten mit Vertretung ein. Zum Beginn werden ihre offenen Tickets an die Vertretung verteilt, neue Tickets gehen automatisch dorthin, und am Ende bekommt der Mitarbeiter seine noch offenen Tickets zurück. Baut auf dem Urlaubsstatus im Profil und auf der automatischen Zuweisung der Abteilungen auf.",
|
||||
"version": "1.1.0",
|
||||
"description": "Mitarbeiter tragen Abwesenheiten mit Vertretung ein. Zum Beginn werden ihre offenen Tickets an die Vertretung verteilt, neue Tickets gehen automatisch dorthin, und am Ende bekommt der Mitarbeiter seine noch offenen Tickets zurück. Die Vertretung sieht während der Abwesenheit auch die Abteilungen der abwesenden Person, selbst ohne eigenen Zugang. Baut auf dem Urlaubsstatus im Profil und auf der automatischen Zuweisung der Abteilungen auf (Server ab 1.0.55).",
|
||||
"author": "DeskHub",
|
||||
"requires": "1.0.0",
|
||||
"requires": "1.0.55",
|
||||
"permissions": ["hooks.tickets", "hooks.cron", "ui.menu", "db.migrations"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user