Я управляю своим интернет-магазином, используя Prestashop 1.6. Я уже перенастроил свои номера заказов в формат 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
сделал бы трюк. Если это лучшее решение в моем случае, как мне это реализовать?
Вы можете получить количество заказов в текущем году и добавить один к нему при создании ссылки.
$nextid = (int)Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `"._DB_PREFIX_."orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
Я бы сделал это, переопределив функцию add в классе Order на что-то вроде:
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);
}
Других решений пока нет …