Magento Rechnung stornieren geht nicht

Als Shop Manager kann man sich ärgern. Man will eine Rechnung stornieren und der Button für "Erstattung" (Gutschrift) wird nicht angezeigt. Es gibt Fälle, da sperrt der Magento Lebenszyklus einer Bestellung den Ablauf.

Wenn Sie eine Magento Rechnung stornieren wollen, geht das nicht. Eine Gutschrift erstellen schon und damit die Rechnung aufheben. Was tun, wenn der Button "Erstattung" für eine Magento Gutschrift fehlt? Es könnten folgende Ursachen vorliegen.

  1. Keine Rechnung erstellt, daher keine Gutschrift möglich
  2. Fehlende Zahlung (oft bei PayPal od. Kreditkarten Extensions)
  3. Rechnung vorhanden aber die Werte fehlen in der Tabelle sales_flat_order
  4. Der interne State auf "new" mit Status "neu" oder kein angezeigter Status
  5. Bestellung wurd durch eine Zahlungsmethode gemacht, wo nur über die Rechnung der Button gezeigt wird

Ärgerlich ist es wenn für den Magento Lebenszyklus Werte in der Tabelle sales_flat_order fehlen, weil ein Prozessablauf hier nicht funktionierte.

Eine schnelle - aber auch riskante - Lösung ist diese manuell über ein MySQL Command nachzutragen.

1. Zuerst die Werte für die Bestellung holen

Tragen Sie bei entity_id=[ ] die entity_id der Bestellung ein. Alternativ könnte man auch den Parameter increment_id verwenden.

SELECT base_grand_total, base_shipping_amount, base_subtotal, base_tax_amount
 FROM sales_flat_order
WHERE entity_id=1;

// entity_id durch die Bestellungs Enity ID ersetzen

Als Ergebnis sollten Sie die Werte wie Gesamt, Zwischensumm usw. haben. Natürlich kann man das auch über den Shop Admin bekommen.

2. Die Werte in das zweite Command eintragen

Nun übertragen wir die Werte um mit dem SQL Command die fehlenden einzutragen.

UPDATE sales_flat_order SET 
base_discount_invoiced='0',
base_shipping_invoiced =' 4.15',
base_subtotal_invoiced =' 30.24',
base_tax_invoiced='6.5400',
base_total_due ='0',
base_total_invoiced ='40.93',
base_total_invoiced_cost =' 20.00',
base_total_paid =' 40.93',
discount_invoiced='0',
shipping_invoiced =' 4.15',
subtotal_invoiced =' 30.24',
tax_invoiced='6.54',
total_invoiced='6.54',
total_paid ='40.93',
total_due='0'
WHERE entity_id=1;

Alternativ könnte man das auch in einem MySQL Command machen mit einem Sub Select. Das könnte wie folgt aussehen

UPDATE sales_flat_order 
 SET base_total_invoiced=(SELECT base_grand_total FROM sales_flat_order WHERE entity_id=1)
WHERE entity_id=1

3. Im Magento Shop Admin

Nun die Bestellung neu laden. Eventuell ausloggen um die Session zu beenden. Nun sollte Magento den Button "Erstattung" oder "Gutschrift" nicht mehr sperren.

Anmerkung

Teilzahlungen, Rabatte o.ä. sind im Bsp. nicht berücksichtigt. Alles auf eigenen Gefahr.

Alternativ gibt es auch eine Lösung per PHP Magento Classes und Methoden, die sich jedoch nicht sofort erschließt. Die meisten Code Snippets laden zuerst das Object der Bestellung über

$order = Mage::getModel('sales/order')->loadByIncrementId($incrementId);

um dann über Methoden eine Rechnung zu erstellen. Über die Erstellung der Rechnung werden die Werte in die Tabelle sales_flat_order zu übertragen. Das funktioniert nur wenn noch keine Rechnung erstellt worden ist. In unserem Fall besteht aber die Rechnung aber es fehlen Werte in der Tabelle sales_flat_order um die Gutschrift zu erzeugen.

Es gibt hier zwei Szenarien:

1. Zahlungsmodul

Ein Zahlungsmodul gibt erst dann die Möglichkeit einer Gutschrift, wenn bezahlt wurde und in der Tabelle sales_flat_order total_paid, total_due usw. stimmen

2. Magento Lebenszyklus

Magento zeigt den Button Erstattung zur Gutschrift nur, wenn eine Rechnung vorhanden ist und in der Tabelle sales_flat_order die Felder *_invoiced Werte aufzeigen.

Weitere Infos