在 prestashop 8.0.1 中添加跟踪号码时将状态更新为自动发货

问题描述 投票:0回答:1

我正在安装 PrestaShop 8.0.1,并尝试在添加跟踪号码时自动将订单状态更新为“已发货”。我创建了一个名为“UpdateShippedStatus”的自定义模块来实现此功能。

这是我到目前为止所做的:

创建自定义模块: 我创建了一个名为“UpdateShippedStatus”的自定义模块,并重写了 OrderController 中的 updateShippingAction 函数以添加更新订单状态的逻辑。

代码片段: 这是我的自定义控制器 (CustomOrderController.php) 的代码片段:

<?php

use PrestaShopBundle\Controller\Admin\Sell\Order\OrderController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;

class CustomOrderController extends OrderController
{
    public function updateShippingAction(int $orderId, Request $request): RedirectResponse
    {
        // Call the parent method to execute the original logic
        $response = parent::updateShippingAction($orderId, $request);

        // Update the order status to "shipped"
        $this->updateOrderStatus($orderId, 4); // Assuming "shipped" status option value is 4

        return $response;
    }

    // Function to update order status
    private function updateOrderStatus(int $orderId, int $statusId): void
    {
        // Get the Order object and update its status
        $order = $this->getDoctrine()->getRepository(Order::class)->find($orderId);
        if ($order) {
            $order->setCurrentState($statusId);
            $this->getDoctrine()->getManager()->flush();
        }
    }
}

模块注册: 我已在模块的主文件 (updateshippedstatus.php) 中注册了自定义控制器。这是代码片段:

<?php

if (!defined('_PS_VERSION_')) {
    exit;
}

class UpdateShippedStatus extends Module
{
    public function __construct()
    {
        $this->name = 'updateshippedstatus';
        $this->tab = 'shipping_logistics';
        $this->version = '1.0.0';
        $this->author = 'Your Name';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Update Shipped Status');
        $this->description = $this->l('Custom module to update order status when shipping is updated.');

        // Register custom controller
        $this->controllers = array('customordercontroller');

        // Ensure that the controller file exists
        if (file_exists($this->getLocalPath().'controllers/front/CustomOrderController.php')) {
            require_once($this->getLocalPath().'controllers/front/CustomOrderController.php');
        }
    }

    public function install()
    {
        return parent::install() &&
            $this->registerHook('ActionAdminControllerSetMedia');
    }
}

尽管做出了这些努力,我的自定义模块在添加跟踪号码时似乎没有触发。我已验证该模块已安装并启用,但订单状态未按预期更新。

任何有关可能导致此问题的原因或如何进一步解决该问题的建议将不胜感激。

php prestashop prestashop-modules prestashop-8
1个回答
0
投票

看看这个专用钩子,您可以将其包含在模块中,该钩子将在跟踪号码更新时触发:

actionAdminOrdersTrackingNumberUpdate

您可以在那里执行您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.