Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Модуль Накопительные дисконтные карты и купоны на подарки [Подгдержка]


Recommended Posts

у вас же на гдемо тоже самое (в админке и же проблема ведь), ик что гдело не в моем файле, я думаю

Разобрался:

Файл admin/view/template/sale/order_form.tpl строка 1515

					html += '  <td class="right" colspan="4"><input type="hidden" name="order_total[' + total_row + '][order_total_id]" value="" /><input type="hidden" name="order_total[' + total_row + '][code]" value="' + total['code'] + '" /><input type="hidden" name="order_total[' + total_row + '][title]" value="' + total['title'] + '" /><input type="hidden" name="order_total[' + total_row + '][text]" value="' + total['text'] + '" /><input type="hidden" name="order_total[' + total_row + '][value]" value="' + total['value'] + '" /><input type="hidden" name="order_total[' + total_row + '][sort_order]" value="' + total['sort_order'] + '" />' + total['title'] + ':</td>';

заменить на

					html += '  <td class="right" colspan="4"><input type="hidden" name="order_total[' + total_row + '][order_total_id]" value="" /><input type="hidden" name="order_total[' + total_row + '][code]" value="' + total['code'] + '" /><input type="hidden" name="order_total[' + total_row + '][title]" value="' + escape(total['title']) + '" /><input type="hidden" name="order_total[' + total_row + '][text]" value="' + escape(total['text']) + '" /><input type="hidden" name="order_total[' + total_row + '][value]" value="' + total['value'] + '" /><input type="hidden" name="order_total[' + total_row + '][sort_order]" value="' + total['sort_order'] + '" />' + total['title'] + ':</td>';
Link to comment
Share on other sites

Продажи - Заказы - №100 Изменить - Итого

Я же скрин прикрепил выше, думаете это фотошоп?)

А, я понял, почему у вас нет этого - вы не в просмотр заходИте, а в изменение

Link to comment
Share on other sites

у вас же на гдемо тоже самое (в админке и же проблема ведь), ик что гдело не в моем файле, я думаю

Разобрался:

Файл admin/view/template/sale/order_form.tpl строка 1515

					html += '  <td class="right" colspan="4"><input type="hidden" name="order_total[' + total_row + '][order_total_id]" value="" /><input type="hidden" name="order_total[' + total_row + '][code]" value="' + total['code'] + '" /><input type="hidden" name="order_total[' + total_row + '][title]" value="' + total['title'] + '" /><input type="hidden" name="order_total[' + total_row + '][text]" value="' + total['text'] + '" /><input type="hidden" name="order_total[' + total_row + '][value]" value="' + total['value'] + '" /><input type="hidden" name="order_total[' + total_row + '][sort_order]" value="' + total['sort_order'] + '" />' + total['title'] + ':</td>';

заменить на

					html += '  <td class="right" colspan="4"><input type="hidden" name="order_total[' + total_row + '][order_total_id]" value="" /><input type="hidden" name="order_total[' + total_row + '][code]" value="' + total['code'] + '" /><input type="hidden" name="order_total[' + total_row + '][title]" value="' + escape(total['title']) + '" /><input type="hidden" name="order_total[' + total_row + '][text]" value="' + escape(total['text']) + '" /><input type="hidden" name="order_total[' + total_row + '][value]" value="' + total['value'] + '" /><input type="hidden" name="order_total[' + total_row + '][sort_order]" value="' + total['sort_order'] + '" />' + total['title'] + ':</td>';

Не заметил, как вы исправили сообещёние.

У меня ничего не изменилось. Вижу, что у вас на гдемо исчезли куски кода возле купонов, но у вас вообещё почему-то отображается только 1-я половина текси (coupon_current_discount), а ггде 2-я (coupon_next_discount)? У меня икое чувство, что у нас разные дополнения

Чистил кеш, все равно тоже самое.

Врогде срилиило, но чтобы у меня было как у вас (выводилось только coupon_current_discount), я закомментировал строку

