Appearance
Protokoll-Erstellung
Die Route app/pages/create.vue erstellt neue Acceptances für einen Vertrag. Sie ist der Zielpfad für Einstiege mit ?contract=<id> und optional ?type=<id>.
Einstieg
Die Middleware app/middleware/determiner.ts leitet vertragsbasierte Einstiege nach /create weiter:
?contract=<id>öffnet die Auswahl verfügbarer Protokolltypen?contract=<id>&type=<id>erstellt direkt den angegebenen Typ
create.vue liest die Vertrags-ID aus route.query.contract und lädt die Verfügbarkeit über:
ts
/acceptance/contract/{contractId}/availableDie Antwort enthält verfügbare Protokolltypen, bestehende Acceptances, mögliche Clone-Quellen sowie Vertrags-, Mieter- und Wohnungsdaten für die Anzeige.
Protokollauswahl
app/components/Protocol/ProtocolSelection.vue kapselt die wiederverwendbare Auswahl-UI.
Aufgaben:
- verfügbare Protokolltypen anzeigen
- bestehende Protokolle des Vertrags anzeigen
- vorhandene Clone-Quellen anbieten
- abgeschlossene Clone-Quellen standardmäßig bevorzugen
- nicht finalisierte Clone-Quellen nur nach bewusster Auswahl einblenden
Labels, Icons und Farben für Typen kommen aus app/composables/protocol/useAcceptanceTypes.ts.
Bekannte Typen:
1: Vorabnahme2: Abnahme3: Übergabe5: Verlängerung
Blanko-Erstellung
Eine neue Acceptance wird fachlich über useProtocolCreation().createProtocol(...) orchestriert. Der Orchestrator bündelt API-Aufruf, Erfolgs-/Fehler-Toast und den gemeinsamen Ladezustand. Der eigentliche Server-Call bleibt in useAcceptanceApi().createAcceptance(contractId, type).
Der API-Pfad ist:
ts
POST /acceptance/Payload:
ts
{
contractId,
type
}Wenn die Antwort eine neue ID enthält, lädt redirectToCreatedAcceptance(...) zuerst Metadaten über den Acceptance-Store vor und navigiert danach in den Editor:
ts
/
?acceptance=<newId>Erstellung mit Übernahme
Wenn Clone-Quellen vorhanden sind, fragt die Auswahl zuerst, ob leer erstellt oder aus einer Quelle übernommen werden soll.
Bei Übernahme öffnet ProtocolCloneModal.vue. Der gemeinsame Ablauf liegt in useProtocolCreation().createProtocolWithDraftClone(...):
- Acceptance über
useAcceptanceApi().createAcceptance(...)erstellen - Clone-Auswahl über
useAcceptanceApi().applyCloneToAcceptance(...)an/acceptance/{newId}/clone/applysenden - Erfolgs-/Fehler-Toast zentral behandeln
- der jeweilige Einstieg schließt Modals und navigiert zur neuen Acceptance
Der Clone-Dialog ist derselbe Baustein, der auch aus anderen produktiven Flows verwendet wird. Details zur eigentlichen Übernahme stehen in /protocol-clone-framework.
Gelöschte Protokolle
Wenn die Route mit deletedAcceptanceId und deletedAcceptanceType geöffnet wird, zeigt create.vue einen Hinweis auf das gelöschte Protokoll.
Falls inzwischen ein Ersatzprotokoll desselben Typs existiert, bietet die Seite einen direkten Einstieg in dieses Protokoll an. Die Zielroute wird über getAcceptanceRouteLocation(...) bestimmt und führt gesperrte Acceptances nach /finalize, sonst in den Editor.