Commit graph

60 commits

Author SHA1 Message Date
671022a28d Abo: Kreditkarte aktualisieren (CRM, Portal, Berater-Link) + Admin-Abo-Löschung
- Karten-Update ohne Abbuchung via PAYONE creditcardcheck/pseudocardpan
  (AboPaymentMethodService, CardUpdateResult/CreditCardCheckData-DTOs)
- Eingabe nur durch Abo-Inhaber: CRM- und Portal-Formular + zeitlich
  begrenzter Berater→Kunde-Link (AboCardUpdateLink + Mail)
- Änderungshistorie in user_abo_card_changes, Anzeige im Admin-Abo-Detail
- Admin: Abo löschen (destroy) inkl. Test
- Portal-Fix: myOrderCreate wirft 404 statt TypeError bei ungültiger ID
- VIP-Sichtbarkeitstests für Einmalartikel-Fenster ergänzt
- Enthält bereits die Freeze-Guards für den Stripe-Notbetrieb (Folge-Commit)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 15:56:19 +00:00
63c36555a5 Widerruf: Gesetzliche Online-Widerrufsfunktion (Formular, Bestätigungsmail, Admin-Verwaltung)
- Öffentliches Widerrufsformular /widerruf mit Bestell-Lookup (throttled)
- Bestätigungsmail an Kunde + Weiterleitung an bestellungen@ (config app.withdrawal_mail)
- Admin-Übersicht/-Detail unter /admin/withdrawals inkl. Sidenav-Eintrag
- Widerruf-Button in Portal-Bestellansicht und Footer-Links
- Model OrderWithdrawal + Migration + Factory + Tests

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 15:56:02 +00:00
0660f4e0a0 Abo-Recovery: fehlgeschlagene Folgezahlung im Checkout nachholen
- Pay-now-Flow: bei fehlgeschlagenem Abo (Status 3) begleicht der Inhaber die
  offene Rechnung im Standard-Checkout mit frei waehlbarer, abo-faehiger Zahlart
  (nur eigenes Abo: Berater me-View + Kundenportal), payNow-Controller + Routen
- AboRecoveryCheckoutService baut die ShoppingInstance aus den Abo-Artikeln;
  neue Spalte shopping_orders.recovery_user_abo_id verknuepft Bestellung<->Abo
- Bei Erfolg: AboHelper::advanceAboAfterRecoveryPayment schreibt das Abo fort
  (Status->2, next_date) und uebernimmt die gewaehlte Zahlart als neues Token
  fuer kuenftige Abbuchungen
- Neue Pay-now-Fehlermail (AboPaymentFailedMail) ersetzt die generische
  Fehlermail im Abo-Cron; Link fuehrt auf die Abo-Detailseite (CRM bzw. Portal)
- Retry-/"extern erledigt"-Buttons nur noch fuer Admins; tote user/portal-
  Retry-Routen entfernt
- Checkout: Recovery-Hinweis statt "Abschluss des Abonnements", Lieferadresse
  vorbelegt, korrekter Zurueck-Link (Abo statt Shop)