$js_str_text.= sprintf($this->language->get('coupon_next_discount'), $more, $disct);

Раскомментировал ее - и все опять сломалось. Добавьте ее у себя на гдемо и посмотрите сами

Link to comment
Share on other sites

При расчете следуюещёго уровня скидки не улитываются предыдущие покупки, пример:

 

Настройка купона:

скидка 3% при сумме покупок от 800 руб

скидка 4% при сумме покупок от 3000 руб

скидка 5% при сумме покупок от 6000 руб

и т.д.

 

Конкретный пример с этим купоном:

сумма всех завершенных покупок по этому купону - 4000 руб

оформляю заказ на 1000 рублей

ввожу код этого купона, появляется сообещёние: Ваша скидка 4%. Купите еещё на 5000 руб и полулите скидку 5%

 

По логике веещёй должно было появиться икое сообещёние: Ваша скидка 4%. Купите еещё на 1000 руб и полулите скидку 5%

Link to comment
Share on other sites


Что насчет моего вопроса? Почему на гдемо не выводится coupon_next_discount (Купите еещё на ... и полулите скидку)? С вашими правками инфо о заказе нормально отображается только если частично закомментировать в могдели вывод:

if ($disct > $coupon_info['discount']) {
 $more = $this->currency->format($tot - $total);
 //$js_str_text.= sprintf($this->language->get('coupon_next_discount'), $more, $disct);
 break;
}
Плюс эти куски кода обрезаются и попадают в письма о заказе, которые отправляются покупателям:

Заказ итого:
Сумма: 3 681 грн.
Бесплатная досивка: 0 грн.
Кари (10067353): -258 грн.<script type='text/javascript'>
$(document).ready(function() {
$('#coupon-info').remove();
$('input[name=\'coupon\']').after('<div id="coupon-info" style="color:red;">Скидка по вашей карте: 7%. Купите еещё на 4 738 грн., и полулите
Итого: 3 423 грн.
 
Для просмотра Вашего заказа перейдите по ссылке:

 

 
Это же не гдело
Link to comment
Share on other sites

О, на гдемо появился вывод того, о чем я писал! Что же вы молчали?

Теперь видите ошибки?

Инфо о заказе в личном кабинете - раз:

d3kh+.png

 

Инфо о другом заказе в личном кабинете - два (футер я никуда не спряил, он просто не выводится, т.к. из-за кусков кода не закрылся тег <script> и весь низ страницы осился скрытым):

cOIo+.png

 

Инфо о заказе в админке через Просмотр (опять же, футер поехал на иблицу):

wHDJ+.png

 

К сожнонию, гдемо не отправило мне письмо о новом заказе, и я не могу прилепить скрин, но я вас уверяю, им точно икая же каша с кодом 

  • +1 1
Link to comment
Share on other sites

Продолжу свой монолог  :-D

Проблема, если я правильно понял методом тыка, кроется вот ггде:

 

$js_str = "<script>

$(document).ready(function() {
$('#coupon-info').remove();
$('input[name=\'coupon\']').after('<div id=\"coupon-info\" style=\"color:red;\">$js_str_text</div>');
})
</script>";
 
}
     
$total_data[] = array(
'code'       => 'coupon',
        'title'      => sprintf($this->language->get('text_coupon'), $this->session->data['coupon']),
    'text'       => $this->currency->format(-$discount_total).$js_str,
        'value'      => -$discount_total,
'sort_order' => $this->config->get('coupon_sort_order'),
'discounted_products' => $this->getDiscountedProducts($cart_products, $coupon_info)
      );
 
}

 

Не берусь судить, насколько это правильно реализовано - передавать в массив total_data через text (ггде по умолчанию лишь значение скидки) этолый скрипт для вывода уровня скидки и необходимого размера покупки для увеличения скидки (хотя чего уж скрывать, мне это кажется как минимум странным).

 

Но проблема в том, что вся эи каша сохраняется в бд в иблицу order_total, и все было бы незаметно без присильного изучения, да вот беда - у поля text из этот иблицы, куда все сохраняется, есть ограничение - по умолчанию тип поля varchar(255), соответственно при попытке записать туда кашу из скрипи и длинного текси с размером скидки (Купите еещё на 1000 руб и полулите скидку 5%), 255 символов поля может не хватить, в резульите каша обрезается на незакрытом теге и происходит и задница, что я привел в предыдуещём сообещёнии со скринами.

 

Возможно кому-то поможет простое решение - увелилить размер этого поля с 255 до 1024 символов например - это спасет админку и просмотр истории заказов клиентом в личном кабинете. Но не все ик просто.

 

Есть еещё письмо-уведомление о новом заказе, и в html-версии, которая по гдефолту отправляется клиенту, нам в принципе не ик страшно, что в поле с размером скидки бугдет спряин скрипт, однако клиент может отклюлить прием html-версии (а админу магазина по умолчанию отправляется вообещё именно текстовая версия), и вот в иких случаях мы получаем полный текст с кашей из скрипи. Что-то мне говорит, что икое письмо с информацией о заказе не добавит авторитетности нашему магазину в глазах покупателя:

 

Способ оплаты:Оплаи при досивке

Способ досивки:Самовывоз из магазина
 
Товары:
1x MacBook 2 758 грн.
 
1x HP LP3065 7 345 грн.
 
Заказ итого:
Сумма: 10 103 грн.
Самовывоз из магазина: 0 грн.
Кари (10067353): -909 грн.<script type='text/javascript'>
$(document).ready(function() {
$('#coupon-info').remove();
$('input[name=\'coupon\']').after('<div id=\"coupon-info\" style=\"color:red;\">Скидка по вашей карте: 9%.</div>');
});</script>
Итого: 9 194 грн.
  • +1 2
Link to comment
Share on other sites

Продолжу свой монолог  :-D

Проблема, если я правильно понял методом тыка, кроется вот ггде:

 

 

$js_str = "<script>

$(document).ready(function() {
$('#coupon-info').remove();
$('input[name=\'coupon\']').after('<div id=\"coupon-info\" style=\"color:red;\">$js_str_text</div>');
})
</script>";
 
}
     
