XTCommerce – Bestellung stornieren
XTC-Shops und deren Forks haben keine generelle Stornofunktion für Bestellungen. Der Shop bietet hier nur die Möglichkeit nicht gewollte Bestellungen zu löschen. Dies führt aber dazu, daß man keine Möglichkeit hat alle Bestellvorgänge später nach zuweisen/zuvollziehen. Gerade beim Thema Finanzamt wird es kompliziert, wenn auf einmal in der Buchhaltung einfach Bestellungen wieder verschwinden.
Aus diesem Grund hab ich mal eine einfache Möglichkeit geschaffen Bestellungen im Shop zu stornieren, ohne das diese gleich komplett aus dem Shop verschwinden.
Als Basis für diese Funktion diente mir hier ein xtcModified-Shop in der Version 1.05
1. Neuen Bestellstaus im Admin anlegen “Storno”
(bei mir die order_status_id 4)
Um jetzt nochmal zu Kontrollieren welche ID mein neuer Bestellstatus erhalten hat, ohne dafür extra in der Datenbank nach zuschauen, einfach den neuen Status anklicken.
Jetz kann man in der Browserleiste die ID am Ende der URL ablesen.
2. admin/includes/functions/generel.php
suche:
xtc_db_query("delete from ".TABLE_ORDERS." where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("delete from ".TABLE_ORDERS_PRODUCTS." where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("delete from ".TABLE_ORDERS_PRODUCTS_ATTRIBUTES." where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("delete from ".TABLE_ORDERS_STATUS_HISTORY." where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("delete from ".TABLE_ORDERS_TOTAL." where orders_id = '".xtc_db_input($order_id)."'");
}
füge danach folgendes ein:
//BOF new storno-function for orders by grafikmaker.de
function xtc_storno_order($order_id, $restock = false) {
$order_status_id = 4; // ID vom OrderStatus = Storno
if ($restock == 'on') {
$order_query = xtc_db_query("select products_id, products_quantity from ".TABLE_ORDERS_PRODUCTS." where orders_id = '".xtc_db_input($order_id)."'");
while ($order = xtc_db_fetch_array($order_query)) {
xtc_db_query("update ".TABLE_PRODUCTS." set products_quantity = products_quantity + ".$order['products_quantity'].", products_ordered = products_ordered -
".$order['products_quantity']." where products_id = '".$order['products_id']."'");
}
}
xtc_db_query("update ".TABLE_ORDERS." set orders_status = ".$order_status_id." where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("update ".TABLE_ORDERS_TOTAL." set value = '0.0000' where orders_id = '".xtc_db_input($order_id)."'");
xtc_db_query("update ".TABLE_ORDERS_TOTAL." set text = '' where orders_id = '".xtc_db_input($order_id)."'");
}
//EOF new storno-function for orders by grafikmaker.de
3. admin/orders.php
suche:
xtc_remove_order($oID, $_POST['restock']);
ersetze es mit:
//BOF new storno-function for orders by grafikmaker.de //xtc_remove_order($oID, $_POST['restock']); xtc_storno_order($oID, $_POST['restock']); //EOF new storno-function for orders bygrafikmaker.de
So, wenn man im Admin nun bei der Bestellung auf Löschen klickt, wird diese nicht gelöscht sondern nur der Status auf Storno gestellt. Ebenso wird (wenn so im Admin eingestellt) der Lagerbestand wieder aktualisiert und auch die Umsatzstatistik sollte somit passen.
Ich würde mich über ausreichende Tests und Feedback von euch freuen.
Viel Spaß damit und weiterhin gute Geschäfte!




20. Apr 2011 um 11:21
Tolles Tutorial! nur ein kleiner Fehler ist mir ins Auge gesprungen:
admin/includes/functions/generell.php
Ist natürlich die general.php *g*
Kannst du gerne bei uns noch ins Forum schreiben mit Quellangabe deines Blogs.
Grüße
Torsten
20. Apr 2011 um 11:34
Hallo Torsten, danke für die Info. Hab das gleich mal im Beitrag geändert.
Werde das die Tage noch ins Forum bringen.
danke und Grüße
22. Apr 2011 um 23:56
Hast du noch weitere Informationen darueber ?
01. Mai 2011 um 13:28
Hallo Sebastian,
was für Informationen suchst du denn genau?
09. Mai 2011 um 15:39
Hallo,
ich habe die Änderungen bei mir eingebaut. Soweit, so gut.
Aber wenn ich auf ‘löschen’ drücke passiert nichts.
Ich kann selbst umstellen auf ‘Storniert’.
Aber der Artikel lässt sich nicht mehr vollkommen löschen?
Ist das beabsichtigt?
Danke, ansonsten finde ich den Ansatz sehr gut.
Tschüß
GE
09. Mai 2011 um 16:53
Wenn alles korrekt eingebaut wurde, dann sollte beim KLICK auf löschen der Status der Bestellung auf “storniert” wechseln.
Komplett aus dem System wird in dem Fall die Bestellung nicht mehr gelöscht. Genau dies ist auch beabsichtigt, da man somit einen lückenlosen Nachweis der Bestellungen hat und eine fortlaufende Bestellnummer ohne Lücken existiert. Wie oben im Artikel beschrieben, ist dies alles beim Thema Buchhaltung besonders wichtig.
Aber für Ideen bin ich immer offen ;)
17. Mai 2011 um 14:06
Hallo Thomas
ich hab das Storno Tutorial eingebaut, aber die Artikel werden dem Lager nicht gutgeschrieben?
17. Mai 2011 um 15:14
Hallo Klaus, hier sollte dann nochmal der Einbau Schritt für Schritt kontrolliert werden. Wechselt denn der Status der Bestellung auf “stoniert”?
18. Mai 2011 um 10:31
Hallo Thomas,
ja, der status wechselt auf storniert. Den code hab ich mit copy/paste eingefügt und die storno id auf 8 geändert.
Kontrolliert hab ich den Code auch schon mehrmals. Geht aber immer noch nicht.
Wenn ich die Bestellung storniere und der Status sich ändert, dann wird automatisch der Artikel dem Lagerbestand hinzugerechnet?
Gruß
Klaus
18. Mai 2011 um 17:52
Hallo Klaus, genau so funktioniert das. Du mußt nur beachten, daß du vorher den Haken setzt im Feld “Artikel dem Lagerbestand gutschreiben”!
20. Mai 2011 um 08:01
vielen dank Thomas, ich hab nur die Bestellung gelöscht. Dachte das geht dann von allein.
Gruß
Klaus
PS: tolles Tutorial
20. Mai 2011 um 08:14
Hallo Klaus, danke für die Rückmeldung und die netten Worte.
Viel Erfolg und Gute Geschäfte.
05. Jun 2011 um 18:57
Super – genau was ich gesucht hab!
Danke!!
einfach und gut beschrieben – ich liebe einfach Sachcen, die soo gut funktionieren .
Gruß
Ricardo
09. Jun 2011 um 08:53
Hallo Ricardo, danke für die lobenden Worte ;)
29. Jul 2011 um 23:59
Super!
Vielen Dank hat auch bei 3.04 SP2.1 wunderbar funktionert.
Gruß
Tobias
08. Aug 2011 um 09:35
Hallo Tobias, danke für das Feedback. Viel Erfolg mit deinem Projekt.
30. Jan 2012 um 22:47
Ist es auch möglich das der Kunde über die Änderrung, also die Stornierrung informiert wird. So wie wenn ich den Status ändere und dann ein der Kunde eine Email bekommt das von in Bearbeitung auf Storniert gestellt wurde?
31. Jan 2012 um 08:37
Hallo Christian,
man könnte diese Funktion auch individuell erweitern. Dazu müßten zum einen die Mailfunktion hinzu gefügt werden um den Kunden zu informieren und zum anderen muß eine extra Templatevorlage für diese Stornomail erstellt werden.
Je nachdem was du alles in der Mail an Infos zur Verfügung stellen willst, muß man nun schauen das all diese Infos in der Stornofunktion auch gesammelt werden um dem Kunden zu senden.
02. Apr 2012 um 13:55
Hi
gibt es auch die Möglichkeit – die Funktion als zusätzlichen Button zu integrieren! Also Storno neben Löschen?
grüße
02. Apr 2012 um 14:15
Hallo Mirko, klar könnte man dies auch dahin erweitern, jedoch ist der eigentliche Sinn der Stornofunktion damit nicht mehr gegeben.