/* * 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('