Кредитовое авизо - по умолчанию возвращается 0 товаров

13

Мой типичный сценарий использования кредитового авизо - это корректировка цен (корректировка доставки, скидка и т.д.). Я редко использую его для полного возврата.

Мне странно, что стандартное поведение Magento заключается в том, что CreditMemo возвращает все продукты и возвращает всю доставку. Даже когда есть возвраты, доставка также редко возвращается.

Было бы лучше (и безопаснее), если значение CreditMemo по умолчанию равно $ 0 (продукты не возвращаются и доставка не возвращается), поэтому администраторы четко указывают, что возвращается (ничего по умолчанию). В противном случае, например, слишком легко создать кредитовое авизо, предназначенное для возврата стоимости доставки, но вернуть весь заказ!

Есть ли какая-либо конфигурация или настройка, которая будет поддерживать дефолт CreditMemo до $ 0?

MARKE
источник
Нет ответа re: конфигурационное решение. Может ли это быть достигнуто через расширение? То есть установить начальные настройки кредитового авизо?
MarkE

Ответы:

2

Не уверен, что вы можете достичь того, чего хотите, не расширяя базовые функциональные возможности magento. Мне пришлось сделать нечто подобное, и вот что я сделал: сначала я переписал sales_order_creditmemo_totals для автоматического creditmemos (возможно, вам это не нужно, поэтому вы можете перейти ко второй части):

В моем модуле 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>

Затем в блоке / 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;
    }
}

Как вы можете видеть, я сделал это, чтобы создать creditmemos для заказов с кредитом клиента, поэтому я также переписал sales_order_totals и sales_order_invoice_totals, но я думаю, что вам не нужно это делать.

Второе: я также добавил свой собственный шаблон, чтобы добавить некоторые функциональные возможности во время создания кредитной метки вручную, чтобы администратор мог решить, как его сгенерировать. Для этого я создал файл items.phtml в app / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml, в этом текстовом файле я добавил несколько полей ввода для изменения значений efault. Я также добавил в свой модуль в контроллере администратора под 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();
    }
}
lloiacono
источник
Спасибо, я ценю ваш ответ и посмотрю, смогу ли я применить ваше решение к моим требованиям.
MarkE