Передача промокода/купона из opencart в retailcrm. Модификация бесплатного модуля.
Используемый модуль:https://ocmod.net/modul-retailcrm
Задачи
Промокоды/промокоды — стандартный функционал opencart.
1.Если на товар есть скидка по акции и она составляет меньшую сумму, чем по промокоду, применяется только промокод. А если на товар есть скидка по акции и она соcтавляет большую сумму, чем по промокоду, то применяется только скидка по акции. Скидки не суммируются. Это должно быть применимо только для купонов/промокодов с процентным типом.
2.Информация о применении промокода (какой, на какую сумму) должна передаваться в РЦРМ.

Решение задачи 1
Найти файл catalogmodelextensiontotalcoupon.php
Г Д Е ВСТАВЛЯТЬ | Ч Т О ВСТАВЛЯТЬ |
после фрагмента if ($coupon_info[‘type’] == ‘F’) { $coupon_info[‘discount’] = min($coupon_info[‘discount’], $sub_total); } | вставить $this->load->model(‘catalog/product’); $totalnewlogic = 0; |
после фрагмента if (!$coupon_info[‘product’]) { $status = true; } else { $status = in_array($product[‘product_id’], $coupon_info[‘product’]); } | вставить $product_details = $this->model_catalog_product->getProduct($product[‘product_id’]); $original = (float)$product_details[‘price’]*$product[‘quantity’]; |
заменить фрагмент if ($coupon_info[‘type’] == ‘F’) { $discount = $coupon_info[‘discount’] * ($product[‘total’] / $sub_total); | кодом $countdown=$original; if ($coupon_info[‘type’] == ‘F’) { $discount = $coupon_info[‘discount’] * ($countdown / $sub_total); |
перед строкой $discount_total += $discount; | вставить if($product[‘quantity’]*((float)$product_details[‘price’]-$product[‘price’])>=$discount) { $totalnewlogic+= $product[‘total’]; continue; } else $totalnewlogic+=$original; |
заменить $total[‘total’] -= $discount_total; | кодом $total[‘total’] = $totalnewlogic — $discount_total; |
Решение задачи 2
Для начала нужно настроить пользовательские поля в Opencart и Retailcrm
Пользовательские поля Retailcrm
По адресу *.retailcrm.ru/admin/settings/fields добавил два пользовательских поля: одно для клиентов, одно для заказов

и выставил на них максимальные права.
Пользовательские поля Opencart
Добавляем в Покупатели->настраиваемые поля.Группы покупателей я указал все

Зайти в модуль интеграции RetailCRM во вкладку пользовательские поля и привести в соотвествие поля ИМ и СРМ

Модификация модуля
Найти файл systemlibraryretailcrmlibserviceOrderManager.php
После фрагмента
public function editOrder($order_data, $order_products, $order_totals) { $order = $this->prepareOrder($order_data, $order_products, $order_totals);
внести туда код
foreach ($order_totals as $item) { if($item['code']=='coupon'&&!empty($item['title'])&&!empty($item['value'])) { $order['customFields']['promocode'] = $item['title'].$item['value']; break; } }
Если хотите чтобы ваши изменения не пропали после обновлений модуля, то воспользуйтесь его кастомизацией , инфа по ссылке
Если получится с кастомизацией, то в благодарность за статью пришлите, плиз, рабочий вариант)) а то руки пока не доходят сделать.