Решение недоработки правила в Wokflow-ng с uc_stock. (двойное уменьшение товара на складе при оплате через вебмани)

Главные вкладки

Аватар пользователя chewie chewie 29 июля 2009 в 15:36

В общем на заключительной стадии запуска магазина нашел досадный пробел в процессе оформления и оплаты заказа. Оказалось что при оплате через модуль webmoney товар списывался со склада ИМ 2 раза. Почему-то в рунете у друпаловцев поднятие данного вопроса и его решение не нашел!
Попробовал поискать в англоязычном интернете. Там эту проблему друпаловцы рассматривали и пытались решить довольно активно. К сожалению не запомнил линки.
Пытались решить проблему двойного снятия правилом "Decrement stock upon order submission" при оплате Paypal всяческими рецептами. Одни писали что помогло, другие нифига не помогло. В общем я совершенно запутался. Начал судорожно отменять правила, дефолтить, изменять, добавляя и удаляя условия. Что только ни пробовал. Начал уже грешить на модуль webmoney (закомментировал строки которые соответствовали завершению заказа... помогло но вызвало проблемы в другом).

Но решение пришло только, когда попытался успокоиться, и понять как создаются правила Workflow.
На самом деле при создании правила выбирается событие (event) из выпадающего списка. Количество ограничено. И выполняется действие(я) (action) этого правила только при возникновении этого события и при удовлетворения выбранных условий (то есть когда условия (condition) истинны).. если они есть. Таким образом, как не трудно было заметить, правило, созданное модулем uc_stock, "Decrement stock upon order submission" выполняется при завершении заказа. В силу устройства мерчанта вебмани и УК получается что заказ завершается 2 раза: при получении запроса на страницу Result URL о том что оплата прошла успешно и во время перехода на страницу уберкарта "Заказ добавлен", когда $_SESSION['go_complete'] присваиевается TRUE.
Естественно сам принцип работы этого правила меня просто не устроил. Как говорится "Утром успешная трансакция - вечером стулья". Склад в магазине свой отдельный. Все подсчитано. Снимается только после оплаты. Так что нужно было чтобы клиент мог щелкать сколько угодно, но со склада снимется товар только после оплаты.
И так решение:

1. Деактивируем нафиг "Decrement stock upon order submission"
2. Переходим: "Add a new rule configuration"
3. Выбираем в выпадающем списке "A payment gets entered for an order"
4. И добавляем действие "Decrement stock of products on the order with tracking activated"
5. Все!

При успешной оплате снимается как надо. При наложенном платеже снимается только, когда в редактировании заказа клиента в разделе Payment забьете сумму и добавите оплату.

Можете проверить: На моем ИМ. Можете даже купить своей жене или мужу что-нибудь.
Скоро выложу модуль для оплаты через Liqpay. У меня он работает, но нужно код еще как бы вычистить. Писал по торопясь.

Комментарии