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.
- Keine Rechnung erstellt, daher keine Gutschrift möglich
- Fehlende Zahlung (oft bei PayPal od. Kreditkarten Extensions)
- Rechnung vorhanden aber die Werte fehlen in der Tabelle sales_flat_order
- Der interne State auf "new" mit Status "neu" oder kein angezeigter Status
- 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.
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.