Нет заказа, пока не будет оплачен первый


Мне нужно создать модуль, в котором он проверяет, есть ли у клиента заказ, и если он проверяет, оплачен ли он (он же в полном состоянии), если да, позвольте ему заказать еще раз, если нет, не позволяйте ему заказывать.

Я подумал об использовании наблюдателя событий с этим событием: sales_convert_quote_to_order
И проверьте там, и если ему не разрешат, он будет возвращен на страницу, где он может заплатить за это.

Хорошо ли это событие для того, что я пытаюсь сделать? или я должен сделать это по-другому? Как?

Author: Chris K, 2013-03-04

2 answers

Это событие запускается либо из серверной части, либо с помощью расширения платежа, поэтому я не думаю, что фактический клиент будет там, когда оно будет запущено. Возможно, вам захочется отобразить уведомление в интерфейсе в корзине для этого пользователя, сообщающее ему, что ему необходимо оплатить первый счет, и скрыть кнопку "Оформить заказ", пока все счета не будут оплачены. Вероятно, это будет зависеть от того, как клиент должен оплатить свой счет, похоже, вы используете банковский перевод в качестве способа оплаты?

 1
Author: Sander Mangel, 2013-03-04 15:04:09

sales_convert_quote_to_order срабатывает в конце оформления заказа (Сандер мог принять его за "преобразовать заказ в счет"), но я бы не стал его использовать.

Не по техническим причинам, а для удобства пользователей. Я бы не позволил клиенту пройти весь процесс оформления заказа и сказать ему в конце: "О, извините, вам нельзя делать заказ". Поэтому используйте первое событие при оформлении заказа, когда вы знаете, кто является клиентом.

Это controller_action_predispatch_checkout_onepage_index, который срабатывает, когда вы идете к кассе в качестве клиента или после выбора "войти" или "зарегистрироваться" в качестве гостя. Это обычный запрос без ajax, который вы можете перенаправить в корзину с сообщением об ошибке, если проверка не разрешена.

 1
Author: Fabian Schmengler, 2015-09-17 11:29:58