Preis anlegen und bearbeiten¶
Preise werden im Dialog erfasst. Die Felder stammen aus der Feldverwaltung
(Tabelle prices), sind also pro Installation konfigurierbar — eigene
Zusatzfelder erscheinen automatisch mit.
Recht: price_edit
Aufruf¶
- Preis anlegen — Knopf oben rechts in der Preisliste
- Bearbeiten — Zeilenaktion in der Liste oder auf der Detailseite
- Zelle in der Preismatrix — legt an bzw. bearbeitet mit bereits gesetztem Gerätetyp und Preisgruppe
Formularfelder¶
| Feld | Pflicht | Beschreibung |
|---|---|---|
| Gerätetyp | Ja | Gerätetyp, für den der Preis gilt |
| Preisgruppe | Ja | Kundensegment, für das der Preis gilt |
| Preis | Ja | Betrag je Einheit |
| Kalibrierart | — | ISO, DAkkS, … (Auswahlliste, werkseitig ISO-/DAkkS-Kalibrierung). Im Normalfall leer: der Regelfall ist ein Zuschlag |
| Startdatum / Enddatum | — | Gültigkeitszeitraum; leer bedeutet unbefristet |
| Menge / Einheit | — | Bezugsmenge (auch Bruchmengen) und Mengeneinheit |
| MwSt. | Ja | Steuersatz in Prozent |
| Rabatt | — | Rabatt in Prozent |
| Preis Min / Preis Max | — | Preisspanne (0 bedeutet „nicht gesetzt") |
| Kosten | — | Interne Kosten |
Welche Felder im Formular erscheinen und welche Pflicht sind, steuert die
Feldverwaltung. Werkseitig sind Preis Min und Rabatt nur lesend
eingeblendet, entsprechend der V1-Vorgabe.
Regeln beim Speichern¶
- Eine Zeile je Kombination. Gerätetyp, Preisgruppe, Startdatum und Kalibrierart dürfen zusammen nur einmal vorkommen. Zwei Zeilen im selben Feld würden die Preisfindung zwingen, willkürlich eine davon zu wählen.
- Gültigkeitszeitraum plausibel. Das Enddatum darf nicht vor dem Startdatum liegen — ein solcher Zeitraum wäre nie gültig.
- Preisspanne plausibel. Sind Mindest- und Höchstpreis beide gesetzt, darf der Mindestpreis nicht darüber liegen.
- Beträge nicht negativ.
Bei Teiländerungen prüft das System gegen den gespeicherten Stand: Wer nur das Enddatum ändert, wird trotzdem gegen das bereits hinterlegte Startdatum geprüft.
Gültigkeitszeiträume¶
| Konstellation | Bedeutung |
|---|---|
| Kein Datum | Unbefristet gültig |
| Nur Startdatum | Ab diesem Tag unbefristet gültig |
| Start und Ende | Nur im Zeitraum gültig |
Gilt an einem Tag mehr als eine Zeile, gewinnt die spezifischere: eine datierte Zeile schlägt eine unbefristete, das spätere Startdatum schlägt das frühere. Das Ergebnis ist auf allen unterstützten Datenbanken identisch.
Enddaten aus Altbeständen: 31.12.2099
Wo eine V1-Maske ein Enddatum verlangte, das es fachlich nicht gibt, wurde oft ein Datum eingetragen, das nie eintritt — meist 31.12.2099. V2 liest das als „unbefristet": In Liste, Grid und gedrucktem Dokument steht dort nichts, und die Zeile rangiert richtig, nämlich als unbefristet.
In der Datenbank bleibt der Wert stehen, und das mit Absicht: V1 wählt
Preise für die Buchung über end_date >= heute und würde eine geleerte
Zeile nicht mehr finden. Wer V1 abgeschaltet hat und wirklich aufräumen
will, nutzt php artisan prices:clear-open-end-sentinel — ohne --apply
ist es nur ein Bericht.
Preisänderung als neue Gültigkeit
Für eine Preiserhöhung nicht den bestehenden Preis überschreiben, sondern ihn duplizieren, im Original ein Enddatum setzen und der Kopie ein Startdatum geben. Damit bleibt nachvollziehbar, welcher Preis wann galt.
Duplizieren¶
Die Zeilenaktion Duplizieren öffnet einen vorbefüllten Dialog. Die Kopie braucht mindestens eine Abweichung bei Preisgruppe, Startdatum oder Kalibrierart — sonst belegt sie dieselbe Kombination wie das Original und wird abgelehnt.
Über die API kann direkt mit Overrides kopiert werden:
Auswirkung auf bestehende Aufträge¶
Auftragspositionen übernehmen den Preis beim Anlegen als Kopie. Spätere Änderungen an der Preisliste wirken nicht rückwirkend. Im Auftrag holt der Knopf Preise aktualisieren die aktuellen Werte bewusst neu.
API¶
POST /api/v2/prices
{
"type_id": "…",
"category_id": "…",
"price": 85.00,
"tax": 19,
"unit": "EA",
"complexity": "ISO-Kalibrierung",
"start_date": "2026-01-01",
"end_date": null
}
PUT /api/v2/prices/{id}
Gerätetyp und Preisgruppe lassen sich auch nachträglich ändern, um eine falsch abgelegte Zeile umzuhängen.
Berechtigungen¶
Anlegen, Ändern und Duplizieren erfordern price_edit, Löschen price_delete.