Перейти к содержимому


Фотография
* * * * * 1 Голосов

Бонусная система

бонусная система доставка ems

Сообщений в теме: 9

#1 Giadastar

Giadastar

Отправлено 15 May 2014 - 10:47

*
Популярное сообщение!

Общая информация
Чтобы стать участником Бонусной Программы необходимо зарегистрироваться на сайте интернет-магазина и совершить покупку на любую сумму.
Участник Бонусной Программы имеет возможность отслеживать операции с бонусами в личном кабинете
 
Начисление Бонусов
В рамках действия Бонусной Программы на счет покупателя начисляются Бонусы.
Количество Бонусов, зачисляемых на счет, зависит от суммы текущей и всех предыдущих покупок.
На каждые полные 1000 рублей покупки бонусы начисляются согласно шкале:
 
Общая сумма покупок (в том числе и уже сделанных ранее, т.е. сумма накапливается) До 5000 - 30 бонусов
 
5001-10000 - 50 бонусов
 
10001-15000 - 70 бонусов
 
Более 15000 - 100 бонусов
 
Начисленные бонусы активны со следующего дня, после оплаты покупки.
 
При регистрации пользователю начисляются 100 приветственных бонусов.
 
В преддверии праздничных дней (Новый год, Рождество, 23 февраля) и дней рождения клиентов (указываются при регистрации) магазин дарит зарегистрированным в Бонусной Программе пользователям 200 бонусов.
 
При покупке товара со скидкой Бонусы не начисляются.
 
На сумму покупки, оплаченную Бонусами, Бонусы не начисляются.
 
Использование Бонусов
Начисленные Бонусы действительны с момента регистрации покупателя в интернет - магазине на протяжении всего времени действия Бонусной Программы.
 
Начисленные Бонусы могут быть использованы при совершении последующих покупок в магазине.
Единовременно Бонусами можно оплатить до 20% стоимости покупки.
 
Один Бонус эквивалентен одному рублю.
 
Минимальное количество Бонусов, принимаемых к оплате - 10.
 
Количество Бонусов при расчетах кратно 10-ти.
 
В случае возврата товара, оплаченного Бонусами, покупателю возвращаются уплаченные денежные средства; израсходованные Бонусы восстанавливаются на счете покупателя (через сутки); начисленные за покупку Бонусы аннулируются. При возврате части покупки использованные Бонусы восстанавливаются пропорционально сумме возврата.
 
Ниже будет приклеплен хак, соответственно приведу пояснения по нему (после слов "Что делаем" кратко описываю что делает блок последующего кода)
 
1. zoo/jbuniversal/framework/controllers/basket.php
Что делаем - записываем в сессию данные (использованные бонусы, сумма для начисления бонусов, фактическая оплата без доставки, отдельно стоимость доставки)

function setbonus() {
		$userbonus = $_REQUEST["userbonus"];
		$bonussumm = $_REQUEST["bonussumm"];
		$factpaid = $_REQUEST["factpaid"];
		$deliverysum = $_REQUEST["deliverysum"];
		$session = JFactory::getSession();
		$session->set('userbonus', $userbonus, 'jbzoo');
		$session->set('bonussumm', $bonussumm, 'jbzoo');
		$session->set('factpaid', $factpaid, 'jbzoo');
		$session->set('deliverysum', $deliverysum, 'jbzoo');
	}
 
1.1 
Что делаем - Начисление бонусов на Дни Рождения

public function AddBonusToUsers() {
		$app = JFactory::getApplication('site');
		$componentParams = $app->getParams('com_bonussystem');
		$birthdaybonus = $componentParams->get('birthdaybonus', 200);
		$curday = date("d"); $curmonth = date("m");
		
		
		$db = JFactory::getDBO();
		$query = $db->getQuery(true);
		$query->select("user_id, profile_value");
		$query->from('#__user_profiles');
		$query->where("profile_key = 'profile.dob'");
		$db->setQuery((string)$query);
		$results = $db->loadObjectList();
		
		if ($results) {
			foreach($results as $result) {
				$birthdate = $result->profile_value;
				$birthdate = str_replace('"', '', $birthdate);
				$birthdate = explode("-",$birthdate);
				$birthday = $birthdate[2]; 
				$birthmonth = $birthdate[1]; 
				
				if (($birthday == $curday) AND ($birthmonth == $curmonth)) {
					$query = $db->getQuery(true);
					$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$result->user_id."', '0', '".$birthdaybonus."', '0', '0', '".$birthdaybonus." бонусов на День Рождения', '".date('Y-m-d')."', '1')";
					$db->setQuery((string)$query);
					$db->query();
				}
			}
		}
		
1.2
Что - делаем  Начисление бонусов в праздничные даты

$query = $db->getQuery(true);
		$query->select("bonus, event, bonusday, bonusmonth");
		$query->from('#__user_bonus_rules');
		$query->where("((bonusday = '".(int)$curday."') AND (bonusmonth = '".(int)$curmonth."'))");
		$db->setQuery((string)$query);
		$result = $db->loadObject();
		
		if ($result) {
			$query = $db->getQuery(true);
			$bonus = $result->bonus;
			$event = $result->event;
				
			$query = $db->getQuery(true);
			$query->select("user_id");
			$query->from('#__user_profiles');
			$query->where("user_id != '452'");
			$db->setQuery((string)$query);
			$results = $db->loadObjectList();
				
			if ($results) {
				foreach($results as $result) {
					$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$result->user_id."', '0', '".$bonus."', '0', '0', '".$event."', '".date('Y-m-d')."', '1')";
					$db->setQuery((string)$query);
					$db->query();	
				}
			}		
		}

		echo "Начисление бонусов успешно завершено!";
    }
2. zoo/jbuniversal/framework/controllers/payment.php 
Что делаем - после возвращения из робокассы начисляем бонусы

$db = JFactory::getDBO();
		$order_id = $this->orderId;
		
		if ($order_id > 0) {		
			$query = $db->getQuery(true);
			$query->select("id");
			$query->from('#__user_bonus');
			$query->where("order_id = '".$order_id."'");
			$db->setQuery((string)$query);
			$orderid = $db->loadObject();
			
			$query = $db->getQuery(true);
			$query->select("elements, created_by");
			$query->from('#__zoo_item');
			$query->where("id = '".$order_id."'");
			$db->setQuery((string)$query);
			$user_id = $db->loadObject();
			$elements = json_decode($user_id->elements);
		
			$query = $db->getQuery(true);
			$query->select("SUM(factpaid) as totalfactpaid");
			$query->from('#__user_bonus');
			$query->where("((user_id = '".$user_id->created_by."') AND (active = '1'))");
			$db->setQuery((string)$query);
			$result = $db->loadObject();
			$totalfactpaid = $result->totalfactpaid;
				
			$userbonus = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->userbonus;
			$bonussumm = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->bonussumm;
			$factpaid  = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->factpaid;
			$deliverysum  = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->deliverysum;
				
			if ($bonussumm < $factpaid) $bonuscanuse = $bonussumm;
			else $bonuscanuse = $factpaid;
				
			if ($totalfactpaid > 15000) $bonuscanuse = intval($bonuscanuse / 1000) * 100;
			elseif ($totalfactpaid > 10000) $bonuscanuse = intval($bonuscanuse / 1000) * 70;
			elseif ($totalfactpaid > 5000) $bonuscanuse = intval($bonuscanuse / 1000) * 50;
			else $bonuscanuse = intval($bonuscanuse / 1000) * 30;
		}
		
2.1. zoo/jbuniversal/framework/controllers/payment.php 
Изменяем $totalsumm = $this->orderDetails->getTotalPrice(); 
на 
if ($factpaid > 0) $totalsumm = $factpaid + $deliverysum;
 
2.2 добавляем блок

