Nota de crédito - padrão para 0 produtos retornados


13

Meu caso de uso típico para nota de crédito são ajustes de preço (ajuste de remessa, desconto judicial, etc.). É raro que eu esteja usando para retorno total.

É estranho para mim que o comportamento padrão do Magento é que um CreditMemo esteja devolvendo todos os produtos e reembolsando todos os envios. Mesmo quando há devoluções, é raro o envio também ser reembolsado.

Seria melhor (e mais seguro) se o CreditMemo padronizasse US $ 0 (nenhum produto é reembolsado e nenhum envio é reembolsado), para que os administradores sejam explícitos sobre o que está sendo reembolsado (nada por padrão). Caso contrário, é muito fácil, por exemplo, criar uma nota de crédito destinada a reembolsar a remessa, mas reembolsar todo o pedido!

Existe alguma configuração ou personalização que suporte o CreditMemo a US $ 0?


Nenhuma resposta sobre: ​​solução de configuração. Isso poderia ser feito através de uma extensão? Ou seja, defina as configurações iniciais na nota de crédito?
27415 MarkE

Respostas:


2

Não tenho certeza se você pode conseguir o que deseja sem estender a funcionalidade básica do magento. Eu tive que fazer algo semelhante e foi o que fiz: Primeiro reescrevi sales_order_creditmemo_totals para notas de crédito automáticas (talvez você não precise disso, para poder ir para a segunda parte):

No meu 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>

Em seguida, em 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 você pode ver, fiz isso para criar notas de crédito para pedidos com crédito do cliente, também reescrevi sales_order_totals e sales_order_invoice_totals, mas acho que você não precisa fazer isso.

Segundo: também adicionei um modelo próprio para adicionar alguma funcionalidade durante a criação manual do creditmemo, para que o administrador possa decidir como gerá-lo. Para isso, criei um items.phtml em app / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml, neste phtml adicionei alguns campos de entrada para alterar os valores de efault. Também adicionei no meu módulo um controlador administrativo em 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();
    }
}

Obrigado, agradeço sua resposta e verei se posso aplicar sua solução aos meus requisitos.
Marke
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.