Gutschrift - Standardmäßig werden 0 Produkte zurückgegeben

13

Mein typischer Anwendungsfall für Gutschriften sind Preisanpassungen (Versandanpassung, Preisnachlass usw.). Es ist selten, dass ich es für die Gesamtrendite verwende.

Es ist seltsam für mich, dass das Standardverhalten von Magento darin besteht, dass ein CreditMemo alle Produkte zurücksendet und den gesamten Versand erstattet. Selbst wenn es Rücksendungen gibt, ist es selten, dass der Versand auch erstattet wird.

Es wäre besser (und sicherer), wenn das CreditMemo standardmäßig 0 US-Dollar (keine Produkte erstattet und kein Versand erstattet) verwendet, sodass Administratoren ausdrücklich angeben, was erstattet wird (standardmäßig nichts). Andernfalls ist es beispielsweise zu einfach, eine Gutschrift zu erstellen, die den Versand erstattet, aber die gesamte Bestellung erstattet!

Gibt es eine Konfiguration oder Anpassung, die es unterstützen würde, ein CreditMemo standardmäßig auf $ 0 zu setzen?

MarkE
quelle
Keine Antwort bezüglich: Konfigurationslösung. Könnte dies über eine Erweiterung erreicht werden? Das heißt, die Anfangseinstellungen für die Gutschrift festlegen?
MarkE

Antworten:

2

Ich bin mir nicht sicher, ob Sie das erreichen können, was Sie wollen, ohne die Magento-Basisfunktionalität zu erweitern. Ich musste etwas Ähnliches tun und das habe ich getan: Zuerst habe ich sales_order_creditmemo_totals für automatische Gutschriften umgeschrieben (vielleicht brauchst du das nicht, damit du zum zweiten Teil gehen kannst):

In meinem Modul config.xml:

    <blocks>
        <adminhtml>
            <rewrite>
                ...
                <sales_order_creditmemo_totals>Bla_Customercredit_Block_Adminhtml_Sales_Creditmemo</sales_order_creditmemo_totals>
            </rewrite>
        </adminhtml>

        <sales>
            <rewrite>
                ...
                <order_creditmemo_totals>Bla_Customercredit_Block_Sales_Creditmemo</order_creditmemo_totals>
            </rewrite>
        </sales>
    </blocks>

Dann in Block / Adminhtml / Sales / Creditmemo.php

class Bla_Customercredit_Block_Adminhtml_Sales_Creditmemo extends Mage_Sales_Block_Order_Creditmemo_Totals 
{
    protected $_code = 'credit';

    protected function _initTotals() 
    {
        $helper = $this->getCreditsHelper();
        parent::_initTotals();
        $baseAmount = $this->getOrder()->getBaseCustomerCredit();

        $this->addTotal(
            new Varien_Object(
                array(
                    'code' => $this->_code,
                    'value' => -$creditAmount,
                    'base_value' => -$baseAmount,
                    'label' => $helper->__('Bla Credit'),
                )
            ), 
            'discount'
        );

        return $this;
    }
}

Wie Sie sehen, habe ich dies getan, um Gutschriften für Bestellungen mit Kundenguthaben zu erstellen. Daher habe ich auch sales_order_totals und sales_order_invoice_totals umgeschrieben, aber ich denke, Sie müssen dies nicht tun.

Zweitens: Ich habe auch eine eigene Vorlage hinzugefügt, um einige Funktionen während der manuellen Erstellung der Gutschrift hinzuzufügen, sodass der Administrator entscheiden kann, wie diese generiert werden sollen. Dafür habe ich eine items.phtml unter app / design / adminhtml / default / default / template / MODUL_NAME / order / creditmemo / create / items.phtml erstellt. In dieser phtml habe ich einige Eingabefelder hinzugefügt, um die Standardwerte zu ändern. Ich habe in meinem Modul auch einen Admin-Controller unter Company_CustomerCredit_Adminhtml_CustomerController hinzugefügt

require_once 'Mage/Adminhtml/controllers/CustomerController.php';
class Bla_Customercredit_Adminhtml_CustomerController extends Mage_Adminhtml_CustomerController
{
    /**
     * Overload to save customer credits, then call 
     * parent::saveAction() 
     */
    public function saveAction()
    {
        $data = $this->getRequest()->getPost();
        if($data && $data['bla_credits'])
        {
            if(!empty($data['bla_credits']['id']))
            {
                $model = Mage::getModel('credits/credits')->load($data['bla_credits']['id']);
            }
            else
            {
                unset($data['bla_credits']['id']);
                $model = Mage::getModel('credits/credits');
            }

            try
            {
                $model->setData($data['bla_credits']);
                $model->save();
            }
            catch(Exception $e)
            {
            }
        }

        parent::saveAction();
    }
}
Iloiacono
quelle
Vielen Dank, ich freue mich über Ihre Antwort und werde sehen, ob ich Ihre Lösung auf meine Anforderungen anwenden kann.
MarkE 20.08.15 um 16:48