diff --git a/modules/website_cashdesk.php b/modules/website_cashdesk.php index a6d3b7b..6602a34 100644 --- a/modules/website_cashdesk.php +++ b/modules/website_cashdesk.php @@ -67,6 +67,10 @@ class website_cashdesk { if (isset($_GET['order'])) { $this->layout_object->assign('order_number', $_GET['order']); } + // 27.09.2026: Erfolgsseite ohne Navigation, wie Warenkorb und Kasse der neuen Ansicht + if (!$this->alte_ansicht()) { + $this->layout_object->assign('site_type', 'full_width'); + } // Success-Template anzeigen - auch bei Reload! return $this->layout_object->_fetch('content_cash_desk/completed.tpl'); } @@ -362,12 +366,13 @@ class website_cashdesk { // "Bestellen" als denselben Vorgang erkennbar (siehe save_order()). $this->layout_object->assign('checkout_nonce', $this->checkout_nonce_holen()); - // 18.09.2026 -- Entwurf der neuen Kassenansicht zum Anschauen: /Kasse/?ansicht=neu - if (isset($_GET['ansicht']) && $_GET['ansicht'] === 'neu') { - $this->layout_object->assign('site_type', 'full_width'); // ohne Navigation, mehr Breite (Tom, 18.09.) - return $this->layout_object->_fetch('content_cash_desk_neu.tpl'); + // 27.09.2026 -- die neue Kasse (content_cash_desk_neu.tpl) ist Standard. + // Rueckfall auf das alte Template: /Kasse/?ansicht=alt (siehe alte_ansicht()). + if ($this->alte_ansicht()) { + return $this->layout_object->_fetch('content_cash_desk.tpl'); } - return $this->layout_object->_fetch('content_cash_desk.tpl'); + $this->layout_object->assign('site_type', 'full_width'); // ohne Navigation, mehr Breite (Tom, 18.09.) + return $this->layout_object->_fetch('content_cash_desk_neu.tpl'); } else if (isset($_GET['token']) && $_GET['token']) { return $this->change_order('paypal'); @@ -382,6 +387,18 @@ class website_cashdesk { // end run + /** + * Rueckfall auf die alte Kassen-/Warenkorbansicht (27.09.2026, Go-Live der neuen Ansicht): + * ?ansicht=alt schaltet fuer die Sitzung auf die alten Templates, ?ansicht=neu hebt das auf. + * Dieselbe Weiche steht in website_shoppingcart.php. + */ + private function alte_ansicht() { + if (isset($_GET['ansicht'])) { + $_SESSION['easyshop']['ansicht_alt'] = ($_GET['ansicht'] === 'alt') ? 1 : 0; + } + return !empty($_SESSION['easyshop']['ansicht_alt']); + } + // ------------------------------------------------------------ Express /** Start aus dem Warenkorb: /Kasse/?payment_express_start= */ @@ -886,8 +903,10 @@ class website_cashdesk { $this->has_gift_certificate = false; } + // 27.09.2026: Korbsumme 0 (Artikel ohne Preis) teilte hier durch null -> HTTP 500 in der Kasse + $sum_gross = (float)$this->shoppingcart_data['price_sum_gross']; foreach ($this->shoppingcart_data['tax_values'] as $key => $value) { - $this->shoppingcart_data['tax_values'][$key]['gift']['percent'] = $percent = round(($value['gross'] / $this->shoppingcart_data['price_sum_gross'] * 100), 2); + $this->shoppingcart_data['tax_values'][$key]['gift']['percent'] = $percent = $sum_gross > 0 ? round(($value['gross'] / $sum_gross * 100), 2) : 0; $this->shoppingcart_data['tax_values'][$key]['gift']['gross'] = $new_gross = $this->shoppingcart_data['price_sum_gross'] / 100 * $percent; $this->shoppingcart_data['tax_values'][$key]['gift']['net'] = $new_net = $new_gross / (100 + $key) * 100; $this->shoppingcart_data['tax_values'][$key]['gift']['vat'] = $new_gross - $new_net; diff --git a/modules/website_shoppingcart.php b/modules/website_shoppingcart.php index 9578784..a757909 100644 --- a/modules/website_shoppingcart.php +++ b/modules/website_shoppingcart.php @@ -66,8 +66,8 @@ class website_shoppingcart { } // Post-Redirect-Get fuer die neue Ansicht: nach Mengen-/Anmerkungsaenderung per GET neu // laden, sonst fragt ein Reload "Formular erneut senden" und schickt die Mengen doppelt. - if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['cart_goto']) && isset($_GET['ansicht']) && $_GET['ansicht'] === 'neu') { - header('Location: /Warenkorb/?ansicht=neu'); + if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['cart_goto']) && !$this->alte_ansicht()) { + header('Location: /Warenkorb/'); exit; } @@ -84,15 +84,30 @@ class website_shoppingcart { // Angezeigt, wenn der Anbieter Express kann und seine Zahlart aktiv ist. $this->layout_object->assign('express_providers', $this->express_providers()); - // 18.09.2026 -- Entwurf der neuen Warenkorb-Ansicht zum Anschauen: /Warenkorb/?ansicht=neu - if (isset($_GET['ansicht']) && $_GET['ansicht'] === 'neu') { - $this->layout_object->assign('site_type', 'full_width'); // ohne Navigation, mehr Breite (Tom, 18.09.) - return $this->layout_object->_fetch('content_shoppingcart_neu.tpl'); + // 27.09.2026 -- die neue Ansicht (content_shoppingcart_neu.tpl) ist Standard. + // Rueckfall auf das alte Template: /Warenkorb/?ansicht=alt (siehe alte_ansicht()). + if ($this->alte_ansicht()) { + return $this->layout_object->_fetch('content_shoppingcart.tpl'); } - return $this->layout_object->_fetch('content_shoppingcart.tpl'); + $this->layout_object->assign('site_type', 'full_width'); // ohne Navigation, mehr Breite (Tom, 18.09.) + return $this->layout_object->_fetch('content_shoppingcart_neu.tpl'); } // end show_shoppingcart + /** + * Rueckfall auf die alte Warenkorb-/Kassenansicht (27.09.2026, Go-Live der neuen Ansicht): + * ?ansicht=alt schaltet fuer die Sitzung auf die alten Templates, ?ansicht=neu hebt das auf. + * Haelt ueber die Formular-POSTs hinweg, weil die alten Templates keinen Parameter mitschicken. + * Dieselbe Weiche steht in website_cashdesk.php. + */ + private function alte_ansicht() { + if (isset($_GET['ansicht'])) { + $_SESSION['easyshop']['ansicht_alt'] = ($_GET['ansicht'] === 'alt') ? 1 : 0; + } + return !empty($_SESSION['easyshop']['ansicht_alt']); + } + + /** @return array */ private function express_providers() { $out = array(); diff --git a/web/intelectra_shop/themes/theme2/templates/content_cash_desk/completed.tpl b/web/intelectra_shop/themes/theme2/templates/content_cash_desk/completed.tpl index cc6a19a..a9f9904 100644 --- a/web/intelectra_shop/themes/theme2/templates/content_cash_desk/completed.tpl +++ b/web/intelectra_shop/themes/theme2/templates/content_cash_desk/completed.tpl @@ -1,21 +1,59 @@ - -
-
-

Bestellung erfolgreich übermittelt

-
+{* ===================================================================================== + content_cash_desk/completed.tpl (theme2) -- Erfolgsseite "Bestellung uebermittelt". + Seit 27.09.2026 im Stil der neuen Kasse (Schrittleiste, Karte). Ziel des Redirects + /Kasse/?success=1&order= aus website_cashdesk.php (Vorkasse/Rechnung direkt, + PayPal v2 nach dem Capture). Der Text kommt aus dem Backend + (Konfiguration cash_desk_order_completed, Platzhalter [#order_number]). + ===================================================================================== *} +{$ok_nr = (isset($order_number) && $order_number) ? $order_number : ''} +
+
+ 1 Warenkorb + 2 Kasse + 3 Fertig
-
-
- {$system_configuration.cash_desk_order_completed|replace:"[#order_number]":$order_number} +
+ +

Vielen Dank für Ihre Bestellung

+ {if $ok_nr} +
Bestellnummer {$ok_nr|escape}
+ {/if} + +
+ {$system_configuration.cash_desk_order_completed|replace:"[#order_number]":$ok_nr}
- -

- + {if $system_configuration.trusted_shop_buyer_protection == 1}
{include file='content_cash_desk/trusted_shop_buyer_protection.tpl'}
{/if} + +
+ +{literal} + +{/literal} diff --git a/web/intelectra_shop/themes/theme2/templates/content_cash_desk/payment_result.tpl b/web/intelectra_shop/themes/theme2/templates/content_cash_desk/payment_result.tpl new file mode 100644 index 0000000..ce2605a --- /dev/null +++ b/web/intelectra_shop/themes/theme2/templates/content_cash_desk/payment_result.tpl @@ -0,0 +1,81 @@ +{* ===================================================================================== + content_cash_desk/payment_result.tpl (theme2) -- Rueckmeldung der Zahlungsanbieter + (core/payments): Weiterleitung zum Anbieter, Abbruch, ausstehend, Fehler. + Seit 27.09.2026 im Stil der neuen Kasse; ueberlagert die Fassung in easyshop_advanced. + Variablen wie dort: call, provider_label, payment_link, message, order_number. + ===================================================================================== *} +{$pr_label = (isset($provider_label) && $provider_label) ? $provider_label : 'Zahlung'} +
+
+ 1 Warenkorb + 2 Kasse + 3 Fertig +
+ +
+ {if $call == 'payment_open'} + +

Weiter zu {$pr_label|escape}

+

Vielen Dank für Ihre Bestellung. Sie werden jetzt zur Bezahlung weitergeleitet.
+ Falls das nicht automatisch geschieht, klicken Sie bitte auf den Knopf.

+ + + + {elseif $call == 'payment_cancelled'} + +

Bezahlung abgebrochen

+

Ihr Warenkorb ist unverändert. Sie können die Bestellung jederzeit + mit einer anderen Zahlart abschließen.

+ + + {elseif $call == 'payment_pending'} + +

Zahlung wird geprüft

+

{$message}

+ {if $order_number}
Ihre Bestellnummer: {$order_number|escape}
{/if} + + + {else} + +

Das hat leider nicht geklappt

+

{$message}

+ {if $order_number}
Bestellnummer: {$order_number|escape}
{/if} + + {/if} +
+
+ +{literal} + +{/literal} diff --git a/web/intelectra_shop/themes/theme2/templates/content_cash_desk_neu.tpl b/web/intelectra_shop/themes/theme2/templates/content_cash_desk_neu.tpl index b263449..f88718d 100644 --- a/web/intelectra_shop/themes/theme2/templates/content_cash_desk_neu.tpl +++ b/web/intelectra_shop/themes/theme2/templates/content_cash_desk_neu.tpl @@ -1,7 +1,6 @@ {* ===================================================================================== - Kasse NEU (theme2) -- Entwurf 18.09.2026, liegt neben content_cash_desk.tpl. - Ansehen: /Kasse/?guest_order=1&ansicht=neu (Gast) bzw. /Kasse/?ansicht=neu (eingeloggt). - Weiche in website_cashdesk.php. + Kasse NEU (theme2) -- seit 27.09.2026 die Standardansicht von /Kasse/ (Gast: ?guest_order=1). + Rueckfall auf content_cash_desk.tpl: /Kasse/?ansicht=alt (Weiche in website_cashdesk.php). Nur Darstellung ist neu. Alle Feldnamen, IDs und Klassen, an denen Modul und content_cash_desk.js haengen, sind unveraendert: order_form, cashdesk_action, @@ -19,14 +18,14 @@ {$ck_guest = (isset($guest_order) && $guest_order == 1)} {$ck_express = (isset($express_active) && $express_active)} {$ck_merchant = (isset($customer) && $customer->group_id == 101)} -{if $ck_guest}{$ck_url = "/Kasse/?guest_order=1&ansicht=neu"}{else}{$ck_url = "/Kasse/?ansicht=neu"}{/if} +{if $ck_guest}{$ck_url = "/Kasse/?guest_order=1"}{else}{$ck_url = "/Kasse/"}{/if}

Kasse{if $ck_guest} als Gast{/if}

@@ -424,7 +423,8 @@ .ck-grid { display: flex; gap: 20px; align-items: flex-start; } .ck-main { flex: 1 1 auto; min-width: 0; } -.ck-side { flex: 0 0 280px; position: sticky; top: 16px; } +/* top = Hoehe des klebenden Theme-Kopfes (.firststicky, 89px) + Luft, sonst schiebt sich der Kasten unters Logo (Tom, 18.09.) */ +.ck-side { flex: 0 0 280px; position: sticky; top: 105px; } .ck-sec { border: 1px solid #e3e3e3; border-radius: 8px; padding: 16px 18px; margin-bottom: 14px; background: #fff; } .ck-h { display: flex; align-items: center; gap: 10px; font-size: 17px; font-weight: 700; margin: 0 0 12px; } diff --git a/web/intelectra_shop/themes/theme2/templates/content_shoppingcart_neu.tpl b/web/intelectra_shop/themes/theme2/templates/content_shoppingcart_neu.tpl index 1e42f4f..47f0784 100644 --- a/web/intelectra_shop/themes/theme2/templates/content_shoppingcart_neu.tpl +++ b/web/intelectra_shop/themes/theme2/templates/content_shoppingcart_neu.tpl @@ -1,6 +1,6 @@ {* ===================================================================================== - Warenkorb NEU (theme2) -- Entwurf 18.09.2026, liegt neben content_shoppingcart.tpl. - Aufruf zum Anschauen: /Warenkorb/?ansicht=neu (Weiche in website_shoppingcart.php). + Warenkorb NEU (theme2) -- seit 27.09.2026 die Standardansicht von /Warenkorb/. + Rueckfall auf content_shoppingcart.tpl: /Warenkorb/?ansicht=alt (Weiche in website_shoppingcart.php). Kein Tabellen-Markup mehr: jede Position ist eine Zeile (Bild, Name + Art.-Nr., Menge mit Stepper, Preis, Entfernen), rechts ein Kasten mit Zwischensumme, MwSt, Gesamt und @@ -22,7 +22,7 @@

Warenkorb{if $shoppingcart.items} {$shoppingcart.items|@count} {if $shoppingcart.items|@count == 1}Artikel{else}Artikel{/if}{/if}

{if $shoppingcart.items} -
+
@@ -130,7 +130,8 @@ .wk { container-type: inline-size; } .wk-grid { display: flex; gap: 20px; align-items: flex-start; } .wk-list { flex: 1 1 auto; min-width: 0; } -.wk-side { flex: 0 0 260px; position: sticky; top: 16px; } +/* top = Hoehe des klebenden Theme-Kopfes (.firststicky, 89px) + Luft, sonst schiebt sich der Kasten unters Logo (Tom, 18.09.) */ +.wk-side { flex: 0 0 260px; position: sticky; top: 105px; } .wk-box { background: #fafafa; border: 1px solid #e3e3e3; border-radius: 8px; padding: 16px; } /* Gewaehrleistungs-Label ueber dem Kasten: volle Breite der Spalte, Hoehe folgt dem Seitenverhaeltnis (Tom, 18.09.), Klick oeffnet das Label gross in neuem Tab */