ไม่แน่ใจว่าคุณสามารถทำสิ่งที่คุณต้องการได้โดยไม่ต้องเพิ่มฟังก์ชั่นพื้นฐานของคุณภาพเยี่ยม ฉันต้องทำสิ่งที่คล้ายกันและนี่คือสิ่งที่ฉันทำ:
ก่อนอื่นฉันเขียน 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>
จากนั้นใน 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;
}
}
อย่างที่คุณเห็นฉันทำสิ่งนี้เพื่อสร้าง creditmemos สำหรับคำสั่งซื้อด้วยเครดิตลูกค้าดังนั้นฉันจึงเขียน sales_order_totals และ sales_order_invoice_totals อีกครั้ง แต่ฉันคิดว่าคุณไม่จำเป็นต้องทำเช่นนี้
ที่สอง:
ฉันยังเพิ่มเทมเพลตของตัวเองเพื่อเพิ่มฟังก์ชันการทำงานบางอย่างระหว่างการสร้างเครดิตคู่มือดังนั้นผู้ดูแลระบบสามารถตัดสินใจได้ว่าจะสร้างมันอย่างไร สำหรับสิ่งที่ฉันสร้าง items.phtml ภายใต้แอพ / design / adminhtml / default / default / template / MODULE_NAME / order / creditmemo / create / items.phtml ใน 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();
}
}