Files
bio-concept-pharma/web/modules/nkmgls/views/js/front.js
2019-11-17 19:14:07 +01:00

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');
}