由于选择,状态因重复而改变

Status Changed with Duplicates Due to Selection

我正在执行一个名为 hookActionProductCancel() 的默认挂钩。钩子很好地执行了我的代码,但有一部分根据发送的 refund/return 个复选框数量执行了不止一次。

示例:

如果我有 4 个要选中的复选框,我选择了 3 个,我的订单在订单详细信息历史记录中将有 3 个 "Refund" 状态。 (也可以在订单页面看到)

public function hookActionProductCancel($params) 
{
    $query = new DbQuery();
    $query->select('id_order_state')
    ->from('order_state_lang')
    ->where('name = ' . "'Refund'");
    $refund_status = Db::getInstance()->getValue($query);

    $objOrder = new Order($id_order);
    $history = new OrderHistory();
    $history->id_order = (int)$objOrder->id;
    $history->id_employee = $cookie->id_employee;
    $history->changeIdOrderState($refund_status, (int)($objOrder->id));
    $history->add(true);
    $history->save();
}

非常感谢任何指导。谢谢。

从订单中取消产品时,控制器循环遍历每个选定的产品并执行 actionProductCancel 挂钩。

Tools::getValue('id_order_detail') 将是每个将被取消的订单详细信息 ID 的数组。

知道您可以结合使用挂钩、数组中的订单详细信息 ID 计数和模块中的计数器。

您的主模块 class 可能包含如下代码:

public static $cancelledProductCount = 0;

public function hookActionProductCancel($params) 
{
    self::$cancelledProductCount++;

    if (self::$cancelledProductCount == count(Tools::getValue('id_order_detail'))) {
        $query = new DbQuery();
        $query->select('id_order_state')
              ->from('order_state_lang')
              ->where('name = ' . "'Refund'");
        $refund_status = Db::getInstance()->getValue($query);

        $objOrder = new Order($id_order);
        $history = new OrderHistory();
        $history->id_order = (int)$objOrder->id;
        $history->id_employee = $cookie->id_employee;
        $history->changeIdOrderState($refund_status, (int)($objOrder->id));
        $history->add(true);
        $history->save();
    }
}

因此,每次执行取消产品挂钩时,您都会将计数器加一,并与取消的项目数进行比较。如果它们相同,您就知道这是挂钩最后一次执行,因此请更改订单状态。