magento 添加Creditmemo记录
来源:互联网 发布:sql server rowguid 编辑:程序博客网 时间:2024/05/22 15:03
当refund发生在线下,需要用程序加creditmemo时,如下代码可供参考
1.可以调用sales/order_creditmemo_api的create()方法来生成creditmemo记录,
function addCreditMemo($targetMagentoGoServiceId, $orderId, $commentText) { $product = Mage::getModel('catalog/product')->load($targetMagentoGoServiceId); $targetMagentoGoPrice = $product->getPrice(); $targetCustomerServicePrice = $this->getCustomerServicePrice($orderId); $targetTotalAmount = $targetMagentoGoPrice + $targetCustomerServicePrice; $remainAmount = $this->getRemainTotalAmount($orderId); $refundAmount = $targetTotalAmount - $remainAmount; $data = array( 'qtys'=>array(), 'adjustment_negative' => 0, 'adjustment_positive' => $refundAmount, 'shipping_amount' => '0' ); Mage::getModel('sales/order_creditmemo_api')->create(Mage::getModel('sales/order')->load($orderId)->getIncrementId(), $data, $commentText, true, true); }
这里只是生成一条online的记录,这个操作会对sales_flat_order中的相应的order进行相应的amount操作,但它只是操作,并不调用真实的refund.
2.可以根据后台的refund总结出如下代码:
<?phpclass Emily_Credit_Model_creditMemo extends Mage_Core_Model_Abstract { public function addCreditMemo($orderId,$refundAmount,$commentText) { Mage::log('*refundTotal: '.$refundAmount.' orderId: '.$orderId,null,'updateservice.log'); $data = array( 'adjustment_negative' => $refundAmount, 'adjustment_positive' => 0, 'comment_text' => $commentText, 'do_offline' => '1', 'refund_customerbalance_return_enable' => 0, 'shipping_amount' => '0' ); if (!empty($data['comment_text'])) { Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']); } try { $creditmemo = $this->_initCreditmemo($orderId,$data); if ($creditmemo) { if (($creditmemo->getGrandTotal() <= 0) && (!$creditmemo->getAllowZeroGrandTotal())) { Mage::throwException( $this->__('Credit memo\'s total must be positive.') ); } $comment = ''; if (!empty($data['comment_text'])) { $creditmemo->addComment( $data['comment_text'], isset($data['comment_customer_notify']), isset($data['is_visible_on_front']) ); if (isset($data['comment_customer_notify'])) { $comment = $data['comment_text']; } } if (isset($data['do_refund'])) { $creditmemo->setRefundRequested(true); } if (isset($data['do_offline'])) { $creditmemo->setOfflineRequested((bool) (int) $data['do_offline']); } $creditmemo->register(); if (!empty($data['send_email'])) { $creditmemo->setEmailSent(true); } $creditmemo->getOrder()->setCustomerNoteNotify(!empty($data['send_email'])); $this->_saveCreditmemo($creditmemo); $creditmemo->sendEmail(!empty($data['send_email']), $comment); Mage::log('orderId: '.$orderId.' The credit memo has been created.',null,'updateService.log'); //echo ('The credit memo has been created.'); //die(); } else { return; } } catch (Mage_Core_Exception $e) { Mage::log('createMemo Error, orderId: '.$orderId.' '.$e->getMessage,null,'updateServiceError.log'); } catch (Exception $e) { Mage::log('createMemo Error, orderId: '.$orderId.' Cannot save the credit memo.',null,'updateServiceError.log'); } } protected function _saveCreditmemo($creditmemo) { $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($creditmemo) ->addObject($creditmemo->getOrder()); if ($creditmemo->getInvoice()) { $transactionSave->addObject($creditmemo->getInvoice()); } $transactionSave->save(); return $this; } protected function _initCreditmemo($orderId,$data) { $order = Mage::getModel('sales/order')->load($orderId); if (!$this->_canCreditmemo($order)) { Mage::log('createMemo Error, orderId: '.$orderId.' cannot credit',null,'updateServiceError.log'); return false; } $data['qtys'] = array(); $service = Mage::getModel('sales/service_order', $order); $creditmemo = $service->prepareCreditmemo($data); return $creditmemo; } protected function _canCreditmemo($order) { /** * Check order existing */ if (!$order->getId()) { //echo $this->__('The order no longer exists.'); Mage::log('createMemo Error, The order no longer exists.',null,'updateServiceError.log'); return false; } /** * Check creditmemo create availability */ if (!$order->canCreditmemo()) { //echo $this->__('Cannot create credit memo for the order.'); Mage::log('createMemo Error, orderId: '.$order->getId().' Cannot create credit memo for the order.',null,'updateServiceError.log'); return false; } return true; }}?>
- magento 添加Creditmemo记录
- Magento笔记/记录
- magento 添加css js
- magento 添加css js
- magento添加翻译
- magento 添加支付方式
- Magento添加支付方式
- magento添加添加自定义属性
- Magento 学习记录(二)
- magento 中文化问题记录
- magento -- 添加中国省份列表
- Magento中添加TAB效果
- Magento分类中添加产品
- magento -- 添加中国省份列表
- magento手动添加silder show
- magento添加confirm email验证
- magento 手动添加 silder show
- Magento首页添加幻灯片教程
- 创建一个Android Activity
- frame buffer
- APP STORE 付费验证(IAP)服务端验证全过程
- objectc 块编程指南
- UVA 11121 Base -2
- magento 添加Creditmemo记录
- python之文件处理
- Linux 下编译并安装配置 Qt
- js 禁用只读文本框获得焦点时的退格键
- 浅谈MVC模式在游戏开发的应用
- srd::string 用法 C++
- #if、#ifdef、#if defined之间的区别
- XCode 4.3.2 如何新建 Window-based Application应用的简单例子
- 专题5:Bootstrap学习笔记