Bei PayPal Erstattungen erzeugen in Magento automatisch Gutschriften
Problem
Durch die starke Integration von PayPal in Magento, ist es bei PayPal Standard als Zahlungsart leider nicht möglich die Erstattungen aus PayPal zu beeinflussen oder zu unterdrücken. Sobald man in PayPal eine Erstattung für eine Zahlung vollzieht - egal ob ganz oder nur teilweise - erhält der Magento Shop eine Rückmeldung von PayPal und es wird automatisch eine vollständige Gutschrift erzeugt.
Dieses Verhalten ist besonders dann ärgerlich, wenn der Kunde nur einzelne Produkte zurückgegeben hat und der Shop Betreiber nur eine Teilerstattung vorgenommen hat
Lösung
Leider ist dieses Verhalten jedoch nicht über eine einfache Anpassung der Magento Konfiguration veränderbar. Man muss hier wie folgt vorgehen:
- Erstellen Sie das Verzeichnis app/code/local/Mage/Sales/Model/Order in Ihrem Magento Verzeichnis, sofern es noch nicht existiert.
- Kopieren Sie die Datei app/code/core/Mage/Sales/Model/Order/Payment.php in das neue Verzeichnis - app/code/local/Mage/Sales/Model/Order/Payment.php
- Modifizieren Sie die neu erstellte Datei app/code/local/Mage/Sales/Model/Order/Payment.php wie folgt:
/** Disable PayPal Refund
*
$serviceModel = Mage::getModel('sales/service_order', $order);
if ($invoice) {
if ($invoice->getBaseTotalRefunded() > 0) {
$adjustment = array('adjustment_positive' => $amount);
} else {
$adjustment = array('adjustment_negative' => $baseGrandTotal - $amount);
}
$creditmemo = $serviceModel->prepareInvoiceCreditmemo($invoice, $adjustment);
if ($creditmemo) {
$totalRefunded = $invoice->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal();
$this->setShouldCloseParentTransaction($invoice->getBaseGrandTotal() <= $totalRefunded);
}
} else {
if ($order->getBaseTotalRefunded() > 0) {
$adjustment = array('adjustment_positive' => $amount);
} else {
$adjustment = array('adjustment_negative' => $baseGrandTotal - $amount);
}
$creditmemo = $serviceModel->prepareCreditmemo($adjustment);
if ($creditmemo) {
$totalRefunded = $order->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal();
$this->setShouldCloseParentTransaction($order->getBaseGrandTotal() <= $totalRefunded);
}
}
$creditmemo->setPaymentRefundDisallowed(true)
->setAutomaticallyCreated(true)
->register()
->addComment(Mage::helper('sales')->__('Credit memo has been created automatically'))
->save();
$this->_updateTotals(array(
'amount_refunded' => $creditmemo->getGrandTotal(),
'base_amount_refunded_online' => $amount
));
$this->setCreatedCreditmemo($creditmemo);
* End // Disable PayPal Refund
**/
PHP
Verwandte Artikel
-
Page:
-
Page:
-
Page:
-
Page:
-
Page: