Je ne sais pas si vous pouvez réaliser ce que vous voulez sans étendre les fonctionnalités de base de magento. J'ai dû faire quelque chose de similaire et voici ce que j'ai fait:
j'ai d' abord réécrit sales_order_creditmemo_totals pour les creditmemos automatiques (peut-être que vous n'en avez pas besoin, vous pouvez donc passer à la deuxième partie):
Dans mon module 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>
Puis dans 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;
}
}
Comme vous pouvez le voir, j'ai fait cela pour créer des démos de crédit pour les commandes avec crédit client, j'ai donc également réécrit sales_order_totals et sales_order_invoice_totals mais je pense que vous n'avez pas besoin de le faire.
Deuxièmement:
j'ai également ajouté mon propre modèle pour ajouter des fonctionnalités lors de la création manuelle de creditmemo, afin que l'administrateur puisse décider comment le générer. Pour cela, j'ai créé un items.phtml sous app / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml, dans ce phtml j'ai ajouté quelques champs de saisie pour changer les valeurs par défaut. J'ai également ajouté dans mon module un contrôleur d'administration sous 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();
}
}