diff --git a/README.md b/README.md index 5b463d4..c90fd61 100644 --- a/README.md +++ b/README.md @@ -105,4 +105,8 @@ The store can read both the connector format and the older Telefonbuch cookie-ar - `getMitarbeiter(suchstring?, mitarbeitergruppe?)` reads `/module/mitarbeiter/livesearch.php` and returns employee ID, number, last name, first name, and active flag. - `getTaetigkeiten()` reads `/module/arbeitszeit/taetigkeiten-livesearch.php` (active and inactive) and returns activity ID, UUID, number, name, active flag, area (`bereichId`, `bereich`) and the flags `maschineZuordnen`, `abwesenheit`, `notizErzwingen`. - Agrarmonitor has no cost center master data (`Kostenstelle` is only a free-text field on machines, employees and articles), so there is no `getKostenstellen()`. See `docs/zeitbuchung-analyse.md`. +- `createZeitbuchung(daten)` books an activity block (`taetigkeitId`, optional `maschinenId`, `notiz`, `kostenstelle`) or a break (`art: 'pause'`) for `mitarbeiterId` from `start` to `ende` (minute precision, Europe/Berlin) and returns `{ ref }`. The first booking of a day creates the shift via `nachtragen.php`; later bookings go into the existing shift, which is extended if needed. Breaks need an existing shift. Agrarmonitor has no cost center field, so `kostenstelle` is appended to the note as `Kostenstelle: …`. Pass `datum` (YYYY-MM-DD) for blocks after midnight that belong to the previous workday. +- `updateZeitbuchung(ref, daten)` changes times, activity, machine and note of a booking (the old note is replaced); changing the type (activity/break), employee or workday is rejected. +- `deleteZeitbuchung(ref)` deletes a booking; deleting the last activity of a shift also deletes the shift in Agrarmonitor. +- Refs look like `verteilung:::` or `pause:…`. Rejections by Agrarmonitor (HTTP 4xx such as 422 with the reason in the body) and invalid input throw `ZeitbuchungError` (`grund`, `status`); network and 5xx errors are thrown unchanged so callers can retry. - `saveSession()` explicitly persists the current cookie jar. diff --git a/dist/AgrarmonitorConnector.d.ts b/dist/AgrarmonitorConnector.d.ts index 10ffec0..0495154 100644 --- a/dist/AgrarmonitorConnector.d.ts +++ b/dist/AgrarmonitorConnector.d.ts @@ -1,9 +1,10 @@ import { type AxiosInstance } from 'axios'; -import type { AgrarmonitorApiCustomer, AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, AgrarmonitorDeviceRegistrationOptions, AgrarmonitorDeviceRegistrationResult, AgrarmonitorFetchCustomersOptions, AgrarmonitorFreischaltungStatus, AgrarmonitorKunde2, AgrarmonitorRegistrierungStatus, Artikel, ArtikelEinheit, ArtikelKategorie, EingangsrechnungLivesearchResult, Firma, Maschine, MaschineMitGruppe, MaschinenKategorie, Mitarbeiter, Rechnungsdaten, Taetigkeit } from './types'; +import type { AgrarmonitorApiCustomer, AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, AgrarmonitorDeviceRegistrationOptions, AgrarmonitorDeviceRegistrationResult, AgrarmonitorFetchCustomersOptions, AgrarmonitorFreischaltungStatus, AgrarmonitorKunde2, AgrarmonitorRegistrierungStatus, Artikel, ArtikelEinheit, ArtikelKategorie, EingangsrechnungLivesearchResult, Firma, Maschine, MaschineMitGruppe, MaschinenKategorie, Mitarbeiter, Rechnungsdaten, Taetigkeit, ZeitbuchungDaten } from './types'; export declare class AgrarmonitorConnector implements AgrarmonitorConnectorResult { private readonly options; http: AxiosInstance; private static readonly maxLivesearchSeiten; + private static readonly berlinFormat; private static readonly s3DateienBaseUrl; private readonly baseUrl; private readonly apiBaseUrl; @@ -44,6 +45,63 @@ export declare class AgrarmonitorConnector implements AgrarmonitorConnectorResul getArtikel(artikelGruppe: number, suchstring?: string): Promise; getMitarbeiter(suchstring?: string, mitarbeitergruppe?: number): Promise; getTaetigkeiten(): Promise; + /** + * Bucht einen Taetigkeitsblock oder eine Pause. Gibt es fuer Mitarbeiter und + * Arbeitstag noch keine Schicht, legt `nachtragen.php` Schicht und Verteilung + * an (Pausen brauchen eine vorhandene Schicht). Sonst kommt die Buchung in die + * passende Schicht, die bei Bedarf verlaengert wird. + */ + createZeitbuchung(daten: ZeitbuchungDaten): Promise<{ + ref: string; + }>; + updateZeitbuchung(ref: string, daten: ZeitbuchungDaten): Promise; + deleteZeitbuchung(ref: string): Promise; + private zeitbuchungAufbereiten; + /** Rundet auf die volle Minute - Agrarmonitor speichert keine Sekunden. */ + private zeitpunkt; + /** YYYY-MM-DD HH:MM -> dd.mm.yy (HH:MM) */ + private vergleichZuFormular; + private zeitbuchungRef; + private parseZeitbuchungRef; + private ladeTagesansicht; + private ladeSchichten; + private ladeSchicht; + /** Schicht, die sich mit der Buchung ueberschneidet, sonst die letzte davor, sonst die erste. */ + private passendeSchicht; + /** Neue Verteilungen verlaengern die Schicht in Agrarmonitor nicht von selbst. */ + private schichtErweitern; + private schichtSetzen; + /** + * Erste Buchung des Tages: nachtragen.php legt Schicht und Verteilung an, + * liefert aber keine ID. Die Verteilung wird danach in der Tagesansicht gesucht. + */ + private taetigkeitNachtragen; + /** + * editVerteilungForm.php mit shiftID legt sofort eine leere Verteilung an + * (das Agrarmonitor-UI loescht sie bei "Abbrechen"). Schlaegt das Speichern + * fehl, wird dieser Platzhalter wieder entfernt. + */ + private verteilungAnlegen; + private ladeVerteilungFormular; + private verteilungSpeichern; + /** Wie bei Verteilungen legt editPauseForm.php mit shiftID sofort eine Pause an. */ + private pauseAnlegen; + private pauseSpeichern; + /** + * JSON-POST an die Arbeitszeit-API. 4xx (z. B. 422 mit Grund im Body) wird + * als ZeitbuchungError geworfen; Netzwerk- und 5xx-Fehler bleiben Axios-Fehler. + */ + private zeitbuchungPost; + private zeitbuchungAntwortPruefen; + /** 422-Antworten sehen so aus: {"verteilungForm":"ganzertag must be present"} */ + private zeitbuchungGrund; + /** + * Agrarmonitor speichert auch unbekannte oder inaktive Taetigkeits-IDs (dann + * ohne Taetigkeit). Deshalb gegen die Auswahl im Buchungsformular pruefen. + */ + private taetigkeitPruefen; + private selectedValue; + private normalisiereText; /** * Laedt eine Livesearch-Liste Seite fuer Seite. Die Seitenzahl steht in * `.pagination[data-pages]`; zusaetzlich bricht die Schleife ab, sobald eine diff --git a/dist/AgrarmonitorConnector.d.ts.map b/dist/AgrarmonitorConnector.d.ts.map index 37c795c..1a0a1aa 100644 --- a/dist/AgrarmonitorConnector.d.ts.map +++ b/dist/AgrarmonitorConnector.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AgrarmonitorConnector.d.ts","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"AgrarmonitorConnector.d.ts","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/AgrarmonitorConnector.js b/dist/AgrarmonitorConnector.js index a34ce59..a21b394 100644 --- a/dist/AgrarmonitorConnector.js +++ b/dist/AgrarmonitorConnector.js @@ -8,10 +8,20 @@ const axios_1 = __importDefault(require("axios")); const axios_cookiejar_support_1 = require("axios-cookiejar-support"); const jsdom_1 = require("jsdom"); const tough_cookie_1 = require("tough-cookie"); +const ZeitbuchungError_1 = require("./ZeitbuchungError"); class AgrarmonitorConnector { options; http; static maxLivesearchSeiten = 500; + static berlinFormat = new Intl.DateTimeFormat('de-DE', { + timeZone: 'Europe/Berlin', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hourCycle: 'h23', + }); static s3DateienBaseUrl = 'https://s3-eu-central-1.amazonaws.com/dateien.agrarmonitor.de/07'; baseUrl; apiBaseUrl; @@ -474,6 +484,435 @@ class AgrarmonitorConnector { } return Array.from(taetigkeiten.values()); } + /** + * Bucht einen Taetigkeitsblock oder eine Pause. Gibt es fuer Mitarbeiter und + * Arbeitstag noch keine Schicht, legt `nachtragen.php` Schicht und Verteilung + * an (Pausen brauchen eine vorhandene Schicht). Sonst kommt die Buchung in die + * passende Schicht, die bei Bedarf verlaengert wird. + */ + async createZeitbuchung(daten) { + const buchung = this.zeitbuchungAufbereiten(daten); + const schichten = await this.ladeSchichten(buchung.mitarbeiterId, buchung.datum); + if (schichten.length === 0) { + if (buchung.art === 'pause') { + throw new ZeitbuchungError_1.ZeitbuchungError(`Pause am ${buchung.datum} kann nicht gebucht werden: keine Schicht vorhanden`, 'keine Schicht vorhanden'); + } + const id = await this.taetigkeitNachtragen(buchung); + return { ref: this.zeitbuchungRef(buchung, id) }; + } + const schicht = this.passendeSchicht(schichten, buchung); + const schichtVorher = { ...schicht }; + await this.schichtErweitern(schicht, buchung); + try { + const id = buchung.art === 'pause' + ? await this.pauseAnlegen(buchung, schicht.id) + : await this.verteilungAnlegen(buchung, schicht.id); + return { ref: this.zeitbuchungRef(buchung, id) }; + } + catch (error) { + if (schicht.start !== schichtVorher.start || schicht.ende !== schichtVorher.ende) { + await this.schichtSetzen(schichtVorher).catch(restoreError => { + this.logger?.warn?.('Schicht konnte nicht zurueckgesetzt werden', { + schichtId: schichtVorher.id, + fehler: restoreError instanceof Error ? restoreError.message : String(restoreError), + }); + }); + } + throw error; + } + } + async updateZeitbuchung(ref, daten) { + const zielRef = this.parseZeitbuchungRef(ref); + const buchung = this.zeitbuchungAufbereiten(daten); + if (buchung.art !== zielRef.art) { + throw new ZeitbuchungError_1.ZeitbuchungError('Art der Buchung (Taetigkeit/Pause) kann nicht geaendert werden', 'art geaendert'); + } + if (buchung.mitarbeiterId !== zielRef.mitarbeiterId || buchung.datum !== zielRef.datum) { + throw new ZeitbuchungError_1.ZeitbuchungError('Mitarbeiter oder Arbeitstag einer Buchung kann nicht geaendert werden', 'mitarbeiter oder datum geaendert'); + } + const tagesansicht = await this.ladeTagesansicht(zielRef.mitarbeiterId, zielRef.datum); + const zeilenKlasse = zielRef.art === 'pause' ? 'pause_betrieb' : 'betrieb'; + const schichtId = this.parseNumber(tagesansicht + .querySelector(`tr.${zeilenKlasse}[id="${zielRef.id}"]`) + ?.closest('table.verteilung_table') + ?.getAttribute('data-schicht')); + if (!schichtId) { + throw new ZeitbuchungError_1.ZeitbuchungError(`Buchung ${ref} nicht gefunden`, 'nicht gefunden'); + } + const schicht = await this.ladeSchicht(schichtId); + if (schicht) { + await this.schichtErweitern(schicht, buchung); + } + if (buchung.art === 'pause') { + await this.pauseSpeichern(buchung, zielRef.id, 0); + return; + } + const formular = await this.ladeVerteilungFormular({ + employeeID: zielRef.mitarbeiterId, + date: zielRef.datum, + distributionID: String(zielRef.id), + }); + this.taetigkeitPruefen(formular, buchung.taetigkeitId); + const notizen = Array.from(formular.querySelectorAll('#notizen_table tbody tr[data-id]')) + .map(row => ({ + id: this.parseNumber(row.getAttribute('data-id')), + text: this.normalisiereText(row.querySelectorAll('td')[2]?.textContent ?? ''), + })) + .filter(notiz => notiz.id > 0); + const notizUnveraendert = (notizen.length === 0 && !buchung.notiz) || + (notizen.length === 1 && notizen[0].text === this.normalisiereText(buchung.notiz)); + await this.verteilungSpeichern(buchung, zielRef.id, { + alteTaetigkeitId: this.selectedValue(formular, '#taetigkeit_id') || '0', + projektId: this.selectedValue(formular, '#projekt_id') || '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: notizUnveraendert ? '' : buchung.notiz, + }); + // Alte Notizen erst nach erfolgreichem Speichern entfernen. + if (!notizUnveraendert) { + for (const notiz of notizen) { + await this.zeitbuchungPost('/module/notiz/api/delete.php', { noteID: notiz.id }, 'Notiz loeschen'); + } + } + } + async deleteZeitbuchung(ref) { + const zielRef = this.parseZeitbuchungRef(ref); + if (zielRef.art === 'pause') { + await this.zeitbuchungPost('/module/arbeitszeit/api/deletePause.php', { pauseID: zielRef.id, employeeID: zielRef.mitarbeiterId, date: zielRef.datum }, 'Pause loeschen'); + return; + } + await this.zeitbuchungPost('/module/arbeitszeit/api/deleteVerteilung.php', { distributionID: zielRef.id, employeeID: zielRef.mitarbeiterId, date: zielRef.datum }, 'Buchung loeschen'); + } + zeitbuchungAufbereiten(daten) { + if (!Number.isInteger(daten.mitarbeiterId) || daten.mitarbeiterId <= 0) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltige Mitarbeiter-ID', 'mitarbeiterId'); + } + if (!(daten.start instanceof Date) || Number.isNaN(daten.start.getTime())) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltiger Start', 'start'); + } + if (!(daten.ende instanceof Date) || Number.isNaN(daten.ende.getTime())) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltiges Ende', 'ende'); + } + if (daten.datum !== undefined && !/^\d{4}-\d{2}-\d{2}$/.test(daten.datum)) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltiger Arbeitstag, erwartet YYYY-MM-DD', 'datum'); + } + const start = this.zeitpunkt(daten.start); + const ende = this.zeitpunkt(daten.ende); + if (ende.vergleich <= start.vergleich) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ende muss mindestens eine Minute nach dem Start liegen', 'dauer'); + } + const basis = { + mitarbeiterId: daten.mitarbeiterId, + datum: daten.datum ?? start.datum, + start, + ende, + }; + if (daten.art === 'pause') { + return { ...basis, art: 'pause', taetigkeitId: 0, maschinenId: 0, notiz: '' }; + } + if (!Number.isInteger(daten.taetigkeitId) || daten.taetigkeitId <= 0) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltige Taetigkeits-ID', 'taetigkeitId'); + } + const maschinenId = daten.maschinenId ?? 0; + if (!Number.isInteger(maschinenId) || maschinenId < 0) { + throw new ZeitbuchungError_1.ZeitbuchungError('Ungueltige Maschinen-ID', 'maschinenId'); + } + const kostenstelle = daten.kostenstelle?.trim(); + const notiz = [daten.notiz?.trim(), kostenstelle ? `Kostenstelle: ${kostenstelle}` : ''] + .filter(Boolean) + .join('\n'); + return { ...basis, art: 'taetigkeit', taetigkeitId: daten.taetigkeitId, maschinenId, notiz }; + } + /** Rundet auf die volle Minute - Agrarmonitor speichert keine Sekunden. */ + zeitpunkt(date) { + const gerundet = new Date(Math.round(date.getTime() / 60000) * 60000); + const teile = Object.fromEntries(AgrarmonitorConnector.berlinFormat.formatToParts(gerundet).map(teil => [teil.type, teil.value])); + const datum = `${teile.year}-${teile.month}-${teile.day}`; + const uhrzeit = `${teile.hour}:${teile.minute}`; + return { + vergleich: `${datum} ${uhrzeit}`, + formular: this.vergleichZuFormular(`${datum} ${uhrzeit}`), + datum, + uhrzeit, + }; + } + /** YYYY-MM-DD HH:MM -> dd.mm.yy (HH:MM) */ + vergleichZuFormular(wert) { + const [datum, uhrzeit] = wert.split(' '); + const [jahr, monat, tag] = datum.split('-'); + return `${tag}.${monat}.${jahr.slice(2)} (${uhrzeit})`; + } + zeitbuchungRef(buchung, id) { + return `${buchung.art === 'pause' ? 'pause' : 'verteilung'}:${buchung.mitarbeiterId}:${buchung.datum}:${id}`; + } + parseZeitbuchungRef(ref) { + const match = /^(verteilung|pause):(\d+):(\d{4}-\d{2}-\d{2}):(\d+)$/.exec(ref); + if (!match) { + throw new ZeitbuchungError_1.ZeitbuchungError(`Ungueltige Zeitbuchungs-Referenz: ${ref}`, 'ref'); + } + return { + art: match[1] === 'pause' ? 'pause' : 'taetigkeit', + mitarbeiterId: Number(match[2]), + datum: match[3], + id: Number(match[4]), + }; + } + async ladeTagesansicht(mitarbeiterId, datum) { + const response = await this.http.get(`/arbeitszeit/detail/${mitarbeiterId}/${datum}`); + await this.saveSession(); + return this.parseHtmlDocument(response.data); + } + async ladeSchichten(mitarbeiterId, datum) { + const tagesansicht = await this.ladeTagesansicht(mitarbeiterId, datum); + const ids = new Set(Array.from(tagesansicht.querySelectorAll('table.verteilung_table[data-schicht]')) + .map(table => this.parseNumber(table.getAttribute('data-schicht'))) + .filter(id => id > 0)); + const schichten = []; + for (const id of ids) { + const schicht = await this.ladeSchicht(id); + if (schicht) { + schichten.push(schicht); + } + } + return schichten; + } + async ladeSchicht(schichtId) { + const response = await this.http.get('/module/arbeitszeit/api/getSchicht.php', { + params: { schicht_id: schichtId }, + }); + await this.saveSession(); + const data = (typeof response.data === 'string' ? JSON.parse(response.data || 'null') : response.data); + if (!data?.timestamp_start || Number(data.ist_deleted) === 1) { + return null; + } + const start = data.timestamp_start.slice(0, 16); + const ende = data.timestamp_ende && !data.timestamp_ende.startsWith('0000') ? data.timestamp_ende.slice(0, 16) : start; + return { id: schichtId, start, ende }; + } + /** Schicht, die sich mit der Buchung ueberschneidet, sonst die letzte davor, sonst die erste. */ + passendeSchicht(schichten, buchung) { + return (schichten.find(schicht => schicht.start <= buchung.ende.vergleich && buchung.start.vergleich <= schicht.ende) ?? + schichten.filter(schicht => schicht.start <= buchung.start.vergleich).at(-1) ?? + schichten[0]); + } + /** Neue Verteilungen verlaengern die Schicht in Agrarmonitor nicht von selbst. */ + async schichtErweitern(schicht, buchung) { + const start = buchung.start.vergleich < schicht.start ? buchung.start.vergleich : schicht.start; + const ende = buchung.ende.vergleich > schicht.ende ? buchung.ende.vergleich : schicht.ende; + if (start === schicht.start && ende === schicht.ende) { + return; + } + await this.schichtSetzen({ id: schicht.id, start, ende }); + schicht.start = start; + schicht.ende = ende; + } + async schichtSetzen(schicht) { + await this.zeitbuchungPost('/module/arbeitszeit/api/updateSchicht.php', { + shiftID: schicht.id, + timestampStart: this.vergleichZuFormular(schicht.start), + timestampEnd: this.vergleichZuFormular(schicht.ende), + }, 'Schicht anpassen'); + } + /** + * Erste Buchung des Tages: nachtragen.php legt Schicht und Verteilung an, + * liefert aber keine ID. Die Verteilung wird danach in der Tagesansicht gesucht. + */ + async taetigkeitNachtragen(buchung) { + const nachtragenFormular = await this.http.get('/module/arbeitszeit/api/nachtragen-form.php'); + await this.saveSession(); + this.taetigkeitPruefen(this.parseHtmlDocument(nachtragenFormular.data), buchung.taetigkeitId); + const amArbeitstag = buchung.start.datum === buchung.datum && buchung.ende.datum === buchung.datum; + const form = { + taetigkeit_id: String(buchung.taetigkeitId), + projekt_id: '0', + arbeitszeit_start: buchung.start.uhrzeit, + // Nachtragen kennt nur Uhrzeiten; ueber Mitternacht wird unten korrigiert. + arbeitszeit_ende: amArbeitstag ? buchung.ende.uhrzeit : '23:59', + arbeitzeit_sollstunden: '', + pause_start: '', + pause_ende: '', + maschine_id: String(buchung.maschinenId), + notiz: buchung.notiz, + uebernehmen: '1', + mitarbeitertyp: '1', + mitarbeiter_id: String(buchung.mitarbeiterId), + kategorie_id: '0', + }; + const body = new URLSearchParams(); + for (const [name, value] of Object.entries(form)) { + body.append(`form[${name}]`, value); + } + body.append('tage[]', buchung.datum); + body.append('anzahl_datum', '1'); + body.append('planungAusMitarbeiterId', '0'); + const response = await this.http.post('/module/arbeitszeit/api/nachtragen.php', body, { + ...this.formPostConfig('/arbeitszeit'), + validateStatus: status => status >= 200 && status < 500, + }); + await this.saveSession(); + this.zeitbuchungAntwortPruefen(response, 'Nachtragen'); + const tagesansicht = await this.ladeTagesansicht(buchung.mitarbeiterId, buchung.datum); + const zeilen = Array.from(tagesansicht.querySelectorAll('table.verteilung_table tr.betrieb[id]')); + if (zeilen.length !== 1) { + throw new ZeitbuchungError_1.ZeitbuchungError(`Nachgetragene Buchung am ${buchung.datum} nicht eindeutig gefunden (${zeilen.length} Buchungen)`, 'nicht eindeutig'); + } + const id = this.parseNumber(zeilen[0].id); + if (!amArbeitstag) { + const formular = await this.ladeVerteilungFormular({ + employeeID: buchung.mitarbeiterId, + date: buchung.datum, + distributionID: String(id), + }); + await this.verteilungSpeichern(buchung, id, { + alteTaetigkeitId: String(buchung.taetigkeitId), + projektId: '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: '', + }); + const schicht = await this.ladeSchicht(this.parseNumber(zeilen[0].closest('table.verteilung_table')?.getAttribute('data-schicht'))); + if (schicht) { + await this.schichtErweitern(schicht, buchung); + } + } + return id; + } + /** + * editVerteilungForm.php mit shiftID legt sofort eine leere Verteilung an + * (das Agrarmonitor-UI loescht sie bei "Abbrechen"). Schlaegt das Speichern + * fehl, wird dieser Platzhalter wieder entfernt. + */ + async verteilungAnlegen(buchung, schichtId) { + const formular = await this.ladeVerteilungFormular({ + employeeID: buchung.mitarbeiterId, + date: buchung.datum, + shiftID: schichtId, + }); + const id = this.parseNumber(formular.querySelector('#verteilung_form')?.getAttribute('data-id')); + if (!id) { + throw new ZeitbuchungError_1.ZeitbuchungError('Agrarmonitor hat keine neue Buchung angelegt', 'keine verteilung_id'); + } + try { + this.taetigkeitPruefen(formular, buchung.taetigkeitId); + await this.verteilungSpeichern(buchung, id, { + alteTaetigkeitId: '0', + projektId: '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: buchung.notiz, + }); + } + catch (error) { + await this.zeitbuchungPost('/module/arbeitszeit/api/deleteVerteilung.php', { distributionID: id, employeeID: buchung.mitarbeiterId, date: buchung.datum }, 'Platzhalter loeschen').catch(() => undefined); + throw error; + } + return id; + } + async ladeVerteilungFormular(body) { + const html = await this.zeitbuchungPost('/module/arbeitszeit/api/editVerteilungForm.php', body, 'Buchungsformular laden'); + const formular = this.parseHtmlDocument(html); + if (!formular.querySelector('#verteilung_form')) { + throw new ZeitbuchungError_1.ZeitbuchungError('Buchungsformular nicht gefunden', 'kein verteilung_form'); + } + return formular; + } + async verteilungSpeichern(buchung, id, formular) { + await this.zeitbuchungPost('/module/arbeitszeit/api/updateVerteilung.php', { + mitarbeiterId: buchung.mitarbeiterId, + verteilungId: String(id), + verteilungForm: { + timestamp_start: buchung.start.formular, + timestamp_ende: buchung.ende.formular, + alte_taetigkeit_id: formular.alteTaetigkeitId, + taetigkeit_id: String(buchung.taetigkeitId), + ganzertag: '1', + maschine_id: String(buchung.maschinenId), + projekt_id: formular.projektId, + }, + // Nicht leere notizfeld werden als neue Notiz an die Verteilung gehaengt. + notizForm: { + notizfeld: formular.notiz, + verfasser_id: formular.verfasserId, + }, + }, 'Buchung speichern'); + } + /** Wie bei Verteilungen legt editPauseForm.php mit shiftID sofort eine Pause an. */ + async pauseAnlegen(buchung, schichtId) { + const html = await this.zeitbuchungPost('/module/arbeitszeit/api/editPauseForm.php', { employeeID: buchung.mitarbeiterId, date: buchung.datum, shiftID: schichtId }, 'Pausenformular laden'); + const id = this.parseNumber(this.parseHtmlDocument(html).querySelector('#pause_form')?.getAttribute('data-id')); + if (!id) { + throw new ZeitbuchungError_1.ZeitbuchungError('Agrarmonitor hat keine neue Pause angelegt', 'keine pause_id'); + } + try { + await this.pauseSpeichern(buchung, id, 1); + } + catch (error) { + await this.zeitbuchungPost('/module/arbeitszeit/api/deletePause.php', { pauseID: id, employeeID: buchung.mitarbeiterId, date: buchung.datum }, 'Platzhalter loeschen').catch(() => undefined); + throw error; + } + return id; + } + async pauseSpeichern(buchung, id, neu) { + await this.zeitbuchungPost('/module/arbeitszeit/api/updatePause.php', { + mitarbeiterId: buchung.mitarbeiterId, + pause_id: String(id), + pauseForm: { + pause_start: buchung.start.formular, + pause_ende: buchung.ende.formular, + }, + neu, + }, 'Pause speichern'); + } + /** + * JSON-POST an die Arbeitszeit-API. 4xx (z. B. 422 mit Grund im Body) wird + * als ZeitbuchungError geworfen; Netzwerk- und 5xx-Fehler bleiben Axios-Fehler. + */ + async zeitbuchungPost(url, body, aktion) { + const response = await this.http.post(url, body, { + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json, */*', + 'X-Requested-With': 'XMLHttpRequest', + Referer: `${this.baseUrl}/arbeitszeit`, + Origin: this.baseUrl, + }, + validateStatus: status => status >= 200 && status < 500, + }); + await this.saveSession(); + this.zeitbuchungAntwortPruefen(response, aktion); + return response.data; + } + zeitbuchungAntwortPruefen(response, aktion) { + if (response.status >= 200 && response.status < 300) { + return; + } + const grund = this.zeitbuchungGrund(response.data); + throw new ZeitbuchungError_1.ZeitbuchungError(`${aktion} fehlgeschlagen (HTTP ${response.status}): ${grund}`, grund, response.status); + } + /** 422-Antworten sehen so aus: {"verteilungForm":"ganzertag must be present"} */ + zeitbuchungGrund(data) { + if (data && typeof data === 'object') { + const texte = Object.values(data) + .flatMap(wert => (wert && typeof wert === 'object' ? Object.values(wert) : [wert])) + .filter((wert) => typeof wert === 'string' && wert.trim() !== ''); + return texte.length ? texte.join('; ') : JSON.stringify(data).slice(0, 500); + } + return String(data ?? '').trim().slice(0, 500) || 'keine Antwort'; + } + /** + * Agrarmonitor speichert auch unbekannte oder inaktive Taetigkeits-IDs (dann + * ohne Taetigkeit). Deshalb gegen die Auswahl im Buchungsformular pruefen. + */ + taetigkeitPruefen(formular, taetigkeitId) { + const buchbar = Array.from(formular.querySelectorAll('select#taetigkeit_id option')).map(option => option.value); + if (!buchbar.includes(String(taetigkeitId))) { + throw new ZeitbuchungError_1.ZeitbuchungError(`Taetigkeit ${taetigkeitId} ist in Agrarmonitor nicht buchbar (unbekannt oder inaktiv)`, 'taetigkeit nicht buchbar'); + } + } + selectedValue(document, selector) { + const select = document.querySelector(selector); + return select?.querySelector('option[selected]')?.value ?? select?.value ?? ''; + } + normalisiereText(text) { + return text.replace(/\s+/g, ' ').trim(); + } /** * Laedt eine Livesearch-Liste Seite fuer Seite. Die Seitenzahl steht in * `.pagination[data-pages]`; zusaetzlich bricht die Schleife ab, sobald eine diff --git a/dist/AgrarmonitorConnector.js.map b/dist/AgrarmonitorConnector.js.map index dd650dd..8654908 100644 --- a/dist/AgrarmonitorConnector.js.map +++ b/dist/AgrarmonitorConnector.js.map @@ -1 +1 @@ -{"version":3,"file":"AgrarmonitorConnector.js","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"AgrarmonitorConnector.js","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/ZeitbuchungError.d.ts b/dist/ZeitbuchungError.d.ts new file mode 100644 index 0000000..0c1cb74 --- /dev/null +++ b/dist/ZeitbuchungError.d.ts @@ -0,0 +1,12 @@ +/** + * Agrarmonitor hat eine Zeitbuchung fachlich abgelehnt (z. B. HTTP 422 mit + * Grund im Body) oder die Buchung ist so nicht moeglich. Ein erneuter Versuch + * mit denselben Daten hilft nicht - anders als bei Netzwerk- oder 5xx-Fehlern, + * die als normale Fehler durchgereicht werden. + */ +export declare class ZeitbuchungError extends Error { + readonly grund: string; + readonly status?: number | undefined; + constructor(message: string, grund: string, status?: number | undefined); +} +//# sourceMappingURL=ZeitbuchungError.d.ts.map \ No newline at end of file diff --git a/dist/ZeitbuchungError.d.ts.map b/dist/ZeitbuchungError.d.ts.map new file mode 100644 index 0000000..67b7ade --- /dev/null +++ b/dist/ZeitbuchungError.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ZeitbuchungError.d.ts","sourceRoot":"","sources":["../src/ZeitbuchungError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,KAAK,EAAE,MAAM;aACb,MAAM,CAAC,EAAE,MAAM;gBAF/B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC"} \ No newline at end of file diff --git a/dist/ZeitbuchungError.js b/dist/ZeitbuchungError.js new file mode 100644 index 0000000..456f3e9 --- /dev/null +++ b/dist/ZeitbuchungError.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZeitbuchungError = void 0; +/** + * Agrarmonitor hat eine Zeitbuchung fachlich abgelehnt (z. B. HTTP 422 mit + * Grund im Body) oder die Buchung ist so nicht moeglich. Ein erneuter Versuch + * mit denselben Daten hilft nicht - anders als bei Netzwerk- oder 5xx-Fehlern, + * die als normale Fehler durchgereicht werden. + */ +class ZeitbuchungError extends Error { + grund; + status; + constructor(message, grund, status) { + super(message); + this.grund = grund; + this.status = status; + this.name = 'ZeitbuchungError'; + } +} +exports.ZeitbuchungError = ZeitbuchungError; +//# sourceMappingURL=ZeitbuchungError.js.map \ No newline at end of file diff --git a/dist/ZeitbuchungError.js.map b/dist/ZeitbuchungError.js.map new file mode 100644 index 0000000..dc3e615 --- /dev/null +++ b/dist/ZeitbuchungError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ZeitbuchungError.js","sourceRoot":"","sources":["../src/ZeitbuchungError.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IAGvB;IACA;IAHlB,YACE,OAAe,EACC,KAAa,EACb,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AATD,4CASC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 4029d1f..5384265 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -3,5 +3,6 @@ export { FileCookieStore } from './cookie-store/FileCookieStore'; export { MemoryCookieStore } from './cookie-store/MemoryCookieStore'; export { AgrarmonitorConnector } from './AgrarmonitorConnector'; export { createAgrarmonitorClient } from './createAgrarmonitorClient'; -export type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, CookieEncryptor, CookieStore, Logger, } from './types'; +export { ZeitbuchungError } from './ZeitbuchungError'; +export type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, CookieEncryptor, CookieStore, Logger, MaschineMitGruppe, PausenbuchungDaten, Taetigkeit, TaetigkeitsbuchungDaten, ZeitbuchungDaten, } from './types'; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index f62e8d4..b71ea61 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,eAAe,EACf,WAAW,EACX,MAAM,GACP,MAAM,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,eAAe,EACf,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index c9f7ebe..58d025a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.createAgrarmonitorClient = exports.AgrarmonitorConnector = exports.MemoryCookieStore = exports.FileCookieStore = exports.AesGcmCookieEncryptor = void 0; +exports.ZeitbuchungError = exports.createAgrarmonitorClient = exports.AgrarmonitorConnector = exports.MemoryCookieStore = exports.FileCookieStore = exports.AesGcmCookieEncryptor = void 0; var AesGcmCookieEncryptor_1 = require("./crypto/AesGcmCookieEncryptor"); Object.defineProperty(exports, "AesGcmCookieEncryptor", { enumerable: true, get: function () { return AesGcmCookieEncryptor_1.AesGcmCookieEncryptor; } }); var FileCookieStore_1 = require("./cookie-store/FileCookieStore"); @@ -11,4 +11,6 @@ var AgrarmonitorConnector_1 = require("./AgrarmonitorConnector"); Object.defineProperty(exports, "AgrarmonitorConnector", { enumerable: true, get: function () { return AgrarmonitorConnector_1.AgrarmonitorConnector; } }); var createAgrarmonitorClient_1 = require("./createAgrarmonitorClient"); Object.defineProperty(exports, "createAgrarmonitorClient", { enumerable: true, get: function () { return createAgrarmonitorClient_1.createAgrarmonitorClient; } }); +var ZeitbuchungError_1 = require("./ZeitbuchungError"); +Object.defineProperty(exports, "ZeitbuchungError", { enumerable: true, get: function () { return ZeitbuchungError_1.ZeitbuchungError; } }); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 7fff402..3599021 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA;AAC9B,kEAAiE;AAAxD,kHAAA,eAAe,OAAA;AACxB,sEAAqE;AAA5D,sHAAA,iBAAiB,OAAA;AAC1B,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA;AAC9B,kEAAiE;AAAxD,kHAAA,eAAe,OAAA;AACxB,sEAAqE;AAA5D,sHAAA,iBAAiB,OAAA;AAC1B,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index 5c4502f..6113c1e 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -57,6 +57,11 @@ export interface AgrarmonitorConnectorResult { getArtikel(artikelGruppe: number, suchstring?: string): Promise; getMitarbeiter(suchstring?: string, mitarbeitergruppe?: number): Promise; getTaetigkeiten(): Promise; + createZeitbuchung(daten: ZeitbuchungDaten): Promise<{ + ref: string; + }>; + updateZeitbuchung(ref: string, daten: ZeitbuchungDaten): Promise; + deleteZeitbuchung(ref: string): Promise; } export interface AgrarmonitorFreischaltungStatus { freigeschaltet: boolean; @@ -200,4 +205,30 @@ export interface Taetigkeit { abwesenheit: boolean; notizErzwingen: boolean; } +interface ZeitbuchungBasis { + /** Agrarmonitor-Mitarbeiter-ID */ + mitarbeiterId: number; + start: Date; + ende: Date; + /** + * Arbeitstag (YYYY-MM-DD), zu dessen Schicht die Buchung gehoert. + * Standard: Datum von `start` in Europe/Berlin. Fuer Bloecke nach + * Mitternacht den Tag des Arbeitsbeginns angeben. + */ + datum?: string; +} +export interface TaetigkeitsbuchungDaten extends ZeitbuchungBasis { + art?: 'taetigkeit'; + taetigkeitId: number; + maschinenId?: number; + /** Agrarmonitor hat kein Kostenstellen-Feld - landet als Zeile in der Notiz */ + kostenstelle?: string; + notiz?: string; +} +/** Pausen haben in Agrarmonitor keine Notiz. */ +export interface PausenbuchungDaten extends ZeitbuchungBasis { + art: 'pause'; +} +export type ZeitbuchungDaten = TaetigkeitsbuchungDaten | PausenbuchungDaten; +export {}; //# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/types.d.ts.map b/dist/types.d.ts.map index 9fbcf50..c0cc777 100644 --- a/dist/types.d.ts.map +++ b/dist/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/docs/zeitbuchung-analyse.md b/docs/zeitbuchung-analyse.md index c0901d1..6130173 100644 --- a/docs/zeitbuchung-analyse.md +++ b/docs/zeitbuchung-analyse.md @@ -120,12 +120,24 @@ Ablauf `createZeitbuchung`: `deleteZeitbuchung`: `deleteVerteilung.php`. -## 4. Offene Fragen +## 4. Entscheidungen (14.10.2026) -1. **Kostenstelle:** Agrarmonitor hat keine Kostenstellen-Stammdaten und kein Kostenstellen-Feld an der Buchung. Optionen: (a) Kostenstelle in der App streichen, (b) stattdessen **Projekte** (`projekt_id`) verwenden, (c) Kostenstelle nur in die Notiz schreiben. `getKostenstellen()` habe ich deshalb in Schritt 2 **nicht** umgesetzt. -2. **Pausen:** Die App überträgt keine Pausen. Die Lücke zwischen zwei Blöcken erscheint in Agrarmonitor dann als „Nicht zugeordnet“ innerhalb der Schicht und zählt als Anwesenheit/Arbeitszeit. Sollen Pausen als Agrarmonitor-Pause (`updatePause.php`) übertragen werden, oder soll jede Lücke eine eigene Schicht bekommen? -3. **Parallele Erfassung:** Stempeln Mitarbeiter zusätzlich in der Agrarmonitor-App, gibt es am selben Tag schon eine Schicht mit Verteilungen; App-Blöcke würden hineingebucht und können sich überschneiden. Vorher `checkPlausibelInSchicht.php` prüfen und bei Überschneidung ablehnen? -4. **Über Mitternacht:** Verteilungs-Zeitstempel enthalten das Datum, das Nachtragen nur `HH:MM`. Blöcke über Mitternacht sind ungetestet. -5. **Maschinenpflicht:** Tätigkeiten mit „Maschinen zuordnen = Ja“ verlangen im UI eine Maschine (clientseitige Prüfung über `data-extra`). Ob der Server das ebenfalls erzwingt, ist ungetestet – die App sollte es vorher prüfen (Feld `maschineZuordnen` in `getTaetigkeiten`). -6. **Tätigkeitsauswahl:** Das Buchungsformular bietet nur aktive Tätigkeiten an; Abwesenheiten (Bereich 900) und „800 Pause“ sollten in der App vermutlich ausgeblendet werden. -7. **Verfasser der Notiz:** `verfasser_id` ist der Agrarmonitor-Benutzer des Connectors, nicht der Mitarbeiter. +- **Kostenstelle:** wird als Zeile `Kostenstelle: …` an die Notiz gehängt. +- **Pausen:** werden als Agrarmonitor-Pause übertragen (`editPauseForm.php` mit `shiftID` legt die Pause an, `updatePause.php` mit `neu: 1` speichert sie, `deletePause.php` `{pauseID, employeeID, date}` löscht). Eine Pause braucht eine vorhandene Schicht. +- **Überschneidungen:** Das Buchen in Agrarmonitor selbst wird für die Mitarbeiter abgeschaltet; der Connector prüft keine Überschneidungen. +- **Umsetzung:** `createZeitbuchung`, `updateZeitbuchung`, `deleteZeitbuchung` mit `ref` = `verteilung:::` bzw. `pause:…`. +- **Notiz ändern:** Notizen löscht `module/notiz/api/delete.php` `{noteID}` (Antwort `true`). Beim Ändern wird die neue Notiz gespeichert und danach die alte gelöscht. + +### Echttest (14.10.2026, Mitarbeiter 3309, Tag 11.10.2026) + +Über den Connector (eigenes, freigeschaltetes Gerät) angelegt: Block 08:00–09:00 mit Notiz und Kostenstelle (per Nachtragen), Pause 09:00–09:15, Block 09:15–10:00 mit Maschine 5033; danach Block 1 auf 08:55 und Pause auf 09:10 geändert, Notiz ersetzt; alles wieder gelöscht, der Tag ist danach leer. Ergebnis wie erwartet. + +**Fund:** Agrarmonitor speichert eine unbekannte `taetigkeit_id` (999999) ohne Fehler – es entsteht eine Verteilung ohne Tätigkeit. Der Connector prüft die Tätigkeit deshalb gegen die Auswahl im Buchungsformular (`nachtragen-form.php` bzw. `editVerteilungForm.php`) und wirft sonst `ZeitbuchungError` (`grund: 'taetigkeit nicht buchbar'`). Maschinen-IDs werden nicht geprüft, weil das Formular nur eine Teilmenge der Maschinen anbietet. + +## 5. Offene Fragen + +1. **Pause als erste Buchung des Tages:** Ohne Schicht kann keine Pause gebucht werden (`ZeitbuchungError`). Die App überträgt Blöcke beim Beenden; eine Pause vor dem ersten Tätigkeitsblock landet dann bei `needs_manual`. +2. **Über Mitternacht:** Der Connector trägt bis 23:59 nach und korrigiert Verteilung und Schicht danach auf die echten Zeiten – im Mock getestet, im echten System nicht. +3. **Maschinenpflicht:** Tätigkeiten mit „Maschinen zuordnen = Ja“ verlangen im UI eine Maschine (clientseitige Prüfung über `data-extra`). Ob der Server das ebenfalls erzwingt, ist ungetestet – die App sollte es vorher prüfen (Feld `maschineZuordnen` in `getTaetigkeiten`). +4. **Tätigkeitsauswahl:** Das Buchungsformular bietet nur aktive Tätigkeiten an; Abwesenheiten (Bereich 900) und „800 Pause“ sollten in der App vermutlich ausgeblendet werden. +5. **Verfasser der Notiz:** `verfasser_id` ist der Agrarmonitor-Benutzer des Connectors, nicht der Mitarbeiter. diff --git a/src/AgrarmonitorConnector.ts b/src/AgrarmonitorConnector.ts index 0d2c316..53bddbe 100644 --- a/src/AgrarmonitorConnector.ts +++ b/src/AgrarmonitorConnector.ts @@ -25,7 +25,9 @@ import type { Mitarbeiter, Rechnungsdaten, Taetigkeit, + ZeitbuchungDaten, } from './types'; +import { ZeitbuchungError } from './ZeitbuchungError'; type RetryableAxiosRequestConfig = AxiosRequestConfig & { _agrarmonitorRetry?: boolean; @@ -48,6 +50,41 @@ type CookieChanges = { removed: string[]; }; +/** Ortszeit Europe/Berlin, minutengenau, in den Formaten, die Agrarmonitor braucht. */ +type Zeitpunkt = { + /** YYYY-MM-DD HH:MM - lexikografisch vergleichbar */ + vergleich: string; + /** dd.mm.yy (HH:MM) - Formularformat */ + formular: string; + datum: string; + uhrzeit: string; +}; + +type Zeitbuchung = { + art: 'taetigkeit' | 'pause'; + mitarbeiterId: number; + datum: string; + start: Zeitpunkt; + ende: Zeitpunkt; + taetigkeitId: number; + maschinenId: number; + notiz: string; +}; + +type ZeitbuchungRef = { + art: 'taetigkeit' | 'pause'; + mitarbeiterId: number; + datum: string; + id: number; +}; + +/** Start und Ende als YYYY-MM-DD HH:MM (Ortszeit), wie getSchicht.php sie liefert. */ +type Schicht = { + id: number; + start: string; + ende: string; +}; + type AgrarmonitorCustomerPage = { data?: unknown; meta?: { @@ -60,6 +97,15 @@ export class AgrarmonitorConnector implements AgrarmonitorConnectorResult { public http!: AxiosInstance; private static readonly maxLivesearchSeiten = 500; + private static readonly berlinFormat = new Intl.DateTimeFormat('de-DE', { + timeZone: 'Europe/Berlin', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hourCycle: 'h23', + }); private static readonly s3DateienBaseUrl = 'https://s3-eu-central-1.amazonaws.com/dateien.agrarmonitor.de/07'; private readonly baseUrl: string; @@ -660,6 +706,604 @@ export class AgrarmonitorConnector implements AgrarmonitorConnectorResult { return Array.from(taetigkeiten.values()); } + /** + * Bucht einen Taetigkeitsblock oder eine Pause. Gibt es fuer Mitarbeiter und + * Arbeitstag noch keine Schicht, legt `nachtragen.php` Schicht und Verteilung + * an (Pausen brauchen eine vorhandene Schicht). Sonst kommt die Buchung in die + * passende Schicht, die bei Bedarf verlaengert wird. + */ + async createZeitbuchung(daten: ZeitbuchungDaten): Promise<{ ref: string }> { + const buchung = this.zeitbuchungAufbereiten(daten); + const schichten = await this.ladeSchichten(buchung.mitarbeiterId, buchung.datum); + + if (schichten.length === 0) { + if (buchung.art === 'pause') { + throw new ZeitbuchungError( + `Pause am ${buchung.datum} kann nicht gebucht werden: keine Schicht vorhanden`, + 'keine Schicht vorhanden' + ); + } + + const id = await this.taetigkeitNachtragen(buchung); + return { ref: this.zeitbuchungRef(buchung, id) }; + } + + const schicht = this.passendeSchicht(schichten, buchung); + const schichtVorher = { ...schicht }; + await this.schichtErweitern(schicht, buchung); + + try { + const id = + buchung.art === 'pause' + ? await this.pauseAnlegen(buchung, schicht.id) + : await this.verteilungAnlegen(buchung, schicht.id); + + return { ref: this.zeitbuchungRef(buchung, id) }; + } catch (error) { + if (schicht.start !== schichtVorher.start || schicht.ende !== schichtVorher.ende) { + await this.schichtSetzen(schichtVorher).catch(restoreError => { + this.logger?.warn?.('Schicht konnte nicht zurueckgesetzt werden', { + schichtId: schichtVorher.id, + fehler: restoreError instanceof Error ? restoreError.message : String(restoreError), + }); + }); + } + + throw error; + } + } + + async updateZeitbuchung(ref: string, daten: ZeitbuchungDaten): Promise { + const zielRef = this.parseZeitbuchungRef(ref); + const buchung = this.zeitbuchungAufbereiten(daten); + + if (buchung.art !== zielRef.art) { + throw new ZeitbuchungError('Art der Buchung (Taetigkeit/Pause) kann nicht geaendert werden', 'art geaendert'); + } + + if (buchung.mitarbeiterId !== zielRef.mitarbeiterId || buchung.datum !== zielRef.datum) { + throw new ZeitbuchungError( + 'Mitarbeiter oder Arbeitstag einer Buchung kann nicht geaendert werden', + 'mitarbeiter oder datum geaendert' + ); + } + + const tagesansicht = await this.ladeTagesansicht(zielRef.mitarbeiterId, zielRef.datum); + const zeilenKlasse = zielRef.art === 'pause' ? 'pause_betrieb' : 'betrieb'; + const schichtId = this.parseNumber( + tagesansicht + .querySelector(`tr.${zeilenKlasse}[id="${zielRef.id}"]`) + ?.closest('table.verteilung_table') + ?.getAttribute('data-schicht') + ); + + if (!schichtId) { + throw new ZeitbuchungError(`Buchung ${ref} nicht gefunden`, 'nicht gefunden'); + } + + const schicht = await this.ladeSchicht(schichtId); + + if (schicht) { + await this.schichtErweitern(schicht, buchung); + } + + if (buchung.art === 'pause') { + await this.pauseSpeichern(buchung, zielRef.id, 0); + return; + } + + const formular = await this.ladeVerteilungFormular({ + employeeID: zielRef.mitarbeiterId, + date: zielRef.datum, + distributionID: String(zielRef.id), + }); + this.taetigkeitPruefen(formular, buchung.taetigkeitId); + + const notizen = Array.from(formular.querySelectorAll('#notizen_table tbody tr[data-id]')) + .map(row => ({ + id: this.parseNumber(row.getAttribute('data-id')), + text: this.normalisiereText(row.querySelectorAll('td')[2]?.textContent ?? ''), + })) + .filter(notiz => notiz.id > 0); + const notizUnveraendert = + (notizen.length === 0 && !buchung.notiz) || + (notizen.length === 1 && notizen[0].text === this.normalisiereText(buchung.notiz)); + + await this.verteilungSpeichern(buchung, zielRef.id, { + alteTaetigkeitId: this.selectedValue(formular, '#taetigkeit_id') || '0', + projektId: this.selectedValue(formular, '#projekt_id') || '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: notizUnveraendert ? '' : buchung.notiz, + }); + + // Alte Notizen erst nach erfolgreichem Speichern entfernen. + if (!notizUnveraendert) { + for (const notiz of notizen) { + await this.zeitbuchungPost('/module/notiz/api/delete.php', { noteID: notiz.id }, 'Notiz loeschen'); + } + } + } + + async deleteZeitbuchung(ref: string): Promise { + const zielRef = this.parseZeitbuchungRef(ref); + + if (zielRef.art === 'pause') { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/deletePause.php', + { pauseID: zielRef.id, employeeID: zielRef.mitarbeiterId, date: zielRef.datum }, + 'Pause loeschen' + ); + return; + } + + await this.zeitbuchungPost( + '/module/arbeitszeit/api/deleteVerteilung.php', + { distributionID: zielRef.id, employeeID: zielRef.mitarbeiterId, date: zielRef.datum }, + 'Buchung loeschen' + ); + } + + private zeitbuchungAufbereiten(daten: ZeitbuchungDaten): Zeitbuchung { + if (!Number.isInteger(daten.mitarbeiterId) || daten.mitarbeiterId <= 0) { + throw new ZeitbuchungError('Ungueltige Mitarbeiter-ID', 'mitarbeiterId'); + } + + if (!(daten.start instanceof Date) || Number.isNaN(daten.start.getTime())) { + throw new ZeitbuchungError('Ungueltiger Start', 'start'); + } + + if (!(daten.ende instanceof Date) || Number.isNaN(daten.ende.getTime())) { + throw new ZeitbuchungError('Ungueltiges Ende', 'ende'); + } + + if (daten.datum !== undefined && !/^\d{4}-\d{2}-\d{2}$/.test(daten.datum)) { + throw new ZeitbuchungError('Ungueltiger Arbeitstag, erwartet YYYY-MM-DD', 'datum'); + } + + const start = this.zeitpunkt(daten.start); + const ende = this.zeitpunkt(daten.ende); + + if (ende.vergleich <= start.vergleich) { + throw new ZeitbuchungError('Ende muss mindestens eine Minute nach dem Start liegen', 'dauer'); + } + + const basis = { + mitarbeiterId: daten.mitarbeiterId, + datum: daten.datum ?? start.datum, + start, + ende, + }; + + if (daten.art === 'pause') { + return { ...basis, art: 'pause', taetigkeitId: 0, maschinenId: 0, notiz: '' }; + } + + if (!Number.isInteger(daten.taetigkeitId) || daten.taetigkeitId <= 0) { + throw new ZeitbuchungError('Ungueltige Taetigkeits-ID', 'taetigkeitId'); + } + + const maschinenId = daten.maschinenId ?? 0; + + if (!Number.isInteger(maschinenId) || maschinenId < 0) { + throw new ZeitbuchungError('Ungueltige Maschinen-ID', 'maschinenId'); + } + + const kostenstelle = daten.kostenstelle?.trim(); + const notiz = [daten.notiz?.trim(), kostenstelle ? `Kostenstelle: ${kostenstelle}` : ''] + .filter(Boolean) + .join('\n'); + + return { ...basis, art: 'taetigkeit', taetigkeitId: daten.taetigkeitId, maschinenId, notiz }; + } + + /** Rundet auf die volle Minute - Agrarmonitor speichert keine Sekunden. */ + private zeitpunkt(date: Date): Zeitpunkt { + const gerundet = new Date(Math.round(date.getTime() / 60000) * 60000); + const teile = Object.fromEntries( + AgrarmonitorConnector.berlinFormat.formatToParts(gerundet).map(teil => [teil.type, teil.value]) + ); + const datum = `${teile.year}-${teile.month}-${teile.day}`; + const uhrzeit = `${teile.hour}:${teile.minute}`; + + return { + vergleich: `${datum} ${uhrzeit}`, + formular: this.vergleichZuFormular(`${datum} ${uhrzeit}`), + datum, + uhrzeit, + }; + } + + /** YYYY-MM-DD HH:MM -> dd.mm.yy (HH:MM) */ + private vergleichZuFormular(wert: string): string { + const [datum, uhrzeit] = wert.split(' '); + const [jahr, monat, tag] = datum.split('-'); + return `${tag}.${monat}.${jahr.slice(2)} (${uhrzeit})`; + } + + private zeitbuchungRef(buchung: Zeitbuchung, id: number): string { + return `${buchung.art === 'pause' ? 'pause' : 'verteilung'}:${buchung.mitarbeiterId}:${buchung.datum}:${id}`; + } + + private parseZeitbuchungRef(ref: string): ZeitbuchungRef { + const match = /^(verteilung|pause):(\d+):(\d{4}-\d{2}-\d{2}):(\d+)$/.exec(ref); + + if (!match) { + throw new ZeitbuchungError(`Ungueltige Zeitbuchungs-Referenz: ${ref}`, 'ref'); + } + + return { + art: match[1] === 'pause' ? 'pause' : 'taetigkeit', + mitarbeiterId: Number(match[2]), + datum: match[3], + id: Number(match[4]), + }; + } + + private async ladeTagesansicht(mitarbeiterId: number, datum: string): Promise { + const response = await this.http.get(`/arbeitszeit/detail/${mitarbeiterId}/${datum}`); + + await this.saveSession(); + + return this.parseHtmlDocument(response.data); + } + + private async ladeSchichten(mitarbeiterId: number, datum: string): Promise { + const tagesansicht = await this.ladeTagesansicht(mitarbeiterId, datum); + const ids = new Set( + Array.from(tagesansicht.querySelectorAll('table.verteilung_table[data-schicht]')) + .map(table => this.parseNumber(table.getAttribute('data-schicht'))) + .filter(id => id > 0) + ); + const schichten: Schicht[] = []; + + for (const id of ids) { + const schicht = await this.ladeSchicht(id); + + if (schicht) { + schichten.push(schicht); + } + } + + return schichten; + } + + private async ladeSchicht(schichtId: number): Promise { + const response = await this.http.get('/module/arbeitszeit/api/getSchicht.php', { + params: { schicht_id: schichtId }, + }); + + await this.saveSession(); + + const data = (typeof response.data === 'string' ? JSON.parse(response.data || 'null') : response.data) as { + timestamp_start?: string; + timestamp_ende?: string; + ist_deleted?: number | string; + } | null; + + if (!data?.timestamp_start || Number(data.ist_deleted) === 1) { + return null; + } + + const start = data.timestamp_start.slice(0, 16); + const ende = data.timestamp_ende && !data.timestamp_ende.startsWith('0000') ? data.timestamp_ende.slice(0, 16) : start; + + return { id: schichtId, start, ende }; + } + + /** Schicht, die sich mit der Buchung ueberschneidet, sonst die letzte davor, sonst die erste. */ + private passendeSchicht(schichten: Schicht[], buchung: Zeitbuchung): Schicht { + return ( + schichten.find(schicht => schicht.start <= buchung.ende.vergleich && buchung.start.vergleich <= schicht.ende) ?? + schichten.filter(schicht => schicht.start <= buchung.start.vergleich).at(-1) ?? + schichten[0] + ); + } + + /** Neue Verteilungen verlaengern die Schicht in Agrarmonitor nicht von selbst. */ + private async schichtErweitern(schicht: Schicht, buchung: Zeitbuchung): Promise { + const start = buchung.start.vergleich < schicht.start ? buchung.start.vergleich : schicht.start; + const ende = buchung.ende.vergleich > schicht.ende ? buchung.ende.vergleich : schicht.ende; + + if (start === schicht.start && ende === schicht.ende) { + return; + } + + await this.schichtSetzen({ id: schicht.id, start, ende }); + schicht.start = start; + schicht.ende = ende; + } + + private async schichtSetzen(schicht: Schicht): Promise { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/updateSchicht.php', + { + shiftID: schicht.id, + timestampStart: this.vergleichZuFormular(schicht.start), + timestampEnd: this.vergleichZuFormular(schicht.ende), + }, + 'Schicht anpassen' + ); + } + + /** + * Erste Buchung des Tages: nachtragen.php legt Schicht und Verteilung an, + * liefert aber keine ID. Die Verteilung wird danach in der Tagesansicht gesucht. + */ + private async taetigkeitNachtragen(buchung: Zeitbuchung): Promise { + const nachtragenFormular = await this.http.get('/module/arbeitszeit/api/nachtragen-form.php'); + + await this.saveSession(); + this.taetigkeitPruefen(this.parseHtmlDocument(nachtragenFormular.data), buchung.taetigkeitId); + + const amArbeitstag = buchung.start.datum === buchung.datum && buchung.ende.datum === buchung.datum; + const form: Record = { + taetigkeit_id: String(buchung.taetigkeitId), + projekt_id: '0', + arbeitszeit_start: buchung.start.uhrzeit, + // Nachtragen kennt nur Uhrzeiten; ueber Mitternacht wird unten korrigiert. + arbeitszeit_ende: amArbeitstag ? buchung.ende.uhrzeit : '23:59', + arbeitzeit_sollstunden: '', + pause_start: '', + pause_ende: '', + maschine_id: String(buchung.maschinenId), + notiz: buchung.notiz, + uebernehmen: '1', + mitarbeitertyp: '1', + mitarbeiter_id: String(buchung.mitarbeiterId), + kategorie_id: '0', + }; + const body = new URLSearchParams(); + + for (const [name, value] of Object.entries(form)) { + body.append(`form[${name}]`, value); + } + + body.append('tage[]', buchung.datum); + body.append('anzahl_datum', '1'); + body.append('planungAusMitarbeiterId', '0'); + + const response = await this.http.post('/module/arbeitszeit/api/nachtragen.php', body, { + ...this.formPostConfig('/arbeitszeit'), + validateStatus: status => status >= 200 && status < 500, + }); + + await this.saveSession(); + this.zeitbuchungAntwortPruefen(response, 'Nachtragen'); + + const tagesansicht = await this.ladeTagesansicht(buchung.mitarbeiterId, buchung.datum); + const zeilen = Array.from(tagesansicht.querySelectorAll('table.verteilung_table tr.betrieb[id]')); + + if (zeilen.length !== 1) { + throw new ZeitbuchungError( + `Nachgetragene Buchung am ${buchung.datum} nicht eindeutig gefunden (${zeilen.length} Buchungen)`, + 'nicht eindeutig' + ); + } + + const id = this.parseNumber(zeilen[0].id); + + if (!amArbeitstag) { + const formular = await this.ladeVerteilungFormular({ + employeeID: buchung.mitarbeiterId, + date: buchung.datum, + distributionID: String(id), + }); + + await this.verteilungSpeichern(buchung, id, { + alteTaetigkeitId: String(buchung.taetigkeitId), + projektId: '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: '', + }); + + const schicht = await this.ladeSchicht( + this.parseNumber(zeilen[0].closest('table.verteilung_table')?.getAttribute('data-schicht')) + ); + + if (schicht) { + await this.schichtErweitern(schicht, buchung); + } + } + + return id; + } + + /** + * editVerteilungForm.php mit shiftID legt sofort eine leere Verteilung an + * (das Agrarmonitor-UI loescht sie bei "Abbrechen"). Schlaegt das Speichern + * fehl, wird dieser Platzhalter wieder entfernt. + */ + private async verteilungAnlegen(buchung: Zeitbuchung, schichtId: number): Promise { + const formular = await this.ladeVerteilungFormular({ + employeeID: buchung.mitarbeiterId, + date: buchung.datum, + shiftID: schichtId, + }); + const id = this.parseNumber(formular.querySelector('#verteilung_form')?.getAttribute('data-id')); + + if (!id) { + throw new ZeitbuchungError('Agrarmonitor hat keine neue Buchung angelegt', 'keine verteilung_id'); + } + + try { + this.taetigkeitPruefen(formular, buchung.taetigkeitId); + await this.verteilungSpeichern(buchung, id, { + alteTaetigkeitId: '0', + projektId: '0', + verfasserId: formular.querySelector('#verfasser_id')?.value ?? '', + notiz: buchung.notiz, + }); + } catch (error) { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/deleteVerteilung.php', + { distributionID: id, employeeID: buchung.mitarbeiterId, date: buchung.datum }, + 'Platzhalter loeschen' + ).catch(() => undefined); + + throw error; + } + + return id; + } + + private async ladeVerteilungFormular(body: Record): Promise { + const html = await this.zeitbuchungPost( + '/module/arbeitszeit/api/editVerteilungForm.php', + body, + 'Buchungsformular laden' + ); + const formular = this.parseHtmlDocument(html); + + if (!formular.querySelector('#verteilung_form')) { + throw new ZeitbuchungError('Buchungsformular nicht gefunden', 'kein verteilung_form'); + } + + return formular; + } + + private async verteilungSpeichern( + buchung: Zeitbuchung, + id: number, + formular: { alteTaetigkeitId: string; projektId: string; verfasserId: string; notiz: string } + ): Promise { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/updateVerteilung.php', + { + mitarbeiterId: buchung.mitarbeiterId, + verteilungId: String(id), + verteilungForm: { + timestamp_start: buchung.start.formular, + timestamp_ende: buchung.ende.formular, + alte_taetigkeit_id: formular.alteTaetigkeitId, + taetigkeit_id: String(buchung.taetigkeitId), + ganzertag: '1', + maschine_id: String(buchung.maschinenId), + projekt_id: formular.projektId, + }, + // Nicht leere notizfeld werden als neue Notiz an die Verteilung gehaengt. + notizForm: { + notizfeld: formular.notiz, + verfasser_id: formular.verfasserId, + }, + }, + 'Buchung speichern' + ); + } + + /** Wie bei Verteilungen legt editPauseForm.php mit shiftID sofort eine Pause an. */ + private async pauseAnlegen(buchung: Zeitbuchung, schichtId: number): Promise { + const html = await this.zeitbuchungPost( + '/module/arbeitszeit/api/editPauseForm.php', + { employeeID: buchung.mitarbeiterId, date: buchung.datum, shiftID: schichtId }, + 'Pausenformular laden' + ); + const id = this.parseNumber(this.parseHtmlDocument(html).querySelector('#pause_form')?.getAttribute('data-id')); + + if (!id) { + throw new ZeitbuchungError('Agrarmonitor hat keine neue Pause angelegt', 'keine pause_id'); + } + + try { + await this.pauseSpeichern(buchung, id, 1); + } catch (error) { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/deletePause.php', + { pauseID: id, employeeID: buchung.mitarbeiterId, date: buchung.datum }, + 'Platzhalter loeschen' + ).catch(() => undefined); + + throw error; + } + + return id; + } + + private async pauseSpeichern(buchung: Zeitbuchung, id: number, neu: 0 | 1): Promise { + await this.zeitbuchungPost( + '/module/arbeitszeit/api/updatePause.php', + { + mitarbeiterId: buchung.mitarbeiterId, + pause_id: String(id), + pauseForm: { + pause_start: buchung.start.formular, + pause_ende: buchung.ende.formular, + }, + neu, + }, + 'Pause speichern' + ); + } + + /** + * JSON-POST an die Arbeitszeit-API. 4xx (z. B. 422 mit Grund im Body) wird + * als ZeitbuchungError geworfen; Netzwerk- und 5xx-Fehler bleiben Axios-Fehler. + */ + private async zeitbuchungPost(url: string, body: unknown, aktion: string): Promise { + const response = await this.http.post(url, body, { + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json, */*', + 'X-Requested-With': 'XMLHttpRequest', + Referer: `${this.baseUrl}/arbeitszeit`, + Origin: this.baseUrl, + }, + validateStatus: status => status >= 200 && status < 500, + }); + + await this.saveSession(); + this.zeitbuchungAntwortPruefen(response, aktion); + + return response.data; + } + + private zeitbuchungAntwortPruefen(response: AxiosResponse, aktion: string): void { + if (response.status >= 200 && response.status < 300) { + return; + } + + const grund = this.zeitbuchungGrund(response.data); + throw new ZeitbuchungError(`${aktion} fehlgeschlagen (HTTP ${response.status}): ${grund}`, grund, response.status); + } + + /** 422-Antworten sehen so aus: {"verteilungForm":"ganzertag must be present"} */ + private zeitbuchungGrund(data: unknown): string { + if (data && typeof data === 'object') { + const texte = Object.values(data as Record) + .flatMap(wert => (wert && typeof wert === 'object' ? Object.values(wert as Record) : [wert])) + .filter((wert): wert is string => typeof wert === 'string' && wert.trim() !== ''); + + return texte.length ? texte.join('; ') : JSON.stringify(data).slice(0, 500); + } + + return String(data ?? '').trim().slice(0, 500) || 'keine Antwort'; + } + + /** + * Agrarmonitor speichert auch unbekannte oder inaktive Taetigkeits-IDs (dann + * ohne Taetigkeit). Deshalb gegen die Auswahl im Buchungsformular pruefen. + */ + private taetigkeitPruefen(formular: Document, taetigkeitId: number): void { + const buchbar = Array.from(formular.querySelectorAll('select#taetigkeit_id option')).map( + option => option.value + ); + + if (!buchbar.includes(String(taetigkeitId))) { + throw new ZeitbuchungError( + `Taetigkeit ${taetigkeitId} ist in Agrarmonitor nicht buchbar (unbekannt oder inaktiv)`, + 'taetigkeit nicht buchbar' + ); + } + } + + private selectedValue(document: Document, selector: string): string { + const select = document.querySelector(selector); + return select?.querySelector('option[selected]')?.value ?? select?.value ?? ''; + } + + private normalisiereText(text: string): string { + return text.replace(/\s+/g, ' ').trim(); + } + /** * Laedt eine Livesearch-Liste Seite fuer Seite. Die Seitenzahl steht in * `.pagination[data-pages]`; zusaetzlich bricht die Schleife ab, sobald eine diff --git a/src/ZeitbuchungError.ts b/src/ZeitbuchungError.ts new file mode 100644 index 0000000..6f5c5ea --- /dev/null +++ b/src/ZeitbuchungError.ts @@ -0,0 +1,16 @@ +/** + * Agrarmonitor hat eine Zeitbuchung fachlich abgelehnt (z. B. HTTP 422 mit + * Grund im Body) oder die Buchung ist so nicht moeglich. Ein erneuter Versuch + * mit denselben Daten hilft nicht - anders als bei Netzwerk- oder 5xx-Fehlern, + * die als normale Fehler durchgereicht werden. + */ +export class ZeitbuchungError extends Error { + constructor( + message: string, + public readonly grund: string, + public readonly status?: number + ) { + super(message); + this.name = 'ZeitbuchungError'; + } +} diff --git a/src/index.ts b/src/index.ts index bdc40cb..933fedf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,10 +3,16 @@ export { FileCookieStore } from './cookie-store/FileCookieStore'; export { MemoryCookieStore } from './cookie-store/MemoryCookieStore'; export { AgrarmonitorConnector } from './AgrarmonitorConnector'; export { createAgrarmonitorClient } from './createAgrarmonitorClient'; +export { ZeitbuchungError } from './ZeitbuchungError'; export type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, CookieEncryptor, CookieStore, Logger, + MaschineMitGruppe, + PausenbuchungDaten, + Taetigkeit, + TaetigkeitsbuchungDaten, + ZeitbuchungDaten, } from './types'; diff --git a/src/types.ts b/src/types.ts index c05821b..7ef70e3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -63,6 +63,9 @@ export interface AgrarmonitorConnectorResult { getArtikel(artikelGruppe: number, suchstring?: string): Promise; getMitarbeiter(suchstring?: string, mitarbeitergruppe?: number): Promise; getTaetigkeiten(): Promise; + createZeitbuchung(daten: ZeitbuchungDaten): Promise<{ ref: string }>; + updateZeitbuchung(ref: string, daten: ZeitbuchungDaten): Promise; + deleteZeitbuchung(ref: string): Promise; } export interface AgrarmonitorFreischaltungStatus { @@ -224,3 +227,32 @@ export interface Taetigkeit { abwesenheit: boolean; notizErzwingen: boolean; } + +interface ZeitbuchungBasis { + /** Agrarmonitor-Mitarbeiter-ID */ + mitarbeiterId: number; + start: Date; + ende: Date; + /** + * Arbeitstag (YYYY-MM-DD), zu dessen Schicht die Buchung gehoert. + * Standard: Datum von `start` in Europe/Berlin. Fuer Bloecke nach + * Mitternacht den Tag des Arbeitsbeginns angeben. + */ + datum?: string; +} + +export interface TaetigkeitsbuchungDaten extends ZeitbuchungBasis { + art?: 'taetigkeit'; + taetigkeitId: number; + maschinenId?: number; + /** Agrarmonitor hat kein Kostenstellen-Feld - landet als Zeile in der Notiz */ + kostenstelle?: string; + notiz?: string; +} + +/** Pausen haben in Agrarmonitor keine Notiz. */ +export interface PausenbuchungDaten extends ZeitbuchungBasis { + art: 'pause'; +} + +export type ZeitbuchungDaten = TaetigkeitsbuchungDaten | PausenbuchungDaten; diff --git a/test/zeitbuchung.test.js b/test/zeitbuchung.test.js new file mode 100644 index 0000000..ca5b406 --- /dev/null +++ b/test/zeitbuchung.test.js @@ -0,0 +1,624 @@ +const assert = require('node:assert/strict'); +const http = require('node:http'); +const test = require('node:test'); + +const { AgrarmonitorConnector, MemoryCookieStore, ZeitbuchungError } = require('../dist'); + +const loginPage = ` + + Anmeldung - AGRARMONITOR +
+ +`; + +// "dd.mm.yy (HH:MM)" -> "YYYY-MM-DD HH:MM" +function formularZuVergleich(wert) { + const [, tag, monat, jahr, uhrzeit] = /^(\d{2})\.(\d{2})\.(\d{2}) \((\d{2}:\d{2})\)$/.exec(wert); + return `20${jahr}-${monat}-${tag} ${uhrzeit}`; +} + +/** + * Nachbildung der Arbeitszeit-Endpunkte, so wie sie sich am 14.10.2026 im + * echten Agrarmonitor verhalten haben (siehe docs/zeitbuchung-analyse.md). + */ +function createServer() { + const requests = []; + const state = { schichten: new Map(), verteilungen: new Map(), pausen: new Map() }; + let loggedIn = false; + let naechsteId = 100; + const neueId = () => (naechsteId += 1); + + const json = (res, status, data) => { + res.writeHead(status, { 'Content-Type': 'application/json' }); + res.end(data === undefined ? '' : JSON.stringify(data)); + }; + const html = (res, body) => { + res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); + res.end(body); + }; + const schichtAufraeumen = schichtId => { + const leer = ![...state.verteilungen.values()].some(v => v.schichtId === schichtId); + if (leer) { + state.schichten.get(schichtId).deleted = true; + } + return leer; + }; + + const tagesansicht = (mitarbeiterId, datum) => + [...state.schichten.entries()] + .filter(([, s]) => !s.deleted && s.mitarbeiterId === mitarbeiterId && s.datum === datum) + .map(([schichtId]) => { + const zeilen = [ + ...[...state.verteilungen.entries()] + .filter(([, v]) => v.schichtId === schichtId) + .map(([id, v]) => `${v.start.slice(11)} - ${v.ende.slice(11)}`), + ...[...state.pausen.entries()] + .filter(([, p]) => p.schichtId === schichtId) + .map(([id, p]) => `${p.start.slice(11)} - ${p.ende.slice(11)}`), + ]; + return `${zeilen.join('')}
`; + }) + .join(''); + + // Buchbar sind nur aktive Taetigkeiten; 999 ist unbekannt. + const taetigkeitAuswahl = ausgewaehlt => ` + `; + + const verteilungFormular = id => { + const v = state.verteilungen.get(id); + return ` +
+ + + ${taetigkeitAuswahl(v.taetigkeitId)} + +
+
+ + +
+ + ${v.notizen.map(n => ``).join('')} +
14.10.26 (11:15)Connector${n.text.replace(/\n/g, '
\n')}
+ `; + }; + + const server = http.createServer((req, res) => { + let body = ''; + req.on('data', chunk => { + body += chunk; + }); + req.on('end', () => { + const url = new URL(req.url, 'http://localhost'); + const istJson = (req.headers['content-type'] ?? '').includes('application/json'); + const daten = istJson && body ? JSON.parse(body) : body; + requests.push({ method: req.method, path: url.pathname, body: daten }); + + if (req.method === 'POST' && url.pathname === '/login/api/login.php') { + loggedIn = true; + res.writeHead(200, { 'Content-Type': 'application/json', 'Set-Cookie': 'agrar_session=test; Path=/' }); + res.end(JSON.stringify({ success: true })); + return; + } + + if (!loggedIn) { + html(res, loginPage); + return; + } + + const detail = /^\/arbeitszeit\/detail\/(\d+)\/(\d{4}-\d{2}-\d{2})$/.exec(url.pathname); + + if (detail) { + html(res, `${tagesansicht(Number(detail[1]), detail[2])}`); + return; + } + + switch (url.pathname) { + case '/': + html(res, 'Mein AM'); + return; + + case '/module/arbeitszeit/api/nachtragen-form.php': + html(res, `
${taetigkeitAuswahl('0')}
`); + return; + + case '/module/arbeitszeit/api/getSchicht.php': { + const id = Number(url.searchParams.get('schicht_id')); + const s = state.schichten.get(id); + json(res, 200, { + id, + mitarbeiter_id: s.mitarbeiterId, + timestamp_start: `${s.start}:00`, + timestamp_ende: `${s.ende}:00`, + ist_deleted: s.deleted ? 1 : 0, + }); + return; + } + + case '/module/arbeitszeit/api/nachtragen.php': { + const params = new URLSearchParams(body); + const datum = params.get('tage[]'); + const schichtId = neueId(); + const start = `${datum} ${params.get('form[arbeitszeit_start]')}`; + const ende = `${datum} ${params.get('form[arbeitszeit_ende]')}`; + state.schichten.set(schichtId, { mitarbeiterId: Number(params.get('form[mitarbeiter_id]')), datum, start, ende }); + const notiz = params.get('form[notiz]'); + state.verteilungen.set(neueId(), { + schichtId, + start, + ende, + taetigkeitId: params.get('form[taetigkeit_id]'), + maschinenId: params.get('form[maschine_id]'), + projektId: '0', + notizen: notiz ? [{ id: neueId(), text: notiz }] : [], + }); + json(res, 200, { action: 'link', target: 'arbeitszeit/plan' }); + return; + } + + case '/module/arbeitszeit/api/editVerteilungForm.php': { + let id = Number(daten.distributionID); + if (daten.shiftID) { + // Wie im echten System: Formular fuer "neu" legt sofort einen Platzhalter an. + const s = state.schichten.get(daten.shiftID); + id = neueId(); + state.verteilungen.set(id, { + schichtId: daten.shiftID, + start: s.start, + ende: s.start, + taetigkeitId: '0', + maschinenId: '0', + projektId: '0', + notizen: [], + }); + } + html(res, state.verteilungen.has(id) ? verteilungFormular(id) : ''); + return; + } + + case '/module/arbeitszeit/api/updateVerteilung.php': { + const form = daten.verteilungForm; + if (form.ganzertag === undefined) { + json(res, 422, { verteilungForm: 'ganzertag must be present' }); + return; + } + if (form.maschine_id === '999') { + json(res, 422, { verteilungForm: 'Maschine ungueltig' }); + return; + } + const v = state.verteilungen.get(Number(daten.verteilungId)); + Object.assign(v, { + start: formularZuVergleich(form.timestamp_start), + ende: formularZuVergleich(form.timestamp_ende), + taetigkeitId: form.taetigkeit_id, + maschinenId: form.maschine_id, + projektId: form.projekt_id, + }); + if (daten.notizForm.notizfeld) { + v.notizen.push({ id: neueId(), text: daten.notizForm.notizfeld }); + } + json(res, 200); + return; + } + + case '/module/arbeitszeit/api/deleteVerteilung.php': { + const v = state.verteilungen.get(daten.distributionID); + state.verteilungen.delete(daten.distributionID); + json(res, 200, schichtAufraeumen(v.schichtId) ? { action: 'link', target: 'arbeitszeit' } : null); + return; + } + + case '/module/arbeitszeit/api/editPauseForm.php': { + const s = state.schichten.get(daten.shiftID); + const id = neueId(); + state.pausen.set(id, { schichtId: daten.shiftID, start: s.start, ende: s.ende }); + html(res, `
`); + return; + } + + case '/module/arbeitszeit/api/updatePause.php': { + const p = state.pausen.get(Number(daten.pause_id)); + p.start = formularZuVergleich(daten.pauseForm.pause_start); + p.ende = formularZuVergleich(daten.pauseForm.pause_ende); + json(res, 200, 0); + return; + } + + case '/module/arbeitszeit/api/deletePause.php': + state.pausen.delete(daten.pauseID); + json(res, 200, null); + return; + + case '/module/arbeitszeit/api/updateSchicht.php': { + const s = state.schichten.get(daten.shiftID); + s.start = formularZuVergleich(daten.timestampStart); + s.ende = formularZuVergleich(daten.timestampEnd); + json(res, 200, true); + return; + } + + case '/module/notiz/api/delete.php': + for (const v of state.verteilungen.values()) { + v.notizen = v.notizen.filter(n => n.id !== daten.noteID); + } + json(res, 200, true); + return; + + default: + res.writeHead(404); + res.end('not found'); + } + }); + }); + + return { + server, + requests, + state, + neueId, + expireSession() { + loggedIn = false; + }, + }; +} + +async function startConnector(t) { + const fake = createServer(); + + await new Promise(resolve => fake.server.listen(0, '127.0.0.1', resolve)); + t.after(() => new Promise(resolve => fake.server.close(resolve))); + + const connector = new AgrarmonitorConnector({ + baseUrl: `http://127.0.0.1:${fake.server.address().port}`, + username: 'demo', + password: 'secret', + cookieStore: new MemoryCookieStore(), + }); + + await connector.init(); + + return { connector, ...fake }; +} + +/** Legt eine Schicht mit einer Verteilung an, wie nach einem ersten Nachtragen. */ +function schichtAnlegen(state, neueId, { start = '2026-10-14 08:00', ende = '2026-10-14 09:00' } = {}) { + const schichtId = neueId(); + const verteilungId = neueId(); + state.schichten.set(schichtId, { mitarbeiterId: 3309, datum: '2026-10-14', start, ende }); + state.verteilungen.set(verteilungId, { + schichtId, + start, + ende, + taetigkeitId: '870', + maschinenId: '0', + projektId: '12', + notizen: [{ id: neueId(), text: 'Alte Notiz' }], + }); + return { schichtId, verteilungId }; +} + +const posts = (requests, path) => requests.filter(r => r.method === 'POST' && r.path === path); +const schreibendePosts = requests => + requests.filter(r => r.method === 'POST' && r.path.startsWith('/module/') && !r.path.endsWith('Form.php')); + +// 14.10.2026 ist Sommerzeit: 06:00Z = 08:00 Uhr in Berlin. +const block = (start, ende, extra = {}) => ({ + mitarbeiterId: 3309, + start: new Date(start), + ende: new Date(ende), + taetigkeitId: 870, + ...extra, +}); + +test('createZeitbuchung traegt ohne Schicht Schicht und Taetigkeit nach', async t => { + const { connector, requests, state } = await startConnector(t); + + const { ref } = await connector.createZeitbuchung( + block('2026-10-14T06:00:00Z', '2026-10-14T07:00:20Z', { + maschinenId: 5033, + notiz: 'Hydraulik abgedichtet', + kostenstelle: '4711', + }) + ); + + const [nachtragen] = posts(requests, '/module/arbeitszeit/api/nachtragen.php'); + const params = new URLSearchParams(nachtragen.body); + assert.equal(params.get('form[mitarbeiter_id]'), '3309'); + assert.equal(params.get('form[mitarbeitertyp]'), '1'); + assert.equal(params.get('form[taetigkeit_id]'), '870'); + assert.equal(params.get('form[maschine_id]'), '5033'); + assert.equal(params.get('form[arbeitszeit_start]'), '08:00'); + assert.equal(params.get('form[arbeitszeit_ende]'), '09:00', 'Sekunden werden auf die Minute gerundet'); + assert.equal(params.get('form[pause_start]'), ''); + assert.equal(params.get('form[uebernehmen]'), '1'); + assert.equal(params.get('form[notiz]'), 'Hydraulik abgedichtet\nKostenstelle: 4711'); + assert.deepEqual(params.getAll('tage[]'), ['2026-10-14']); + + const [[verteilungId, verteilung]] = [...state.verteilungen.entries()]; + assert.equal(ref, `verteilung:3309:2026-10-14:${verteilungId}`); + assert.equal(verteilung.start, '2026-10-14 08:00'); + assert.equal(verteilung.ende, '2026-10-14 09:00'); +}); + +test('createZeitbuchung bucht in die vorhandene Schicht und verlaengert sie', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { schichtId } = schichtAnlegen(state, neueId); + + const { ref } = await connector.createZeitbuchung( + block('2026-10-14T07:00:00Z', '2026-10-14T08:00:00Z', { taetigkeitId: 869, maschinenId: 5033, notiz: 'Zweiter Block' }) + ); + + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/editVerteilungForm.php')[0].body, { + employeeID: 3309, + date: '2026-10-14', + shiftID: schichtId, + }); + const verteilungId = Number(ref.split(':').at(-1)); + assert.equal(ref, `verteilung:3309:2026-10-14:${verteilungId}`); + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/updateVerteilung.php')[0].body, { + mitarbeiterId: 3309, + verteilungId: String(verteilungId), + verteilungForm: { + timestamp_start: '14.10.26 (09:00)', + timestamp_ende: '14.10.26 (10:00)', + alte_taetigkeit_id: '0', + taetigkeit_id: '869', + ganzertag: '1', + maschine_id: '5033', + projekt_id: '0', + }, + notizForm: { notizfeld: 'Zweiter Block', verfasser_id: '6' }, + }); + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/updateSchicht.php').map(r => r.body), [ + { shiftID: schichtId, timestampStart: '14.10.26 (08:00)', timestampEnd: '14.10.26 (10:00)' }, + ]); + assert.equal(posts(requests, '/module/arbeitszeit/api/nachtragen.php').length, 0); +}); + +test('createZeitbuchung bucht eine Pause in die Schicht', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { schichtId } = schichtAnlegen(state, neueId); + + const { ref } = await connector.createZeitbuchung({ + art: 'pause', + mitarbeiterId: 3309, + start: new Date('2026-10-14T07:00:00Z'), + ende: new Date('2026-10-14T07:30:00Z'), + }); + + const [[pauseId, pause]] = [...state.pausen.entries()]; + assert.equal(ref, `pause:3309:2026-10-14:${pauseId}`); + assert.deepEqual(pause, { schichtId, start: '2026-10-14 09:00', ende: '2026-10-14 09:30' }); + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/updatePause.php')[0].body, { + mitarbeiterId: 3309, + pause_id: String(pauseId), + pauseForm: { pause_start: '14.10.26 (09:00)', pause_ende: '14.10.26 (09:30)' }, + neu: 1, + }); +}); + +test('createZeitbuchung lehnt eine Pause ohne Schicht ab', async t => { + const { connector, requests } = await startConnector(t); + + await assert.rejects( + () => + connector.createZeitbuchung({ + art: 'pause', + mitarbeiterId: 3309, + start: new Date('2026-10-14T07:00:00Z'), + ende: new Date('2026-10-14T07:30:00Z'), + }), + error => error instanceof ZeitbuchungError && /keine Schicht vorhanden/.test(error.message) + ); + assert.equal(schreibendePosts(requests).length, 0); +}); + +test('createZeitbuchung meldet den Grund einer 422 und raeumt Platzhalter und Schicht auf', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { schichtId, verteilungId } = schichtAnlegen(state, neueId); + + await assert.rejects( + () => connector.createZeitbuchung(block('2026-10-14T07:00:00Z', '2026-10-14T08:00:00Z', { maschinenId: 999 })), + error => + error instanceof ZeitbuchungError && + error.status === 422 && + error.grund === 'Maschine ungueltig' && + /Buchung speichern fehlgeschlagen \(HTTP 422\): Maschine ungueltig/.test(error.message) + ); + + assert.deepEqual([...state.verteilungen.keys()], [verteilungId], 'Platzhalter wurde wieder geloescht'); + assert.equal(posts(requests, '/module/arbeitszeit/api/deleteVerteilung.php').length, 1); + const schicht = state.schichten.get(schichtId); + assert.deepEqual([schicht.start, schicht.ende], ['2026-10-14 08:00', '2026-10-14 09:00'], 'Schicht zurueckgesetzt'); +}); + +test('createZeitbuchung ueber Mitternacht korrigiert Verteilung und Schicht nach dem Nachtragen', async t => { + const { connector, requests, state } = await startConnector(t); + + await connector.createZeitbuchung( + block('2026-10-14T21:30:00Z', '2026-10-14T22:30:00Z', { datum: '2026-10-14' }) + ); + + const params = new URLSearchParams(posts(requests, '/module/arbeitszeit/api/nachtragen.php')[0].body); + assert.equal(params.get('form[arbeitszeit_start]'), '23:30'); + assert.equal(params.get('form[arbeitszeit_ende]'), '23:59'); + + const update = posts(requests, '/module/arbeitszeit/api/updateVerteilung.php')[0].body; + assert.equal(update.verteilungForm.timestamp_start, '14.10.26 (23:30)'); + assert.equal(update.verteilungForm.timestamp_ende, '15.10.26 (00:30)'); + assert.equal(update.notizForm.notizfeld, '', 'Notiz nicht doppelt anlegen'); + + const [schicht] = state.schichten.values(); + assert.deepEqual([schicht.start, schicht.ende], ['2026-10-14 23:30', '2026-10-15 00:30']); +}); + +// Im echten System gespeichert statt abgelehnt (Echttest 14.10.2026) - der Connector muss pruefen. +test('createZeitbuchung lehnt eine nicht buchbare Taetigkeit ab', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + + await assert.rejects( + () => connector.createZeitbuchung(block('2026-10-14T06:00:00Z', '2026-10-14T07:00:00Z', { taetigkeitId: 999 })), + error => error instanceof ZeitbuchungError && error.grund === 'taetigkeit nicht buchbar' + ); + assert.equal(posts(requests, '/module/arbeitszeit/api/nachtragen.php').length, 0, 'ohne Schicht nichts nachtragen'); + + const { verteilungId } = schichtAnlegen(state, neueId); + + await assert.rejects( + () => connector.createZeitbuchung(block('2026-10-14T07:00:00Z', '2026-10-14T08:00:00Z', { taetigkeitId: 999 })), + error => error instanceof ZeitbuchungError && error.grund === 'taetigkeit nicht buchbar' + ); + assert.equal(posts(requests, '/module/arbeitszeit/api/updateVerteilung.php').length, 0); + assert.deepEqual([...state.verteilungen.keys()], [verteilungId], 'Platzhalter wurde wieder geloescht'); + + await assert.rejects( + () => + connector.updateZeitbuchung( + `verteilung:3309:2026-10-14:${verteilungId}`, + block('2026-10-14T06:00:00Z', '2026-10-14T07:00:00Z', { taetigkeitId: 999 }) + ), + error => error instanceof ZeitbuchungError && error.grund === 'taetigkeit nicht buchbar' + ); + assert.equal(posts(requests, '/module/arbeitszeit/api/updateVerteilung.php').length, 0); +}); + +test('updateZeitbuchung aendert die Verteilung und ersetzt die Notiz', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { verteilungId } = schichtAnlegen(state, neueId); + const alteNotizId = state.verteilungen.get(verteilungId).notizen[0].id; + + await connector.updateZeitbuchung( + `verteilung:3309:2026-10-14:${verteilungId}`, + block('2026-10-14T06:00:00Z', '2026-10-14T06:45:00Z', { taetigkeitId: 869, maschinenId: 5033, notiz: 'Neue Notiz' }) + ); + + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/updateVerteilung.php')[0].body, { + mitarbeiterId: 3309, + verteilungId: String(verteilungId), + verteilungForm: { + timestamp_start: '14.10.26 (08:00)', + timestamp_ende: '14.10.26 (08:45)', + alte_taetigkeit_id: '870', + taetigkeit_id: '869', + ganzertag: '1', + maschine_id: '5033', + projekt_id: '12', + }, + notizForm: { notizfeld: 'Neue Notiz', verfasser_id: '6' }, + }); + assert.deepEqual(posts(requests, '/module/notiz/api/delete.php').map(r => r.body), [{ noteID: alteNotizId }]); + assert.deepEqual(state.verteilungen.get(verteilungId).notizen.map(n => n.text), ['Neue Notiz']); +}); + +test('updateZeitbuchung laesst eine unveraenderte Notiz stehen', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { verteilungId } = schichtAnlegen(state, neueId); + + await connector.updateZeitbuchung( + `verteilung:3309:2026-10-14:${verteilungId}`, + block('2026-10-14T06:00:00Z', '2026-10-14T06:45:00Z', { notiz: 'Alte Notiz' }) + ); + + assert.equal(posts(requests, '/module/arbeitszeit/api/updateVerteilung.php')[0].body.notizForm.notizfeld, ''); + assert.equal(posts(requests, '/module/notiz/api/delete.php').length, 0); +}); + +test('updateZeitbuchung aendert eine Pause', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { schichtId } = schichtAnlegen(state, neueId); + const pauseId = neueId(); + state.pausen.set(pauseId, { schichtId, start: '2026-10-14 08:30', ende: '2026-10-14 08:45' }); + + await connector.updateZeitbuchung(`pause:3309:2026-10-14:${pauseId}`, { + art: 'pause', + mitarbeiterId: 3309, + start: new Date('2026-10-14T06:35:00Z'), + ende: new Date('2026-10-14T06:50:00Z'), + }); + + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/updatePause.php')[0].body, { + mitarbeiterId: 3309, + pause_id: String(pauseId), + pauseForm: { pause_start: '14.10.26 (08:35)', pause_ende: '14.10.26 (08:50)' }, + neu: 0, + }); +}); + +test('updateZeitbuchung lehnt ungueltige Referenzen und Wechsel von Art oder Tag ab', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { verteilungId } = schichtAnlegen(state, neueId); + const daten = block('2026-10-14T06:00:00Z', '2026-10-14T06:45:00Z'); + + await assert.rejects(() => connector.updateZeitbuchung('1180803', daten), ZeitbuchungError); + await assert.rejects( + () => connector.updateZeitbuchung(`pause:3309:2026-10-14:${verteilungId}`, daten), + /Art der Buchung/ + ); + await assert.rejects( + () => connector.updateZeitbuchung(`verteilung:3309:2026-10-13:${verteilungId}`, daten), + /Arbeitstag/ + ); + await assert.rejects( + () => connector.updateZeitbuchung(`verteilung:3309:2026-10-14:999999`, daten), + /nicht gefunden/ + ); + assert.equal(schreibendePosts(requests).length, 0); +}); + +test('deleteZeitbuchung loescht Verteilung und Pause', async t => { + const { connector, requests, state, neueId } = await startConnector(t); + const { schichtId, verteilungId } = schichtAnlegen(state, neueId); + const pauseId = neueId(); + state.pausen.set(pauseId, { schichtId, start: '2026-10-14 08:30', ende: '2026-10-14 08:45' }); + + await connector.deleteZeitbuchung(`pause:3309:2026-10-14:${pauseId}`); + await connector.deleteZeitbuchung(`verteilung:3309:2026-10-14:${verteilungId}`); + + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/deletePause.php')[0].body, { + pauseID: pauseId, + employeeID: 3309, + date: '2026-10-14', + }); + assert.deepEqual(posts(requests, '/module/arbeitszeit/api/deleteVerteilung.php')[0].body, { + distributionID: verteilungId, + employeeID: 3309, + date: '2026-10-14', + }); + assert.equal(state.verteilungen.size, 0); + assert.equal(state.pausen.size, 0); +}); + +test('createZeitbuchung prueft die Eingaben vor dem ersten Request', async t => { + const { connector, requests } = await startConnector(t); + const anzahlVorher = requests.length; + + await assert.rejects( + () => connector.createZeitbuchung(block('2026-10-14T06:00:00Z', '2026-10-14T06:00:20Z')), + /mindestens eine Minute/ + ); + await assert.rejects( + () => connector.createZeitbuchung(block('2026-10-14T06:00:00Z', '2026-10-14T07:00:00Z', { taetigkeitId: 0 })), + /Taetigkeits-ID/ + ); + assert.equal(requests.length, anzahlVorher); +}); + +test('createZeitbuchung meldet sich bei abgelaufener Session neu an', async t => { + const { connector, requests, state, expireSession } = await startConnector(t); + const logins = () => posts(requests, '/login/api/login.php').length; + + assert.equal(logins(), 1); + expireSession(); + + const { ref } = await connector.createZeitbuchung(block('2026-10-14T06:00:00Z', '2026-10-14T07:00:00Z')); + + assert.equal(logins(), 2, 'genau ein erneuter Login'); + assert.match(ref, /^verteilung:3309:2026-10-14:\d+$/); + assert.equal(state.verteilungen.size, 1); +});