Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Заказ в "1 клик" - basket.js

Автор samРаздел JS и AJAX

Ответов: 9
Просмотров: 5708
Последний ответ 04 Февраля 2015, 12:51:28
от sam
Как сделать "Заказ в 1 шаг" на сайте выведенном с UMI

Автор tbm-mРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 4138
Последний ответ 01 Января 2016, 06:47:54
от admin
Помогите пожалуйста с функционалом "Заказ в 1 клик"

Автор teamquatroРаздел Настройка системы и модулей

Ответов: 1
Просмотров: 1778
Последний ответ 19 Мая 2015, 11:27:45
от teamquatro
Добавление данных из объекта в форму "Заказ в 1 клик"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 5294
Последний ответ 11 Ноября 2014, 11:14:45
от Axiomateria
Вывести сумму заказа на странице "Заказ поступил в обработку"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 5149
Последний ответ 07 Ноября 2014, 23:46:49
от Axiomateria

0 Пользователей и 1 Гость просматривают эту тему.

*

stud_mai

  • *
  • 14
  • +0/-0
    • Просмотр профиля
Добрый вечер!

Интересует такой вопрос: кто-либо озадачивался проблемой настройки накопительной скидки если в корзине используется "заказ в 1 шаг", а не как в demodizzy пошаговый? Если кто-то делал такое, можете поподробнее описать действия

Заранее спасибо откликнувшимся!

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #1 : 10 Апреля 2016, 09:17:36 »
А в чем заключается проблема?

Насколько вижу, все решается достаточно стандартными средствами.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #2 : 10 Апреля 2016, 13:41:50 »
Согласен с e.ioffe: если вы используете "заказ в 1 шаг" именно как заказ в ЮМИ, то накопительная скидка работает как и для обычного заказа - по механизму скидок. Ведь заказ же создается как обычно - значит все применяется как и к любому другому заказу.
Мой блог http://umicms.me

*

stud_mai

  • *
  • 14
  • +0/-0
    • Просмотр профиля
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #3 : 10 Апреля 2016, 17:28:18 »
Возникают проблема следующего рода: так как используется "заказ в 1 шаг", при оформлении заказа этап оплаты бонусами пролетаем мимо, что видно из следующего кода (как в wiki "Оформление заказа в один шаг – xslt шаблонизатор", да и в classes\modules\emarket\__purchasing_one_step.php точно такое же написано):

//сохранение способа оплаты и редирект на итоговую страницу, либо страницу подтверждения оплаты.
  $order->setValue('payment_id', getRequest('payment-id'));
  $order->refresh();
 
  $paymentId = getRequest('payment-id');
  if(!$paymentId) {
    $this->errorNewMessage(getLabel('error-emarket-choose-payment'));
    $this->errorPanic();
  }
  $payment = payment::get($paymentId);
 
  if($payment instanceof payment) {
    $paymentName = $payment->getCodeName();
    $url = "{$this->pre_lang}/".cmsController::getInstance()->getUrlPrefix()."emarket/purchase/payment/{$paymentName}/";
  } else {
    $url = "{$this->pre_lang}/".cmsController::getInstance()->getUrlPrefix()."emarket/cart/";
  }
  $this->redirect($url);

Здесь мне становиться непонятно как и когда вызвать метод отвечающий за оплату бонусами. Ради интереса, пробовал, находясь в корзине с товаром, вбивать в адресную строку запрос вида mysite/emarket/purchase/payment/bonus/. Попадал на этап оплаты бонусами, далее если бонусов хватало на всю покупку, то выдавалась страница об успешном оформлении заказа, если нет, то предлагался выбор способа оплаты, затем опять успешное завершение оформления. Ни в том, ни в другом случае после оформления заказа в нем не было сохранено ни способа оплаты, ни адреса доставки. Также заметил, что если доставка выбиралась платной, то ее бонусами оплатить нельзя было, т.е. оплачивать можно только товары.
Есть ли какие-то мысли? Может это только мне не очевидно, т.к. недавно работаю в этой области :(

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #4 : 10 Апреля 2016, 21:26:25 »
А какой метод вы хотите вызывать для оплаты бонусами? Фактически: бонусы - это отдельное поле в каждом заказе. Туда можно написать какую-то сумму. И эта сумма вычтется (при соблюдении некоторых условий) из общей стоимости заказа. Так что просто делаете поле со смыслом "сколько бонусов потратить", сами проверяете, что бонусов можно потратить не больше, чем есть у клиента и все
Мой блог http://umicms.me

*

stud_mai

  • *
  • 14
  • +0/-0
    • Просмотр профиля
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #5 : 17 Апреля 2016, 19:56:08 »
Может кому понадобится... В общем, решил задачу переписав немного стандартный метод использования бонусов в заказе и их начисления покупателю. Кастомный метод использования бонусов в заказе описал в emarket/__custom.php:
public function applyBonus(){
$urlPrefix = cmsController::getInstance()->getUrlPrefix() ? (cmsController::getInstance()->getUrlPrefix() . '/') : '';
$order = $this->getBasketOrder();
$bonus = getRequest('bonus');
if ($bonus || $bonus === 0 || $bonus === '0') {
$order->setBonusDiscount($bonus);
$order->refresh();
if (!$order->getActualPrice()) {
$order->setPaymentStatus('accepted');
}
}
$this->redirect($this->pre_lang .'/'. $urlPrefix . 'emarket/cart/');
}

Также не надо забывать про permissions.custom.php:

$permissions = array('purchasing' => array('applyBonus'));

В xsl-шаблоне, описывающий вывод корзины, добавил следующее:
<xsl:if test="$bonus > 0">
  <tr>
      <td colspan="6" style="border:0;text-align:right;color:#408fd1;font-weight:bold;padding:2px 5px;">
Вы можете оплатить Ваш заказ накопленными бонусами. Доступно бонусов на <span id="bonus_available"><xsl:value-of select="$bonus" /></span> руб.
      </td>
      <td colspan="2" style="border:0;text-align:center;padding:2px 5px;">
            <input type="text" id="bonus_amount" name="bonus" placeholder="Введите кол-во бонусов"/>
      </td>
      <td style="border:0">
            <input type="button" id="bonus_apply" class="btn bonus_apply" value="Оплатить" />
      </td>
  </tr>
</xsl:if>

Далее остается только связать это дело ajax'ом:

$('#bonus_apply').live('click',function(e){
e.preventDefault();

//Вызов кастомного метода зачисления бонусов
$.ajax({
type: "POST",
url: '/emarket/applyBonus/',
data: $('#bonus_amount').serialize(),
success: function(response){

var totalPrice = $('#total_price').text().replace(/\s/g, ''),
deliveryPrice = $('#result_delivery_price').text(),
newDiscount = $(response).find('#result_discount').text().replace(/\s/g, ''),
bonusAvailable = $(response).find('#bonus_available').text(),
resultTotalPrice;

resultTotalPrice = +totalPrice + +deliveryPrice - +newDiscount;
$('#result_discount').text(newDiscount.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));
$('#result_total_price').text(String(resultTotalPrice).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));
$('#bonus_available').text(bonusAvailable);
}
});

});

Также была необходимость сделать зачисление бонусов покупателю всегда от полной стоимости покупки. Изменил строчку в функции addBonus в файле emarket/__events.php, описывающий события:
$price = $order->getActualPrice();
на
$price = $order->getOriginalPrice();

Понимаю, что это неправильно. Кто подскажет как это вынести в кастомный файл?

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Накопительные скидки и заказ в 1 шаг
« Ответ #6 : 17 Апреля 2016, 23:04:10 »
Ну вот с зачислением - это вы зря. Вам же нужно зачислить просто зная сколько. Это значит что нужно навесить свое событие и в нем записать в нужное место нужное число. Зачем же переписывать системные? После обновления системы все упадет и придется опять переделывать.
А остальное выглядит более-менее норм. По крайней мере с точки зрения обновления системы.
Мой блог http://umicms.me