Prestashop 1.6 Последовательность номеров заказов сбрасывается за период времени

СИНТАКСИС

Я управляю своим интернет-магазином, используя 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 сделал бы трюк. Если это лучшее решение в моем случае, как мне это реализовать?

0

Решение

Вы можете получить количество заказов в текущем году и добавить один к нему при создании ссылки.

$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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]