Кастомизация страницы оформления заказа sale.order.ajax Битрикс

Создаем файл functions.php в каталоге с компонентом по пути /local/templates/owenkomplekt/components/bitrix/sale.order.ajax/custom

<?php

function vi_get_cart_elems($items, $type=false){

    if(!empty($items)){

        ?>



        <?php
        foreach ($items as $item){
            //print_r($item);
            if($type == 'checkout'){
                $item = $item['data'];
            }

            //print_r($item);

            $id = $item['ID'];
            $product_id = $item['PRODUCT_ID'];
            $name = $item['NAME'];
            $product_price = $item['PRICE_FORMATED'];
            $sum_price_formated = $item['SUM_FULL_PRICE_FORMATED'];
            $availabel_quantity = $item['AVAILABLE_QUANTITY'];
            $image_url = $item['DETAIL_PICTURE_SRC'];
            $how_much = $item['QUANTITY'];
            ?>


            <div class="cart-block__items-product">
                <div class="cart-block__items-product_title"><?php echo $name; ?></div>
                <div class="cart-block__items-product_count">x <?php echo $how_much; ?></div>
                <div class="cart-block__items-product_price"><?php echo $sum_price_formated; ?></div>

            </div>


            <?php
        }

    }

}
function vi_get_mini_cart(){

    global $APPLICATION;

    $cc = $APPLICATION->IncludeComponent(
        "bitrix:sale.basket.basket",
        "mini",
        Array(
            "ACTION_VARIABLE" => "basketAction",
            "ADDITIONAL_PICT_PROP_1" => "-",
            "AUTO_CALCULATION" => "Y",
            "BASKET_IMAGES_SCALING" => "adaptive",
            "COLUMNS_LIST_EXT" => array("PREVIEW_PICTURE","DISCOUNT","DELETE","DELAY","TYPE","SUM"),
            "COLUMNS_LIST_MOBILE" => array("PREVIEW_PICTURE","DISCOUNT","DELETE","DELAY","TYPE","SUM"),
            "COMPATIBLE_MODE" => "Y",
            "CORRECT_RATIO" => "Y",
            "DEFERRED_REFRESH" => "N",
            "DISCOUNT_PERCENT_POSITION" => "bottom-right",
            "DISPLAY_MODE" => "extended",
            "EMPTY_BASKET_HINT_PATH" => "/",
            "GIFTS_BLOCK_TITLE" => "Выберите один из подарков",
            "GIFTS_CONVERT_CURRENCY" => "N",
            "GIFTS_HIDE_BLOCK_TITLE" => "N",
            "GIFTS_HIDE_NOT_AVAILABLE" => "N",
            "GIFTS_MESS_BTN_BUY" => "Выбрать",
            "GIFTS_MESS_BTN_DETAIL" => "Подробнее",
            "GIFTS_PAGE_ELEMENT_COUNT" => "400",
            "GIFTS_PLACE" => "BOTTOM",
            "GIFTS_PRODUCT_PROPS_VARIABLE" => "prop",
            "GIFTS_PRODUCT_QUANTITY_VARIABLE" => "quantity",
            "GIFTS_SHOW_DISCOUNT_PERCENT" => "Y",
            "GIFTS_SHOW_OLD_PRICE" => "N",
            "GIFTS_TEXT_LABEL_GIFT" => "Подарок",
            "HIDE_COUPON" => "N",
            "LABEL_PROP" => array(),
            "PATH_TO_ORDER" => "/checkout/make/",
            "PRICE_DISPLAY_MODE" => "Y",
            "PRICE_VAT_SHOW_VALUE" => "N",
            "PRODUCT_BLOCKS_ORDER" => "props,sku,columns",
            "QUANTITY_FLOAT" => "Y",
            "SET_TITLE" => "Y",
            "SHOW_DISCOUNT_PERCENT" => "Y",
            "SHOW_FILTER" => "Y",
            "SHOW_RESTORE" => "Y",
            "TEMPLATE_THEME" => "blue",
            "TOTAL_BLOCK_DISPLAY" => array("top"),
            "USE_DYNAMIC_SCROLL" => "Y",
            "USE_ENHANCED_ECOMMERCE" => "N",
            "USE_GIFTS" => "Y",
            "USE_PREPAYMENT" => "N",
            "USE_PRICE_ANIMATION" => "Y"
        )
    );
    //print_r($cc);

}
function get_img_by_id($id, $type=false){
    $img = '';
    if(!empty($id)){
        $img = CFile::GetPath($id);
    }
    return $img;
}
function vi_create_order(){
    session_start();

    $post = $_GET;

    if(isset($post['vi_checkout'])){

        $basket = Bitrix\Sale\Basket::loadItemsForFUser(Bitrix\Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());

        if(!empty($basket)){

            $user_data = array(
                'delivery_id' => isset($post['del_system']) ? intval( $post['del_system'] ) : '1',
                'payment_id' => isset($post['pay_system']) ? intval( $post['pay_system'] ) : '1',

                'user_name' =>  isset($post['user_name']) ? $post['user_name'] : '1',
                'user_email' =>  isset($post['user_email']) ? $post['user_email'] : '1',
                'user_phone' =>  isset($post['user_phone']) ? $post['user_phone'] : '1',
                'user_address' =>  isset($post['address']) ? $post['address'] : '1',
                'user_address2' =>  isset($post['address2']) ? $post['address2'] : '1',
                'user_comment' =>  isset($post['comment']) ? $post['comment'] : '1',
                'user_type' =>  isset($post['person_type_id']) ? $post['person_type_id'] : '2',

                'company_name' =>  isset($post['company_name']) ? $post['company_name'] : '',
                'inn' =>  isset($post['inn']) ? $post['inn'] : '',
                'ogrn' =>  isset($post['ogrn']) ? $post['ogrn'] : '',
                'corr_schet' =>  isset($post['corr_schet']) ? $post['corr_schet'] : '',
                'rasch_schet' =>  isset($post['rasch_schet']) ? $post['rasch_schet'] : '',
                'bankname' =>  isset($post['bankname']) ? $post['bankname'] : '',
                'bik' =>  isset($post['bik']) ? $post['bik'] : '',
                'yraddress' =>  isset($post['yraddress']) ? $post['yraddress'] : '',
                //'type_of_communication' =>  isset($post['type_of_communication']) ? intval( $post['type_of_communication'] ) : '1',
                //'promo_code' =>  isset($post['promo_code']) ? $post['promo_code'] : '1',
                //'subscribe' =>  isset($post['subscribe']) ? $post['subscribe'] : '0',
                //'location' =>  isset($post['location']) ? $post['location'] : '0',
                //'city' =>  isset($post['city']) ? $post['city'] : '0'
         
            );

            // Validation
            $validation_error = array();
            if(!empty($user_data)){
                foreach ($user_data as $k=>$d){
                    $user_data[$k] = htmlspecialchars($d,ENT_QUOTES);

                    // Validation
                    if (strpos($k, 'user_') !== false) {

                        if($k == 'user_comment'){
                            continue;
                        }

                        if(empty($user_data[$k])){
                            array_push($validation_error, $k);
                        }

                    }


                }
            }

            if(!empty($validation_error)){
                $tpl = '<div class="section-wrap">';
                $tpl .= '<div class="vi_validation_errors">';
                $tpl .= '<h3 class="">Не заполнены следующие поля</h3>';
                $tpl .= '<div class="vi_validation_block">';

                $cnt = 1;
                foreach ($validation_error as $val_error){

                    $tpl .= '<div class="vi_validation_elem">';

                    if($val_error == 'user_address'){
                        $val_error = $cnt . ' Населенный пункт, улица, дом';
                    } else if($val_error == 'user_name'){
                        $val_error = $cnt . ' ФИО';
                    } else if($val_error == 'user_phone'){
                        $val_error = $cnt . ' Телефон';
                    } else if($val_error == 'user_email'){
                        $val_error = $cnt. ' Email';
                    } else if($val_error == 'user_address2'){
                        $val_error = $cnt. ' Квартира/офис';
                    }

                    $tpl .= '<p>'. $val_error .'</p>';
                    $tpl .= '</div>';

                    $cnt ++;
                }

                $tpl .= '</div>';

                $tpl .= '</div>';
                $tpl .= '</div>';


                echo $tpl;


            } else {

                global $USER;
                $user_id = $USER->GetId();

                if(empty($user_id)){
                    $user_id = vi_check_if_user_exist($user_data['user_email']);
                }

                $order = Bitrix\Sale\Order::create(SITE_ID, $user_id);
                //\Bitrix\Sale\OrderBase::resetData();

                $order->setPersonTypeId($user_data['user_type']);
                $order->setBasket($basket);

                // Комментарий к заказу
                $order->setField('USER_DESCRIPTION', $user_data['user_comment']);

                // Юрик / Физик
                $order->setField('PERSON_TYPE_ID', $user_data['user_type']);

                // SET DELIVERY
                $shipmentCollection = $order->getShipmentCollection();
                $shipment = $shipmentCollection->createItem(
                    Bitrix\Sale\Delivery\Services\Manager::getObjectById(2)
                );

                // $shipmentItemCollection = $shipment->getShipmentItemCollection();

                // SET PAYMENT
                $paymentCollection = $order->getPaymentCollection();
                $payment = $paymentCollection->createItem(
                    Bitrix\Sale\PaySystem\Manager::getObjectById($user_data['payment_id'])
                );
                $payment->setField("SUM", $order->getPrice());
                $payment->setField("CURRENCY", $order->getCurrency());
                
                // Сохранить заказ
                $result = $order->save();
                if (!$result->isSuccess())
                {
                    $cc = $result->getErrors();
                } else {

                    $order_id = $result->getId();
                    if(!empty($order_id)){

                        $prefix = 'fiz_';
                        if($user_data['user_type'] == 1){
                            $prefix = 'yr_';
                        }

                        // Обновляем свойства заказа
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix . 'fio', 'value' => $user_data['user_name']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix . 'email', 'value' => $user_data['user_email']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix . 'phone', 'value' => $user_data['user_phone']]);
                        //vi_update_order_property([ 'order' => $order_id, 'code'  => 'CITY', 'value' => $user_data['city']]);
                        //vi_update_order_property([ 'order' => $order_id, 'code'  => 'ZIP', 'value' => $user_data['vi_city_index']]);
                        //vi_update_order_property([ 'order' => $order_id, 'code'  => 'LOCATION', 'value' => $region_code ]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => 'LOCATION', 'value' => 1 ]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix . 'address', 'value' => $user_data['user_address']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix . 'address2', 'value' => $user_data['user_address2']]);

                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'company_name', 'value' => $user_data['company_name']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'inn', 'value' => $user_data['inn']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'ogrn', 'value' => $user_data['ogrn']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'corr_schet', 'value' => $user_data['corr_schet']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'rasch_schet', 'value' => $user_data['rasch_schet']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'bankname', 'value' => $user_data['bankname']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'bik', 'value' => $user_data['bik']]);
                        vi_update_order_property([ 'order' => $order_id, 'code'  => $prefix.'yraddress', 'value' => $user_data['yraddress']]);
                        
                        //vi_empty_cart();
                        // vi_redirect("/checkout/confirm.php?order_id=" . $order_id);

                    }
                }

            }

        } else {
            echo "Products is empty";
        }

    }

}
function vi_check_if_user_exist($email){
    $filter = Array
    (
        "EMAIL"               => $email
    );
    $rsUsers = CUser::GetList(($by="id"), ($order="desc"), $filter); // выбираем пользователей
    $is_filtered = $rsUsers->is_filtered; // отфильтрована ли выборка ?
    $rsUsers->NavStart(50); // разбиваем постранично по 50 записей
    echo $rsUsers->NavPrint(GetMessage("PAGES")); // печатаем постраничную навигацию

    while($rsUsers->NavNext(true, "f_")) {
        return $f_ID;
    }

    $pass = base64_encode( time() );
    $arFields = Array(
        "NAME"              => "",
        "LAST_NAME"         => "",
        "EMAIL"             => $email,
        "LOGIN"             => $email,
        "LID"               => SITE_ID,
        "ACTIVE"            => "Y",
        "GROUP_ID"          => array(3),
        "PASSWORD"          => $pass,
        "CONFIRM_PASSWORD"  => $pass,
    );
    $user = new CUser;
    $ID = $user->Add($arFields);
    if (intval($ID) > 0){
        return $ID;
    }
    return false;
}
function vi_update_order_property($params = [])
{
    if ($params && !empty($params['order']) && !empty($params['code'])) {

        $order = $params['order'];
        $code  = $params['code'];
        $value = !empty($params['value']) ? $params['value'] : '';

        if (CModule::IncludeModule('sale')) {

            $prop = Bitrix\Sale\Internals\OrderPropsValueTable::getList([
                'filter' => [
                    'ORDER_ID' => $order,
                    'CODE'     => $code
                ]
            ])->Fetch();

            if ($prop) {

                print_r($prop);

                return CSaleOrderPropsValue::Update($prop['ID'], [
                    'VALUE' => $value
                ]);
            }
        }
    }

    return false;
}
function vi_redirect($url){
    if(!empty($url)){
        LocalRedirect($url);
    }
}
function vi_get_deliveries($deliveries){
    if(!empty($deliveries)){
        $res = \Bitrix\Sale\Delivery\Services\Table::getList(array('filter' => array('ACTIVE' => 'Y')));

        while ($dev = $res->Fetch()) {
            $result[] = $dev;
        }

        if(!empty($result)){

            unset($result[0]);

            $cnt = 0;
            foreach ($result as $del){

                $delivery_configs_data = false;
                $delivery_desc = false;


                if(isset($del['CONFIG']['MAIN'])){
                    $delivery_configs_data = $del['CONFIG']['MAIN'];
                }
                if(isset($del['DESCRIPTION'])){
                    $delivery_desc = $del['DESCRIPTION'];
                }

                if(isset( $delivery_configs_data['CURRENCY'] ) && isset( $delivery_configs_data[0] ) ){
                    $vi_delivery_locations = vi_get_all_delivery_locations($delivery_configs_data);
                    $data_param = "data-location='" . json_encode($vi_delivery_locations) . "'";
                } else {
                    $data_param = '';
                }


                $img_url = get_img_by_id($del['LOGOTIP']);
                ?>


                <div class="checkout-choose__item">
                    <div class="checkout-choose__item-title">
                        <div class="form_radio">
                            <input id="method<?php echo $cnt; ?>" type="radio" name="del_system" value="<?php echo $del['ID']?>" data-price="<?php echo $del['PRICE'] ?>" <?php echo ($cnt == 0) ? 'checked' : ''; ?>>
                            <label for="method<?php echo $cnt; ?>"></label>
                        </div>

                        <div>
                            <?php echo $del['NAME']?>

                            <div class="checkout-choose__item-link mobile-display">

                                <?php if($del['ID'] == 2): ?>
                                    <div class="open-delivery-modal">Условия доставки</div>
                                <?php endif; ?>

                                <?php if($del['ID'] == 3): ?>
                                    <div class="open-map-modal">Адрес пунтка самовывоза</div>
                                <?php endif; ?>

                                <?php if($del['ID'] == 4): ?>
                                    <div class="open-tk-modal">Условия доставки через ТК</div>
                                <?php endif; ?>

                            </div>
                        </div>
                    </div>
                    <div class="checkout-choose__item-price mobile-none"><?php echo $delivery_desc; ?></div>
                    <div class="checkout-choose__item-link mobile-none">

                        <?php if($del['ID'] == 2): ?>
                            <div class="open-delivery-modal">Условия доставки</div>
                        <?php endif; ?>

                        <?php if($del['ID'] == 3): ?>
                            <div class="open-map-modal">Адрес пунтка самовывоза</div>
                        <?php endif; ?>

                        <?php if($del['ID'] == 4): ?>
                            <div class="open-tk-modal">Условия доставки через ТК</div>
                        <?php endif; ?>

                    </div>

                    <div class="mobile-display">
                        <?php echo $delivery_desc; ?>
                    </div>
                </div>
                <?php
                $cnt++;
            }

        }

    }
}
function vi_get_payments($pay_systems, $exclude, $type){
    $tpl = '';
    if(!empty($pay_systems)){
        //print_r($pay_systems);
        $cnt = 0;
        foreach ($pay_systems as $ps){
            
            $checked = '';
            if($cnt == 0){
                $checked = 'checked';
            }
            if( !in_array( $ps['ID'] ,$exclude ) )
            {
                $tpl .= vi_get_payment_elem( $ps,$checked,$cnt, $type );
            }

            $cnt++;
        }
    }
    echo $tpl;

}
function vi_get_payment_elem($ps, $checked, $cnt, $type){
    $h = '';
  if($ps['ID'] == 7) {
      $h = <<<DER
        <div class="payment-method__item-payimg" >
            <img src = "img/payment/visa.png" alt = "VISA" >
            <img src = "img/payment/mastercard.png" alt = "VISA" >
            <img src = "img/payment/mir.png" alt = "VISA" >
            <img src = "img/payment/jcb.png" alt = "VISA" >
            <img src = "img/payment/unionpay.png" alt = "VISA" >
        </div>
DER;
}

    $her = <<<HER
                <div class="form_radio">
                <input id="pay_{$type}{$cnt}" type="radio" name="pay_system" value="{$ps['ID']}" {$checked}>
                <label for="pay_{$type}{$cnt}" class="payment-method__item">
                    <div class="payment-method__item-title">
                        {$ps['NAME']}
                    </div>
                    <div class="payment-method__item-text">
                        {$ps['DESCRIPTION']}
                    </div>
                    {$h}
                </label>
            </div>
HER;
return $her;
}
function vi_file_upload(){
    
}
Show CommentsClose Comments

Leave a comment