Nota de crédito: el valor predeterminado es 0 productos devueltos


13

Mi caso de uso típico para la nota de crédito es el ajuste de precios (ajuste de envío, descuento de cortesía, etc.). Es raro que lo esté usando para obtener un rendimiento total.

Es extraño para mí que el comportamiento predeterminado de Magento sea que CreditMemo devuelva todos los productos y reembolse todos los envíos. Incluso cuando hay devoluciones, es raro que el envío también sea reembolsado.

Sería mejor (y más seguro) si CreditMemo tiene un valor predeterminado de $ 0 (no se reembolsan los productos y no se reembolsa el envío) para que los administradores sean explícitos sobre lo que se reembolsará (nada por defecto). De lo contrario, es demasiado fácil, por ejemplo, crear una nota de crédito destinada a reembolsar el envío, ¡pero reembolsará todo el pedido!

¿Hay alguna configuración, o personalización, que admitiría el incumplimiento de un CreditMemo a $ 0?


Sin respuesta re: solución de configuración. ¿Se podría lograr esto a través de una extensión? Es decir, establecer la configuración inicial en la nota de crédito?
MarkE

Respuestas:


2

No estoy seguro si puede lograr lo que quiere sin extender la funcionalidad básica de magento. Tuve que hacer algo similar y esto es lo que hice: primero reescribí sales_order_creditmemo_totals para los creditmemos automáticos (tal vez no necesites esto, así que puedes pasar a la segunda parte):

En mi módulo 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>

Luego en 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;
    }
}

Como puede ver, hice esto para crear notas de crédito para pedidos con crédito de cliente, por lo que también reescribí sales_order_totals y sales_order_invoice_totals, pero creo que no necesita hacer esto.

Segundo: también agregué mi propia plantilla para agregar alguna funcionalidad durante la creación manual de creditmemo, para que el administrador pueda decidir cómo generarla. Para eso, creé un items.phtml en app / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml, en este phtml agregué algunos campos de entrada para cambiar los valores predeterminados. También agregué mi módulo en un controlador de administración en 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();
    }
}

Gracias, agradezco su respuesta y veré si puedo aplicar su solución a mis requisitos.
MarkE
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.