Commit Graph
58 Commits
Author SHA1 Message Date
Thomas Bartelt 4ef81ceec3 fix(warenkorb-neu): 'Weiter einkaufen' ueber das Formular (cart_goto=weiter), Auto-Speichern mit Wartezeit statt Wettlauf gegen den Klick, Doppel-Submit-Riegel; Anfuehrungszeichen 2026-09-27 09:55:16 +02:00
Thomas Bartelt 4c1ecb82a7 fix(kasse): Gast-/Express-Bestellung ohne Anrede verlor die Adresse -- CustomerAddress::validate() verlangt honorific; leer => Firma/Herr, Fehlschlag jetzt im Log 2026-09-27 00:36:03 +02:00
Thomas Bartelt 30c81cae9c fix(kasse-neu): schliessende Klammer stand hinter dem Kommentar -- Syntaxfehler, Bestellen-Knopf ohne Handler 2026-09-26 23:51:42 +02:00
Thomas Bartelt def156e1c2 feat(kasse, warenkorb): neue Ansicht ist Standard, Rueckfall ?ansicht=alt per Session
- Weiche in website_shoppingcart.php / website_cashdesk.php gedreht: content_*_neu.tpl
  ist Standard, ?ansicht=alt schaltet die Sitzung auf die alten Templates, ?ansicht=neu zurueck
- Parameter ansicht=neu aus Form-Actions und Links der neuen Templates entfernt
- Erfolgsseite completed.tpl und payment_result.tpl (theme2) im Stil der neuen Kasse
  (Schrittleiste 3 Fertig, Karte, Bestellnummer, Text aus cash_desk_order_completed)
- Erfolgsseite ohne Navigation (site_type full_width) wie Warenkorb/Kasse
- sticky Bestellkasten unter dem klebenden Theme-Kopf (top 105px statt 16px)
- fix: Korbsumme 0 teilte in manage_gift_certificate() durch null (HTTP 500)
2026-09-26 23:43:41 +02:00
Tom Bartelt 6cea66126a fix(kasse): HTTP 500 in der Gast-Kasse bei leerem Land
- Country::getShippingAreaById: Land/Gruppe als int, leeres Land -> false
  statt 'WHERE id = ' (SQL-Fatal, leere Seite, 16x seit 03.09.2026)
- manage_guest_order_address: Lieferadresse = Rechnungsadresse ohne Land
  -> Standardland fuer die Versandgebiet-Suche
2026-09-22 21:21:38 +02:00
Tom Bartelt 40b4774f0d fix(kundencenter): SQL-Fatal beim Adresse speichern (leerer parent_id)
- main_widget_menu_2: !empty statt isset, sonst 'parent_id in(10636,)'
- add_address: exit nach dem Location-Header
- get_this_url: leere Parameter nicht anhaengen
2026-09-22 20:45:53 +02:00
Tom Bartelt 85bc1d8c9a feat(payments): Block Zahlungsvorgang im Bestell-Editor, Storno-Felder bei automatischem Storno
- Bestell-Editor rechts: Zahlungsvorgang (Status, Grund, Transaktions-ID,
  Referenz, Betraege, Zeiten, Verlauf aus PG payment_log), anbieterneutral
  ueber payment_transactions (Payments\Overview, Log::forOrder)
- markCancelled() fuellt Stornodatum, Stornostatus, Stornogrund und
  Storno-Nachricht der Bestellung (nur leere Felder)
- neuer Stornogrund 'Zahlung beim Anbieter nicht abgeschlossen' (install.sql)
- reconcile: 404-Grund lesbar mit Alter des Vorgangs
2026-09-22 09:30:52 +02:00
Thomas Bartelt fe868641d2 style(warenkorb-neu, kasse-neu): offizielle Web-Fassung des Gewaehrleistungs-Labels, 'Gross anzeigen' oeffnet das PDF 2026-09-18 21:07:26 +02:00
Thomas Bartelt 0c04dc9acd style(kasse-neu): Label-Zeile mit 'Gross anzeigen' und EU-Link wie im Warenkorb 2026-09-18 21:03:30 +02:00
Thomas Bartelt f642ba7f06 style(warenkorb-neu): unter dem Label rechts Link zu europa.eu/youreurope/garantien 2026-09-18 21:03:15 +02:00
Thomas Bartelt 8f2b69827e style(warenkorb-neu): Knopf 'Mengen aktualisieren' raus, getippte Menge speichert bei Feldwechsel 2026-09-18 21:02:02 +02:00
Thomas Bartelt 985e7b2e57 style(warenkorb-neu): ab 900px Spaltenbreite Stepper und Summe inline in der Zeile 2026-09-18 21:01:10 +02:00
Thomas Bartelt 4c9c2c6a29 style(warenkorb-neu): Positionen und Anmerkung als weisse Karten mit Rand und runden Ecken 2026-09-18 20:59:54 +02:00
Thomas Bartelt 65ced5261f fix(kasse-neu): Fehlerbox ohne .prop('hidden') (jQuery 1.6) 2026-09-18 20:23:09 +02:00
Thomas Bartelt 57a101baa8 fix(kasse-neu): jQuery-1.6-kompatibel (.submit statt .on, kein .addBack) -- .on() brach die Init ab, Lieferadresse klappte nicht mehr auf 2026-09-18 20:22:54 +02:00
Thomas Bartelt b396c674c9 style(kasse-neu): Zurueck-Link nach oben in die Schrittleiste 2026-09-18 20:20:20 +02:00
Thomas Bartelt 215252f9ef style(kasse-neu, warenkorb-neu): 150px Luft am Ende vor dem Footer-Balken 2026-09-18 20:18:57 +02:00
Thomas Bartelt 6361249fd0 feat(warenkorb-neu, kasse-neu): ohne Navigation (site_type full_width), breiterer Kasten ab 900px Spalte 2026-09-18 20:17:19 +02:00
Thomas Bartelt fa836e7a10 feat(kasse-neu): Rechtliches mit Link zur jeweiligen Seite in neuem Fenster (B2B-Fassungen fuer Haendler) 2026-09-18 20:15:47 +02:00
Thomas Bartelt 15270289f5 style(kasse-neu): Gewaehrleistungs-Label ueber den Bestellkasten 2026-09-18 20:14:15 +02:00
Thomas Bartelt 33d859f454 fix(kasse-neu): Scrollposition ueber Reloads (Zahlart/Versand/Land/Gutschein) retten 2026-09-18 20:11:29 +02:00
Thomas Bartelt 49ac0f7e35 feat(kasse): Entwurf neue Kassenansicht content_cash_desk_neu.tpl (Schritte links, Bestellkasten rechts, Feldmarkierung statt Alert), Weiche ?ansicht=neu
Feldnamen, IDs und content_cash_desk.js unveraendert; nur Markup, CSS und Absende-Pruefung neu.
2026-09-18 20:09:05 +02:00
Thomas Bartelt 5c80931569 style(warenkorb-neu): Schnell hinzufuegen ueber den Warenkorb 2026-09-18 20:02:09 +02:00
Thomas Bartelt 94b924fa46 fix(warenkorb-neu): Scrollposition ueber den Submit retten, Post-Redirect-Get nach Mengenaenderung 2026-09-18 19:59:04 +02:00
Thomas Bartelt 7430556460 style(warenkorb-neu): Gewaehrleistungs-Label in voller Hoehe (width 100%, height auto) 2026-09-18 19:57:16 +02:00
Thomas Bartelt 0521b4399f feat(warenkorb-neu): Zeile zweistufig (Bild+Name / Stepper+Summe) fuer die 722px-Spalte, Gewaehrleistungs-Label ueber dem Summenkasten, Stapeln per Container-Query
Bild label-gewaehrleistung.webp liegt in media/images (gitignored), auf Dev und Live kopiert.
2026-09-18 19:55:37 +02:00
Thomas Bartelt ae7e400645 feat(warenkorb): Entwurf neue Ansicht content_shoppingcart_neu.tpl (Zeilen statt Tabelle, Stepper, Summenkasten), Weiche ?ansicht=neu; Alt-Text am Thumbnail entfernt 2026-09-18 19:44:08 +02:00
Thomas Bartelt dc57c725f6 feat(warenkorb): ein Formular fuer Mengen, Anmerkung und Weiterleitung; Anmerkung in der Kasse editierbar
Vorher: Anmerkung in eigenem Formular mit 'Text speichern', 'Zur Kasse' als reiner Link
(ungespeicherte Mengen/Anmerkung gingen verloren), in der Kasse readonly mit dem Hinweis
'kann nur im Warenkorb bearbeitet werden' -- ohne technischen Grund, die Kasse postete das
Feld ohnehin mit. Jetzt: cart_goto ('kasse' | 'express:<modul>') im Warenkorb-Modul,
Kasse uebernimmt POST customer_info in die Session, Texte auf Deutsch geglaettet.
2026-09-18 19:38:02 +02:00
Thomas Bartelt dec101f0cb fix(kasse): Express-Hinweis nennt den Anzeigenamen des Anbieters statt 'Paypal v2' 2026-09-18 07:53:29 +02:00
Thomas Bartelt f1aef6e575 fix(paypal_v2): Anzeigename 'PayPal' statt 'PayPal (v2)' -- stand in Kundenmeldungen 2026-09-18 07:53:18 +02:00
Thomas Bartelt 56f9a425c9 fix(registrierung): Anrede mit Leerfeld statt stiller Vorbelegung 'Firma', USt-ID bei Firma keine Pflicht mehr 2026-09-18 07:48:38 +02:00
Thomas Bartelt 6f0036b819 fix(kasse): Anrede beim Express-Kauf wirklich keine Pflicht -- Inline-JS-Pruefung und Label
Die Aenderung vom 14.09. nahm nur die CSS-Klasse, die Absende-Pruefung in
content_cash_desk.tpl verlangte die Anrede weiter (Alert 'vollstaendige Rechnungsadresse').
Im Express-Weg sind stattdessen Vor- und Nachname Pflicht.
2026-09-18 07:45:26 +02:00
Thomas Bartelt f65901060f feat(payments): Express-Start mit Versand und Zahlartaufschlag, PATCH nur bei Abweichung
PayPal Live verlangt nach jeder Betragsaenderung eine zweite Freigabe (422
PAYER_ACTION_REQUIRED). Die Kasse rechnet den Endbetrag jetzt beim Express-Start vor
(erste aktive Versandart des Gebiets, Gast = Gebiet 1, eingeloggt = Land/Gruppe), der
Provider vergleicht vor dem PATCH mit dem Stand bei PayPal und laesst ihn bei Gleichstand
aus. Webhooks ordnen ohne custom_id ueber die PayPal-Order-ID zu.
2026-09-18 07:40:27 +02:00
Thomas Bartelt c8fc7fba2f fix(payments): Express-Rueckkehr nach zweiter PayPal-Freigabe nimmt den normalen Rueckweg mit Capture
PayPal Live antwortet auf den Capture nach dem Betrags-PATCH mit 422 PAYER_ACTION_REQUIRED
(Sandbox nicht). Der Kunde gibt erneut frei und kehrt ueber ?payment_express= zurueck; dort
scheiterte onExpressReturn an custom_id != 'express' und zeigte eine Fehlerseite, waehrend
die Bestellung offen blieb (Live-Bestellung 312143).
2026-09-18 07:30:17 +02:00
Thomas Bartelt b8bc8aa8bf feat(backend): Zahlarten-Liste zeigt ID und Modul 2026-09-18 07:02:48 +02:00
Thomas Bartelt 7e28a5275c style(warenkorb): Express-Button mit eigener Klasse .ppbutton (PayPal-Optik, nicht .button) 2026-09-13 21:53:58 +02:00
Thomas Bartelt 5e6fcb0c3d feat(payments): Express-Adressen nur aus erlaubten Laendern (Setting express_countries, Standard DE) 2026-09-13 21:49:09 +02:00
Thomas Bartelt da54028a6e feat(payments): Anrede beim Express-Kauf keine Pflicht (Anbieter liefert keine) 2026-09-13 21:48:09 +02:00
Thomas Bartelt f33533b411 feat(payments): Express-Kauf aus dem Warenkorb (PayPal v2): Start ohne Bestellung, Adresse von PayPal, Kasse vorbelegt, Capture ohne zweiten Besuch 2026-09-13 21:44:46 +02:00
Thomas Bartelt e4b3f5a1ea chore(payments): Webhook-Rohmitschnitt nur bei logs/webhook_debug 2026-09-13 21:35:26 +02:00
Thomas Bartelt 67af646f2e fix(backend): Secret-Felder ohne type=password -- Browser-Autofill ueberschrieb die Webhook-ID 2026-09-13 21:34:07 +02:00
Thomas Bartelt 4ce09ac1b6 fix(paypal_v2): Webhook-Signatur lokal pruefen (Zertifikat, CRC32, SHA256withRSA); API-Verify nur als Rueckfall 2026-09-13 21:32:17 +02:00
Thomas Bartelt 4248f8c148 fix(paypal_v2): Webhook-Signatur mit rohem Body pruefen, Ablehnungsgrund protokollieren 2026-09-13 21:19:36 +02:00
Thomas Bartelt 83cf8b9808 chore(dev): display_errors aus -- Warnungen im Formular-HTML loesten WAF-403 in der Kasse aus 2026-09-13 21:00:58 +02:00
Thomas Bartelt 2698d518dc fix(payments): Registry laedt Kernklassen sofort (Fatal im Zahlart-Editor beim Speichern) 2026-09-13 20:33:44 +02:00
Thomas Bartelt 37017b25dd sync(dev): fehlende Admin-Theme-Assets vom Live-Stand ergaenzt (nichts ueberschrieben) 2026-09-13 19:58:55 +02:00
Thomas Bartelt 726f897c3d chore(dev): payment_webhook.php ohne Basic-Auth erreichbar 2026-09-13 19:52:45 +02:00
Thomas Bartelt 397fb5944a feat(payments): Anbieter-Gerüst core/payments mit PayPal Orders v2
- ProviderInterface/AbstractProvider: Vorgang mit Uhrzeit+Session (payment_transactions),
  Mail und Warenkorb erst nach Zahlung, idempotentes markPaid, Betragsabgleich,
  shop_event + PG payment_log
- Secrets verschluesselt (libsodium) in MySQL, Schluessel ausserhalb Docroot
- Cashdesk: ?payment_return/?payment_cancel, Pending-Riegel, zahlung_erst_spaeter()
- Backend Zahlart-Editor: Einstellungen speichern (war ohne Empfaenger), Secret-Felder
- payment_webhook.php (Standalone), cli.php (init-key, secret, reconcile, status)
- PayPal-v2-Blaupause vom Juli entfernt
2026-09-13 19:51:52 +02:00
Thomas Bartelt af81e8f63a sync: Zahlungsstrecke, PG-Events, Fatal-Log und PayPal-v2-Blaupause vom Live-Stand 2026-09-13
Deploy to Dev / deploy (push) Successful in 1s
2026-09-13 19:20:24 +02:00
Thomas Bartelt 20d55f77b8 wip: Mobile-Theme-Testphase und PHP-8.2-Guards (Stand Juni 2026) 2026-09-13 19:10:56 +02:00