<%#encoding: UTF-8%> // variant autocompletion $(document).ready(function() { if ($('#variant_autocomplete_template').length > 0) { window.variantTemplate = Handlebars.compile($('#variant_autocomplete_template').text()); window.variantStockTemplate = Handlebars.compile($('#variant_autocomplete_stock_template').text()); // handle variant selection, show stock level. $('#add_variant_id').change(function(){ var variant_id = $(this).val(); var variant = _.find(window.variants, function(variant){ return variant.id == variant_id }) $('#stock_details').html(variantStockTemplate({variant: variant})); $('#stock_details').show(); $('button.add_variant').click(addVariantFromStockLocation); // Add some tips $('.with-tip').powerTip({ smartPlacement: true, fadeInTime: 50, fadeOutTime: 50, intentPollInterval: 300 }); }); //handle edit click $('a.edit-item').click(toggleItemEdit); //handle cancel click $('a.cancel-item').click(toggleItemEdit); //handle split click $('a.split-item').click(startItemSplit); //handle save click $('a.save-item').click(function(){ var save = $(this); var shipment_number = save.data('shipment-number'); var variant_id = save.data('variant-id'); var quantity = parseInt(save.parents('tr').find('input.line_item_quantity').val()); toggleItemEdit(); adjustItems(shipment_number, variant_id, quantity); return false; }); //handle delete click $('a.delete-item').click(function(){ var del = $(this); var shipment_number = del.data('shipment-number'); var variant_id = del.data('variant-id'); toggleItemEdit(); adjustItems(shipment_number, variant_id, 0); }); } }); adjustItems = function(shipment_number, variant_id, quantity){ var shipment = _.findWhere(shipments, {number: shipment_number + ''}); var inventory_units = _.where(shipment.inventory_units, {variant_id: variant_id}); var url = Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number; var new_quantity = 0; if(inventory_units.lengthquantity){ url += "/remove" new_quantity = (inventory_units.length - quantity); } url += '.json'; if(new_quantity!=0){ $.ajax({ type: "PUT", url: Spree.url(url), data: { variant_id: variant_id, quantity: new_quantity } }).done(function( msg ) { advanceOrder(); }); } } toggleTrackingEdit = function(){ var link = $(this); link.parents('tbody').find('tr.edit-tracking').toggle(); link.parents('tbody').find('tr.show-tracking').toggle(); } toggleMethodEdit = function(){ var link = $(this); link.parents('tbody').find('tr.edit-method').toggle(); link.parents('tbody').find('tr.show-method').toggle(); } toggleItemEdit = function(){ var link = $(this); link.parent().find('a.edit-item').toggle(); link.parent().find('a.cancel-item').toggle(); link.parent().find('a.split-item').toggle(); link.parent().find('a.save-item').toggle(); link.parent().find('a.delete-item').toggle(); link.parents('tr').find('td.item-qty-show').toggle(); link.parents('tr').find('td.item-qty-edit').toggle(); return false; } startItemSplit = function(event){ event.preventDefault(); var link = $(this); link.parent().find('a.edit-item').toggle(); link.parent().find('a.split-item').toggle(); link.parent().find('a.delete-item').toggle(); var variant_id = link.data('variant-id'); var variant = {}; $.ajax({ type: "GET", async: false, url: Spree.url(Spree.routes.variants_api), data: { q: { "id_eq": variant_id } } }).success(function( data ) { variant = data['variants'][0]; }).error(function( msg ) { console.log(msg); }); var max_quantity = link.closest('tr').data('item-quantity'); var split_item_template = Handlebars.compile($('#variant_split_template').text()); link.closest('tr').after(split_item_template({ variant: variant, shipments: shipments, max_quantity: max_quantity })); $('a.cancel-split').click(cancelItemSplit); $('a.save-split').click(completeItemSplit); // Add some tips $('.with-tip').powerTip({ smartPlacement: true, fadeInTime: 50, fadeOutTime: 50, intentPollInterval: 300 }); $('#item_stock_location').select2({ width: 'resolve', placeholder: 'Choose Location' }); } completeItemSplit = function(event) { event.preventDefault(); var link = $(this); var order_number = link.closest('tbody').data('order-number'); var stock_item_row = link.closest('tr'); var variant_id = stock_item_row.data('variant-id'); var quantity = stock_item_row.find('#item_quantity').val(); var stock_location_id = stock_item_row.find('#item_stock_location').val(); var original_shipment_number = link.closest('tbody').data('shipment-number'); var selected_shipment = stock_item_row.find($('#item_stock_location').select2('data').element); var target_shipment_number = selected_shipment.data('shipment-number'); var new_shipment = selected_shipment.data('new-shipment'); if (stock_location_id != 'new_shipment') { // first remove item(s) from original shipment $.ajax({ type: "PUT", async: false, url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments/" + original_shipment_number + "/remove.json"), data: { variant_id: variant_id, quantity: quantity } }); if (new_shipment != undefined) { $.ajax({ type: "POST", async: false, url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments.json"), data: { variant_id: variant_id, quantity: quantity, stock_location_id: stock_location_id } }).done(function(msg) { advanceOrder(); }); } else { $.ajax({ type: "PUT", async: false, url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments/" + target_shipment_number + "/add.json"), data: { variant_id: variant_id, quantity: quantity } }).done(function(msg) { advanceOrder(); }); } } } advanceOrder = function() { $.ajax({ type: "PUT", async: false, url: Spree.url(Spree.routes.checkouts_api + "/" + order_number + "/advance") }).done(function() { window.location.reload(); }); } cancelItemSplit = function(event) { event.preventDefault(); var link = $(this); var prev_row = link.closest('tr').prev(); link.closest('tr').remove(); prev_row.find('a.edit-item').toggle(); prev_row.find('a.split-item').toggle(); prev_row.find('a.delete-item').toggle(); } addVariantFromStockLocation = function() { $('#stock_details').hide(); var variant_id = $('input.variant_autocomplete').val(); var stock_location_id = $(this).data('stock-location-id'); var quantity = $("input.quantity[data-stock-location-id='" + stock_location_id + "']").val(); var shipment = _.find(shipments, function(shipment){ return shipment.stock_location_id == stock_location_id && (shipment.state == 'ready' || shipment.state == 'pending'); }); if(shipment==undefined){ $.ajax({ type: "POST", url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments.json"), data: { variant_id: variant_id, quantity: quantity, stock_location_id: stock_location_id } }).done(function( msg ) { advanceOrder(); }).error(function( msg ) { console.log(msg); }); }else{ //add to existing shipment adjustItems(shipment.number, variant_id, quantity); } return 1 } formatVariantResult = function(variant) { if (variant["images"][0] != undefined && variant["images"][0].urls != undefined) { variant.image = variant.images[0].urls.mini } return variantTemplate({ variant: variant }) } $.fn.variantAutocomplete = function() { this.parent().children(".options_placeholder").attr('id', this.parent().data('index')) this.select2({ placeholder: Spree.translations.variant_placeholder, minimumInputLength: 3, ajax: { url: Spree.url(Spree.routes.variants_search), datatype: 'json', data: function(term, page) { return { q: { "product_name_or_sku_cont": term } } }, results: function (data, page) { window.variants = data['variants']; return { results: data['variants'] } } }, formatResult: formatVariantResult, formatSelection: function (variant) { $(this.element).parent().children('.options_placeholder').html(variant.options_text) return variant.name; } }) }