【发布时间】:2013-03-15 04:28:41
【问题描述】:
当我提交已编辑的订单,其中奖励积分为负数(因为新处理的订单少于原始订单),在奖励历史记录中,其中一个条目会比最近的条目提前 12 小时
这不会对总奖励积分造成任何不良影响,因为该值被正确计算
我的编辑订单模块确实无法做到这一点,编辑订单模块只是做与重新排序完全相同的事情,但它也会创建一个新的会话来存储前一个订单的项目,他们的数量,订单的日期和它的增量 id,如何计算点是当它们正常计算时,会检查这个会话,如果它存在,它会得到基本总计,尽管 $this->getReward()->getRateToPoints()->calculateToPoints() 并减去它从点delta
当我们在结帐时处理订单时,它只是创建了一个新订单,但交易 ID 与之前的订单相同,因为互联网销售会查看此交易 ID,他们会知道要编辑哪个订单,旧订单将在下次运行同步脚本时取消
考虑到所有这些,我从来没有对奖励历史做任何事情,而且我推送的奖励历史条目并不总是你编辑的顺序,我去编辑了订单 100000040 但 100000042 被推送了
注意:我还应该指出,此时订单没有存储相同的交易 ID,因为我正在等待示例 xml 与来自支付网关的请求/响应 xml 进行比较,所以没有办法order once 流程以任何方式与另一个订单相关联
以下代码取自Enterprise_Reward_Model_Action_OrderExtra::getPoints,位于$pointsDelta = $this->getReward()->getRateToPoints()->calculateToPoints((float)$monetaryAmount);和return $pointsDelta;之间
$editOrder = Mage::getModel('core/session')->getData('editorder');
if(!is_null($editOrder))
{
$readConnection = Mage::getSingleton('core/resource')->getConnection('core_read');
$result = $readConnection->fetchAll("
SELECT sfo.entity_id FROM sales_flat_order AS sfo
WHERE sfo.increment_id = ?
LIMIT 1
",$editOrder['original_order']);
$order = Mage::getModel('sales/order')->load($result[0]['entity_id']);
$orderData = $order->getData();
$previousOrderMonetaryAmount = (($orderData['base_grand_total'] - $orderData['base_shipping_amount']) - $orderData['base_tax_amount']);
$pointsDelta = $pointsDelta - $this->getReward()->getRateToPoints()->calculateToPoints((float)$previousOrderMonetaryAmount);
}
上面是正在发生的事情的快照,顶部显示了在订单被编辑和处理之前的奖励历史记录,底部是之后发生的事情(对于 #100000049 没有发生任何事情,所以我不得不再做一次,你得到了故障出现)
#100000044 中的项目与订单 #100000048 完全不同,订单 #100000046 缺失,因为当点数增量为 0 时(意味着不会添加/减去任何点)它不显示(这很好)
所有具有负值的订单都被处理了那些具有正值但在编辑过程中删除了一些物品的编辑订单,从而减少了购物车总数(在网关中,这将退还客户,因此他们应该不允许有他们被退款的积分)
【问题讨论】: