Angebots-Workflow
Jedes Angebot durchläuft eine feste Kette von Status, von der Kundenanfrage bis zur ausgelösten Bestellung. Welcher Übergang erlaubt ist, entscheidet der Server.
Statusmodell
Ein Angebot trägt zu jedem Zeitpunkt genau einen dieser Status:
| Status | Storefront-Bezeichnung | Admin-Bezeichnung | Bedeutung |
|---|---|---|---|
requested | Angefragt | Angefragt | Der Kunde hat angefragt; noch nicht bearbeitet. |
in_progress | In Bearbeitung | In Bearbeitung | Der Händler verhandelt (Entwurf, editierbar). |
sent | Angebot erhalten | Gesendet | Das verbindliche Angebot wurde an den Kunden gesendet. |
accepted | Angenommen | Angenommen | Der Kunde hat angenommen; der Warenkorb ist befüllt. |
ordered | Bestellt | Bestellt | Eine Bestellung ist entstanden und mit dem Angebot verknüpft. |
declined | Abgelehnt | Abgelehnt | Vom Kunden oder Händler abgelehnt/zurückgezogen. |
expired | Abgelaufen | Abgelaufen | Die Gültigkeit ist verstrichen (automatisch). |
superseded | Ersetzt | Ersetzt | Durch eine neuere Version ersetzt und eingefroren. |
Offene Angebote
Als offen gelten requested, in_progress und sent. In diesen Status kann der Kunde Nachrichten schreiben und ablehnen; nur offene Angebote zählen auf das Spam-Limit (Konfiguration).
Erlaubte Statusübergänge
Statusänderungen im Admin laufen über serverseitig geprüfte Aktionen. Ein unzulässiger Übergang lässt sich nicht speichern, gleich was das Frontend sendet.
| Von | Erlaubt nach |
|---|---|
requested | in_progress, sent, declined |
in_progress | sent, declined |
sent | declined |
Die übrigen vier Status setzt kein Admin-Button, sondern der jeweilige Ablauf selbst: accepted entsteht mit der Annahme durch den Kunden – oder wenn der Händler die Bestellung in seinem Namen auslöst. ordered folgt, sobald die zugehörige Bestellung existiert. expired setzt der Ablauf-Task, superseded das Revidieren eines gesendeten Angebots.
Von der Anfrage zur Bestellung
Am Anfang steht die Anfrage. Der Kunde stößt sie aus dem Warenkorb, über „Preis auf Anfrage" oder per Schnellanfrage an; alternativ legt der Händler direkt einen Entwurf an. Kommt die Anfrage vom Kunden, übernimmt das Angebot dessen aktuelle Konditionen – Zahlart, Versandart und Versandkosten aus dem Warenkorb – und startet in requested. Ein Händler-Entwurf startet in in_progress. Die Wege im Detail stehen unter Anfrage.
Der Händler öffnet das Angebot unter Kataloge/Bestellungen → Angebote, nimmt es in Bearbeitung und passt Positionen, Preise, Staffeln, Alternativen, Texte und Konditionen an. Editierbar bleibt es, solange sein Status requested oder in_progress ist. Zur Oberfläche siehe Verwaltung.
Mit Angebot senden wechselt der Status auf sent. Der Shop hält das Sendedatum fest, erzeugt ein Express-Token für den Deep-Link in der E-Mail und verschickt die Nachricht „Ihr individuelles Angebot" an den Kunden, auf Wunsch mit PDF-Anhang.
Sende-Sperre
Ein Angebot lässt sich erst senden, wenn Zahlungsart und Versandart gesetzt sind; die Versandkosten dürfen 0 (kostenlos) sein. Fehlt eines von beiden, bleibt der Button gesperrt, und der Server weist das Senden zusätzlich ab.
Ein gesendetes Angebot ist verbindlich und wird nicht mehr direkt bearbeitet. Wer daran etwas ändern muss, erstellt eine neue Version.
Der Kunde nimmt unter Konto → Meine Angebote mit „Angebot annehmen & bestellen" an. Der Shop prüft Status und Gültigkeit, setzt das Angebot auf accepted, stellt die Session auf die angebotene Zahl- und Versandart um und füllt den Warenkorb mit den verhandelten Positionen. Optionale Positionen, Alternativen und – bei Staffeln – die gewählte Menge übernimmt er aus der Auswahl des Kunden.
Was danach passiert, hängt an einer Einstellung. Ist „Bei Annahme Bestellung direkt auslösen" aktiv (Standard), entsteht sofort eine verbindliche Bestellung zu den Angebotskonditionen. Ist die Option aus, landet der Kunde im normalen Checkout auf der Bestätigungsseite. Scheitert die direkte Bestellung – etwa weil die Zahlart eine Eingabe verlangt –, fällt der Shop von selbst auf den geführten Checkout zurück. Sobald die Bestellung existiert, verknüpft der Shop sie mit dem Angebot und setzt den Status auf ordered.
Preis- und Versandkosten-Sperre im Checkout
Ein Angebot ist ein Konditionen-Paket, kein loser Satz Einzelpreise. Damit die verhandelten Werte den kompletten Checkout überstehen – Wechsel von Zahl- oder Versandart, Seitenneuladen, Bestellabschluss – greifen zwei Cart-Prozessoren in jede Warenkorb-Berechnung ein.
Die aus dem Angebot befüllten Positionen tragen eine Markierung mit dem verhandelten Preis. Der erste Prozessor setzt bei jeder Berechnung den Stückpreis auf den Angebotspreis oder, bei Mengenstaffeln, auf den passenden Staffelpreis und rechnet die Steuer korrekt nach; das gilt auch für reine Freitext-Positionen. Der zweite Prozessor überschreibt die berechneten Versandkosten der Lieferung mit den im Angebot festgehaltenen Werten.
Beide Prozessoren wirken nur auf Warenkörbe, die aus einer Angebots-Annahme stammen. Normale Warenkörbe bleiben unberührt.