Ошибка подсчета комисси для партнера в Опенкарт

19.12.2019 | Андрей
Ошибка подсчета комисси для партнера в Опенкарт

Странное чудо случилось. Казалось бы opencart нууууу очень хорошая система для интернет-магазина, но все мы люди и разработчики опенкарт тоже. Заказчик выявил интересный баг. При оформлении заказа с купоном на скидку процент для партнера высчитывается не от финальной суммы, т.е. total а от суммы по продуктам. Итого при скидке в 50% партнер получает + 50% от процента комиссии даром, а сам владелец в убытке...

Немного покопав, я вышел на код, который и считает процент для партнера при оформлении заказ. Лежит он по пути: catalog/controller/checkout/confirm.php
И выглядит так:



$subtotal = $this->cart->getSubTotal();

// Affiliate
$this->load->model('affiliate/affiliate');

$affiliate_info = $this->model_affiliate_affiliate->getAffiliateByCode($this->request->cookie['tracking']);

if ($affiliate_info) {
	$order_data['affiliate_id'] = $affiliate_info['affiliate_id'];
	$order_data['commission'] = ($subtotal / 100) * $affiliate_info['commission'];
} else {
	$order_data['affiliate_id'] = 0;
	$order_data['commission'] = 0;
}


Как можно заметить из примера, в коде нет проверки на применение купона или другой скидки, которая может учитываться в total. Для решения данной задачи в максимально короткие сроки было решено добавить проверку на применение купона и последующую работу с купоном. Код представлен ниже проверн на oc 2.1.x / 2.0.x. На версиях постарше с небольшими доработками так же будет работать.



$subtotal = $this->cart->getSubTotal();
				
if(isset($this->session->data['coupon'])){
    $cupinf = $this->model_total_coupon->getCoupon($this->session->data['coupon']);
if($cupinf['type'] == 'P'){
    $perc = ($subtotal * round($cupinf['discount'])) / 100;
    $priceto = $subtotal - $perc;
}else{
    $priceto = $subtotal - round($cupinf['discount']);
}
}
// Affiliate
$this->load->model('affiliate/affiliate');

$affiliate_info = $this->model_affiliate_affiliate->getAffiliateByCode($this->request->cookie['tracking']);

if ($affiliate_info) {
    $order_data['affiliate_id'] = $affiliate_info['affiliate_id'];
    $cnt = ($priceto) ? $priceto : $subtotal;
    $order_data['commission'] = ($cnt / 100) * $affiliate_info['commission'];
} else {
    $order_data['affiliate_id'] = 0;
    $order_data['commission'] = 0;
}


Бажаєте дізнатись скількі коштує Ваш проєкт?

Заповніть заявку

Категорії

Те, що читають:

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco