Commit graph

184 commits

Author SHA1 Message Date
321e7959da Admin-Abos: Filterleiste und Textsuche nach PayOne-ID
Neue serverseitige, pro Admin persistente Filter auf /admin/abos:
- Status (echte Abo-Status aus UserAbo::$statusTypes, nur vorhandene Werte)
- Aktiv / Inaktiv
- Ist fuer (Berater/Kunde, is_for me/ot)
- Zahlung (Kreditkarte/PayPal ueber clearingtype cc/wlt)
- Startdatum (Monat + Jahr, optisch gruppiert; whereMonth/whereYear)
- Naechste Ausfuehrung (feste Liefertage 5/10/20/25 ueber abo_interval)
- Berater-Zuordnung (Member-Dropdown, Proportionen wie /admin/business/points)
- Reset-Button (korrigiert: bleibt auf admin_abos, Label ausserhalb des Buttons)

Layout in zwei Zeilen, damit nichts zusammengequetscht wird.

Textsuche der Tabelle: payone_userid via filterColumn suchbar gemacht
(addColumn-Spalten schliesst Yajra sonst von der globalen Suche aus).

Lang-Keys tables.month/year/all/inactive (de/en) ergaenzt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 09:54:50 +00:00
090debf1b4 Abo: Bestellung extern als erledigt markieren (ohne Rechnung/Inkasso)
Neue Admin-Funktion fuer angehaltene Abo-Bestellungen, die der Kunde
ausserhalb des Systems geliefert und verrechnet hat.

Aktion (AboExternalCompletionService):
- Punkte gutschreiben wie bei eingegangener Zahlung (SalesPointsVolume,
  idempotent gegen Doppelbuchung)
- UserAboOrder auf neuen gruenen Status 8 "extern erledigt"; paid bleibt false
- Bestellung: shipped=2 (Lieferung bestaetigt), keine Rechnung/kein Lieferschein
- Blockade aufheben: Abo zurueck auf status=2 (okay), aktiv, next_date neu,
  damit der naechste Termin regulaer laeuft
- wie bei regulaerer Ausfuehrung: IncentiveTracker + AboOneTimeService-Purge

Einstiegspunkte: Button + Bestaetigungs-Modal auf der Kunden-Bestelldetailseite
(SalesController) und auf der Abo-Detailseite (Admin\AboController@externDone,
Route admin_abos_extern_done). Status 8 (gruen) in UserAbo/UserAboOrder, Labels
de/en.

Tests: tests/Feature/AboExternalCompletionTest (Happy Path, Idempotenz,
bezahlt-/Nicht-Abo-Guards, Abo-Detail-Einstieg) - 5 gruen.

Zusaetzlich: docs/2026-06-11-test-suite-vorbestehende-fehler.md - Diagnose der
93 vorbestehenden (von master geerbten) Test-Suite-Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 08:11:45 +00:00
8593dbe65d Payment Phase R: PAYONE-Integration entflechten (R1–R7 + Review)
Strangler-Refactoring der PAYONE-Zahlungslogik in eine testbare
Service-Schicht, ohne Verhalten in Checkout/Cron/IPN zu ändern.

Neue Services (app/Services/Payment/Payone):
- PayonePaymentService (+ PayonePaymentResult-DTO) für CC-/SEPA-Check
  und Abo-Abbuchung
- PayoneRequestBuilder, PaymentMethodResolver, PayoneMethodConfig
- PayoneTransactionRecorder: zentrale PaymentTransaction-Erstellung
  (API-Response, Invoice, Webhook) inkl. PCI-Redaction (cardpan/cardcvc2)
- PayoneWebhookHandler (+ PayoneWebhookResult): IPN/TSOK-Logik aus
  Api\PayoneController; response('TSOK') statt echo/exit
- PayoneTransportException + Handler-Mapping (403) statt abort() im Service

Hotfixes (R1): var_dump/exit & bare exit() entfernt, Log-Redaction.

Security (R-Review):
- PAYONE_KEY_HASH (MD5-Hash, kein Klartext) mit Boot-Hard-Fail; schließt
  zugleich die ''-Webhook-Bypass-Lücke. Artisan-Command payone:hash-key
  (verdeckte Eingabe, optional --write) zur Hash-Erzeugung.
- Webhook: txaction Pflichtfeld, mode-Fallback auf payment->mode.

Pay\PayoneController ist @deprecated-Fassade (614 → 328 Zeilen),
delegiert an Services via Container-Singleton.

Migration: fehlende Spalte shopping_payments.carddata nachgezogen.

Tests: 47 grün (PayonePaymentService, Recorder, Webhook, Resolver,
TransportException, hash-key). End-to-End im Test-System verifiziert
(siehe dev/2026-06-09-payments).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 13:42:45 +00:00
ee04146217 Abo Einmalprodukte: Phase 4 - Ausfuehrung, Purge & User-Retry
- UserMakeOrder: bestaetigte Einmal-Artikel in den Yard, is_abo_addon
  auf ShoppingOrderItem; amount bleibt reiner Abo-Betrag (Reihenfolge)
- AboOneTimeService::purgeAfterExecution: loescht alle Einmal-Artikel
  und rechnet Comp-Produkte neu - nur im Erfolgszweig (Cron + Retry)
- User-Retry in Sales Center und Portal mit Berechtigungspruefung,
  gemeinsames Confirm-Modal; Admin-Retry unveraendert
- Tests: AboMakeOrderOneTimeTest, AboUserRetryTest; Plan-Doku Phase 4

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 15:32:27 +00:00
8288ea59ac Abo Einmalprodukte: Review-Gate (VIP), Verbindlichkeit & Summen-Layout
- Live-Review-Gate: Einmalprodukte nur fuer VIP im Sales Center sichtbar,
  Portal ausgeblendet (AboHelper::isOneTimeFeatureVisible + Gates in Controllern)
- Nur verbindlich bestaetigte Einmal-Artikel fliessen in die Lieferung;
  Service-Helfer confirmedItems/pendingItems/pendingGross
- Footer-Layout der Einmalprodukt-Liste: bestaetigte Summe + Gesamtbetrag,
  Trennstrich, offener Betrag und neue Gesamtsumme (dunkelgruen)
- Uebersetzungen DE/EN/ES/FR (onetime_new_total u.a.), Tests angepasst/ergaenzt

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 14:59:22 +00:00
2269ce031f Abo Einmalprodukte und Bestätigung abschließen
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-05 15:28:08 +00:00
2bdc9ada3c 27-05-2026 DHL Modul v2.1 / Optimierung tracking 2026-05-27 18:51:23 +02:00
036595be94 27-05-2026 Update DHL Modul v2.0 2026-05-27 13:40:38 +00:00
53bdba33cd User Statistik 2026-05-18 17:23:28 +02:00
70240d2b6a 13-05-2026 implementation FR 2026-05-13 17:33:52 +02:00
245c281541 Steuerberater Modul tax 2026-05-08 15:34:57 +02:00
0f82fea88a 14-04-2026 2026-04-14 18:07:45 +02:00
f58c709945 10.April 2026 2026-04-10 17:15:27 +02:00
a00c42e770 20-02-2026 2026-02-20 17:55:06 +01:00
a8b395e20d 23-01-2026 2026-01-23 17:35:23 +01:00
a939cd51ef update 20.10.2025 2025-10-20 17:42:08 +02:00
8c11130b5d Cocker Setup 2025-08-29 14:48:03 +02:00
Kevin Adametz
8fdaa0ba1d DHL Modul v0.5 Shipping Label ok 2025-08-22 18:18:26 +02:00
Kevin Adametz
480fdc65ed commit 08-2025 2025-08-12 18:01:59 +02:00
Kevin Adametz
9ae662f63e Updates to 03-2025 2025-04-01 10:36:47 +02:00
Kevin Adametz
bfa3bb1df4 08 2024 2024-08-05 12:05:24 +02:00
Kevin Adametz
04d677d37a last changes since 6-2023 2023-07-03 10:07:08 +02:00
Kevin Adametz
0341c9c189 Free Shipping, Business Levels correction, Products Buying, Fonts 2023-01-25 12:37:29 +01:00
Kevin Adametz
3f2fbd6d5b #51 Festschreiben der Points, Gutschriftenmodul 2022-07-29 18:18:05 +02:00
Kevin Adametz
dfd049aaa9 #51 2 Business Points edit / add, user dashboard 2022-07-22 13:43:24 +02:00
Kevin Adametz
263cf93a1e #53, #52, #51 change Points 2022-07-21 10:37:34 +02:00
Kevin Adametz
582ca8299d Sammelbestellung von Extern 2022-07-18 18:07:31 +02:00
Kevin Adametz
d01b4bd560 API Shopping Order backend 2022-07-15 21:21:56 +02:00
Kevin Adametz
7a040c3e19 06 2022 2022-06-15 18:08:45 +02:00
Kevin Adametz
9b0b5feb7e Update Framework, Invoices 2022-04-14 13:14:36 +02:00
Kevin Adametz
cc5c147c27 API User Like 2021-12-25 02:59:15 +01:00
Kevin Adametz
80e6540f73 Header Shop bug 2021-09-15 19:09:49 +02:00
Kevin Adametz
39d1e93416 Country Prices | Homeparty | Shop | Order 2021-08-27 18:53:12 +02:00
Kevin Adametz
51d81d8ec6 Custom Price / Land / User Order Homeparty 2021-08-20 18:22:21 +02:00
Kevin Adametz
d46824a4ac Lieferland UST CH, Reverse Charge 2021-08-03 16:00:01 +02:00
Kevin Adametz
351a8f763c Categories, Netto Homeparty 2021-06-18 15:02:34 +02:00
Kevin Adametz
7d1ee844eb Cookiebot / Pixel / Kategorien erweitern 2021-04-29 16:36:58 +02:00
Kevin Adametz
36872100c6 Homeparty online, Cron SEPA 2021-04-23 14:54:09 +02:00
Kevin Adametz
13fb2cfe98 API work 2021-02-10 10:56:40 +01:00
Kevin Adametz
32595ab5a1 Bug Bestellungen 2020-12-20 18:04:59 +01:00
Kevin Adametz
c73299e52e Homparty v1.0 2020-12-17 23:02:22 +01:00
Kevin Adametz
ac0d5b781e Homparty dev 2020-12-16 20:03:51 +01:00
Kevin Adametz
9252094a04 + Homparty Part 1 2020-10-16 16:18:00 +02:00
Kevin Adametz
74923859d1 Berater bestellungen kleine Änderungen 2020-09-15 17:46:39 +02:00
Kevin Adametz
c4ed6b39db Erweiterungen / Korrekturen Beraterbestellungen 2020-09-08 19:22:07 +02:00
Kevin Adametz
ecc71c616f Berater Bestellung / online 2020-08-24 18:17:02 +02:00
Kevin Adametz
16fe2fa363 Next Member Shopping 2020-08-21 18:20:40 +02:00
Kevin Adametz
fb27009339 cart responsive, Checkout from cart 2020-08-14 18:32:41 +02:00
Kevin Adametz
bde1095014 Berater Bestellungen 2020-08-12 19:21:19 +02:00
Kevin Adametz
a5db985ae8 User Order step1 2020-08-07 16:02:03 +02:00