if ($orderid) {
					$query = $db->getQuery(true);
					$query = "UPDATE #__user_bonus SET bonus_date = '".date('Y-m-d')."', active = '1' WHERE id = '".$orderid->id."'";
					$db->setQuery((string)$query);
					$db->query();
				} else {
					$query = $db->getQuery(true);
					$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$user_id->created_by."', '".$order_id."', '".$bonuscanuse."', '".$userbonus."', '".$factpaid."', 'Оплата заказа №".$order_id."', '".date('Y-m-d')."', '1')";
					$db->setQuery((string)$query);
					$db->query();
				}
3. zoo/jbuniversal/assets/js/jquery.jbzootools.min.js 
Что делаем - меняем кол-во товаров в корзине (в данном файле используется не сжатый вариант скрипта)

$("#bonuscheckbox").removeAttr("checked");
				countbonus();
				userbonus = 0;
				applybonus();
	    else $totalsumm = $this->orderDetails->getTotalPrice();
4. zoo/jbuniversal/elements/jbbasketitems/jbbasketitems.php
Что делаем - передача нужной суммы с учетом бонусов и доставки в робокассу

$session = JFactory::getSession();
		$userbonusarr = $session->get('items-' . $this->getItem()->id . '-' . $this->identifier, '0', 'ElementJBBasketItems');
		$userbonus = $userbonusarr["userbonus"];
		$deliverysum = $userbonusarr["deliverysum"];

4.1 замена строки  return round($summa, 2); на return round($summa - $userbonus + $deliverysum, 2);

 

 
4.2
Что делаем - при изменении в админки статуса заказа - начисляются бонусы

$db = JFactory::getDBO();
				$order_id = $this->getItem()->id;
		
				if ($order_id > 0) {		
					$query = $db->getQuery(true);
					$query->select("id");
					$query->from('#__user_bonus');
					$query->where("order_id = '".$order_id."'");
					$db->setQuery((string)$query);
					$orderid = $db->loadObject();
			
					$query = $db->getQuery(true);
					$query->select("elements, created_by");
					$query->from('#__zoo_item');
					$query->where("id = '".$order_id."'");
					$db->setQuery((string)$query);
					$user_id = $db->loadObject();
					$elements = json_decode($user_id->elements);
		
					$query = $db->getQuery(true);
					$query->select("SUM(factpaid) as totalfactpaid");
					$query->from('#__user_bonus');
					$query->where("((user_id = '".$user_id->created_by."') AND (active = '1'))");
					$db->setQuery((string)$query);
					$result = $db->loadObject();
					$totalfactpaid = $result->totalfactpaid;
				
					$userbonus = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->userbonus;
					$bonussumm = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->bonussumm;
					$factpaid  = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->factpaid;
					//$deliverysum  = $elements->{"1af7e792-bcff-4a6c-9bdb-dd5023b0251a"}->deliverysum;
				
					if ($bonussumm < $factpaid) $bonuscanuse = $bonussumm;
					else $bonuscanuse = $factpaid;
				
					if ($totalfactpaid > 15000) $bonuscanuse = intval($bonuscanuse / 1000) * 100;
					elseif ($totalfactpaid > 10000) $bonuscanuse = intval($bonuscanuse / 1000) * 70;
					elseif ($totalfactpaid > 5000) $bonuscanuse = intval($bonuscanuse / 1000) * 50;
					else $bonuscanuse = intval($bonuscanuse / 1000) * 30;
		
					if ($orderInfo["status"] == "paid") {
						if ($orderid) {
							$query = $db->getQuery(true);
							$query = "UPDATE #__user_bonus SET bonus_date = '".date('Y-m-d')."', active = '1' WHERE id = '".$orderid->id."'";
							$db->setQuery((string)$query);
							$db->query();
						} else {
							$query = $db->getQuery(true);
							$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$user_id->created_by."', '".$order_id."', '".$bonuscanuse."', '".$userbonus."', '".$factpaid."', 'Оплата заказа №".$this->getItem()->id."', '".date('Y-m-d')."', '1')";
							$db->setQuery((string)$query);
							$db->query();
						}
					} else {
						if ($orderid) {
							$query = $db->getQuery(true);
							$query = "UPDATE #__user_bonus SET active = '0' WHERE order_id = '".$order_id."'";
							$db->setQuery((string)$query);
							$db->query();
						} else {
							$query = $db->getQuery(true);
							$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$user_id->created_by."', '".$order_id."', '".$bonuscanuse."', '".$userbonus."', '".$factpaid."', 'Оплата заказа №".$this->getItem()->id."', '".date('Y-m-d')."', '0')";
							$db->setQuery((string)$query);
							$db->query();
						}	
					}
				}

4.3
Что делаем - запись в заказ содержимого сессии

$session = JFactory::getSession();
		$userbonus = $session->get('userbonus', '0', 'jbzoo');
		$bonussumm = $session->get('bonussumm', '0', 'jbzoo');
		$factpaid  = $session->get('factpaid', '0', 'jbzoo');
		$deliverysum  = $session->get('deliverysum', '0', 'jbzoo');
		
		if ($userbonus > 0) $saveData["userbonus"] = $userbonus;
		if ($bonussumm > 0) $saveData["bonussumm"] = $bonussumm;
		if ($factpaid > 0) $saveData["factpaid"]  = $factpaid;
		if ($deliverysum > 0) $saveData["deliverysum"]  = $deliverysum;
5. zoo/jbuniversal/elements/jbbasketitems/tmpl/jbbasketitems.php
Что делаем - вычисление текущих бонусов

$db = JFactory::getDBO();
$curuser =& JFactory::getUser();
$session = JFactory::getSession();
$userbonusarr = $session->get('items-' . $this->getItem()->id . '-' . $this->identifier, '0', 'ElementJBBasketItems');
$userbonus = $userbonusarr["userbonus"];
$deliverysum = $userbonusarr["deliverysum"];

if ($userbonus == "") $userbonus = 0;

$query = $db->getQuery(true);
$query->select("SUM(bonus) as bonus");
$query->from('#__user_bonus');
$query->where("((user_id = '".$curuser->id."') AND (bonus_date < '".date('Y-m-d')."') AND (active = '1'))");
$db->setQuery((string)$query);
$result = $db->loadObject();
$totalbonus = $result->bonus;

$query = $db->getQuery(true);
$query->select("SUM(bonusminus) as bonusminus");
$query->from('#__user_bonus');
$query->where("((user_id = '".$curuser->id."') AND (active = '1'))");
$db->setQuery((string)$query);
$result = $db->loadObject();
$totalbonus -= $result->bonusminus;
5.1 Добавление
<p style="text-align:right">У Вас: <?php echo $totalbonus ?> бонусов.</p>
 

5.2 
Что делаем - вывод после нажатия оформить заказ

<tfoot>
            <tr id="trbonus">
    			<td colspan="4">&nbsp;</td>
		        <td colspan="2">Использовано <?php echo $userbonus ?> бонусов</td>
		    </tr>
            <tr>
                <td colspan="3">&nbsp;</td>
                <td><strong><?php echo JText::_('JBZOO_CART_TOTAL'); ?>:</strong></td>
                <td class="jsTotalCount"><?php echo $count; ?></td>
                <td class="jsTotalPrice"><?php echo $this->app->jbmoney->toFormat($summa, $currency); ?></td>
            </tr>
            <tr>
    			<td colspan="3">&nbsp;</td>
		        <td colspan="2"><strong>Стоимость доставки:</strong></td>
                <td><?php echo $this->app->jbmoney->toFormat($deliverysum, $currency); ?></td>
		    </tr>
            <tr id="tritogo">
    			<td colspan="3">&nbsp;</td>
		        <td colspan="2"><strong>ИТОГО:</strong></td>
                <td><?php echo $this->app->jbmoney->toFormat($summa - $userbonus + $deliverysum, $currency); ?></td>
		    </tr>
            </tfoot>

6. zoo/jbuniversal/templates/catalog/render/basket/_default.php 

?> <script type="text/javascript">
var elweightarr = [];
</script><?php

$db = JFactory::getDBO();
$curuser =& JFactory::getUser();
$session = JFactory::getSession();
$userbonus = $session->get('userbonus', '0', 'jbzoo');

$query = $db->getQuery(true);
$query->select("SUM(bonus) as bonus");
$query->from('#__user_bonus');
$query->where("((user_id = '".$curuser->id."') AND (bonus_date < '".date('Y-m-d')."') AND (active = '1'))");
$db->setQuery((string)$query);
$result = $db->loadObject();
$totalbonus = $result->bonus;

$query = $db->getQuery(true);
$query->select("SUM(bonusminus) as bonusminus");
$query->from('#__user_bonus');
$query->where("((user_id = '".$curuser->id."') AND (active = '1'))");
$db->setQuery((string)$query);
$result = $db->loadObject();
$totalbonus -= $result->bonusminus;
$bonuscanuse = 0;
6.1
<p style="text-align:right">У Вас: <?php echo $totalbonus ?> бонусов.</p>
 
6.2
$totalweight = 0;
 
6.3
Что делаем - проверка что товар без скидки для начисления бонусов... вычисление общего веса для ems

$curelement = $item->getElement('b0d2b218-87a9-4573-85b7-350d2eec1061');
		$data = (array)$curelement->data();	
		if ($data['basic']['discount'] == 0) $bonusclass = "hasbonus";
		else $bonusclass = "";
		
		$elementweight = $item->getElement('1a81724a-b570-4f7f-9bca-27781a86013b');
		$data2 = (array)$elementweight->data();
		$weight = $data2['0']['value'];
		$totalweight += $weight * $basketItem['quantity'];
		?>
        <script type="text/javascript">
			elweightarr[<?php echo $i ?>] = <?php echo $weight ?>;
		</script>
        <?php
6.4 
Что делаем - добавление класса
 
 echo '<td class="jsSubtotal '.$bonusclass.'">' . $this->app->jbmoney->toFormat($subtotal, $currencyConvert) . '</td>';
 

6.5
Что делаем - вычисления доступного для использования бонусов

$summa20 = $summa * 0.2;
	if ($summa20 > 10) {
		if ($summa20 >= $totalbonus) $bonuscanuse = $totalbonus;
		else  {
			$bonuscanuse = intval($summa20 / 10) * 10;
		}
	}

6.6

<tr>
		<td colspan="4">&nbsp;</td>
       	<td id="tdbonuscanuse" colspan="3"><strong>Использовать <?php echo $bonuscanuse ?> бонусов</strong></td>
        <td><center><input type="checkbox" id="bonuscheckbox" name="bonuscheckbox"  onclick="applybonus()" <?php if ($userbonus > 0) {echo "checked=\"checked\"";} ?>/></center></td>
	</tr>
    <tr>
		<td colspan="4">&nbsp;</td>
       	<td id="tddeliverytext" colspan="2"><strong>Стоимость доставки</strong></td>
        <td id="tddelivery" colspan="2">0 р.</td>
	</tr>
    <tr>
		<td colspan="4">&nbsp;</td>
       	<td colspan="2"><strong>Общий вес (кг)</strong></td>
        <td id="tdweight" colspan="2"><?php echo $totalweight ?></td>
	</tr>
    <tr>
		<td colspan="4">&nbsp;</td>
       	<td id="tdbonuscanuse" colspan="2"><strong>ИТОГО</strong></td>
        <td id="tditogo" colspan="2"><?php echo $this->app->jbmoney->toFormat($summa, $currencyConvert); ?></td>
	</tr>

6.7

var userbonus = <?php echo $userbonus ?>;
	var totalbonus = <?php echo $totalbonus ?>;
	var summa20 = 0;
	var bonuscanuse = 0;
	var totalsum = 0;
	var newtotalsum = 0;
	var factpaid = 0;
	var bonussumm = 0;
	var deliverytype1 = "";
	var deliverytype2 = "";
	var itogo = 0;
	var delivery = 0;
	var weight = 0;
	var emsstat = "";
	var emsprice = 0;
	var emsmin = 0;
	var emsmax = 0;
		
	function countbonus() {
		totalsum = parseFloat(jQuery("#jbzoo td.jsTotalPrice").html().replace(/ р./, '').replace(/,/, '.').replace(/ /, ''));
		summa20 = round(totalsum * 0.2,2);
		bonuscanuse = 0;
		if (summa20 > 10) {
			if (summa20 >= totalbonus) bonuscanuse = totalbonus;
			else {
				bonuscanuse = parseInt(summa20 / 10) * 10;
			}
		}
		jQuery("#tdbonuscanuse").html("<strong>Использовать " + bonuscanuse + " бонусов</strong>");
		return bonuscanuse;
	}
	
	function applybonus() {
		weight = 0;
		jQuery('.hasbonus').each(function(i, el) { bonussumm += parseFloat(jQuery(el).html().replace(/ р./, '').replace(/,/, '.').replace(/ /, '')); });
		jQuery('#jbzoo input.input-quantity').each(function(i, el) { weight += round(elweightarr[i] * parseFloat(jQuery(el).val()),3); });
		
		deliverytype1 = jQuery('select[name="elements[37d3a0c7-9446-48ff-a0a1-7476aef328b8][0][list-0]"] option:selected').val();
		deliverytype2 = jQuery('select[name="elements[37d3a0c7-9446-48ff-a0a1-7476aef328b8][0][list-1]"] option:selected').val();
		
		if (jQuery("#bonuscheckbox").prop("checked")) {	
			userbonus = countbonus();
			newtotalsum = round(totalsum - bonuscanuse,2);		
		} else {
			totalsum = parseFloat(jQuery("#jbzoo td.jsTotalPrice").html().replace(/ р./, '').replace(/,/, '.').replace(/ /, ''));
			newtotalsum = totalsum;
			userbonus = 0;
		}
		
		switch (deliverytype1) {
			case "Самовывоз"           : {jQuery("#tddelivery").html("0 р."); delivery = 0; jQuery("#tddeliverytext").html("<strong>Стоимость доставки</strong>"); break;}
			case "Доставка курьером"   : {jQuery("#tddeliverytext").html("<strong>Стоимость доставки</strong>");					
										  switch (deliverytype2) {
case "Доставка по г. Самара"                                                                   : {

	if (newtotalsum > 2000) {jQuery("#tddelivery").html("0 р."); delivery = 0;}
	else {jQuery("#tddelivery").html("150 р."); delivery = 150;};
	break;}
case "п.Запанской, п.Мясокомбинат,Зубчаниновка от ул.Магистральной до поста ДПС"               : {jQuery("#tddelivery").html("200 р."); delivery = 200; break;}
case "п.Красная Глинка, п.Сухая Самарка, п.Мехзавод, п.Управленческий, 116-й км, п.Смышляевка" : {jQuery("#tddelivery").html("350 р."); delivery = 350; break;}
case "с.Красный Яр, с.Малая Царевщина, п.Волжский"                                             : {jQuery("#tddelivery").html("680 р."); delivery = 680; break;}
case "г.Кинель, с.Курумоч"               													   : {jQuery("#tddelivery").html("765 р."); delivery = 765; break;}
case "г.Тольятти"              																   : {jQuery("#tddelivery").html("1 400 р."); delivery = 1400; break;}
case "г.Отрадный, г.Жигулевск"      												           : {jQuery("#tddelivery").html("1 600 р."); delivery = 1600; break;}
case "г.Нефтегорск"         															       : {jQuery("#tddelivery").html("1 760 р."); delivery = 1760; break;}
case "г.Сергиевск"         															 	       : {jQuery("#tddelivery").html("2 050 р."); delivery = 2050; break;}
case "г.Сызрань"         																       : {jQuery("#tddelivery").html("2 900 р."); delivery = 2900; break;}
default                                   												       : {jQuery("#tddelivery").html("0 р."); delivery = 0; break;}
										  }; break;}
			case "Доставка почтой ЕМС" : {delivery = 0; applyems(weight); break;}
			default                    : {jQuery("#tddelivery").html("0 р."); delivery = 0; break;}
		};
		itogo = newtotalsum + delivery;
		jQuery("#tditogo").html(itogo + " р.");
		jQuery("#tdweight").html(round(weight,3));

		jQuery.ajax({
   			type: "POST",
			url: "index.php?option=com_zoo&controller=basket&task=setbonus",
			data: "userbonus=" + userbonus + "&bonussumm=" + bonussumm + "&factpaid=" + newtotalsum + "&deliverysum=" + delivery,
			dataType: 'html',
			async: false
 		});
	}

	function round(a,b) {
 		b=b || 0;
 		return Math.round(a*Math.pow(10,b))/Math.pow(10,b);
	}
	
	function applyems(weight) {
		if (deliverytype1 == "Доставка почтой ЕМС") {
			from = "city--samara";
			to = "city--" + jQuery('select[name="elements[fe492a91-951e-4e06-9054-3df8af796f8a][option][]"] option:selected').val();
		
			jQuery.ajax({
	   			type: "GET",
				url: "http://emspost.ru/api/rest?method=ems.calculate&from=" + from + "&to=" + to + "&weight=" + weight + "",
				dataType: 'jsonp',
				crossDomain: true,
				async: false,
				success: function(data){
					emsstat = data.rsp.stat;
					if (emsstat == "ok") {
						emsprice = data.rsp.price;
						emsmin = data.rsp.term.min;
						emsmax = data.rsp.term.max;
						jQuery("#tddeliverytext").html("<strong>Стоимость доставки</strong><br />от " + emsmin + " до " + emsmax + " дней");
						jQuery("#tddelivery").html(emsprice + " р.");
						itogo = parseFloat(newtotalsum) + parseFloat(emsprice);
						jQuery("#tditogo").html(itogo + " р.");			
						jQuery.ajax({
							type: "POST",
							url: "index.php?option=com_zoo&controller=basket&task=setbonus",
							data: "userbonus=" + userbonus + "&bonussumm=" + bonussumm + "&factpaid=" + newtotalsum + "&deliverysum=" + emsprice,
							dataType: 'html',
							async: false
						});
					} else {
						alert("При обращении к серверу EMS произошла ошибка!   (" + data.rsp.err.code + "): " + data.rsp.err.msg);
					}
				}
			});
		}
	}
	
	jQuery(document).ready(function () {
		applybonus();
		jQuery('select[name="elements[37d3a0c7-9446-48ff-a0a1-7476aef328b8][0][list-1]"]').change(function(){
			applybonus();
		});
		jQuery('select[name="elements[fe492a91-951e-4e06-9054-3df8af796f8a][option][]"]').change(function(){
			applyems(weight);
		});
	});

