Magento:如何覆盖getOrder getGrandTotal,以便在将值传递给付款模块时更改金额

时间:2011-07-15 10:50:14

标签: php magento

我正在尝试以编程方式更改订单总计,以便允许用户支付部分付款。我尝试编辑核心文件Mage_Payment_Model_Info方法getMethodInstance

if (method_exists($instance,"getOrder")){
    $order = $instance->getOrder(); 
}else{

        $session = Mage::getSingleton('checkout/session');
        $order = Mage::getModel('sales/order');
        $order->loadByIncrementId($session->getLastRealOrderId());

}
$total=$order->getGrandTotal()/2;
$order->setGrandTotal($total);

我知道这不是最好的方法,但正在尝试找到最好的方法。怎么做到这一点?我计划将更改放在自定义模块中。所以不要在核心文件中保留更改。感谢

1 个答案:

答案 0 :(得分:1)

我最近不得不做类似的事情并且有一些大问题,但首先是好消息。

  • 收取的金额基于发票,部分的发票和订单的付款金额将适当增加。
  • 订单可能有很多发票。
  • 您无需更改总计。将其保留完整,作为他们需要支付的记录。

然而,

  • 订单商品均需标记为已开票。当订单支付一半时,您必须确定哪些项目是智能化的。如果订单有一个10美元的商品和一个100美元的商品,这些商品是由前20美元支付的?
  • 订单不能多付。由于错误的假设,欠款和支付金额之间的差额(“到期”)不会显示负数,这是一个谬论,并且很难一次支付两个挂单。

我没想到的一种方法是为每位客户设立信用账户。当付款小于整个订单时,请将其添加到帐户中,并暂时保留订单未付款。允许对帐户进行任意(预)付款。一旦帐户足够好用它来支付订单,你可能想为这个位做一个支付模块 或者它可以反向工作,立即支付所有订单,并在信用账户中留下负余额,以便日后支付。我怀疑这将是最不痛苦的方式。