/** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ var fees_is_hide = false; $(document).ready(function() { carriersRangeInputs.watchCarriersRangeInputChange(); bind_inputs(); initCarrierWizard(); if (parseInt($('input[name="is_free"]:checked').val())) is_freeClick($('input[name="is_free"]:checked')); displayRangeType(); $('#attachement_fileselectbutton').click(function(e) { $('#carrier_logo_input').trigger('click'); }); $('#attachement_filename').click(function(e) { $('#carrier_logo_input').trigger('click'); }); $('#carrier_logo_input').change(function(e) { var name = ''; if ($(this)[0].files !== undefined) { var files = $(this)[0].files; $.each(files, function(index, value) { name += value.name+', '; }); $('#attachement_filename').val(name.slice(0, -2)); } else // Internet Explorer 9 Compatibility { name = $(this).val().split(/[\\/]/); $('#attachement_filename').val(name[name.length-1]); } }); $('#carrier_logo_remove').click(function(e) { $('#attachement_filename').val(''); }); if ($('#is_free_on').prop('checked') === true) { $('#shipping_handling_off').prop('checked', true).prop('disabled', true); $('#shipping_handling_on').prop('disabled', true).prop('checked', false); } $('#is_free_on').click(function(e) { $('#shipping_handling_off').prop('checked', true).prop('disabled', true); $('#shipping_handling_on').prop('disabled', true).prop('checked', false); }); $('#is_free_off').click(function(e) { if ($('#shipping_handling_off').prop('disabled') === true) { $('#shipping_handling_off').prop('disabled', false).prop('checked', false); $('#shipping_handling_on').prop('disabled', false).prop('checked', true); } }); }); function initCarrierWizard() { $("#carrier_wizard").smartWizard({ 'labelNext' : labelNext, 'labelPrevious' : labelPrevious, 'labelFinish' : labelFinish, 'fixHeight' : 1, 'onShowStep' : onShowStepCallback, 'onLeaveStep' : onLeaveStepCallback, 'onFinish' : onFinishCallback, 'transitionEffect' : 'slideleft', 'enableAllSteps' : enableAllSteps, 'keyNavigation' : false }); displayRangeType(); } function displayRangeType() { if ($('input[name="shipping_method"]:checked').val() == 1) { string = string_weight; $('.weight_unit').show(); $('.price_unit').hide(); } else { string = string_price; $('.price_unit').show(); $('.weight_unit').hide(); } is_freeClick($('input[name="is_free"]:checked')); $('.range_type').html(string); } function onShowStepCallback() { $('.anchor li a').each(function () { $(this).closest('li').addClass($(this).attr('class')); }); $('#carrier_logo_block').prependTo($('div.content').filter(function() { return $(this).css('display') != 'none' }).find('.defaultForm').find('fieldset')); } function onFinishCallback(obj, context) { $('.wizard_error').remove(); $.ajax({ type:"POST", url : validate_url, async: false, dataType: 'json', data : $('#carrier_wizard .stepContainer .content form').serialize() + '&action=finish_step&ajax=1&step_number='+context.fromStep, success : function(data) { if (data.has_error) { displayError(data.errors, context.fromStep); } else window.location.href = carrierlist_url; }, error: function(XMLHttpRequest, textStatus, errorThrown) { jAlert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); } }); } function onLeaveStepCallback(obj, context) { if (context.toStep == nbr_steps) displaySummary(); return validateSteps(context.fromStep, context.toStep); // return false to stay on step and true to continue navigation } function displaySummary() { var id_default_lang = typeof default_language !== 'undefined' ? default_language : 1, id_lang = id_default_lang; // Try to find current employee language if (typeof languages !== 'undefined' && typeof iso_user !== 'undefined') for (var i=0; i' + delay_text + ''); if ($('#is_free_on').prop('checked')) tmp = tmp.replace('%1$s', summary_translation_free); else tmp = tmp.replace('%1$s', summary_translation_paid); $('#summary_meta_informations').html(tmp); // Tax and calculation mode for the shipping cost tmp = summary_translation_shipping_cost.replace('%2$s', $('#id_tax_rules_group option:selected').text()); if ($('#billing_price').prop('checked')) tmp = tmp.replace('%1$s', summary_translation_price); else if ($('#billing_weight').prop('checked')) tmp = tmp.replace('%1$s', summary_translation_weight); else tmp = tmp.replace('%1$s', '' + summary_translation_undefined + ''); $('#summary_shipping_cost').text(tmp); // Weight or price ranges $('#summary_range').text(summary_translation_range+' '+summary_translation_range_limit); if ($('input[name="shipping_method"]:checked').val() == 1) unit = PS_WEIGHT_UNIT; else unit = currency_sign; var range_inf = summary_translation_undefined; var range_sup = summary_translation_undefined; $('tr.range_inf td input').each(function() { if (!isNaN(parseFloat($(this).val())) && (range_inf == summary_translation_undefined || parseFloat(range_inf) > parseFloat($(this).val()))) range_inf = $(this).val(); }); $('tr.range_sup td input').each(function(){ if (!isNaN(parseFloat($(this).val())) && (range_sup == summary_translation_undefined || parseFloat(range_sup) < parseFloat($(this).val()))) range_sup = $(this).val(); }); $('#summary_range').html( $('#summary_range').html() .replace('%1$s', '' + range_inf +' '+ unit + '') .replace('%2$s', '' + range_sup +' '+ unit + '') .replace('%3$s', '' + $('#range_behavior option:selected').text().toLowerCase() + '') ); if ($('#is_free_on').prop('checked')) $('span.is_free').hide(); // Delivery zones $('#summary_zones').html(''); $('.input_zone').each(function(){ if ($(this).prop('checked')) $('#summary_zones').html($('#summary_zones').html() + '
  • ' + $(this).closest('tr').find('label').text() + '
  • '); }); // Group restrictions $('#summary_groups').html(''); $('input[name$="groupBox[]"]').each(function(){ if ($(this).prop('checked')) $('#summary_groups').html($('#summary_groups').html() + '
  • ' + $(this).closest('tr').find('td:eq(2)').text() + '
  • '); }); // shop restrictions $('#summary_shops').html(''); $('.input_shop').each(function(){ if ($(this).prop('checked')) $('#summary_shops').html($('#summary_shops').html() + '
  • ' + $(this).closest().text() + '
  • '); }); } function validateSteps(fromStep, toStep) { var is_ok = true; if ((multistore_enable && fromStep == 3) || (!multistore_enable && fromStep == 2)) { if (toStep > fromStep && !$('#is_free_on').prop('checked')) { is_ok = false; $('.input_zone').each(function () { if ($(this).prop('checked')) is_ok = true; }); if (!is_ok) { displayError([select_at_least_one_zone], fromStep); return; } } if (toStep > fromStep && !$('#is_free_on').prop('checked') && !validateRange(2)) is_ok = false; } $('.wizard_error').remove(); if (is_ok && isOverlapping()) is_ok = false; if (is_ok) { form = $('#carrier_wizard #step-'+fromStep+' form'); $.ajax({ type:"POST", url : validate_url, async: false, dataType: 'json', data : form.serialize()+'&step_number='+fromStep+'&action=validate_step&ajax=1', success : function(datas) { if (datas.has_error) { is_ok = false; $('div.input-group input').focus(function () { $(this).closest('div.input-group').removeClass('has-error'); }); displayError(datas.errors, fromStep); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { jAlert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); } }); } return is_ok; } function displayError(errors, step_number) { $('#carrier_wizard .actionBar a.btn').removeClass('disabled'); $('.wizard_error').remove(); str_error = ''); $('.wizard_error').fadeIn('fast'); bind_inputs(); } function bind_inputs() { $('input').focus(function () { $(this).closest('div.input-group').removeClass('has-error'); $('#carrier_wizard .actionBar a.btn').removeClass('disabled'); $('.wizard_error').fadeOut('fast', function () { $(this).remove()}); }); $('tr.delete_range td button').off('click').on('click', function () { if (confirm(delete_range_confirm)) { index = $(this).closest('td').index(); $('tr.range_sup td:eq('+index+'), tr.range_inf td:eq('+index+'), tr.fees_all td:eq('+index+'), tr.delete_range td:eq('+index+')').remove(); $('tr.fees').each(function () { $(this).find('td:eq('+index+')').remove(); }); rebuildTabindex(); } return false; }); $('tr.fees td input:checkbox').off('change').on('change', function () { if($(this).is(':checked')) { $(this).closest('tr').find('td').each(function () { index = $(this).index(); if ($('tr.fees_all td:eq('+index+')').hasClass('validated')) { if($('#is_free_off').prop('checked') === true) { enableGlobalFees(index); $(this).find('div.input-group input:text').prop('disabled', false); } } else disabledGlobalFees(index); }); } else $(this).closest('tr').find('td').find('div.input-group input:text').prop('disabled', true); return false; }); $('tr.range_sup td input:text, tr.range_inf td input:text').keypress(function (evn) { index = $(this).closest('td').index(); if (evn.keyCode == 13) { if (validateRange(index)) enableRange(index); else disableRange(index); return false; } }); $('tr.fees_all td input:text').keypress(function (evn) { index = $(this).parent('td').index(); if (evn.keyCode == 13) return false; }); $(document.body).off('change', 'tr.fees_all td input').on('change', 'tr.fees_all td input', function() { index = $(this).closest('td').index(); val = $(this).val(); $(this).val(''); $('tr.fees').each(function () { $(this).find('td:eq('+index+') input:text:enabled').val(val); }); return false; }); $('input[name="is_free"]').off('click').on('click', function() { is_freeClick(this); }); $('input[name="shipping_method"]').off('click').on('click', function() { $.ajax({ type:"POST", url : validate_url, async: false, dataType: 'html', data : 'id_carrier='+parseInt($('#id_carrier').val())+'&shipping_method='+parseInt($(this).val())+'&action=changeRanges&ajax=1', success : function(data) { $('#zone_ranges').replaceWith(data); displayRangeType(); bind_inputs(); }, error: function(XMLHttpRequest, textStatus, errorThrown) { jAlert("TECHNICAL ERROR: \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); } }); }); $('#zones_table td input[type=text]').off('change').on('change', function () { checkAllFieldIsNumeric(); }); } function is_freeClick(elt) { var is_free = $(elt); if (parseInt(is_free.val())) hideFees(); else if (fees_is_hide) showFees(); } function hideFees() { $('tr.range_inf td, tr.range_sup td, tr.fees_all td, tr.fees td').each(function () { if ($(this).index() >= 2) { $(this).find('input:text, button').prop('disabled', true).css('background-color', '#999999').css('border-color', '#999999'); $(this).css('background-color', '#999999'); } }); fees_is_hide = true; } function showFees() { $('tr.range_inf td, tr.range_sup td, tr.fees_all td, tr.fees td').each(function () { if ($(this).index() >= 2) { //enable only if zone is active tr = $(this).closest('tr'); validate = $('tr.fees_all td:eq('+$(this).index()+')').hasClass('validated'); if ($(tr).index() > 2 && $(tr).find('td:eq(1) input').prop('checked') && validate || !$(tr).hasClass('range_sup') || !$(tr).hasClass('range_inf')) { if($('#is_free_off').prop('checked') === true) $(this).find('div.input-group input:text').prop('disabled', false); } $(this).find('input:text, button').css('background-color', '').css('border-color', ''); $(this).find('button').css('background-color', '').css('border-color', '').prop('disabled', false); $(this).css('background-color', ''); } }); } function validateRange(index) { $('#carrier_wizard .actionBar a.btn').removeClass('disabled'); $('.wizard_error').remove(); var isValid = true; var $currentRangeSup = $('tr.range_sup td:eq(' + index + ')').find('div.input-group input:text'); var $currentRangeInf = $('tr.range_inf td:eq(' + index + ')').find('div.input-group input:text'); var rangeSup = parseFloat($currentRangeSup.val().trim()); var rangeInf = parseFloat($currentRangeInf.val().trim()); //reset css error $currentRangeSup.closest('div.input-group').removeClass('has-error'); $currentRangeInf.closest('div.input-group').removeClass('has-error'); if (isNaN(rangeSup) || rangeSup.length === 0) { $currentRangeSup.closest('div.input-group').addClass('has-error'); isValid = false; displayError([invalid_range], $("#carrier_wizard").smartWizard('currentStep')); } else if (isValid && (isNaN(rangeInf) || rangeInf.length === 0)) { $currentRangeInf.closest('div.input-group').addClass('has-error'); isValid = false; displayError([invalid_range], $("#carrier_wizard").smartWizard('currentStep')); } else if (isValid && rangeInf >= rangeSup) { $currentRangeSup.closest('div.input-group').addClass('has-error'); $currentRangeInf.closest('div.input-group').addClass('has-error'); isValid = false; displayError([invalid_range], $("#carrier_wizard").smartWizard('currentStep')); } else if (isValid && (index > 2 || $('tr.range_sup td').not('.range_type, .range_sign').length > 1)) { //check range only if it's not the first range isValid = !isOverlapping(); if (!isValid) { $currentRangeSup.closest('div.input-group').addClass('has-error'); $currentRangeInf.closest('div.input-group').addClass('has-error'); displayError([range_is_overlapping], $("#carrier_wizard").smartWizard('currentStep')); } } if (isValid) { $('tr.range_sup td').not('.range_type, .range_sign').each( function () { var $this = $(this); var currentIndex = $this.index(); if ($this.find('.has-error').length > 0 && currentIndex !== index) { isValid = validateRange(currentIndex); if (isValid) { enableRange(currentIndex); } } }); } isValid = !$currentRangeSup.closest('div.input-group').hasClass('has-error'); return isValid; } function enableZone(index) { if($('#is_free_off').prop('checked') === true) { $('tr.fees').each(function () { if ($(this).find('td:eq(1)').find('input[type=checkbox]:checked').length) $(this).find('td:eq('+index+')').find('div.input-group input').prop('disabled', false); }); } } function disableZone(index) { $('tr.fees').each(function () { $(this).find('td:eq(' + index + ')').find('div.input-group input').prop('disabled', true); }); } function enableRange(index) { $('tr.fees').each(function () { //only enable fees for enabled zones if ($(this).find('td').find('input:checkbox').prop('checked') && $('#is_free_off').prop('checked') === true) enableZone(index); }); $('tr.fees_all td:eq('+index+')').addClass('validated').removeClass('not_validated'); enableGlobalFees(index); bind_inputs(); } function enableGlobalFees(index) { if($('#is_free_off').prop('checked') === true) { $('span.fees_all').show(); $('tr.fees_all td:eq('+index+')').find('div.input-group input').show().prop('disabled', false); $('tr.fees_all td:eq('+index+')').find('div.input-group .currency_sign').show(); } } function disabledGlobalFees(index) { $('span.fees_all').hide(); $('tr.fees_all td:eq('+index+')').find('div.input-group input').hide().prop('disabled', true); $('tr.fees_all td:eq('+index+')').find('div.input-group .currency_sign').hide(); } function disableRange(index) { $('tr.fees').each(function () { //only enable fees for enabled zones if ($(this).find('td').find('input:checkbox').prop('checked')) disableZone(index); }); $('tr.fees_all td:eq('+index+')').find('div.input-group input').prop('disabled', true); $('tr.fees_all td:eq('+index+')').removeClass('validated').addClass('not_validated'); } function add_new_range() { if (!$('tr.fees_all td:last').hasClass('validated')) { alert(need_to_validate); return false; } last_sup_val = $('tr.range_sup td:last input').val(); //add new rand sup input $('tr.range_sup td:last').after('
    '); //add new rand inf input $('tr.range_inf td:last').after('
    '); $('tr.fees_all td:last').after('
    '); $('tr.fees').each(function () { $(this).find('td:last').after('
    '+currency_sign+'
    '); }); $('tr.delete_range td:last').after('