Subversion Repositories SmartDukaan

Rev

Rev 21082 | Rev 22213 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
22212 amit.gupta 1
//MOHIT-This code is called when user lands on cartdetails page either through using back button or clicking on cart from deals page 
17804 manish.sha 2
function loadCartPageDetails(){
17947 manish.sha 3
	var input = $('input#refresh').val();
22212 amit.gupta 4
	//MOHIT-If user comes through front/back navigation 
17947 manish.sha 5
	if(input == 'yes'){
18633 manish.sha 6
		$('#cartLoadingModal').modal('show');
17881 manish.sha 7
		var cart_details = localStorage.getItem('cart_details');
17911 manish.sha 8
		if(cart_details!=undefined){
17947 manish.sha 9
			var cartDetailsObj = JSON.parse(cart_details);
10
			$.each(cartDetailsObj.cartItems, function(key,val) {
11
				$("div.number-spinner button[data-id='"+key+"']").closest('.number-spinner').find('input').val(val.quantity);
12
				$("span.lineitemqty[data-id='"+key+"']").text(val.quantity);
18007 manish.sha 13
				$("span.packQuantity[data-id='"+key+"']").text(val.quantity*$("span.packQuantity[data-id='"+key+"']").data('pack'));
17947 manish.sha 14
				$("span.lineitemtotal[data-id='"+key+"']").text(' ₹ '+ (parseInt(val.quantity)*parseInt(val.unitprice)).toString());
15
			});
20988 amit.gupta 16
			renderCartDerivedValues();
18633 manish.sha 17
			$('#cartLoadingModal').modal('hide');
17956 manish.sha 18
		}else{
19
			window.location.href = apihost + 'cartdetails/?user_id='+me;
17911 manish.sha 20
		}
22212 amit.gupta 21
	}
22
	//MOHIT-if user comes through link navigation.
23
	else{
17947 manish.sha 24
		$('input#refresh').val('yes');
25
		var estimateString = $('div.popover-markup').data('str');
22212 amit.gupta 26
		loadCartDetails();
20988 amit.gupta 27
		if(estimateString=="Can't ship here"){
21002 amit.gupta 28
			$('button.checkoutbtn').prop( "disabled", true);
17947 manish.sha 29
			$('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
20988 amit.gupta 30
					$(this).prop('disabled', true);
17947 manish.sha 31
			});
17919 manish.sha 32
		}
17881 manish.sha 33
	}
17953 manish.sha 34
	if(!$('div.cartitemstotal').hasClass('hidden')){
18299 manish.sha 35
		$('div.scroll').attr('style', 'margin-bottom: 176px');
17953 manish.sha 36
	}else{
37
		$('div.scroll').attr('style', 'margin-bottom: 100px');
38
	}
17804 manish.sha 39
}
40
 
41
$(function(){
42
	loadCartPageDetails();
43
});
44
 
45
$(document).on('click','.number-spinner button',function(){
46
	btn = $(this);
47
    input = btn.closest('.number-spinner').find('input');
48
    oldValue = btn.closest('.number-spinner').find('input').val().trim(),
49
	newVal = 0;
50
    btn.closest('.number-spinner').find('button').prop("disabled", false);
51
    var inc = 0;
52
    var dec = 0;
53
    var sku = btn.data('id');
54
    var unitPrice = btn.data('price');
18007 manish.sha 55
    var prodname = btn.data('name');
56
    var brandname = btn.data('brand');
57
    var catalogItemId = btn.data('identifier');
18433 naman 58
    var minBuyQuantity = btn.data('minquantity');
59
    if(minBuyQuantity == "" || minBuyQuantity == undefined){
60
    	minBuyQuantity =1;
61
    }
62
    var quantityStep = btn.data('quantitystep');
63
    if(quantityStep == "" || quantityStep == undefined){
64
    	quantityStep =1;
65
    }
66
    var bulkpricing = btn.data('bulkpricing');
18684 naman 67
    var maxquantflag = false;
17804 manish.sha 68
    if (btn.attr('data-dir') == 'up') {
69
		if ( input.attr('max') == undefined || parseInt(input.val()) < parseInt(input.attr('max')) ) {
18433 naman 70
			if((parseInt(input.val())== 0 || parseInt(input.val())< minBuyQuantity) && (parseInt(input.attr('max')) >= minBuyQuantity)){	
71
				inc = minBuyQuantity - parseInt(input.val());
17804 manish.sha 72
				newVal = parseInt(oldValue) + inc;
18433 naman 73
			}
74
			else{
18684 naman 75
				inc = quantityStep;
76
				if(parseInt(oldValue)< minBuyQuantity+(quantityStep*4)){
17804 manish.sha 77
					newVal = parseInt(oldValue) + inc;
78
				}
18684 naman 79
				else if(parseInt(oldValue)< minBuyQuantity+(quantityStep*28)){
80
					var minqty = minBuyQuantity;
81
					if((parseInt(oldValue)+quantityStep) % quantityStep == 0 ){minqty = 0;}
82
					if(parseInt(oldValue) % (quantityStep*5) == 0){
18701 naman 83
						inc = (5*quantityStep)+minqty;
18684 naman 84
						newVal = parseInt(oldValue)+ (5*quantityStep)+minqty;
85
					}
86
					else{
18701 naman 87
						inc = minqty+ (5*quantityStep) - (parseInt(oldValue) % (5*quantityStep));
18684 naman 88
						newVal =minqty+ 5*quantityStep+ parseInt(oldValue) - (parseInt(oldValue) % (5*quantityStep));
89
					}
90
				}
91
				else{
92
					var minqty = minBuyQuantity;
93
					if((parseInt(oldValue)+quantityStep) % quantityStep == 0){minqty = 0;}
94
					if(parseInt(oldValue) % (quantityStep*10) == 0){
18701 naman 95
						inc = (10*quantityStep)+minqty;
18684 naman 96
						newVal = parseInt(oldValue)+ (10*quantityStep)+minqty;
97
					}
98
					else{
18701 naman 99
						inc = (10*quantityStep)  - (parseInt(oldValue) % (10*quantityStep)) +minqty;
18684 naman 100
						newVal =10*quantityStep + parseInt(oldValue) - (parseInt(oldValue) % (10*quantityStep)) +minqty;
101
					}
102
				}
103
 
104
 
105
				if(newVal>parseInt(input.attr('max'))){
106
					var minqty = minBuyQuantity;
107
					if((parseInt(oldValue)+quantityStep) % quantityStep == 0){minqty = 0;}
108
					newVal = parseInt(input.attr('max')) - (newVal - parseInt(input.attr('max'))) % (minqty +quantityStep);
18701 naman 109
					inc = newVal - parseInt(oldValue);
18684 naman 110
					maxquantflag = true
111
				}
17804 manish.sha 112
			}
113
		}else{
114
			newVal = parseInt(oldValue);
115
			btn.prop("disabled", true);
116
		}
18684 naman 117
		if(newVal==parseInt(input.attr('max')) || maxquantflag == true){
17905 manish.sha 118
			input.attr('style', 'border: 2px solid #ff0000');
119
		}else{
120
			input.attr('style', 'border: 1px solid #CCCCCC');
121
		}
17804 manish.sha 122
	} else {
123
		if ( input.attr('min') == undefined || parseInt(input.val()) > parseInt(input.attr('min')) ) {
18433 naman 124
			dec = quantityStep;
17804 manish.sha 125
			newVal = parseInt(oldValue) - dec;
18433 naman 126
			var minBuyQtyDiff = parseInt(oldValue) - minBuyQuantity;
127
			if(minBuyQtyDiff ==0){
128
				dec = minBuyQuantity;
129
				newVal = parseInt(oldValue) - dec;
130
			}else if(dec>minBuyQtyDiff){
131
				dec = minBuyQtyDiff;
132
				newVal = parseInt(oldValue) - dec;
133
			}
17804 manish.sha 134
		}else{
135
			btn.prop("disabled", true);
136
		}
17905 manish.sha 137
		if(newVal==parseInt(input.attr('min'))){
138
			input.attr('style', 'border: 2px solid #5bc0de');
139
		}else{
140
			input.attr('style', 'border: 1px solid #CCCCCC');
141
		}
17804 manish.sha 142
	}
17905 manish.sha 143
    $("span.lineitemqty[data-id='"+sku+"']").text(newVal);
17804 manish.sha 144
	btn.closest('.number-spinner').find('input').val(newVal);
18433 naman 145
 
146
 
20988 amit.gupta 147
	if (bulkpricing != undefined && bulkpricing.length != 0){		
18433 naman 148
    	for(var i=0;i<bulkpricing.length;i++)
149
    		{
150
    			if(newVal<bulkpricing[i]['quantity']){
151
    				break;
152
    			}
153
    			else{
154
 
155
    				unitPrice = bulkpricing[i]['price'];
156
    			}
157
    		}
158
    }
159
	$("span.lineitemprice[data-id='"+sku+"']").text(unitPrice);
160
 
161
 
18007 manish.sha 162
	$("span.packQuantity[data-id='"+sku+"']").text(newVal*$("span.packQuantity[data-id='"+sku+"']").data('pack'));
17947 manish.sha 163
	$("span.lineitemtotal[data-id='"+sku+"']").text(' ₹ '+ (parseInt(newVal)*parseInt(unitPrice)).toString());
20988 amit.gupta 164
	loadCartDetails();
165
	renderCartDerivedValues();
17804 manish.sha 166
});
167
 
168
function numberWithCommas(x) {
169
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
170
}
171
 
18298 manish.sha 172
function handleCheckout(){
173
	var cart_details = localStorage.getItem('cart_details');
174
	if(cart_details!=undefined){
175
    	var cartDetailsObj = JSON.parse(cart_details);
22212 amit.gupta 176
    	//nonAccessoryShippingCharge = cartDetailsObj.shippingCharges - cartDetailsObj.accessoryShippingCharges;
18298 manish.sha 177
 
22212 amit.gupta 178
    	if(cartDetailsObj.shippingCharges > 0){
179
			window.history.pushState('forward', null, './?user_id='+me);
180
			$('p#shippingText').html("<span>You are paying ₹50 for shipping.<br>To avail free shipping, cart value should be more than ₹999</span><hr style='margin-top: 5px;margin-bottom: 5px;'>"
181
			+"<span>आप शिपिंग के लिए ₹50 का भुगतान कर रहे हैं।<br> फ्री शिपिंग के लिए कार्ट राशि ₹999 से अधिक की होनी चाहिए।</span>");
182
			$('#myModal').modal('show');
183
		} else{
184
			$('#cartLoadingModal').modal('show');
185
			var url = apihost + 'shippings/';
186
		    var newForm = $('<form>', {
187
		        'action': url,
188
		        'method':'post'
189
		    }).append($('<input>', {
190
		        'name': 'cart_details',
191
		        'value': localStorage.getItem('cart_details'),
192
		        'type': 'hidden'
193
		    }));
20972 amit.gupta 194
	    newForm.appendTo($('body'));
18298 manish.sha 195
	    newForm.submit();
196
	}
197
}
198
 
199
$(document).on('click','button#addItems',function(){
200
	$('#myModal').modal('hide');
201
	$("#cartloader").removeClass('hidden');
18312 manish.sha 202
	history.addItem="yes";
20969 amit.gupta 203
	history.back();
18298 manish.sha 204
});
205
 
206
$(document).on('click','button#continueCheckout',function(){
207
	$('#myModal').modal('hide');
208
	$("#cartloader").removeClass('hidden');
209
	var url = apihost + 'shippings/';
210
    var newForm = $('<form>', {
211
        'action': url,
212
        'method':'post'
213
    }).append($('<input>', {
214
        'name': 'cart_details',
215
        'value': localStorage.getItem('cart_details'),
216
        'type': 'hidden'
217
    }));
20971 amit.gupta 218
    newForm.appendTo($('body'));
18302 manish.sha 219
    history.form=newForm;
20969 amit.gupta 220
    history.back();
18298 manish.sha 221
});
222
 
17804 manish.sha 223
$(document).on('click','.changepincode',function(){
17919 manish.sha 224
	$('#cartLoadingModal').modal('show');
17881 manish.sha 225
	var pincode = "pin_"+$('.pincodeval').val();
17804 manish.sha 226
	var url = apihost + 'cartdetails/?user_id='+me;
227
    var newForm = $('<form>', {
228
        'action': url,
229
        'method':'post'
230
    }).append($('<input>', {
231
        'name': 'cart_details',
232
        'value': localStorage.getItem('cart_details'),
233
        'type': 'hidden'
234
    })).append($('<input>', {
235
        'name': 'pincode',
236
        'value': pincode,
237
        'type': 'hidden'
238
    }));
20971 amit.gupta 239
    newForm.appendTo($('body'));
17804 manish.sha 240
    newForm.submit();
241
});
242
 
18019 manish.sha 243
$(document).on('click','a.addMoreItems',function(){
244
	$('#cartLoadingModal').modal('show');
245
});
246
 
18298 manish.sha 247
$(document).on('click','.checkoutbtn',function(){		
248
	handleCheckout();
17822 manish.sha 249
});
250
$(document).on('click','.backtodeals',function(){
17919 manish.sha 251
	$('#cartLoadingModal').modal('show');
20655 amit.gupta 252
	window.location.href = apihost + 'categories/linkdeal/3?filtertype=exclusive';
19286 manish.sha 253
});
254
 
255
$(document).on('click','span.clearCart',function(){
256
	$("#cartloader").removeClass('hidden');
257
	$('#clearCartModel').modal('show');
258
	$("#cartloader").addClass('hidden');
259
});
260
 
261
$(document).on('click','button#abortClearCartBtn',function(){
262
	$('#clearCartModel').modal('hide');
263
});
264
 
22212 amit.gupta 265
//TODO:Mohit Clear cart removes everything in the cart
19286 manish.sha 266
function clearCart(){
267
	$('#clearCartModel').modal('hide');
268
	$("#cartloader").removeClass('hidden');
269
	var cart_details = localStorage.getItem('cart_details');
270
	if(cart_details!=undefined){
271
		var cartDetailsObj = JSON.parse(cart_details);
272
		$.each(cartDetailsObj.cartItems, function(key,val) {
273
			cartDetailsObj.cartItems[key].quantity = 0;
274
		});
275
		cartDetailsObj.totalCartQuantity = 0;
276
		cartDetailsObj.totalCartValue = 0;
277
		cartDetailsObj.shippingCharges = 0;
278
		cartDetailsObj.totalSkus = 0;
279
		localStorage.setItem('cart_details',JSON.stringify(cartDetailsObj));
280
	}
281
	$('div.card').addClass('hidden');
282
	$('span.cartheader').text('');
283
	$('span.cartheader').attr('style', 'font-size: 12pt;padding-left: 30px;');
284
	$('span.cartheader').text('Cart Details');
285
	$('div.cartgrandtotal span.pull-right').text('₹ '+numberWithCommas(0));
286
	$('div.cartitemstotal').addClass('hidden');
287
	$('button.checkoutbtn').prop( "disabled", true );
288
	$('div.emptyCart').removeClass('hidden');
289
	$('div.popover-markup').addClass('hidden');
290
	$("#cartloader").addClass('hidden');
291
}
292
 
293
$(document).on('click','button#clearCartBtn',function(){
19299 manish.sha 294
	clearCart();
19300 manish.sha 295
	$("span.clearCart").removeClass('clearCart');
19286 manish.sha 296
});
297
 
298
$(document).on('click','span.clearItem',function(){
299
	var itemId = $(this).attr('sku');
300
	var cart_details = localStorage.getItem('cart_details');
301
	if(cart_details!=undefined){
302
		var cartDetailsObj = JSON.parse(cart_details);
20988 amit.gupta 303
		var item = cartDetailsObj.cartItems[itemId];
304
		$("div.card[sku='"+itemId+"']").addClass("hidden");
305
		$(this).next().find('input').val(0);
306
		$(this).next().find("button[data-dir='up']").data('estimate', '');
307
		$("span.packQuantity[data-id='"+itemId+"']").text(0);
308
		$("span.lineitemtotal[data-id='"+itemId+"']").text(' ₹ '+ 0);
309
		if($('div.card:visible').length==0){
310
			clearCart();
311
			$("span.clearCart").removeClass('clearCart');
19286 manish.sha 312
		}else{
20988 amit.gupta 313
			loadCartDetails();
314
			renderCartDerivedValues();
19286 manish.sha 315
		}
316
	}
20988 amit.gupta 317
});
318
 
22212 amit.gupta 319
//TODO:MOHIT Cart info comes from html docuemnt with each cart item element
320
//New synced cart cache is being populated from that cart.
321
//This code is called when user comes to cart details page.
20988 amit.gupta 322
function loadCartDetails(){
323
	cartItems = {};
324
	oldCartItems = JSON.parse(localStorage.getItem('cart_details')).cartItems;
325
	$('.number-spinner').each(function (index, val) {
326
		var element = $(val);
327
		var quantity = element.find("input").val();
328
 
329
		var dataElement = element.find("button[data-dir='up']")
330
		var estimate = dataElement.data('estimate');
331
		var catalogItemId = dataElement.data('identifier');
332
		var sku = dataElement.data('id');
333
		var price = dataElement.data('price');
334
		var bulkpricing = dataElement.data('bulkpricing');
335
		var prodname = dataElement.data('name');
336
		var brandname = dataElement.data('brand');
337
 
338
		if (bulkpricing != undefined && bulkpricing.length != 0){
339
	    	for(var i=0;i<bulkpricing.length;i++)
340
	    		{
341
	    			if(val.quantity<bulkpricing[i]['quantity']){
342
	    				break;
343
	    			}
344
	    			else{
345
	    				price = bulkpricing[i]['price'];
346
	    			}
347
	    		}
348
	    }
349
		itemDetail = {};
350
		if (estimate=="-1") {			
351
			itemDetail['quantity']=oldCartItems[sku.toString()].quantity
352
		} else {
353
			itemDetail['quantity']=parseInt(quantity);
354
		}
355
		itemDetail['unitprice']=parseInt(price);
356
		itemDetail['productname']=prodname;
357
		itemDetail['brand']=brandname;
358
		itemDetail['catalogItemId'] = catalogItemId.toString();
359
		itemDetail['category'] = dataElement.data('category');
360
		cartItems[sku.toString()] = itemDetail;
361
	});
362
	setCartDetails(cartItems);
363
}
364
 
22212 amit.gupta 365
 
366
//TODO: MOHIT. This peice of code is used to sync server side cart validation response during successful handling
367
//in scenarios where 
20988 amit.gupta 368
function setCartDetails(cartItems) {
369
	var cartDetailsObj = {};
370
	cartDetailsObj.totalCartQuantity = 0; 
371
	cartDetailsObj.totalCartValue = 0;
372
	cartDetailsObj.mobileCount = 0;
373
	cartDetailsObj.totalSkus = 0;
374
	cartDetailsObj.shippingCharges = 0;
22212 amit.gupta 375
	//cartDetailsObj.accessoryShippingCharges = 0;
20988 amit.gupta 376
	cartDetailsObj.cartItems = cartItems;
377
	for(itemId in cartItems) {
378
		item = cartItems[itemId];
379
		if(item.quantity > 0){
380
			cartDetailsObj.totalCartQuantity += item.quantity;
381
			cartDetailsObj.totalSkus += 1;
382
		}
383
		cartDetailsObj.totalCartValue += item.quantity*item.unitprice;
22212 amit.gupta 384
		/*if(item.category=='Mobile Phone' || item.category=='Tablet') {
20988 amit.gupta 385
			cartDetailsObj.mobileCount += item.quantity;
386
		} else {
20998 amit.gupta 387
			cartDetailsObj.accessoryShippingCharges = 0;
22212 amit.gupta 388
		}*/
20988 amit.gupta 389
	}
22212 amit.gupta 390
	/*if(cartDetailsObj.totalCartQuantity<5){
21082 amit.gupta 391
		cartDetailsObj.shippingCharges = cartDetailsObj.accessoryShippingCharges + 60*cartDetailsObj.totalCartQuantity;
20988 amit.gupta 392
	} else {
21082 amit.gupta 393
		cartDetailsObj.shippingCharges = cartDetailsObj.accessoryShippingCharges + 30*cartDetailsObj.totalCartQuantity;
22212 amit.gupta 394
	}*/
395
	if(cartDetailsObj.totalCartValue < 1000){
396
		cartDetailsObj.shippingCharges = 50;
20988 amit.gupta 397
	}
22212 amit.gupta 398
	cartDetailsObj.shippingCharges = 
20988 amit.gupta 399
	localStorage.setItem('cart_details',JSON.stringify(cartDetailsObj));
400
}
401
 
22212 amit.gupta 402
//TODO MOHIT this logic will tell you about what all values that need to be derived from local cart storage for display
403
//purpose in cart page
20988 amit.gupta 404
function renderCartDerivedValues(){
405
	var cart_details = localStorage.getItem('cart_details');
406
	var cartDetailsObj = JSON.parse(cart_details);
407
	var totalCartValue = cartDetailsObj.totalCartValue;
408
	var totalCartQuantity = cartDetailsObj.totalCartQuantity;
409
	var cartItems = cartDetailsObj.cartItems;
410
	var shippingCharges =cartDetailsObj.shippingCharges;
411
	var totalSkus = cartDetailsObj.totalSkus;
412
 
413
	$('div.cartitemstotal span.itemstotal').text('₹ '+numberWithCommas(totalCartValue));
414
	$('div.cartitemstotal span.shippingval').text('₹ '+numberWithCommas(shippingCharges));
415
	var payable = 0;
416
	if(shippingCharges>0){
417
		if(totalCartValue>0){
418
			$('.cartitemstotal').removeClass('hidden');
419
			payable = parseInt(shippingCharges)+parseInt(totalCartValue);
420
		}else{
421
			payable = 0;
422
		}
423
	}else{
424
			payable = parseInt(totalCartValue);
425
			$('.cartitemstotal').addClass('hidden');
426
	}
427
	$('div.cartgrandtotal span.pull-right').text('₹ '+numberWithCommas(payable));
428
 
429
	if(payable>0){
430
		$('button.checkoutbtn').prop( "disabled", false );
431
	}else{
432
		$('button.checkoutbtn').prop( "disabled", true );
433
	}
434
	var estimateString = $('div.popover-markup').data('str');
435
	if(estimateString!="Can't ship here"){
436
		$('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
437
			$(this).prop('disabled', false);
438
		});
439
	}else{
440
		$('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
441
			$(this).prop('disabled', true);
442
		});
443
	}
444
}