+7 (843) 207-00-36 - Казань
+7 (495) 003-78-65 - Москва
+7 (843) 207-00-36 - Казань
+7 (495) 003-78-65 - Москва

Внедрение бонусной системы в кастомный шаблон компонента оформления заказа

Новый вариант шаблона битрикс

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

Примеры кода Вы также, можете посмотреть в шаблоне new_logictim_bonus

Участки кода, которые необходимо добавить:

  1. файл /bitrix/components/bitrix/sale.order.ajax/templates/new_logictim_bonus/order_ajax.js

    Скрываем свойства заказа с бонусами:
    в метод
    getPropertyRowNode: function(property, propsItemsContainer, disabled)
    перед
    propsItemsContainer.appendChild(propsItemNode);
    вставляем код (чтобы указанная выше строка попадала под условие)
    if(property.getSettings().CODE != 'LOGICTIM_ADD_BONUS' && property.getSettings().CODE != 'LOGICTIM_PAYMENT_BONUS')


    Выводим информацию, сколькими бонусами оплачивают заказ:
    в метод
    editTotalBlock: function()
    перед
    if (this.options.showPayedFromInnerBudget)
    вставляем
    <!--LOGICTIM_BONUS-->
    //console.log(this.result.LOGICTIM_BONUS);
    if(this.result.LOGICTIM_BONUS != null && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y')
    {
        if(this.BXFormPosting == true)
        {
            var logictimPayBonus = this.result.LOGICTIM_BONUS.PAY_BONUS;
            var logictimPayBonusFormated = this.result.LOGICTIM_BONUS.PAY_BONUS_FORMATED;
            if(this.result.LOGICTIM_BONUS.INPUT_BONUS == '-')
            {
                logictimPayBonus = 0;
                this.result.TOTAL.ORDER_TOTAL_PRICE_FORMATED = this.result.LOGICTIM_BONUS.ORDER_SUM_FORMATED;
            }
        }
        else
        {
            var logictimPayBonus = this.result.LOGICTIM_BONUS.PAY_BONUS_NO_POST;
            var logictimPayBonusFormated = this.result.LOGICTIM_BONUS.PAY_BONUS_NO_POST_FORMATED;
        }
        
        if(logictimPayBonus >= 0)
        {
            var logictimPayBonusText = this.result.LOGICTIM_BONUS.TEXT_BONUS_PAY;
            
            if(logictimPayBonus > 0)
            this.totalInfoBlockNode.appendChild(this.createTotalUnit(logictimPayBonusText, '<span>'+logictimPayBonusFormated+'</span>'));
            
            var orderPropPaymentBonusId = this.result.LOGICTIM_BONUS.ORDER_PROP_PAYMENT_BONUS_ID;
            
            if(BX('LOGICTIM_PAYMENT_BONUS'))
            {
                if(BX('LOGICTIM_PAYMENT_BONUS').name != 'ORDER_PROP_'+orderPropPaymentBonusId)
                {
                    BX.adjust(BX('LOGICTIM_PAYMENT_BONUS'), {attrs: {name: 'ORDER_PROP_'+orderPropPaymentBonusId}});
                }
                
                var logictimPayInput = BX('LOGICTIM_PAYMENT_BONUS').value;
                BX('LOGICTIM_PAYMENT_BONUS').value = logictimPayBonus;
            }
        }
    }
    <!--LOGICTIM_BONUS-->

    Выводим информацию, сколько бонусов будет начислено за заказ:
    в метод
    editTotalBlock: function()
    после
    if (parseFloat(total.PAY_SYSTEM_PRICE) >= 0 && this.result.DELIVERY.length)
    {
    	this.totalInfoBlockNode.appendChild(this.createTotalUnit(BX.message('SOA_PAYSYSTEM_PRICE'), '~' + total.PAY_SYSTEM_PRICE_FORMATTED));
    }
    вставляем
    <!--LOGICTIM_BONUS-->
    if(this.result.LOGICTIM_BONUS && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y') {
    var logictimAddBonusText = this.result.LOGICTIM_BONUS.TEXT_BONUS_BALLS;
    this.totalInfoBlockNode.appendChild(this.createTotalUnit(logictimAddBonusText, '<span>'+this.result.LOGICTIM_BONUS.ADD_BONUS+'</span>'));

    var lb_pay_block = BX('logictim_payfield_bonus');
    if(this.result.LOGICTIM_BONUS.MAX_BONUS <= 0 && BX('logictim_payfield_bonus'))
    BX.hide(lb_pay_block);
    if(this.result.LOGICTIM_BONUS.MAX_BONUS > 0 && BX('logictim_payfield_bonus'))
    {
    BX.show(lb_pay_block);
    BX('ORDER_PROP_'+this.result.LOGICTIM_BONUS.ORDER_PROP_PAYMENT_BONUS_ID).value = logictimPayBonus;
    }
    }
    <!--LOGICTIM_BONUS-->

    Выводим информацию, сколько бонусов будет начислено за каждую позицию заказа:
    в метод 
    createBasketItemColumn: function(column, allData, active)
    после
    else if (column.id == 'SUM')
    			{
    				textNode.appendChild(BX.create('STRONG', {props: {className: 'bx-price all'}, html: data.SUM}));
    				if (parseFloat(data.DISCOUNT_PRICE) > 0)
    				{
    					textNode.appendChild(BX.create('BR'));
    					textNode.appendChild(BX.create('STRONG', {
    						props: {className: 'bx-price-old'},
    						html: data.SUM_BASE_FORMATED
    					}));
    				}
    вставляем
    <!--LOGICTIM_BONUS-->
    if(this.result.LOGICTIM_BONUS && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y') {
        var add_bonus_item = this.result.LOGICTIM_BONUS.ARR_BONUS.ITEMS[data.PRODUCT_ID].ADD_BONUS;
        if(add_bonus_item > 0)
        {
            textNode.appendChild(BX.create('div', {props: {className: 'bonus'}, html: '+'+add_bonus_item+' '+this.result.LOGICTIM_BONUS.TEXT_BONUS_FOR_ITEM}));
        }
    }
    <!--LOGICTIM_BONUS-->


  2. файл /bitrix/components/bitrix/sale.order.ajax/templates/new_logictim_bonus/template.php
    Выводим поле для оплаты бонусами:
    перед
    <!--	ORDER SAVE BLOCK	-->
    Вставляем
    <? //-------LOGICTIM BONUS FEILD-------//
    	if(isset($arResult["PAY_BONUS"]) && $arResult["PAY_BONUS"] >= 0) {
    ?>
    		<div class="bx_block w100 vertical" id="logictim_payfield_bonus">
    			<div class="bx_description">
    				<strong><?=COption::GetOptionString("logictim.balls", "HAVE_BONUS_TEXT", 'Have bonus')?> <?=$arResult["USER_BONUS"]?></strong>
    				<span>
    					<?=COption::GetOptionString("logictim.balls", "CAN_BONUS_TEXT", 'Can use bonus')?>
    					<br> 
    					<? if($arResult["MIN_BONUS"] > 0 || $arResult["MAX_BONUS"] > 0) {?>
    						(
    						<?	if($arResult["MIN_BONUS"] > 0) {
    								echo COption::GetOptionString("logictim.balls", "MIN_BONUS_TEXT", 'Min use bonus').$arResult["MIN_BONUS"];
    							}
    							if($arResult["MIN_BONUS"] > 0 && $arResult["MAX_BONUS"] > 0) {
    								echo ', ';
    							}
    							if($arResult["MAX_BONUS"] > 0) {
    								echo COption::GetOptionString("logictim.balls", "MAX_BONUS_TEXT", 'Max use bonus').$arResult["MAX_BONUS"];
    							}?>
    						 )
    				   <? } ?>
    				</span>
    			</div>
    			<div class="bonus_left">
    				<strong><?=COption::GetOptionString("logictim.balls", "PAY_BONUS_TEXT", 'Pay from bonus')?></strong>
    				<input type="text" onchange="BX.Sale.OrderAjaxComponent.sendRequest();" maxlength="250" size="0" value="<?=$arResult["PAY_BONUS"]?>" name="ORDER_PROP_<?=$arResult["ORDER_PROP_PAYMENT_BONUS_ID"]?>" id="LOGICTIM_PAYMENT_BONUS">
    			</div>
    		</div>
    <? } 
     //-------LOGICTIM BONUS FEILD-------//?>   
  3. В файлы style.css, и style.min.css
    Добавить стили:
    .logictim_bonus_input_block .lg_description span{font-size:12px;color:#a3a3a3;}