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