Создаем файл 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(){
}