- UserAbo::selfServiceDetailUrl zentralisiert die Abo-URL (Mail, Back-Links)
- Test-Command abo:test-recovery; Tests fuer payNow, Advance-Logik, Fehlermail

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 10:38:05 +00:00
ccc6f85809 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
5c11d48e6d Abo Einmalprodukte und Bestätigung abschließen
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-05 15:28:08 +00:00
34d8f60bbd User Statistik 2026-05-18 17:23:28 +02:00
a95c2b665b 14-04-2026 2026-04-14 18:07:45 +02:00
396d049439 10.April 2026 2026-04-10 17:15:27 +02:00
4a8f4b4abc 20-02-2026 2026-02-20 17:55:06 +01:00
a67740d6ef update 20.10.2025 2025-10-20 17:42:08 +02:00
8ccd81b770 Cocker Setup 2025-08-29 14:48:03 +02:00
Kevin Adametz
3b2253147b commit 08-2025 2025-08-12 18:01:59 +02:00
Kevin Adametz
824fa43e96 Updates to 03-2025 2025-04-01 10:36:47 +02:00
Kevin Adametz
7ec90d7e18 08 2024 2024-08-05 12:05:24 +02:00
Kevin Adametz
3a81b8a0f5 last changes since 6-2023 2023-07-03 10:07:08 +02:00
Kevin Adametz
da10f19fcb Free Shipping, Business Levels correction, Products Buying, Fonts 2023-01-25 12:37:29 +01:00
Kevin Adametz
37371ab31c Sammelbestellung von Extern 2022-07-18 18:07:31 +02:00
Kevin Adametz
6e5b002ec9 06 2022 2022-06-15 18:08:45 +02:00
Kevin Adametz
c56adb2c40 Update Framework, Invoices 2022-04-14 13:14:36 +02:00
Kevin Adametz
29dd8537eb API User Like 2021-12-25 02:59:15 +01:00
Kevin Adametz
2d9db4e52e Country Prices | Homeparty | Shop | Order 2021-08-27 18:53:12 +02:00
Kevin Adametz
2ffc33dcd6 Custom Price / Land / User Order Homeparty 2021-08-20 18:22:21 +02:00
Kevin Adametz
c5a109fdd6 Cookiebot / Pixel / Kategorien erweitern 2021-04-29 16:36:58 +02:00
Kevin Adametz
87f3fd3c7e Homeparty online, Cron SEPA 2021-04-23 14:54:09 +02:00
Kevin Adametz
4979c12d9a API work 2021-02-10 10:56:40 +01:00
Kevin Adametz
00f50b0db9 Bug Bestellungen 2020-12-20 18:04:59 +01:00
Kevin Adametz
e07be4a5f8 Homparty v1.0 2020-12-17 23:02:22 +01:00
Kevin Adametz
43c2d121d4 Homparty dev 2020-12-16 20:03:51 +01:00
Kevin Adametz
436f550117 + Homparty Part 1 2020-10-16 16:18:00 +02:00
Kevin Adametz
2160f7ddf5 Erweiterungen / Korrekturen Beraterbestellungen 2020-09-08 19:22:07 +02:00
Kevin Adametz
65edf8a8a7 Berater Bestellung / online 2020-08-24 18:17:02 +02:00
Kevin Adametz
a19f7700ea Next Member Shopping 2020-08-21 18:20:40 +02:00
Kevin Adametz
557a1c83a6 cart responsive, Checkout from cart 2020-08-14 18:32:41 +02:00
Kevin Adametz
01242b4690 User Order step1 2020-08-07 16:02:03 +02:00
Kevin Adametz
db76085333 MwSt 2020-07-01 13:21:35 +02:00
Kevin Adametz
4bd888e6d6 Customers Add+Edit, API WP 2020-06-12 14:46:51 +02:00
Kevin Adametz
37e00c0eb7 Kundenhoheit 2020-05-06 15:43:53 +02:00
Kevin Adametz
9f7b6561ba Registierung Korrekturen 2020-04-29 20:06:51 +02:00
Kevin Adametz
eec6c6f8f0 register, Grundpreis 2020-04-01 15:35:11 +02:00
Kevin Adametz
03402d0727 register step 2020-03-26 09:46:06 +01:00
Kevin Adametz
d16781edff Berater Register, Mitgliedschat live
https://dev.adametz.media:3000/cliquers/mivita.care/issues/3
2020-03-09 14:45:09 +01:00
Kevin Adametz
557146fe78 Membership 2020-03-07 19:44:58 +01:00
Kevin Adametz
82e5a0c345 membership register 2020-02-15 14:53:32 +01:00
Kevin Adametz
1e8d5a31cf 01 2020 2020-02-14 10:18:44 +01:00
Kevin Adametz
3c0ab0f627 SEPA Payment 2020-01-08 19:40:16 +01:00
Kevin Adametz
63afff13ad 23.11 Upload to live 2019-11-23 15:02:41 +01:00
Kevin Adametz
41da96ed43 last corrections for payments 2019-03-19 15:45:46 +01:00
Kevin Adametz
8ab92621f8 Payone, Shop, wizard 2019-03-04 17:05:44 +01:00
Kevin Adametz
c85ab3cb23 checkout, register, payment,
checkout correction,
register wizard,
payment packege,
2019-03-02 00:08:11 +01:00
Kevin Adametz
cb9082a8c6 payment Card first 4 payments inc. mails 2019-02-28 18:09:54 +01:00