Нет заказа, пока не будет оплачен первый
Мне нужно создать модуль, в котором он проверяет, есть ли у клиента заказ, и если он проверяет, оплачен ли он (он же в полном состоянии), если да, позвольте ему заказать еще раз, если нет, не позволяйте ему заказывать.
Я подумал об использовании наблюдателя событий с этим событием: sales_convert_quote_to_order
И проверьте там, и если ему не разрешат, он будет возвращен на страницу, где он может заплатить за это.
Хорошо ли это событие для того, что я пытаюсь сделать? или я должен сделать это по-другому? Как?
2 answers
Это событие запускается либо из серверной части, либо с помощью расширения платежа, поэтому я не думаю, что фактический клиент будет там, когда оно будет запущено. Возможно, вам захочется отобразить уведомление в интерфейсе в корзине для этого пользователя, сообщающее ему, что ему необходимо оплатить первый счет, и скрыть кнопку "Оформить заказ", пока все счета не будут оплачены. Вероятно, это будет зависеть от того, как клиент должен оплатить свой счет, похоже, вы используете банковский перевод в качестве способа оплаты?
sales_convert_quote_to_order
срабатывает в конце оформления заказа (Сандер мог принять его за "преобразовать заказ в счет"), но я бы не стал его использовать.
Не по техническим причинам, а для удобства пользователей. Я бы не позволил клиенту пройти весь процесс оформления заказа и сказать ему в конце: "О, извините, вам нельзя делать заказ". Поэтому используйте первое событие при оформлении заказа, когда вы знаете, кто является клиентом.
Это controller_action_predispatch_checkout_onepage_index
, который срабатывает, когда вы идете к кассе в качестве клиента или после выбора "войти" или "зарегистрироваться" в качестве гостя. Это обычный запрос без ajax, который вы можете перенаправить в корзину с сообщением об ошибке, если проверка не разрешена.