Предварительный магазин - Изменить статус заказа после подтверждения оплаты
Когда платеж подтвержден, статус заказа становится "Платеж подтвержден" ("Платеж принят" на французском языке). Я хочу установить другой статус при подтверждении платежа, чтобы в истории отображалось следующее:
Current status : My personnal status
History :
My personnal status
Payment validated
Для этого я использую команду hook actionOrderStatusPostUpdate. Это мой код:
public function hookActionOrderStatusPostUpdate($aParams) {
$oOrder = new Order($aParams['id_order']);
if($aParams['newOrderStatus']->id == Configuration::get('PS_OS_PAYMENT')) {
$oOrder->setCurrentState(Configuration::get('XXXXXX_STATUS_WAITING'));
$oOrder->save();
}
}
Значения конфигурации определены правильно. Этот код работает, потому что я вижу, что статус изменился. Но дело в том, что он изменился ДО перехода на "Подтвержденный платеж". Я не понимаю, почему. История выглядит так:
Current status : Payment validated
History :
Payment validated
My personnal status
Что я должен сделать, чтобы Мой личный статус отображался как последний статус?
2 answers
Вызов hookactionorderstatuspostupdate выполняется с помощью changeidorderstate, но добавление в таблицу order_history выполняется после вызова changeidorderstate, как в https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/controllers/admin/AdminOrdersController.php#L521-L542
Вам скорее нужно привязать свой модуль к классическому крючку, такому как hookactionobjectorderhistoryaddafter https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/ObjectModel.php#L535-L537
public function hookActionObjectOrderHistoryAddAfter($params) {
$orderHistory = $params['object'];
if($orderHistory->id_order_state == Configuration::get('PS_OS_PAYMENT')) {
$oOrder->setCurrentState(Configuration::get('XXXXXX_STATUS_WAITING'));
$oOrder->save();
}
С наилучшими пожеланиями
Я думаю, что это сработает на другом крючке: actionOrderStatusUpdate