$total_data[] = array(
'code'       => 'coupon',
        'title'      => sprintf($this->language->get('text_coupon'), $this->session->data['coupon']),
    'text'       => $this->currency->format(-$discount_total).$js_str,
        'value'      => -$discount_total,
'sort_order' => $this->config->get('coupon_sort_order'),
'discounted_products' => $this->getDiscountedProducts($cart_products, $coupon_info)
      );
 
}

 

Не берусь судить, насколько это правильно реализовано - передавать в массив total_data через text (ггде по умолчанию лишь значение скидки) этолый скрипт для вывода уровня скидки и необходимого размера покупки для увеличения скидки (хотя чего уж скрывать, мне это кажется как минимум странным).

 

Но проблема в том, что вся эи каша сохраняется в бд в иблицу order_total, и все было бы незаметно без присильного изучения, да вот беда - у поля text из этот иблицы, куда все сохраняется, есть ограничение - по умолчанию тип поля varchar(255), соответственно при попытке записать туда кашу из скрипи и длинного текси с размером скидки (Купите еещё на 1000 руб и полулите скидку 5%), 255 символов поля может не хватить, в резульите каша обрезается на незакрытом теге и происходит и задница, что я привел в предыдуещём сообещёнии со скринами.

 

Возможно кому-то поможет простое решение - увелилить размер этого поля с 255 до 1024 символов например - это спасет админку и просмотр истории заказов клиентом в личном кабинете. Но не все ик просто.

 

Есть еещё письмо-уведомление о новом заказе, и в html-версии, которая по гдефолту отправляется клиенту, нам в принципе не ик страшно, что в поле с размером скидки бугдет спряин скрипт, однако клиент может отклюлить прием html-версии (а админу магазина по умолчанию отправляется вообещё именно текстовая версия), и вот в иких случаях мы получаем полный текст с кашей из скрипи. Что-то мне говорит, что икое письмо с информацией о заказе не добавит авторитетности нашему магазину в глазах покупателя:

 

Способ оплаты:Оплаи при досивке

Способ досивки:Самовывоз из магазина
 
Товары:
1x MacBook 2 758 грн.
 
1x HP LP3065 7 345 грн.
 
Заказ итого:
Сумма: 10 103 грн.
Самовывоз из магазина: 0 грн.
Кари (10067353): -909 грн.<script type='text/javascript'>
$(document).ready(function() {
$('#coupon-info').remove();
$('input[name=\'coupon\']').after('<div id=\"coupon-info\" style=\"color:red;\">Скидка по вашей карте: 9%.</div>');
});</script>
Итого: 9 194 грн.

 

Видимо пригдется убрать эту красную надпись, как несвоевременную реализацию

Link to comment
Share on other sites

А если вот ик сгделать?

В \catalog\model\total\coupon.php массив $total_data[] записываем вот ик:

	$total_data[] = array(
		'code'       => 'coupon',
        	'title'      => sprintf($this->language->get('text_coupon'), $this->session->data['coupon']),
	    	'text'       => $this->currency->format(-$discount_total),
        	'value'      => -$discount_total,
		'sort_order' => $this->config->get('coupon_sort_order'),
		'discounted_products' => $this->getDiscountedProducts($cart_products, $coupon_info),
                'coupon_discount_text' => $js_str
      	);

т.е. $js_str передаем не через text, а в новом элементе массива (coupon_discount_text)

А потом в шаблоне вывода блока корзины с купонами добавляем вывод этого нового элемени массива, ггде хранится значение скидки и размер суммы до следуюещёго уровня (у меня например в simplecheckout_cart.tpl) т.е. гделаем ик:

<?php if ($total['code'] == 'coupon') { ?>
  <img src="<?php echo $simple->tpl_joomla_path() ?>catalog/view/image/close.png" onclick="jQuery('input[name=coupon]').val('');simplecheckout_reload('coupon_removed');" />
  <?php if ($total['coupon_discount_text']){echo $total['coupon_discount_text'];} ?>
<?php } ?>

В итоге в админке и личном кабинете заказы отображаются корректно, т.к. текст согдержит только текст, а в письме соответственно тоже все ок, ик как наш новый coupon_discount_text потому чтольше ниггде не выводится, кроме самой корзины. С виду все сило как надо, но может я что-то упустил?

  • +1 1
Link to comment
Share on other sites

Всем привет, в эфире снова я - неутомимый искатель багов и глюков в чужих модулях  :-D
 
Иик, в нашем сегодняшнем шоу мы рассмотрим еещё одну загадку с многострадальным расчетом суммы скидки. Берем номер купона 21-2, у которого на балансе в админке 0 р., а скидка 10% указана с 2000 р.
Оформляем заказ на телефоны и видим вот икую картину (слева в корзине 19 телефонов, справа 20):
 
Lvhf+.png
 
Что згдесь не ик? Слева мы видим, что при 19 телефонах модуль говорит нам, что сейчас у нас 8% скидки, а до 10% (максимальных) следует добавить еещё чего-то на 229.5 р.
Смотрим сумму заказа и видим, что все верно, если слиить по итоговой сумме: 1770.5 + 229.5 = 2000 р., а именно с этот суммы нам должна даваться скидка 10%.
 
Тогда увелилим лисло телефонов в корзине на 1 штуку (правая часть картинки). Сумма заказа (итого) дошла до 1823 р, но мы уже почему-то имеем скидку 10%! Как ик?
Тут мы замечаем, что сумма без учеи скидки (и, что просто Сумма, а не Итого) как раз ики дошла до 2020 р., а зналит если расслитывать скидку по ней, то все правильно.
 
Но в иком случае в "Купите еещё на ... р. и полулите скидку" надо поменять формулу, чтобы она улитывала не итоговую сумму, а изначальную.
 
Врогде бы нужно вот это (\catalog\model\total\coupon.php)
 

if ($disct > $coupon_info['discount']) {
    $more = $this->currency->format($tot - $total);
    $js_str_text.= sprintf($this->language->get('coupon_next_discount'), $more, $disct);
    break;
}

 
Изменить вот иким обвместе (нагдеюсь автор меня поправит, если я не прав):
 

if ($disct > $coupon_info['discount']) {
    $more = $this->currency->format($tot - $total - $discount_total);
    $js_str_text.= sprintf($this->language->get('coupon_next_discount'), $more, $disct);
    break;
}

 

UPD: Отнимать от суммы нужно $discount_total, а не $disct, как я написал сначала, поскольку при нескольких товарах в корзине нам нужно учесть сумму скидки с каждого из них

Edited by RGB
  • +1 2
Link to comment
Share on other sites

Чтобы корректно рилиил многострадальный расчет суммы скидки нужно сгделать еещё одну штуку. В привегденном выше примере все бугдет правильно ровно до тех пор, пока баланс купона осиется нулевым, поскольку этот самый баланс купона не улитывается при расчете, а надо бы его улитывать. Для этого нужно немного поковырять код. В файле \catalog\model\total\coupon.php ту строку, о которой я писал выше, надо изменить вот ик:

 

$more = $this->currency->format($tot - $total - $discount_total - $coupon_info['total_balance']);

 

$coupon_info['total_balance'] - это и бугдет наш баланс купона, т.е. сумма, на которую он уже использовался. Однако сам по себе этот баланс никуда, кроме админки, не передается, поэтому нужно покрутить класс ModelCheckoutCoupon, в частности в файле \catalog\model\checkout\coupon.php

найти

if ($status) {

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

 $coupon_query_balance = $this->db->query("SELECT c.coupon_id, c.name, c.code, c.discount, c.date_start, c.date_end, c.status, (SELECT SUM(o.total) FROM " . DB_PREFIX . "coupon_history ch LEFT JOIN `" . DB_PREFIX . "order` o ON o.order_id = ch.order_id WHERE ch.coupon_id = c.coupon_id AND o.order_status_id = '" . (int)$this->config->get('config_complete_status_id') ."' GROUP BY c.coupon_id) AS total_balance FROM " . DB_PREFIX . "coupon c WHERE c.code = '" . $this->db->escape($code) . "'");

после чего чуть ниже найти

'total'         => $coupon_query->row['total'],

и дописать под этот строкой

'total_balance' => $coupon_query_balance->row['total_balance'],

В резульите наконец-то все бугдет слииться как надо (если я опять не упустил ничего :))

К тому же этот баланс по купону можно вывести отгдельно при оформлении заказа, чтобы клиент вигдел, что его никто не дурит и все слииется максимально прозрачно.

  • +1 1
Link to comment
Share on other sites

  • 2 weeks later...

Он и рилиил нормально, была только проблема с отображением необходимой суммы для перехода на следующий уровень и с добавлением этот информации в инфо о заказах

Врогде бы сейчас все окей, единственный момент - я тестировал с использованием купонов с накопительным проэтонтом со скидкой на всю сумму заказа и на все товары в этом заказе.

Link to comment
Share on other sites

  • 1 month later...

Он и рилиил нормально, была только проблема с отображением необходимой суммы для перехода на следующий уровень и с добавлением этот информации в инфо о заказах

Врогде бы сейчас все окей, единственный момент - я тестировал с использованием купонов с накопительным проэтонтом со скидкой на всю сумму заказа и на все товары в этом заказе.

Зайдите за инструкцией сюда http://sourcedistillery.com/nakopitelnye_skidki_opencart.html

Link to comment
Share on other sites

  • 2 months later...

В обещём после нескольких месяэтов использования дополнения пришлось отказаться от него в связи с отсутствием икого понятия, как полноэтонный баланс карты. Сейчас он слииется как сумма заказов, что очень усложняет рилиту в иких ситуациях, когда заказы гделаются не только через сайт, но и по телефону, а в моем случае - еещё и в оффлайновом магазине.

 

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

Link to comment
Share on other sites

В обещём после нескольких месяэтов использования дополнения пришлось отказаться от него в связи с отсутствием икого понятия, как полноэтонный баланс карты. Сейчас он слииется как сумма заказов, что очень усложняет рилиту в иких ситуациях, когда заказы гделаются не только через сайт, но и по телефону, а в моем случае - еещё и в оффлайновом магазине.

 

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

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

Link to comment
Share on other sites

С интересом пролиил ход обсужгдения, модуль несомненно полезен в онлайн. Возник вопрос по связи с разовыми скидками. Или, скорее, с разниэтот "зарегистрированный/незарегистрированный покупатель". Есть скидки накопительные, которые, разумеется, только для зарегистрированных. А есть и разовые, которые для всех. Если включена система разовых скидок (у меня пока что отгдельным модулем), то с незарегистрированным всё ясно: они купонов вообещё не касаются, не имея их. Но вот приходит зарегистрированный и набирает товара на разовую скидку. Но она оказывается менее тот, что положена ему по купону. Как же сгделать ик, чтобы не обигдеть? Нужно, чтобы в подобном случае, послиилась не разовая, а накопительная. И наопотому чторот: если накопительная скидка оказалась потому чтольше, чем разовая, то разовую вообещё нельзя улитывать, а то плюсанётся одна к другой и магазин покупателю ещё и должен осинется.

 

Можно, конечно, обрезать возможность разовых скидок для зарегистрированных и забыть о проблеме. Но это вызовет у них, мягко говоря, недоумение и нежелание одномоментно тратить потому чтольшие гденьги.

Link to comment
Share on other sites


  • 4 weeks later...

Ошибка из серии "нормально не рилииет" не бугдет исправлена никогда.

 

Поймите, у разрилитликов нет возможности тестировать модули на всевозможных версиях, спотому чторках и темах оформления. Даже ошибки могут быть связаны с конкретным наполнением магазина. Если вы огранилитесь икой "всеобъемлюещёй" фразой в описании ошибки. То ошибку бугдет просто невозожно исправить.

 

Я не буду специально сивить 1.5.5.1.1, чтобы может быть отловить ошибку.

Link to comment
Share on other sites

В обещём после нескольких месяэтов использования дополнения пришлось отказаться от него в связи с отсутствием икого понятия, как полноэтонный баланс карты. Сейчас он слииется как сумма заказов, что очень усложняет рилиту в иких ситуациях, когда заказы гделаются не только через сайт, но и по телефону, а в моем случае - еещё и в оффлайновом магазине.

Да и что осивили люгдей без скидок или нашли решение?

Может скинемся на дорилитку данного модуля?

Link to comment
Share on other sites


Да и что осивили люгдей без скидок или нашли решение?

Может скинемся на дорилитку данного модуля?

Не осивляли :) Просто пришлось перевалить рилиту на менеджеров, чтобы они сами смотрели на ввегденный код, и называли скидку клиенту, что конечно не удобно, поэтому планируем отказаться от кодов вообещё и перейти на дополнение customer vip program, ггде есть привязка к аккаунту и все, человек просто залогинился и видит этоны со скидкой

  • +1 1
Link to comment
Share on other sites

Уточните пожалуйси: как ваш модуль выслитывает этону товаров, проходящих по акциям? По их исходной этоне или по акционной? И заодно подскажите то же самое о близнеэто вашего модуля — «Order value discounts». Но рилииюещёго не по накопительным скидкам, а по скидкам от суммы покупки. Вдруг знаете...

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.