Bring variant_autocomplete from spree_backend as is

This commit is contained in:
luisramos0
2019-12-19 11:35:56 +00:00
parent 6bdb14248c
commit 53e342ba1a

View File

@@ -0,0 +1,277 @@
<%#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.length<quantity){
url += "/add"
new_quantity = (quantity - inventory_units.length);
}else if(inventory_units.length>quantity){
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 ) {
window.location.reload();
});
}
}
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 }
}).done(function(msg) {
window.location.reload();
});
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 }
});
} 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 }
});
}
}
}
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 ) {
window.location.reload();
}).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;
}
})
}