Nota di credito: impostazione predefinita per 0 prodotti restituiti


13

Il mio caso d'uso tipico per la nota di credito è l'adeguamento dei prezzi (regolare la spedizione, lo sconto sulla cortesia, ecc.). È raro che lo sto usando per un ritorno totale.

È strano per me che il comportamento predefinito di Magento sia che un CreditMemo restituisca tutti i prodotti e rimborsi tutte le spedizioni. Anche quando ci sono resi, è raro che anche la spedizione venga rimborsata.

Sarebbe meglio (e più sicuro) se il valore predefinito di CreditMemo fosse $ 0 (nessun prodotto rimborsato e nessuna spedizione rimborsata), quindi gli amministratori sono espliciti su ciò che viene rimborsato (nulla per impostazione predefinita). Altrimenti è troppo facile, ad esempio, creare una nota di credito destinata a rimborsare la spedizione ma a rimborsare l'intero ordine!

Esiste una configurazione o personalizzazione che supporti il ​​default di un CreditMemo a $ 0?


Nessuna risposta in merito a: soluzione di configurazione. Questo potrebbe essere realizzato tramite un'estensione? Cioè, impostare le impostazioni iniziali sulla nota di credito?
MarkE

Risposte:


2

Non sono sicuro di poter ottenere ciò che desideri senza estendere la funzionalità di base di Magento. Ho dovuto fare qualcosa di simile e questo è quello che ho fatto: prima ho riscritto sales_order_creditmemo_totals per i creditmemos automatici (forse non ti serve, quindi puoi andare alla seconda parte):

Nel mio modulo 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>

Quindi 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;
    }
}

Come puoi vedere ho fatto questo per creare creditmemos per ordini con credito cliente, quindi ho anche riscritto sales_order_totals e sales_order_invoice_totals ma penso che non sia necessario farlo.

Secondo: ho anche aggiunto un mio modello per aggiungere alcune funzionalità durante la richiesta manuale di creditmemo, in modo che l'amministratore possa decidere come generarlo. Per questo ho creato un items.phtml in app / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml, in questo phtml ho aggiunto alcuni campi di input per modificare i valori predefiniti. Ho anche aggiunto il mio modulo in un controller di amministrazione in Company_CustomerCredit_Adminhtml_CustomerController

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();
    }
}

Grazie, apprezzo la tua risposta e vedrò se posso applicare la tua soluzione ai miei requisiti.
MarkE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.