mivita/dev/2026-03-12/tasks.md
2026-04-10 17:15:27 +02:00

5 KiB

Korrekturen & Verbesserungen - 12.03.2026


1. Bug-Fix: Falsche Zahlungsbeträge bei Abo-Bestellungen

Datei: app/Cron/UserMakeOrder.php (Zeile 71)

Problem: Bei der automatischen Abo-Zahlungsausführung wurde subtotal_ws (Nettobetrag + Versand) statt total_shipping (Bruttobetrag + Versand) als Zahlungsbetrag an Payone gesendet. Dadurch wurde bei Kunden mit Umsatzsteuer nur der Nettobetrag eingezogen - die MwSt fehlte.

Fix:

// Vorher (falsch):
$amount = $this->shopping_order->subtotal_ws * 100;

// Nachher (korrekt):
$amount = $this->shopping_order->total_shipping * 100;

Auswirkung: Betrifft alle Abo-Bestellungen seit Go-Live, bei denen Umsatzsteuer anfällt. Bei Nettobeträgen (Drittländer, USt-ID hinterlegt) war der Betrag zufällig korrekt.


2. SysAdmin Tool: Abo-Bestellungen Zahlungsdifferenzen

Neue Dateien:

  • app/Services/SyS/AboOrdersOverview.php
  • resources/views/sys/tools/abo-orders-overview.blade.php

Geänderte Dateien:

  • app/Http/Controllers/SyS/SysController.php (neuer case abo_orders_overview)
  • resources/views/sys/index.blade.php (neuer Menüpunkt)

Beschreibung: Übersichtstool unter sysadmin/tool/abo_orders_overview zur Nachverfolgung der durch den Bug betroffenen Abo-Bestellungen. Zeigt pro Bestellung:

  • Netto+Versand (subtotal_ws) = was eingezogen wurde
  • MwSt (tax) = was gefehlt hat
  • Brutto+Versand (total_shipping) = was hätte eingezogen werden sollen
  • Differenz = fehlender Betrag (rot markiert)

Features:

  • Filter: Alle / Berater / Kunden (Button-Gruppe)
  • Summary-Karten: Gesamtanzahl, betroffene Bestellungen, Gesamtfehlbetrag
  • Betroffene Zeilen rot hervorgehoben

3. Bug-Fix: Abo-Einstellungen - Vergleichsoperator

Datei: app/Repositories/AboRepository.php (Zeile 66)

Problem: Bei der Reaktivierung eines pausierten Abos wurde statt eines Vergleichs (==) eine Zuweisung (=) verwendet. Dadurch wurde der Status immer auf 6 gesetzt, bevor er auf 2 geändert wurde.

Fix:

// Vorher (falsch - Zuweisung):
if ($this->model->status = 6)

// Nachher (korrekt - Vergleich):
if ($this->model->status == 6)

4. Abo-Liefertag: Validierung und Sperren

Datei: app/Repositories/AboRepository.php

Problem: Beim Ändern des Abo-Liefertags konnte ein Datum gewählt werden, das nur wenige Tage entfernt liegt. Da Pakete vorgepackt werden, muss ein Mindestabstand eingehalten werden.

Lösung: Zwei Klassenkonstanten steuern die Sperren:

private const LOCK_DAYS_CHANGE = 10;       // Liefertag-Änderung
private const LOCK_DAYS_PAUSE_CANCEL = 3;  // Pausieren/Kündigen

Regeln:

Aktion Sperre Beschreibung
Liefertag ändern < 10 Tage vor aktueller Ausführung error_change_locked - Pakete werden vorgepackt
Neuen Liefertag wählen Neues Datum < 10 Tage entfernt error_abo_interval_too_soon - Berechnung via setNextDate()
Abo pausieren < 3 Tage vor Ausführung error_pause_locked
Abo kündigen < 3 Tage vor Ausführung error_cancel_locked

Validierungslogik:

  1. Aktuelles next_date prüfen: Wenn < 10 Tage entfernt → komplett gesperrt
  2. Neues Datum berechnen via AboHelper::setNextDate() und prüfen ob >= 10 Tage entfernt
  3. Nach erfolgreichem Speichern: Orange Alert mit exaktem nächsten Ausführungsdatum

Beispiele (heute = 12. März):

Von Auf Berechnet Tage Ergebnis
5. 20. 20. März 8 blockiert
5. 25. 25. März 13 erlaubt
20. 10. 10. April ~29 erlaubt (nächster Monat)

5. Warnungen bei Abo-Erstellung (Bestellformular)

Geänderte Dateien:

  • app/Services/HTMLHelper.php (getAboDeliveryOptions)
  • resources/views/user/order/yard_view_form.blade.php
  • resources/views/portal/abo/_create_check.blade.php

Beschreibung: Beim Erstellen eines neuen Abos zeigt das Liefertag-Dropdown eine dynamische Warnung (orange) an, wenn die erste Abo-Ausführung weniger als 20 Tage entfernt ist. Die Warnung aktualisiert sich beim Wechsel des Liefertags.

Umsetzung:

  • HTMLHelper::getAboDeliveryOptions() gibt pro Option data-days und data-date Attribute aus
  • JavaScript im Formular prüft beim Ändern der Auswahl die Tage und zeigt/versteckt die Warnung

6. Neue Übersetzungen (DE/EN/ES)

Dateien: resources/lang/{de,en,es}/abo.php

Key Beschreibung
warning_next_date_soon Warnung: Nächste Ausführung < 20 Tage (Backend-Flash)
warning_next_date_soon_select Warnung: Nächste Ausführung < 20 Tage (Frontend-Select)
warning_next_date_info Info nach Speichern: Nächste Ausführung in X Tagen am Datum
error_change_locked Fehler: Änderung gesperrt (< 10 Tage)
error_abo_interval_too_soon Fehler: Neuer Liefertag zu nah (< 10 Tage)
error_cancel_locked Fehler: Kündigung gesperrt (< 3 Tage)
error_pause_locked Fehler: Pausierung gesperrt (< 3 Tage)