Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Zuschlag auf Versandarten berechnen wie ot_payment

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Hallo zusammen,

    im Backend->Module->Zusammenfassung gibt es das Modul "ot_payment", mit dem man Rabatt und Zuschlag auf Zahlungsarten geben kann. Ich würde gerne das gleiche für Versandarten einstellen können.
    In den Shop Dateien habe ich unter includes->modules->order_total die Datei ot_payment.php gefunden. Diese habe ich kopiert und "ot_shipping_fee.php" genannt. Dasselbe habe ich mit "ot_payment.php" im Sprachordner lang->german->modules->order_total gemacht und die Datei "ot_shipping_fee.php" erstellt.

    Kann man nun im Modul "ot_shipping_fee" Anpassungen vornehmen um das umzusetzen? Hat das schon jemand umgesetzt, oder kann mir einen Denkanstoß geben? Oder gibt es vielleicht eine andere Lösung um auf bestimmte Versandarten einen Zuschlag zu berechnen?

    Hintergrund ist ein Shop in USA. Alle Selbstabholer sind nämlich verpflichtet die Steuer vom Bundesstaat zu zahlen, bei Selbstabholung.

    Shopversion ist 2.0.2.2

    Gruß

    Linkback: https://www.modified-shop.org/forum/index.php?topic=40850.0

    Firebird

    • Frisch an Board
    • Beiträge: 74
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #1 am: 24. Februar 2020, 16:08:16
    Hallo,

    mal ins blaue:

    im Warenkorb und im checkout eine if Formel unterbringen  (wenn versandart =  'selfpickup' dann + x% Warenwert)

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #2 am: 24. Februar 2020, 17:59:10
    Danke für den Denkanstoß.

    Ich denke wenn man das so lösen würde, wäre meiner Meinung nach CHECKOUT_CONFIRMATION die richtige Stelle, weil im Warenkorb noch keine Versandart ausgewählt wurde.

    In dieser Lösung sehe ich allerdings das Problem, dass der Zuschlag auch ausgewießen sein muss. Deswegen habe ich an ein ot_payment Modul gedacht.

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #3 am: 26. Februar 2020, 10:53:42
    Ich habe mich mal an die Idee von @Firebird ran gewagt. Dazu erweiterte ich die Funktion process() in includes/modules/order_total/ot_total.php um die Abfrage ob als Versandart selfpickup gewählt wurde.

    Code: PHP  [Auswählen]
    function process() {
            global $order, $xtPrice;
         
            if (in_array("selfpickup_selfpickup", $_SESSION['shipping'], true)) {
                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] != 0) {
                            $this->output[] = array('title' => $this->title_fee . ':',
                            'text' => '<b>' . $xtPrice->xtcFormat(($order->info['total']*1.08375), true) . '</b>',
                            'value' => $xtPrice->xtcFormat(($order->info['total']*1.08375), false));
                    }

                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0
                    && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 1) {
                            $this->output[] = array('title' => MODULE_ORDER_TOTAL_TOTAL_TITLE_NO_TAX_BRUTTO . ':',                          
                            'text' => '<b>' . $xtPrice->xtcFormat($order->info['tax'] + ($order->info['total']*1.08375), true) . '</b>',
                            'value' => $xtPrice->xtcFormat(($order->info['total']*1.08375) + $order->info['tax'], false));
                    }
                   
                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0
                    && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 0) {
                            $this->output[] = array('title' => MODULE_ORDER_TOTAL_TOTAL_TITLE_NO_TAX . ':',
                            'text' => '<b>' . $xtPrice->xtcFormat(($order->info['total']*1.08375), true) . '</b>',
                            'value' => $xtPrice->xtcFormat(($order->info['total']*1.08375), false));
                    }
            }
             
            else {
             
                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] != 0) {
                            $this->output[] = array('title' => $this->title . ':',
                            'text' => '<b>' . $xtPrice->xtcFormat($order->info['total'], true) . '</b>',
                            'value' => $xtPrice->xtcFormat($order->info['total'], false));
                    }

                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0
                    && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 1) {
                            $this->output[] = array('title' => MODULE_ORDER_TOTAL_TOTAL_TITLE_NO_TAX_BRUTTO . ':',                          
                            'text' => '<b>' . $xtPrice->xtcFormat($order->info['tax'] + $order->info['total'], true) . '</b>',
                            'value' => $xtPrice->xtcFormat($order->info['total'] + $order->info['tax'], false));
                    }
                   
                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0
                    && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 0) {
                            $this->output[] = array('title' => MODULE_ORDER_TOTAL_TOTAL_TITLE_NO_TAX . ':',
                            'text' => '<b>' . $xtPrice->xtcFormat($order->info['total'], true) . '</b>',
                            'value' => $xtPrice->xtcFormat($order->info['total'], false));
                    }
            }
    }
     

    Die entsprechende Sprachdatei wurde demnach auch um drei weitere Einträge ergänzt: MODULE_NAME_FEE.

    Wenn jetzt jemand per selfpickup bestellt und cash als Zahlungsmethode wählt, funktioniert die Lösung auf den ersten Blick richtig. In der E-Mail und der Shop Statistik wird der Preis entsprechend richtig eingetragen. Allerdings wenn man per PayPal bezahlt, wird der erhöhte Preis nicht an PayPal übergeben.
    Wo muss man etwas ändern damit PayPal den neuen Preis richtig übermittelt bekommt?

    Edit: Code formatiert

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #4 am: 27. Februar 2020, 09:19:53
    Ich habe den Code nochmal angepasst, damit kein Warning geloggt wird.
    Aus
    Code: PHP  [Auswählen]
    if (in_array("selfpickup_selfpickup", $_SESSION['shipping'], true)) {

    Wird
    Code: PHP  [Auswählen]
    if (is_array($_SESSION['shipping']) && in_array("selfpickup_selfpickup", $_SESSION['shipping'])) {

    Dennoch bestehet die Frage weiterhin, wie man den neuen Preis an PayPal übergeben kann?

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.225
    • Geschlecht:
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #5 am: 27. Februar 2020, 17:00:20
    Warum berechnest du nicht einfach Versandkosten ?

    Gruss Gerhard

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #6 am: 27. Februar 2020, 17:30:51
    Hallo GTB,

    danke für deine Antwort. Die Versandkosten sind abhängig vom Warenwert im Warenkorb. In diesem Fall sollten 8,375 % auf den Warenwert berechnet werden, aber nur wenn die Versandart Selbstabholung gewählt wurde.

    Kann man das in einem Versandmodul so einstellen?

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.225
    • Geschlecht:
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #7 am: 27. Februar 2020, 18:39:17
    Klar kann man das Modul umschreiben, dasss es genau so rechnet.

    Gruss Gerhard

    Hans Bambel

    • Mitglied
    • Beiträge: 118
    Re: Zuschlag auf Versandarten berechnen wie ot_payment
    Antwort #8 am: 28. Februar 2020, 10:53:53
    Danke für den Tipp!

    Ich habe mir includes/modules/shipping/selfpickup.php angesehen. Dort habe ich die Funktion
    Code: PHP  [Auswählen]
    function quote($method = '')
    gefunden.

    In dieser Funktion habe ich
    Code: PHP  [Auswählen]
    'cost'  => 0
    geändert zu

    Code: PHP  [Auswählen]
    'cost'  => (($_SESSION['cart']->show_total())*0.08375)

    Diese Lösung funktioniert soweit gut. Kann man das noch eleganter lösen?
    Managed Server
    3 Antworten
    3219 Aufrufe
    03. April 2011, 10:21:58 von Stef
    0 Antworten
    1364 Aufrufe
    01. Juni 2015, 19:06:51 von Lottemann
    6 Antworten
    2277 Aufrufe
    27. Oktober 2022, 19:52:14 von Eihops