7. components/com_users/models/registration.php

Что делаем - Начисление бонусов за регистрацию

$app = JFactory::getApplication('site');
		$componentParams = $app->getParams('com_bonussystem');
		$bonus = $componentParams->get('birthdaybonus', 200);
		$query = "INSERT INTO #__user_bonus (user_id, order_id, bonus, bonusminus, factpaid, event, bonus_date, active) VALUES ('".$userId."', '0', '".$bonus."', '0', '0', '".$bonus." бонусов за регистрацию', '".date('Y-m-d')."', '1')";
		$db->setQuery((string)$query);
		$db->query(); 

Пояснение по используемым id

 

1af7e792-bcff-4a6c-9bdb-dd5023b0251a - Jbzoo cart item, Basket element
 
b0d2b218-87a9-4573-85b7-350d2eec1061 - цена
 
1a81724a-b570-4f7f-9bca-27781a86013b - поле вес
 
37d3a0c7-9446-48ff-a0a1-7476aef328b8 - каскад селект для доставки
 
fe492a91-951e-4e06-9054-3df8af796f8a - селект городов в доставки ,созданный вручную
 
Здесь также решена проблема с доставкой (в том числе и ems - для ems обязательно наличие поле веса у товара).
 
Joomla: 2.5.19     JBZoo: 2.1.3 Pro     Zoo: 3.1.4 
 

