Export fuer LOLYO, und die Zielsystem-Exporte in einem eigenen Abschnitt
LOLYO ist die dritte Datei, die in ein fremdes System geladen wird. Spalten,
Trennzeichen und Schreibweise kommen aus der Vorlage des Anbieters, Zeichen fuer
Zeichen -- einschliesslich der gemischten Kopfzeile ("Titel prefix" deutsch,
"Title Suffix" englisch). Semikolon und kein BOM: das BOM haenge unsichtbar am
Namen der ersten Spalte, und "Benutzer/Code" kaeme in keiner Zuordnung mehr vor.
Der Benutzercode ist die Alpenwerk-UUID. Anders als bei Cornerstone ist das
hier richtig: LOLYO kennt die Person noch nicht und vergibt keine eigene
Kennung, die wir treffen muessten.
Diese Datei legt Konten an, samt Passwort in der Zeile. Das Startpasswort steht
deshalb in der Route und nicht in lib/lolyo.ts: eine Route ist serverseitig, eine
lib-Datei waere nur so lange sicher, wie niemand sie aus einem Client-Bauteil
heraus einbindet -- und das saehe man dem Buendel nicht an. Dieselbe Ueberlegung
steht in lib/passwort.ts.
Die drei Zielsystem-Exporte stehen jetzt unter einer gemeinsamen Ueberschrift,
getrennt vom Datenexport darueber. Der gibt Zahlen heraus, die jemand ansieht;
diese legen im Zielsystem Datensaetze an. Nebeneinander in einer Reihe
gleichartiger Karten war das nicht zu sehen. Die Auswahl steht damit einmal
statt dreimal da.
Der erklaerende Text unter dem Cornerstone-Export entfaellt auf Wunsch des
Kunden.
This commit is contained in:
@@ -49,6 +49,21 @@ const EVENT_TYPES = EREIGNIS_AUSWAHL;
|
||||
/** Wie viele Namen eine aufgeklappte Zeile zeigt, bevor der Rest auf Klick kommt. */
|
||||
const VORSCHAU_NAMEN = 12;
|
||||
|
||||
/**
|
||||
* Die Exporte, die in ein anderes System geladen werden.
|
||||
*
|
||||
* Sie stehen zusammen und getrennt vom Datenexport darüber, weil sie etwas
|
||||
* anderes sind: der Datenexport gibt Zahlen heraus, die jemand ansieht, diese
|
||||
* hier legen im Zielsystem Datensätze an. Nebeneinander in einer Reihe
|
||||
* gleichartiger Karten war das nicht zu sehen — und eine versehentlich
|
||||
* eingeschränkte Auswahl wirkt sich hier ganz anders aus.
|
||||
*/
|
||||
const ZIELSYSTEME: readonly { name: string; pfad: string }[] = [
|
||||
{ name: "Honestly — Mitarbeiterbefragung", pfad: "/api/export/honestly" },
|
||||
{ name: "Cornerstone — Lernsystem", pfad: "/api/export/cornerstone" },
|
||||
{ name: "LOLYO — Mitarbeiter-App", pfad: "/api/export/lolyo" },
|
||||
];
|
||||
|
||||
type SavedReport = { id: string; name: string; config: Record<string, unknown> };
|
||||
type OrgOption = { id: string; name: string };
|
||||
|
||||
@@ -674,44 +689,31 @@ export function ReportsPageClient(props: ReportsPageClientProps) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Nur im Bestand: eine Befragung richtet sich an Personen, nicht an
|
||||
Ereignisse. Dieselben Filter wie der vollständige Export darüber
|
||||
— was dort steht, steht auch hier. */}
|
||||
{/* Nur im Bestand: ein Zielsystem führt Personen, keine Ereignisse.
|
||||
Dieselben Filter wie der vollständige Export darüber. */}
|
||||
{mode === "snapshot" && (
|
||||
<div className="rounded border border-border bg-white p-4">
|
||||
<h3 className="mb-1 text-xs font-semibold uppercase tracking-wide text-ink-muted">Honestly-Report</h3>
|
||||
<AuswahlHinweis texte={auswahlTexte} anzahl={recordCount} />
|
||||
<div className="flex gap-2">
|
||||
<a href={exportHref("/api/export/honestly", "csv")} className={LINK_BUTTON_CLASS}>
|
||||
<FileText className="h-4 w-4" />
|
||||
CSV
|
||||
</a>
|
||||
<a href={exportHref("/api/export/honestly", "xlsx")} className={LINK_BUTTON_CLASS}>
|
||||
<FileSpreadsheet className="h-4 w-4" />
|
||||
Excel
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{mode === "snapshot" && (
|
||||
<div className="rounded border border-border bg-white p-4">
|
||||
<h3 className="mb-1 text-xs font-semibold uppercase tracking-wide text-ink-muted">Cornerstone Report</h3>
|
||||
<h3 className="mb-1 text-xs font-semibold uppercase tracking-wide text-ink-muted">Exporte für Zielsysteme</h3>
|
||||
<p className="mb-1 text-xs text-ink-muted">
|
||||
Load-File für Cornerstone: 57 Spalten in der Reihenfolge der Vorlage, kommagetrennt, Datum
|
||||
TT.MM.JJJJ, Systemwerte statt Anzeigenamen (Active, Working, Employee). Ohne Location ID und
|
||||
Position ID — dafür fehlen die Kennungen des Zielsystems.
|
||||
Load-Dateien für Fremdsysteme, jede in deren eigenem Format. Für alle gilt dieselbe Auswahl.
|
||||
</p>
|
||||
<AuswahlHinweis texte={auswahlTexte} anzahl={recordCount} />
|
||||
<div className="flex gap-2">
|
||||
<a href={exportHref("/api/export/cornerstone", "csv")} className={LINK_BUTTON_CLASS}>
|
||||
<FileText className="h-4 w-4" />
|
||||
CSV
|
||||
</a>
|
||||
<a href={exportHref("/api/export/cornerstone", "xlsx")} className={LINK_BUTTON_CLASS}>
|
||||
<FileSpreadsheet className="h-4 w-4" />
|
||||
Excel
|
||||
</a>
|
||||
<div className="flex flex-col divide-y divide-border-subtle">
|
||||
{ZIELSYSTEME.map((z) => (
|
||||
<div key={z.pfad} className="py-2 first:pt-0 last:pb-0">
|
||||
<p className="mb-1.5 text-sm font-semibold text-ink">{z.name}</p>
|
||||
<div className="flex gap-2">
|
||||
<a href={exportHref(z.pfad, "csv")} className={LINK_BUTTON_CLASS}>
|
||||
<FileText className="h-4 w-4" />
|
||||
CSV
|
||||
</a>
|
||||
<a href={exportHref(z.pfad, "xlsx")} className={LINK_BUTTON_CLASS}>
|
||||
<FileSpreadsheet className="h-4 w-4" />
|
||||
Excel
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user