【发布时间】:2011-09-16 10:58:59
【问题描述】:
对于未来的项目,我们被分配创建一个简单的概念(在 Magento 内部),它必须执行以下操作:
客户可以选择不同的运输方式,其中一种是“Ship2Shop”,它将产品发送到选择的实体店,客户必须去取货。 当客户选择这种“ship2shop”运输方式时,总金额的一定百分比(例如:25%)必须在线支付(通过预定义的支付方式),剩余的 75% 必须以实物支付顾客去取他订购的产品时商店。
你会怎么做?
我们的想法是修改结帐/订单会话并修改“总计”金额(将原始值保存在会话中)。当客户然后被发送到外部支付处理器时,“修改的总计”被发送。一旦客户在 magento 平台上返回,我们将通过恢复原始总计并更新已支付总额和应付总额来修改订单。
有人对此有任何其他想法吗?
编辑: 在下面的 Anton S 反馈后,我设法添加了“预付款总额”。但是我仍然有问题 在 config.xml 中,我在标签中添加了以下内容:
acsystems_advancepayment/total_custom 累计
我希望我的预付款显示在总计之后,由于某种原因,magento 不会这样做...
EDIT2:收集方法
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$quote = $address->getQuote();
$advancePaymentAmount = 0;
$baseAdvancePaymentAmount = 0;
$items = $address->getAllItems();
if (!count($items)) {
$address->setAdvancePaymentAmount($advancePaymentAmount);
$address->setBaseAdvancePaymentAmount($baseAdvancePaymentAmount);
return $this;
}
$address->setBaseAdvancePayment($address->getGrandTotal()*(0.25));
$address->setAdvancePayment($address->getGrandTotal()*(0.25));
$address->setAdvancePaymentAmount($address->getGrandTotal()*(0.25));
$address->setBaseAdvancePaymentAmount($address->getGrandTotal()*(0.25));
$address->setGrandTotal($address->getGrandTotal() - $address->getAdvancePaymentAmount());
$address->setBaseGrandTotal($address->getBaseGrandTotal()-$address->getBaseAdvancePaymentAmount());
return $this;
}
【问题讨论】:
-
那么这是做什么的 $address->setAdvancePayment($calculatedAmount); ?
-
如果我不设置它,那么我的“预付款”行不会显示在结帐时的购物车概览/评论中。 (我猜和 ->setData("advance_payment") 一样
-
好的,您的问题是,如果连续多次调用 baseAmount 和 amount 在您的收集过程中不会被清除,这就是 paretn::collect($address);在你的方法的顶部做。但是,您必须确保您的计算金额始终从 0 开始计算
-
我已经更新了 collect 方法,它现在似乎可以工作了,非常感谢! ;) 您在该方法中看到任何您不同意的奇怪事物,或者以后可能会出现问题? (再次感谢大家的帮助)
-
我会在我的回答中编辑这个,不要弄乱你对象中的其他总数,因为他们不知道你的对象
标签: magento-1.5 magento