Prestashop 1.6 订单号序列按时间段重置

Prestashop 1.6 Order Number sequence reset per time period

概要

我是 运行 我的电子商务商店,使用 Prestashop 1.6。我已经根据 ps_orders.ps_id_order 使用 this answer 作为指南将我的订单号重新配置为格式 SO/2018/000001。使用此块更新 override/classes/PaymentModule.php

$oNum = str_pad($order->id, 6, '0', STR_PAD_LEFT);
$oYear = substr(date(Y),0,4);
$order->reference = "SO/$oYear/$oNum";
$order->update();

然后我使用以下查询来更新集合确定下一个 id_order:

ALTER TABLE ps_orders AUTO_INCREMENT = 10

这使得我的 reference 比定义的字段长,所以我也不得不调整 /override/class/Order.php 中的定义:

'reference' => array('type' => self::TYPE_STRING, 'size' => 14),

/override/class/OrderPayment.php中:

'order_reference' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 14),

完成所有这些后,我的订单号已按我想要的方式格式化,但并不完全符合我的要求。

期望的结果

我不想使用 ps_orders table 的关键索引字段作为我的订单号的基础,而是使用每年重置的单独序列。类似于 OrderInvoiceCore class 使用 number 字段根据后台设置的 Invoice Options 生成实际发票编号。

请多多指教

实现这一预期结果的最佳方式是什么?我在想,向 OrderCore class 添加一个序列,然后用它来生成我的订单参考号来代替 ps_orders.id_order 就可以了。如果这是我的最佳解决方案,我该如何实施?

您可以在生成参考时获取当年的订单数并对其加一。

$nextid = (int)Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `"._DB_PREFIX_."orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;

我会通过将 Order class 中的添加函数覆盖为类似以下内容来实现:

public function add($autodate = true, $null_values = true)
{
    $nextid = Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `__DB_PREFIX__orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
    $this->reference = "SO/".date('Y')."/".str_pad($nextid, 6, '0', STR_PAD_LEFT);

    parent::add($autodate, $null_values);
}