Bestellstatus anpassen bei Bestellwert von 0,00Euro - für 100% Rabatte

Thema wurde von AHeinz, 11. Juni 2012 erstellt.

  1. AHeinz

    AHeinz Mitglied

    Registriert seit:
    14. März 2012
    Beiträge:
    10
    Danke erhalten:
    0
    Danke vergeben:
    5
    #1 AHeinz, 11. Juni 2012
    Zuletzt bearbeitet: 12. Juni 2012
    Wo PHP-Code einfügen? Bestellstatus anpassen nach Checkout mit Coupon

    Hallo,

    Ich habe einen Rabatt-Coupon von 100% auf ein bestimmtes digitales Produkt (Downloadartikel) erstellt. Wenn der Kunde dies allein in seinen Warenkorb legt und den Coupon-Code eingibt, 'zahlt' er 0,00Euro.

    Der Bestellstatus bleibt aber bei "Offen", somit müsste ich manuell den Status ändern was ja nicht der Sinn der Sache ist. Der Sinn ist, dass der Kunde ein kostenloses Produkt erhält, es aber über den normalen Checkout Prozess erhalten soll.

    Ich habe nun in der Datenbank die entsprechenden Tabellen und Werte gefunden und frage nun das Forum, (sorfern der Code so stimmt) wo ist die beste Stelle in den Shop-Dateien um diesen Code einzufügen.

    PHP:
    $statement “IF ((SELECT class FROM orders_total WHERE orders_id=  ”$orders_id”)= ‘ot_total’ 
    AND (SELECT value FROM orders_total WHERE  orders_id=”$orders_id” )=’0.0000’
     
    )
    BEGIN 
     UPDATE orders SET order_status
    =100 WHERE orders_id=”$orders_id”
     END”
     
     mysql_query
    ($statement);
    Übersetzt heißt das: Es soll für die aktuelle Checkout-Nummer (orders_id) geschaut werden, OB der Gesamtwert der Bestellung (ot_total) 0,00 Euro ist. Wenn das so ist, soll in der Tabelle, die die Bestellungen verwaltet der Bestellstatus für diese Bestellung entsprechend angepasst werden. Bei mir 100=Download aktiviert.

    In welcher Datei muss man dies einfügen? Reicht es in einer Datei?
     
  2. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.984
    Danke erhalten:
    468
    Danke vergeben:
    369
    Eine Möglichkeit wäre application_top.php in "/html/admin/includes", dann wird das aber relativ häufig abgearbeitet.
    Vielleicht in die orders.php, die Dir die Bestellungen als Liste anzeigt, dann löst Du das sozusagen unmittelbar vor der Ansicht manuell aus.
     
  3. AHeinz

    AHeinz Mitglied

    Registriert seit:
    14. März 2012
    Beiträge:
    10
    Danke erhalten:
    0
    Danke vergeben:
    5
    Ich habe jetzt folgenden Code benutzt, nachdem ich mir bestehenden Code angeschaut habe:

    PHP:
    $statementrabatt "IF ((SELECT class FROM ".TABLE_ORDERS_TOTAL." WHERE orders_id= 
    '"
    .$_SESSION['orders_id']."')= 'ot_total' AND (SELECT value FROM ".TABLE_ORDERS_TOTAL." WHERE 
    orders_id='"
    .$_SESSION['orders_id']."' )='0.0000')
    THEN
    UPDATE "
    .TABLE_ORDERS." SET order_status='100' WHERE orders_id='".$_SESSION['orders_id']."'
    END IF"
    ;

    xtc_db_query($statementrabatt);
    Ich bekomme trotzdem immer einen Fehler. Egal ob die Tables als ".TABLE_ORDERS." oder orders angebe - egal ob ich die orders_id mit '".$_SESSION['orders_id']."' oder mit '".$insert_id."'" angebe.

    Ich habe um es zu vereinfachen mal NUR folgenden Code probiert:
    PHP:
     xtc_db_query("UPDATE ".TABLE_ORDERS." SET order_status= '100' WHERE orders_id='".$insert_id."'");
    Ich bekomme trotzdem immer einen SQL-Error:

    WARNING(512): "SQL Error" in /inc/xtc_db_error.inc.php:33
    Backtrace: #0 trigger_error called at /inc/xtc_db_error.inc.php:33]
    #1 xtc_db_error called at [/inc/xtc_db_query.inc.php:68]
    #2 xtc_db_query called at [/checkout_process.php:506]

    Ich habe den Code bereits in verschiedenen Dateien ausprobiert. Unter anderem: checkout_process.php und checkout_success.php

    Hat jemand eine Ahnung was ich falsch mache? Wieso will die Datei auch meine einfache UPDATE Anweisung nicht ausführen??
     
  4. Sven (Sky-PC)

    Sven (Sky-PC) Erfahrener Benutzer

    Registriert seit:
    27. September 2013
    Beiträge:
    49
    Danke erhalten:
    15
    Danke vergeben:
    9
    #4 Sven (Sky-PC), 28. März 2014
    Zuletzt bearbeitet: 4. April 2014
    Okay, altes Thema, aber ich stand gerade vor dem gleichen Problem. Meine einfache Lösung auf die schnelle (kann man natürlich auch alles schöner lösen, später vielleicht):

    Softwareversion ist 2.0.14.4
    In der checkout_process.php wird die benötigte Abfrage, ob der Warenkorbbetrag 0 ist eh schon durchgeführt, da bei diesen Bestellungen keine Rechnungsadresse hinterlegt wird. Hier einfach in dem bestehenden SQL-Array in Zeile 241 (nach // free gift, no paymentadress) die Stelle 'orders_status' => $tmp_status, in 'orders_status' => '100' abändern, oder welche order_status-ID man auch immer vergeben möchte. In der Tabelle orders_status kann man diese nachsehen. Bei mir ist es z.B. 152 für 'Zahlung erhalten', damit die Downloads direkt automatisch freigegeben werden. Aber das hängt ja ganz von eurer eigenen Konfiguration ab.