Логическая ловушка c $order.paid_date и для чего надо смотреть в update_datetime

3

Допустим есть заказ, который проходит последовательно несколько статусов от Нового до Выполненного. Заказ находится в комплектации на сборке и ему ставят статус Выполнен вместо Отправлен (человеческая ошибка). Сотрудник исправляется и возвращает ошибочно выполненный заказ в Отправку однако происходит установка paid_date в момент ошибочного выполнения и при откате в другой статус эта информация никак не удаляется и тащится дальше.

Дата выполнения != дата оплаты. Вот в чем вся проблема. Не хватает ещё одной временной отметки (например completed_date) для статуса Выполнен.

Либо при установке статуса Выполнен при условии paid_date is NULL не заполнять это поле вообще (оставьте там NULL), а делать запись только в update_datetime. Оставьте его (paid_date) плагинам оплаты и действию по переводу статуса в Оплачен (хотя статусом это сложно назвать). Дату выполнения можно взять из shop_order_log для after_state_id = completed или update_datetime для state_id = completed из shop_order т.к. эти даты обычно равны, но из shop_order взять удобнее.

Это пока набросок так сказать из головы на бумагу, но определенные неудобства с обходами и проверками даты оплаты, даты выполнения и статусов для этих случаев были.

Хочется уже вывести Оплачен из статусов и оперировать этим признаком более свободно никак не мешая его с датой выполнения заказа.

Для заказов, которые по ошибке побывали в статусе Выполнен, вручную выправлены и пошли дальше, такую стройную картинку в ЛК получить уже сложнее, чем просто взять две даты и один статус. Поэтому приходится ещё сравнивать даты, проверять наличие нужного способа оплаты, факт оплаты не по наличию paid_date, т.к. уже выяснили, что это не всегда про оплату и т.п.


0 комментариев

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите