$( document ).ready(function() {
$('body').on('keyup', '#checkout_place', function(){ delay(function(){ if ($('#checkout_place').val().length > 2) { $('.ui-autocomplete').addClass('f-dropdown'); get_place_by_query($('#checkout_place').val()) } }, 1000 ); }); $('body').on('change', '.select_delivery_checkout', function(){ var option = $('.delivery_check:checked').siblings('select').find('option:selected') }); $('body').on('click', '.delivery_check', function(){ $(this).siblings().removeClass('hide') $('.delivery_check:unchecked').siblings().addClass('hide') }); $('body').on('keyup', '#checkout_street', function(){ delay(function(){ if ($('#checkout_street').val().length > 2) { get_street_by_query($('#checkout_street').val()) } }, 1000 ); }); $('body').on('click', '.ship_method', function(){ if ($('#checkout_place').attr('placeId')!=undefined){ calculation( $('#checkout_place').attr('placeId')) } }) $('body').on('click', '#checkout_save', function(){ var params = {} params['firstname'] = $('#checkout_firstname').val() params['lastname'] = $('#checkout_lastname').val() params['phone'] = $('#checkout_phone').val() var deliveryMethod = $('input[name=delivery]:checked').val() params['ship_method'] = $('input[name=ship_method]:checked').val() if ($.inArray(deliveryMethod,["pvz", "postamat"]) > -1){ var select = $("#select_"+deliveryMethod+"") var option = select.find('option:selected') params["deliveryMethod"] = deliveryMethod params["placeId"] = select.data('place') params["street"] = option.attr('place') params["cost"] = option.attr('cost') params["deliveryId"] = option.val() params["minTerm"] = option.attr('min') params["maxTerm"] = option.attr('max') } else { params["deliveryMethod"] = deliveryMethod params["placeId"] = $('#express').attr('place') params["streetId"] = $('#checkout_street').attr('streetId') params["cost"] = $('#express').attr('cost') params["deliveryId"] = $('#express').attr('delivery') params["minTerm"] = $('#express').attr('min') params["maxTerm"] = $('#express').attr('max') params["house"] = $('#checkout_house').val() params["housing"] = $('#checkout_housing').val() params["building"] = $('#checkout_building').val() params["appartment"] = $('#checkout_appartment').val() } $.ajax({ url: '/checkout/create_checkout_order', type: 'POST', data: params }) .always(function( data ) { if (JSON.parse(data.responseText).code != 200) { $('<span class="wait">'+$(JSON.parse(data.responseText).body).find('u').get(0).innerHTML+'</span>').insertBefore('#checkout_save') } else{ $('<span class="wait">Заказ успешно создан</span>').insertBefore('#checkout_save') } }); return false });
}); var delay = (function(){
var timer = 0; return function(callback, ms){ clearTimeout (timer); timer = setTimeout(callback, ms); };
})();
get_place_by_query = function(text){
$('<span class="wait">Поиск населенного пункта</span>').insertAfter('#checkout_place') $.ajax({ url: '/checkout/get_place_by_query', type: 'POST', data:{ query:encodeURIComponent(text)} }) .always(function( data ) { var items = []; var placeIds = []; request = JSON.parse(data.responseText); for (var i in request['suggestions']) { items.push(request['suggestions'][i]["fullName"]) placeIds.push(request['suggestions'][i]["id"]) } $( "#checkout_place" ).autocomplete({ source: items, minLength: 0, select: function (item,place) { i = jQuery.inArray(place.item.value , items) var placeId placeId = placeIds[i] console.log(placeId) $('#checkout_place').attr('placeId', placeId) calculation(placeId) } }); $('body').on('click', '#checkout_place', function(){ $("#checkout_place").autocomplete("search", ''); }); $("#checkout_place").autocomplete("search", ''); $('.wait').remove() });
}
get_street_by_query = function(text){
$('<span class="wait">Поиск улиц</span>').insertAfter('#checkout_street') $.ajax({ url: '/checkout/get_street_by_query', type: 'POST', data:{ query:encodeURIComponent(text), placeId: $('#express').attr('place') } }) .always(function( data ) { var items = []; var placeIds = []; request = JSON.parse(data.responseText); for (var i in request['suggestions']) { items.push(request['suggestions'][i]["type"]+ '.' + request['suggestions'][i]["name"]) placeIds.push(request['suggestions'][i]["id"]) } $( "#checkout_street" ).autocomplete({ source: items, minLength: 0, select: function (item,place) { i = jQuery.inArray(place.item.value , items) var placeId placeId = placeIds[i] $('#checkout_street').attr('streetId', placeId) } }); $("#checkout_street").autocomplete("search", ''); $('.wait').remove() });
}
calculation = function(text){
$('<span class="wait">Расчет стоимости доставки</span>').insertAfter('#checkout_place') var ship_method = $('input[name=ship_method]:checked').val() $.ajax({ url: '/checkout/calculation', type: 'POST', data:{ query:encodeURIComponent(text), ship_method: ship_method} }) .always(function( data ) { request = JSON.parse(data.responseText); console.log(request) console.log(data) $('.wait').remove() generate_delivery_method(request, text) });
}
generate_delivery_method = function(text, placeId){
$('#postamat').remove() $('#pvz').remove() $('#express').remove() if (request.postamat) { var s = $("<select id='select_postamat' class='hide select_delivery_checkout' data-place="+placeId+">"); for(var val=0; val < request.postamat.addresses.length; val++) { $("<option />", {value: request.postamat.deliveries[val],min: request.postamat.minTerms[val], max: request.postamat.maxTerms[val] ,place: request.postamat.addresses[val], cost: request.postamat.costs[val] , text: request.postamat.addresses[val] + " ("+request.postamat.costs[val]+" руб)"}).appendTo(s); } $( "#checkout_place").parent().append( "<div id = 'postamat'><input type='radio' class='delivery_check' name='delivery' value='postamat'>Постамат<br></div>" ); $("#postamat").append(s) } if (request.pvz) { var s = $("<select id='select_pvz' class='hide select_delivery_checkout' data-place="+placeId+">"); for(var val=0; val < request.pvz.addresses.length; val++) { $("<option />", {value: request.pvz.deliveries[val],min: request.pvz.minTerms[val], max: request.pvz.maxTerms[val],place: request.pvz.addresses[val], cost: request.pvz.costs[val], text: request.pvz.addresses[val]+ " ("+request.pvz.costs[val]+" руб)"}).appendTo(s); } $( "#checkout_place").parent().append( "<div id = 'pvz'><input type='radio' class='delivery_check' name='delivery' value='pvz'>PVZ<br></div>" ); $("#pvz").append(s) } if (request.express) { $( "#checkout_place").parent().append( "<div id = 'express' place="+placeId+" delivery="+request.express.deliveryId+" min="+request.express.minDeliveryTerm+" max="+request.express.maxDeliveryTerm+" cost="+request.express.cost+"><input type='radio' class='delivery_check' name='delivery' value='express'>Курьер<br></div>" ); $("#express").append("<div class='ui-widget hide'><input id='checkout_street' type='text' autocomplete='off' placeholder='Улица'><input id='checkout_house' type='text' placeholder='Дом'><input id='checkout_housing' type='text' placeholder='Корпус'><input id='checkout_building' type='text' placeholder='Строение'><input id='checkout_appartment' type='text' placeholder='Квартира/офис'></div>") } if (request.emptyWithLimit){ $( "#checkout_place").parent().append( "<div class='wait'> К сожалению, в ваш населенный пункт возможна доставка заказов со стоимостью, не превышающей"+request.emptyWithLimit+"р. Выберите другой способ оплаты. </div>" ); }
}