Прикрепленные файлы

  • Прикрепленный файл  bonus.zip   45.22К   161 Количество загрузок:

Сообщение отредактировал Giadastar: 15 May 2014 - 20:25

  • 9

#2 Giadastar

Giadastar

Отправлено 15 May 2014 - 20:03

Скрины как это все на сайте выглядит (доставка доступна на выбор в 3-х вариантах - самоывоз, курьером (в зависимости от пункта доставки внесены стоимости) и ems (считается автоматом, но необходимо поле селект с городами, алиас города в строгом соответствии с тем что нужно ems)):

 

Прикрепленные изображения

  • бонусы при оформлении заказа.jpg
  • доставка1.jpg
  • доставка2.jpg
  • доставка3.jpg
  • доставка4.jpg
  • доставка5.jpg
  • доставка6.jpg
  • заказ перед оплатой.jpg
  • список приход-расход бонусов в личном кабинете.jpg

Сообщение отредактировал Giadastar: 15 May 2014 - 20:08

  • 4

#3 Giadastar

Giadastar

Отправлено 15 May 2014 - 20:10

*
Популярное сообщение!

И небольшой компонент для управления бонусами из админки (возможностей не очень много, но под конкретную задачу мне было достаточно). Дает управление над бонусами пользователей в ручном режиме + начисления бонусов на день рождения и задание произвольных дат-праздников для начисления бонусов. (дата и месяц в цифровом формате)

Прикрепленные изображения

  • управление бонусами.jpg
  • управление бонусами2.jpg
  • управление бонусами3.jpg
  • управление бонусами4.jpg
  • управление бонусами5.jpg

Прикрепленные файлы


Сообщение отредактировал Giadastar: 15 May 2014 - 20:18

  • 7

#4 i001

i001

Отправлено 23 May 2014 - 17:05

очень круто.


  • 0

#5 tapakan

tapakan

Отправлено 23 May 2014 - 19:41

Да, если оно работает как надо, действительно круто! Спасибо.


  • 0

#6 Giadastar

Giadastar

Отправлено 23 May 2014 - 20:41

Любое тестирование приветствуется (в ближайшее время на 3-й joomla буду тестировать)


Сообщение отредактировал Giadastar: 23 May 2014 - 20:46

  • 0

#7 laRus

laRus

Отправлено 13 October 2014 - 16:53

Оооо, это очень красиво!!! Обязательно попробую! Спасибо.  :)


  • 0
..minimum effort for maximum effect? - Oh yeah! It's good!..

#8 axeld

axeld

Отправлено 21 January 2016 - 19:11

Зачет.  :)


  • 0

#9 AlexsimA

AlexsimA

Отправлено 01 November 2016 - 17:16

Добрый день. А на Joomla 3 работает? Удалось протестировать?. Наверное не подойдет эта версия. Многое изменилось. А очень надо.


Сообщение отредактировал AlexsimA: 01 November 2016 - 17:17

  • 0
Никогда не сдаваться!

#10 registr

registr

Отправлено 11 December 2016 - 18:48

да, к сожалению на последних версиях глючит, и рад бы потестировать если актуально


  • 0





Темы с аналогичным тегами бонусная система, доставка, ems

Click to return to top of page in style!