404 lines
14 KiB
JavaScript
404 lines
14 KiB
JavaScript
/*
|
|
* Module made by Nukium
|
|
*
|
|
* @author Nukium
|
|
* @copyright 2018 Nukium SAS
|
|
* @license All rights reserved
|
|
*
|
|
* ███ ██ ██ ██ ██ ██ ██ ██ ██ ███ ███
|
|
* ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████
|
|
* ██ ██ ██ ██ ██ █████ ██ ██ ██ ██ ████ ██
|
|
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
* ██ ████ ██████ ██ ██ ██ ██████ ██ ██
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
var glsmap,infowindow,bounds;
|
|
|
|
$(document).ready(function() {
|
|
|
|
/**
|
|
* Bug Fix 1.7.1.0
|
|
* http://forge.prestashop.com/browse/BOOM-2843
|
|
*/
|
|
$('.carrier-extra-content > .gls-container').each(function() {
|
|
$(this).parent().toggleClass('carrier-extra-content carrier-extra-content-gls');
|
|
});
|
|
|
|
var carrier_extra_content = get_carrier_extra_content();
|
|
var original_checked_relay = $('input.gls-select-relay:checked');
|
|
|
|
$('.delivery-options').on('change', 'input[name^="delivery_option"]', function() {
|
|
carrier_extra_content = get_carrier_extra_content();
|
|
if(typeof carrier_extra_content !== 'undefined') {
|
|
$(carrier_extra_content).find('.gls-customer-mobile').trigger('keyup');
|
|
}
|
|
check_gls_option();
|
|
});
|
|
|
|
$('.delivery-options').on('keyup', '.gls-customer-mobile', function() {
|
|
|
|
if(gls_validate_mobile()) {
|
|
|
|
var checked_carrier = parseInt($('input[name^="delivery_option"]:checked').val());
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: gls_display_delivery_option_url + '?ajax=1&action=savePhoneMobile',
|
|
cache: false,
|
|
dataType: 'json',
|
|
context: this,
|
|
data: {
|
|
id_carrier: checked_carrier,
|
|
gls_customer_mobile: $('#gls-customer-mobile-'+checked_carrier).val(),
|
|
is_relay: (checked_carrier == glsrelais_carrier_id) ? 1 : 0
|
|
}
|
|
}).done(function(data) {
|
|
if(!data.result) {
|
|
$('#gls-error-modal').find('.alert-content').text(data.message);
|
|
}
|
|
}).fail(function() {
|
|
$('#gls-error-modal').find('.alert-content').text(gls_js_general_error);
|
|
});
|
|
}
|
|
});
|
|
|
|
$('.carrier-extra-content-gls').on('change', 'input.gls-select-relay', function(e) {
|
|
|
|
e.preventDefault();
|
|
//__ TODO: gestion d'erreur
|
|
checked_carrier = parseInt($('input[name^="delivery_option"]:checked').val());
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: gls_display_delivery_option_url + '?ajax=1&action=selectRelayPoint',
|
|
cache: false,
|
|
dataType: 'json',
|
|
context: this,
|
|
data: {
|
|
glsrelayid: $(this).attr('data-glsrelayid'),
|
|
gls_customer_mobile: $('#gls-customer-mobile-'+checked_carrier).val()
|
|
}
|
|
}).done(function(data) {
|
|
if(!data.result) {
|
|
$(this).prop('checked', false);
|
|
if($(original_checked_relay).length > 0) {
|
|
$(original_checked_relay).prop('checked', true);
|
|
}
|
|
gls_display_error(data.message);
|
|
} else {
|
|
original_checked_relay = $('input.gls-select-relay:checked');
|
|
}
|
|
}).fail(function() {
|
|
$(this).prop('checked', false);
|
|
if($(original_checked_relay).length > 0) {
|
|
$(original_checked_relay).prop('checked', true);
|
|
}
|
|
gls_display_error(gls_js_general_error);
|
|
return false;
|
|
});
|
|
return false;
|
|
|
|
});
|
|
|
|
/**
|
|
* Recherche de nouveaux points relais
|
|
*/
|
|
$('.carrier-extra-content-gls').on('click', '.gls-search-relay', function(e) {
|
|
|
|
e.preventDefault();
|
|
if($('#gls-search').val()) {
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: gls_display_delivery_option_url + '?ajax=1&action=searchRelay',
|
|
cache: false,
|
|
dataType: 'json',
|
|
context: this,
|
|
data: {search: $('#gls-search').val()}
|
|
}).done(function(data) {
|
|
if(!data.result) {
|
|
gls_display_error(data.message);
|
|
} else {
|
|
$('.gls-relay-list').html(data.point_relay_tpl).show();
|
|
$('.gls-relay-map').show();
|
|
initGlsMap();
|
|
$('.gls-container > .alert').hide();
|
|
}
|
|
}).fail(function() {
|
|
gls_display_error(gls_js_general_error);
|
|
return false;
|
|
});
|
|
} else {
|
|
gls_display_error(gls_js_search_error);
|
|
}
|
|
return false;
|
|
|
|
});
|
|
|
|
$('.carrier-extra-content-gls').on('keypress', '#gls-search', function(e) {
|
|
if(e.which == 13) {
|
|
e.preventDefault();
|
|
$('.gls-search-relay').trigger('click');
|
|
}
|
|
});
|
|
|
|
$('.carrier-extra-content-gls').on('search', '#gls-search', function(e) {
|
|
e.preventDefault();
|
|
$('.gls-search-relay').trigger('click');
|
|
});
|
|
|
|
/**
|
|
* Check avant étape confirmation et paiement
|
|
*/
|
|
$(document).on('click', 'button[name=confirmDeliveryOption]', function(e) {
|
|
if(!check_gls_option()) {
|
|
$('#gls-error-modal').modal('show');
|
|
e.stopPropagation();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
prestashop.on('updatedDeliveryForm', function(params) {
|
|
|
|
/*
|
|
if (typeof params.deliveryOption === 'undefined' || 0 === params.deliveryOption.length) {
|
|
|
|
if(typeof params.dataForm !== 'undefined' && params.dataForm.length > 0) {
|
|
var regex = new RegExp(/^delivery_option\[/);
|
|
$(params.dataForm).each(function(index,value){
|
|
if(regex.test(value['name'])) {
|
|
params.deliveryOption = $('input[name="' + value['name'] + '"][value="' + value['value'] + '"]').parents('.delivery-option');
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
if(typeof params.deliveryOption === 'undefined' || 0 === params.deliveryOption.length) {
|
|
return;
|
|
}
|
|
}
|
|
*/
|
|
|
|
if(typeof params.deliveryOption === 'undefined' || 0 === params.deliveryOption.length) {
|
|
return;
|
|
}
|
|
|
|
$('.carrier-extra-content-gls').each(function() {
|
|
|
|
if ($(this).prev('.delivery-option').length > 0) {
|
|
var delivery_option = $(this).prev('.delivery-option');
|
|
} else if ($(this).parent('.delivery-option').length > 0) {
|
|
var delivery_option = $(this).parent('.delivery-option');
|
|
}
|
|
|
|
if (typeof delivery_option !== 'undefined' && $(delivery_option).is(params.deliveryOption)) {
|
|
$(this).stop(true, true).slideDown(function() {
|
|
if(typeof(glsmap) != 'undefined') {
|
|
google.maps.event.trigger(glsmap, 'resize');
|
|
glsmap.fitBounds(bounds);
|
|
}
|
|
});
|
|
} else {
|
|
$(this).stop(true, true).hide();
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
if(typeof carrier_extra_content !== 'undefined') {
|
|
$(carrier_extra_content).find('.gls-customer-mobile').trigger('keyup');
|
|
}
|
|
|
|
if(typeof google !== 'undefined') {
|
|
google.maps.event.addDomListener(window, "load", initGlsMap);
|
|
}
|
|
|
|
if($('.js-current-step').attr('id') == 'checkout-payment-step') {
|
|
|
|
$('#checkout-delivery-step').on('click', function() {
|
|
initGlsMap();
|
|
});
|
|
|
|
if(typeof carrier_extra_content !== 'undefined' && $(carrier_extra_content).find('.gls-customer-mobile').val() == '') {
|
|
$('#checkout-delivery-step').trigger('click');
|
|
$('#checkout-payment-step').off('click');
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
function get_carrier_extra_content() {
|
|
|
|
if($('input[name^="delivery_option"]:checked').parents('.delivery-option').next('.carrier-extra-content-gls').length > 0) {
|
|
var extra_content = $('input[name^="delivery_option"]:checked').parents('.delivery-option').next('.carrier-extra-content-gls');
|
|
} else if($('input[name^="delivery_option"]:checked').parents('.delivery-option').children('.carrier-extra-content-gls').length > 0) {
|
|
var extra_content = $('input[name^="delivery_option"]:checked').parents('.delivery-option').children('.carrier-extra-content-gls');
|
|
}
|
|
return extra_content;
|
|
|
|
}
|
|
|
|
function check_gls_option() {
|
|
|
|
var checked_carrier = parseInt($('input[name^="delivery_option"]:checked').val());
|
|
var no_error = true;
|
|
|
|
check_mobile = false;
|
|
if(checked_carrier == glsrelais_carrier_id || checked_carrier == gls13h_carrier_id || checked_carrier == glschezvousplus_carrier_id) {
|
|
check_mobile = true;
|
|
}
|
|
|
|
if(check_mobile) {
|
|
no_error &= gls_validate_mobile();
|
|
}
|
|
|
|
if(checked_carrier == glsrelais_carrier_id) {
|
|
|
|
$carrier_selected = false;
|
|
$('.gls-select-relay').each(function() {
|
|
if($(this).is(':checked')) {
|
|
$carrier_selected = true;
|
|
}
|
|
});
|
|
if(!$carrier_selected) {
|
|
$('#gls-error-modal').find('.alert-content').text(gls_js_relay_error);
|
|
if($('.js-current-step').attr('id') == 'checkout-payment-step') {
|
|
$('#checkout-delivery-step').trigger('click');
|
|
$('#checkout-payment-step').off('click');
|
|
}
|
|
}
|
|
no_error &= $carrier_selected;
|
|
|
|
}
|
|
|
|
return no_error;
|
|
}
|
|
|
|
function gls_validate_mobile() {
|
|
|
|
var checked_carrier = parseInt($('input[name^="delivery_option"]:checked').val());
|
|
|
|
if($('#gls-customer-mobile-'+checked_carrier).val() && gls_mobile_number_checker($('#gls-customer-mobile-'+checked_carrier).val())) {
|
|
|
|
$('#gls-customer-mobile-'+checked_carrier).removeClass('form-control-danger');
|
|
$('#gls-customer-mobile-'+checked_carrier).closest('div.form-group').removeClass('has-danger');
|
|
$('#gls-customer-mobile-'+checked_carrier).addClass('form-control-success');
|
|
$('#gls-customer-mobile-'+checked_carrier).closest('div.form-group').addClass('has-success');
|
|
return true;
|
|
|
|
} else {
|
|
$('#gls-scustomer-mobile-'+checked_carrier).removeClass('form-control-success');
|
|
$('#gls-customer-mobile-'+checked_carrier).closest('div.form-group').removeClass('has-success');
|
|
$('#gls-customer-mobile-'+checked_carrier).addClass('form-control-danger');
|
|
$('#gls-customer-mobile-'+checked_carrier).closest('div.form-group').addClass('has-danger');
|
|
|
|
$('#gls-error-modal').find('.alert-content').text(gls_js_mobile_error);
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Validation du numéro de mobile du destinataire
|
|
*/
|
|
function gls_mobile_number_checker(phone_mobile) {
|
|
|
|
var regex = new RegExp(/^(\+[\d]|0)([\d _.-]{6,})$/);
|
|
|
|
if(typeof prestashop.cart["id_address_delivery"] !== 'undefined' && typeof prestashop.customer.addresses[prestashop.cart["id_address_delivery"]].country_iso !== 'undefined') {
|
|
if(prestashop.customer.addresses[prestashop.cart["id_address_delivery"]].country_iso === 'FR') {
|
|
regex = new RegExp(/^(\+33|0)([\d _.-]{9,})$/);
|
|
}
|
|
}
|
|
|
|
var numbers = phone_mobile.substr(-8);
|
|
var pattern = ['00000000','11111111','22222222','33333333','44444444','55555555','66666666','77777777','88888888','99999999','12345678','23456789','98765432'];
|
|
|
|
if (regex.test(phone_mobile) && jQuery.inArray(numbers, pattern) == -1) {
|
|
// GSM OK : fonction suivante
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Initialisation de la carte
|
|
*/
|
|
function initGlsMap() {
|
|
|
|
if(document.getElementById('gls-map')) {
|
|
|
|
glsmap = new google.maps.Map(document.getElementById('gls-map'), {
|
|
zoom: 12,
|
|
maxZoom: 18,
|
|
mapTypeId: google.maps.MapTypeId.ROADMAP,
|
|
fullscreenControl: false
|
|
});
|
|
|
|
infowindow = new google.maps.InfoWindow({ });
|
|
|
|
bounds = new google.maps.LatLngBounds();
|
|
|
|
//__ Si des marqueurs google maps existent, on les ajoute sur la carte
|
|
if(typeof glsGmapsMarkers !== 'undefined') {
|
|
if(glsGmapsMarkers.length > 0) {
|
|
glsGmapsMarkers.forEach(function(item, index) {
|
|
addGlsMapMarker(new google.maps.LatLng(item['lat'], item['lng']), item['name'], item['id'], item['infos']);
|
|
});
|
|
}
|
|
}
|
|
|
|
glsmap.fitBounds(bounds);
|
|
|
|
$('body').on('click', function(event) {
|
|
$('.js-current-step').off('click');
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Ajout des points relais sur la carte
|
|
*/
|
|
function addGlsMapMarker(lat_lng, name, id, infos) {
|
|
|
|
var marker = new google.maps.Marker({
|
|
position: lat_lng,
|
|
label: id,
|
|
map: glsmap
|
|
});
|
|
|
|
bounds.extend(marker.position);
|
|
|
|
google.maps.event.addListener(marker, 'click', (function (marker, name, infos) {
|
|
|
|
return function () {
|
|
infowindow.setContent('<div id="content" style="padding-right:17px;">'+
|
|
'<div id="firstHeading" class="h6">' + name + '</div>'+
|
|
'<div id="bodyContent" style="width:180px">' + infos + '</div>'+
|
|
'</div>');
|
|
infowindow.open(glsmap, marker);
|
|
}
|
|
|
|
})(marker, name, infos));
|
|
|
|
}
|
|
|
|
function gls_display_error(error) {
|
|
|
|
$('#gls-error-modal').find('.alert-content').text(error);
|
|
$('#gls-error-modal').modal('show');
|
|
|
|
} |