jQuery( function( $ ) { var wc_shipment_tracking_items = { // init Class init: function() { $( '#woocommerce-advanced-shipment-tracking' ) .on( 'click', 'a.delete-tracking', this.delete_tracking ) .on( 'click', 'button.button-show-tracking-form', this.show_form ) .on( 'click', 'button.button-save-form', this.save_form ); }, // When a user enters a new tracking item save_form: function () { var error; var tracking_number = jQuery("#tracking_number"); var tracking_provider = jQuery("#tracking_provider"); if( tracking_number.val() === '' ){ showerror( tracking_number );error = true; } else{ hideerror(tracking_number); } if( tracking_provider.val() === '' ){ jQuery("#tracking_provider").siblings('.select2-container').find('.select2-selection').css('border-color','red'); error = true; } else{ jQuery("#tracking_provider").siblings('.select2-container').find('.select2-selection').css('border-color','#ddd'); hideerror(tracking_provider); } if(jQuery('.enable_tracking_per_item').prop("checked") == true){ if(jQuery("tr").hasClass("ASTProduct_row")){ var qty = false; jQuery(".ASTProduct_row").each(function(index){ var ASTProduct_qty = jQuery(this).find('input[type="number"]').val(); if(ASTProduct_qty > 0){ qty = true; return false; } }); } } if(qty == false){ jQuery('.qty_validation').show(); return false; } else{ jQuery('.qty_validation').hide(); } if(error == true){ return false; } if ( !$( 'input#tracking_number' ).val() ) { return false; } $( '#advanced-shipment-tracking-form' ).block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } ); var change_order_to_shipped = $('input[name=change_order_to_shipped]:checked').val(); if(change_order_to_shipped == 'change_order_to_partial_shipped'){ checked = 'change_order_to_partial_shipped'; } else if(change_order_to_shipped == 'change_order_to_shipped'){ checked = 'change_order_to_shipped'; } else if(change_order_to_shipped == 'change_order_to_custom_shipped'){ checked = 'change_order_to_shipped'; } else if($('input#change_order_to_shipped').prop("checked") == true){ checked = 'change_order_to_shipped'; } else{ checked = 'no'; } var product_data = []; jQuery(".ASTProduct_row").each(function(index){ var ASTProduct_qty = jQuery(this).find('input[type="number"]').val(); if(ASTProduct_qty > 0){ product_data.push({ product: jQuery(this).find('.product_id').val(), qty: jQuery(this).find('input[type="number"]').val(), }); } }); var jsonString = JSON.stringify(product_data); var data = { action: 'wc_shipment_tracking_save_form', order_id: woocommerce_admin_meta_boxes.post_id, tracking_provider: $( '#tracking_provider' ).val(), custom_tracking_provider: $( '#custom_tracking_provider' ).val(), custom_tracking_link: $( 'input#custom_tracking_link' ).val(), tracking_number: $( 'input#tracking_number' ).val(), tracking_product_code: $( 'input#tracking_product_code' ).val(), date_shipped: $( 'input#date_shipped' ).val(), enable_tracking_per_item: $('input[name=enable_tracking_per_item]:checked').val(), productlist: jsonString, change_order_to_shipped: checked, security: $( '#wc_shipment_tracking_create_nonce' ).val() }; jQuery.ajax({ url: woocommerce_admin_meta_boxes.ajax_url, data: data, type: 'POST', success: function(response) { $( '#advanced-shipment-tracking-form' ).unblock(); if ( response == 'reload' ) { location.reload(true); return false; } if ( response != '-1' ) { $( '#advanced-shipment-tracking-form' ).hide(); $( '#woocommerce-advanced-shipment-tracking #tracking-items' ).append( response ); $( '#woocommerce-advanced-shipment-tracking button.button-show-tracking-form' ).show(); $( '#tracking_provider' ).selectedIndex = 0; $( '#custom_tracking_provider' ).val( '' ); $( 'input#custom_tracking_link' ).val( '' ); $( 'input#tracking_number' ).val( '' ); $( 'input#date_shipped' ).val( '' ); if(checked == 'change_order_to_shipped'){ jQuery('#order_status').val('wc-completed'); jQuery('#order_status').select2().trigger('change'); jQuery('#post').before('

Order updated.

'); } else if(checked == 'change_order_to_partial_shipped'){ jQuery('#order_status').val('wc-partial-shipped'); jQuery('#order_status').select2().trigger('change'); jQuery('#post').before('

Order updated.

'); } } }, error: function(response) { console.log(response); } }); return false; }, // Show the new tracking item form show_form: function () { $( '#woocommerce-advanced-shipment-tracking #advanced-shipment-tracking-form' ).show(); $( '#woocommerce-advanced-shipment-tracking .button-show-tracking-form' ).hide(); $( "#woocommerce-advanced-shipment-tracking #advanced-shipment-tracking-form #tracking_number" ).focus(); }, // Delete a tracking item delete_tracking: function() { var tracking_id = $( this ).attr( 'rel' ); var nonce = $( this ).data( 'nonce' ); $( '#tracking-item-' + tracking_id ).block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } }); var data = { action: 'wc_shipment_tracking_delete_item', order_id: woocommerce_admin_meta_boxes.post_id, tracking_id: tracking_id, security: nonce }; $.post( woocommerce_admin_meta_boxes.ajax_url, data, function( response ) { $( '#tracking-item-' + tracking_id ).unblock(); if ( response != '-1' ) { $( '#tracking-item-' + tracking_id ).remove(); } }); return false; }, refresh_items: function() { var data = { action: 'wc_shipment_tracking_get_items', order_id: woocommerce_admin_meta_boxes.post_id, security: $( '#wc_shipment_tracking_get_nonce' ).val() }; $( '#woocommerce-shipment-tracking' ).block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } ); $.post( woocommerce_admin_meta_boxes.ajax_url, data, function( response ) { $( '#woocommerce-shipment-tracking' ).unblock(); if ( response != '-1' ) { $( '#woocommerce-shipment-tracking #tracking-items' ).html( response ); } }); }, } wc_shipment_tracking_items.init(); window.wc_shipment_tracking_refresh = wc_shipment_tracking_items.refresh_items; } ); jQuery(document).on("click", ".update-dismiss", function(){ jQuery('#order_updated_message').fadeOut(); }); function showerror(element){ element.css("border-color","red"); } function hideerror(element){ element.css("border-color",""); } jQuery(document).ready(function() { jQuery('#tracking_provider').select2({ matcher: modelMatcher }); }); function modelMatcher (params, data) { data.parentText = data.parentText || ""; // Always return the object if there is nothing to compare if (jQuery.trim(params.term) === '') { return data; } // Do a recursive check for options with children if (data.children && data.children.length > 0) { // Clone the data object if there are children // This is required as we modify the object to remove any non-matches var match = jQuery.extend(true, {}, data); // Check each child of the option for (var c = data.children.length - 1; c >= 0; c--) { var child = data.children[c]; child.parentText += data.parentText + " " + data.text; var matches = modelMatcher(params, child); // If there wasn't a match, remove the object in the array if (matches == null) { match.children.splice(c, 1); } } // If any children matched, return the new object if (match.children.length > 0) { return match; } // If there were no matching children, check just the plain object return modelMatcher(params, match); } // If the typed-in term matches the text of this term, or the text from any // parent term, then it's a match. var original = (data.parentText + ' ' + data.text).toUpperCase(); var term = params.term.toUpperCase(); // Check if the text contains the term if (original.indexOf(term) > -1) { return data; } // If it doesn't contain the term, don't return anything return null; } jQuery(document).ready(function() { jQuery('#tracking_provider').select2({ matcher: modelMatcher }); jQuery( '.ast-date-picker-field' ).datepicker({ dateFormat: 'yy-mm-dd' }); }); jQuery(document).on("click", ".add_inline_tracking", function(){ jQuery(this).closest('.wc_actions').block({ message: null, overlayCSS: { background: "#fff", opacity: .6 } }); var order_id = jQuery(this).attr('href'); order_id = order_id.replace("#", ""); jQuery('.add_tracking_number_form #order_id').val(order_id); var ajax_data = { action: 'ast_open_inline_tracking_form', order_id: order_id, security: ast_orders_params.order_nonce, }; jQuery.ajax({ url: ajaxurl, data: ajax_data, type: 'POST', success: function(response) { jQuery( ".add_tracking_popup" ).remove(); jQuery( ".tracking_details_popup" ).remove(); jQuery("body").append(response.data.html); jQuery('.add_tracking_popup').slideOutForm(); jQuery( "#add_tracking_number_form #tracking_number" ).focus(); jQuery('.tracking_provider_dropdown').select2({ matcher: modelMatcher }); var selected_provider = jQuery("#tracking_provider").val(); if(selected_provider == 'nz-couriers' || selected_provider == 'post-haste' || selected_provider == 'castle-parcels' || selected_provider == 'dx-mail' || selected_provider == 'now-couriers'){ jQuery('.tracking_product_code_field').show(); } else{ jQuery('.tracking_product_code_field').hide(); } jQuery( '.ast-date-picker-field' ).datepicker({ dateFormat: 'yy-mm-dd' }); jQuery('.wc_actions').unblock(); }, error: function(response) { jQuery('.wc_actions').unblock(); } }); }); jQuery(document).on("click", ".add_tracking_inside", function(){ jQuery('.add_inside_tracking_popup').slideOutForm(); }); jQuery(document).on("click", ".add_inside_tracking_button", function(){ var error; var tracking_provider = jQuery(".add_inside_tracking_popup #tracking_provider"); var tracking_number = jQuery(".add_inside_tracking_popup #tracking_number"); var date_shipped = jQuery(".add_inside_tracking_popup #date_shipped"); var form = jQuery('.add_inside_tracking_popup'); if( tracking_provider.val() === '' ){ tracking_provider.siblings('.select2-container').find('.select2-selection').css('border-color','red'); error = true; } else{ tracking_provider.siblings('.select2-container').find('.select2-selection').css('border-color','#ddd'); hideerror(tracking_provider); } if( tracking_number.val() === '' ){ showerror(tracking_number); error = true; } else{ hideerror(tracking_number); } if( date_shipped.val() === '' ){ showerror(date_shipped); error = true; } else{ hideerror(date_shipped); } // if(jQuery("tr").hasClass("ASTProduct_row")){ // var qty = false; // jQuery(".ASTProduct_row").each(function(index){ // var ASTProduct_qty = jQuery(this).find('input[type="number"]').val(); // if(ASTProduct_qty > 0){ // qty = true; // return false; // } // }); // } // if(qty == false){ // jQuery('.qty_validation').show(); // return false; // } else{ // jQuery('.qty_validation').hide(); // } if(error == true){ return false; } jQuery(".add_inside_tracking_popup").block({ message: null, overlayCSS: { background: "#fff", opacity: .6 } }); var change_order_to_shipped = jQuery('input[name=change_order_to_shipped]:checked').val(); if(change_order_to_shipped == 'change_order_to_partial_shipped'){ checked = 'change_order_to_partial_shipped'; } else if(change_order_to_shipped == 'change_order_to_shipped'){ checked = 'change_order_to_shipped'; } else if(change_order_to_shipped == 'change_order_to_custom_shipped'){ checked = 'change_order_to_shipped'; } else if( jQuery( 'input#change_order_to_shipped' ).prop("checked") == true){ checked = 'change_order_to_shipped'; } else{ checked = 'no'; } // var product_data = []; // jQuery(".ASTProduct_row").each(function(index){ // var ASTProduct_qty = jQuery(this).find('input[type="number"]').val(); // if(ASTProduct_qty > 0){ // product_data.push({ // product: jQuery(this).find('.product_id').val(), // item_id: jQuery(this).find('.item_id').val(), // qty: jQuery(this).find('input[type="number"]').val(), // }); // } // }); // var jsonString = JSON.stringify(product_data); var data = { action: 'wc_shipment_tracking_save_form', order_id: jQuery( '.add_inside_tracking_popup #order_id' ).val(), tracking_provider: tracking_provider.val(), tracking_number: tracking_number.val(), tracking_product_code: jQuery( 'input#tracking_product_code' ).val(), date_shipped: date_shipped.val(), // productlist:/ jsonString, change_order_to_shipped: checked, security: jQuery( '#wc_ast_inline_tracking_form_nonce' ).val() }; jQuery.ajax({ url: ajaxurl, data: data, type: 'POST', success: function(response) { location.reload(); }, error: function(response) { console.log(response); } }); return false; }); jQuery(document).on("click", ".mark_shipped_checkbox", function(){ if(jQuery(this).prop("checked") == true){ jQuery('.mark_shipped_checkbox').prop('checked', false); jQuery(this).prop('checked', true); } }); jQuery(document).on("click", ".popup_close_icon", function(){ jQuery('.add_tracking_popup').slideInForm(); jQuery('.add_inside_tracking_popup').slideInForm(); }); jQuery(document).on("submit", "#add_tracking_number_form", function(){ var form = jQuery('#add_tracking_number_form'); var error; var tracking_provider = jQuery("#add_tracking_number_form #tracking_provider"); var tracking_number = jQuery("#add_tracking_number_form #tracking_number"); var date_shipped = jQuery("#add_tracking_number_form #date_shipped"); var tracking_product_code = jQuery( 'input#tracking_product_code' ); if( tracking_provider.val() === '' ){ jQuery("#tracking_provider").siblings('.select2-container').find('.select2-selection').css('border-color','red'); error = true; } else{ jQuery("#tracking_provider").siblings('.select2-container').find('.select2-selection').css('border-color','#ddd'); hideerror(tracking_provider); } if( tracking_number.val() === '' ){ showerror(tracking_number); error = true; } else{ hideerror(tracking_number); } if( date_shipped.val() === '' ){ showerror(date_shipped); error = true; } else{ hideerror(date_shipped); } if(jQuery('.enable_tracking_per_item').prop("checked") == true){ if(jQuery("tr").hasClass("ASTProduct_row")){ var qty = false; jQuery(".ASTProduct_row").each(function(index){ var ASTProduct_qty = jQuery(this).find('input[type="number"]').val(); if(ASTProduct_qty > 0){ qty = true; return false; } }); } } if(qty == false){ jQuery('.qty_validation').show(); return false; } else{ jQuery('.qty_validation').hide(); } if(error == true){ return false; } jQuery("#add_tracking_number_form").block({ message: null, overlayCSS: { background: "#fff", opacity: .6 } }); jQuery.ajax({ url: ajaxurl, data: form.serialize(), type: 'POST', success: function(response) { location.reload(); }, error: function(response) { console.log(response); } }); return false; }); jQuery(document).on("click", ".inline_tracking_delete", function(){ var r = confirm( 'Do you really want to delete tracking number?' ); if (r === true) { var tracking_id = jQuery( this ).attr( 'rel' ); var nonce = jQuery( this ).data( 'nonce' ); var order_id = jQuery( this ).data( 'order' ); jQuery( '#tracking-item-' + tracking_id ).block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } }); var ajax_data = { action: 'wc_shipment_tracking_delete_item', security: nonce, tracking_id: tracking_id, order_id: order_id, }; jQuery.ajax({ url: ajaxurl, data: ajax_data, type: 'POST', success: function(response) { jQuery( '#tracking-item-' + tracking_id ).unblock(); if ( response != '-1' ) { jQuery( '.tracking-item-' + tracking_id ).remove(); } }, error: function(response) { console.log(response); } }); } else { return; } }); jQuery(document).on("change", "#tracking_provider", function(){ var selected_provider = jQuery(this).val(); if(selected_provider == 'nz-couriers' || selected_provider == 'post-haste' || selected_provider == 'castle-parcels' || selected_provider == 'dx-mail' || selected_provider == 'now-couriers'){ jQuery('.tracking_product_code_field').show(); } else{ jQuery('.tracking_product_code_field').hide(); } }); jQuery(document).ready(function() { jQuery('.column-woocommerce-advanced-shipment-tracking').addClass('no-link'); var selected_provider = jQuery("#tracking_provider").val(); if(selected_provider == 'nz-couriers' || selected_provider == 'post-haste' || selected_provider == 'castle-parcels' || selected_provider == 'dx-mail' || selected_provider == 'now-couriers'){ jQuery('.tracking_product_code_field').show(); } else{ jQuery('.tracking_product_code_field').hide(); } }); function showerror(element){ element.css("border","1px solid red"); } function hideerror(element){ element.css("border","1px solid #ddd"); } (function($) { $.fn.slideOutForm = function() { var $formContainer = $(this); $formContainer.addClass('slideout'); var htmlContent = '
'; $('body').append(htmlContent); $('body').css('overflow', 'hidden'); }; $.fn.slideInForm = function() { var $formContainer = $(this); $formContainer.removeClass('slideout'); $('.append_slideout').remove(); $('body').css('overflow', ''); }; })(jQuery);