B: Explizite lineare Druck-Warteschlange + Formatwechsel-Bestaetigung
Schema (bootstrap): - jobs.position (float) = explizite lineare Reihenfolge; machines.pending_format = vom Agent angefordertes naechstes Format - Service-Rechte: jobs.update +position, machines.update +pending_format Einreihen (skrift-orders): enqueue/enqueue-bulk vergeben position (ans Ende je Maschine) Board (produktion) Warteschlange: EINE lineare Liste je Maschine (nicht mehr nach Format gebuendelt), Hoch/Runter/Anfang/Ende-Umsortieren, Formatwechsel-Marker, laufende Jobs, Banner "Format einlegen -> bestaetigen" (setzt current_format, leert pending) Uebersicht (Mitarbeiter): Maschinen-Panel mit Bestaetigen/Starten + Vorschau der kommenden Format-Segmente; jobs nach position sortiert ACHTUNG Deploy: Bootstrap VOR Directus-Neustart UND vor Agent-Update (neue Felder/Rechte). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -404,6 +404,10 @@ const collections = [
|
||||
// format-Schlüssel und springt nie selbstständig auf ein anderes Format.
|
||||
// Leer = Maschine wartet, bis im Board ein Format als eingelegt gewählt wird.
|
||||
f('current_format', 'string', { interface: 'input', note: 'Aktuell eingelegtes Format (Agent druckt nur passende Jobs). Leer = wartet auf Formatwahl.' }),
|
||||
// Vom Agent angefordertes NÄCHSTES Format (lineare Warteschlange): der nächste
|
||||
// geplante Job braucht ein anderes Format → Agent pausiert und setzt dies, das
|
||||
// Board zeigt „Format einlegen → bestätigen" (setzt current_format, leert dies).
|
||||
f('pending_format', 'string', { interface: 'input', note: 'Angefordertes nächstes Format (wartet auf Bestätigung im Board).' }),
|
||||
f('notes', 'text', { interface: 'input-multiline' }),
|
||||
] },
|
||||
|
||||
@@ -471,6 +475,9 @@ const collections = [
|
||||
f('format_label', 'string', { interface: 'input', note: 'Lesbare Formatbezeichnung für die Warteschlangen-Ansicht.' }),
|
||||
dropdown('status', ['queued', 'printing', 'printed', 'failed', 'shipped'], { default: 'queued' }),
|
||||
f('priority', 'integer', { interface: 'input', default: 0, note: 'Höher = zuerst. Direktdruck bekommt hohe Priorität.' }),
|
||||
// Explizite lineare Reihenfolge der Plan-Warteschlange (klein = zuerst). Ein
|
||||
// Format darf mehrfach an verschiedenen Positionen stehen; im Board umsortierbar.
|
||||
f('position', 'float', { interface: 'input', default: 0, note: 'Lineare Position in der Warteschlange (klein = zuerst).' }),
|
||||
// Pro-Druck-Übersteuerung der Template-Maße (Breite/Höhe/X/Y/Scale/Rot).
|
||||
// Vom Druck-Popup gesetzt; leer = Template-Werte verwenden.
|
||||
f('params', 'json', { interface: 'input-code', note: 'Maß-Übersteuerung {width,height,xpos,ypos,scale,rotation} (leer = Template).' }),
|
||||
@@ -1296,9 +1303,9 @@ async function applyPermissions() {
|
||||
['status', 'artifact_path', 'payment_status', 'payment_ref', 'production_status', 'brief_gedruckt', 'kuvert_gedruckt']);
|
||||
await ensurePermission(svcPol.id, 'jobs', 'create');
|
||||
// Agent meldet Druckfortschritt zurück.
|
||||
await ensurePermission(svcPol.id, 'jobs', 'update', ['status', 'priority', 'error']);
|
||||
// Agent meldet Maschinenzustand (Heartbeat).
|
||||
await ensurePermission(svcPol.id, 'machines', 'update', ['status', 'last_seen']);
|
||||
await ensurePermission(svcPol.id, 'jobs', 'update', ['status', 'priority', 'error', 'position']);
|
||||
// Agent meldet Maschinenzustand (Heartbeat) + fordert Formatwechsel an.
|
||||
await ensurePermission(svcPol.id, 'machines', 'update', ['status', 'last_seen', 'pending_format']);
|
||||
await ensurePermission(svcPol.id, 'status_history', 'create');
|
||||
// Hochgeladene Druckdateien lesen (Backend führt PDFs für den Charge-Sammeldruck
|
||||
// zusammen und lädt sie dafür über /assets).
|
||||
|
||||
Reference in New Issue
Block a user