Prestashop 1.6每个时间段的订单号序列重置

时间:2018-03-23 18:29:21

标签: php mysql prestashop-1.6 sequences

概要

我使用Prestashop 1.6运行我的电子商务商店。我已使用this answer作为指南,根据SO/2018/000001将订单号重新配置为ps_orders.ps_id_order格式。使用此块更新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表的关键索引字段作为我的订单号的基础,而是想使用一个单独的序列,每年重置一次。类似于OrderInvoiceCore类使用number字段根据后台设置的Invoice Options生成实际发票编号的方式。

请提出建议

实现这个理想结果的最佳方法是什么?我正在考虑向OrderCore类添加一个序列,并使用它来生成我的订单参考号代替ps_orders.id_order就可以了。如果这是我个案中的最佳解决方案,我该如何实施?

1 个答案:

答案 0 :(得分:1)

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

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

我会通过将Order类中的add函数覆盖为:

来实现
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);
}