Передача промокода/купона из opencart в retailcrm. Модификация бесплатного модуля.

Используемый модуль:https://ocmod.net/modul-retailcrm

Задачи

Промокоды/промокоды — стандартный функционал opencart.

1.Если на товар есть скидка по акции и она составляет меньшую сумму, чем по промокоду, применяется только промокод. А если на товар есть скидка по акции и она соcтавляет большую сумму, чем по промокоду, то применяется только скидка по акции. Скидки не суммируются. Это должно быть применимо только для купонов/промокодов с процентным типом.

2.Информация о применении промокода (какой, на какую сумму) должна передаваться в РЦРМ.

Решение задачи 1

Найти файл catalog\model\extension\total\coupon.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 во вкладку пользовательские поля и привести в соотвествие поля ИМ и СРМ

Модификация модуля

Найти файл system\library\retailcrm\lib\service\OrderManager.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;
        }
    }

Если хотите чтобы ваши изменения не пропали после обновлений модуля, то воспользуйтесь его кастомизацией , инфа по ссылке

Если получится с кастомизацией, то в благодарность за статью пришлите, плиз, рабочий вариант)) а то руки пока не доходят сделать.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *