Subversion Repositories SmartDukaan

Rev

Rev 22213 | Blame | Compare with Previous | Last modification | View Log | RSS feed

//MOHIT-This code is called when user lands on cartdetails page either through using back button or clicking on cart from deals page 
function loadCartPageDetails(){
        var input = $('input#refresh').val();
        //MOHIT-If user comes through front/back navigation 
        if(input == 'yes'){
                $('#cartLoadingModal').modal('show');
                var cart_details = localStorage.getItem('cart_details');
                if(cart_details!=undefined){
                        var cartDetailsObj = JSON.parse(cart_details);
                        $.each(cartDetailsObj.cartItems, function(key,val) {
                                $("div.number-spinner button[data-id='"+key+"']").closest('.number-spinner').find('input').val(val.quantity);
                                $("span.lineitemqty[data-id='"+key+"']").text(val.quantity);
                                $("span.packQuantity[data-id='"+key+"']").text(val.quantity*$("span.packQuantity[data-id='"+key+"']").data('pack'));
                                $("span.lineitemtotal[data-id='"+key+"']").text(' ₹ '+ (parseInt(val.quantity)*parseInt(val.unitprice)).toString());
                        });
                        renderCartDerivedValues();
                        $('#cartLoadingModal').modal('hide');
                }else{
                        window.location.href = apihost + 'cartdetails/?user_id='+me;
                }
        }
        //MOHIT-if user comes through link navigation.
        else{
                $('input#refresh').val('yes');
                var estimateString = $('div.popover-markup').data('str');
                loadCartDetails();
                if(estimateString=="Can't ship here"){
                        $('button.checkoutbtn').prop( "disabled", true);
                        $('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
                                        $(this).prop('disabled', true);
                        });
                }
        }
        if(!$('div.cartitemstotal').hasClass('hidden')){
                $('div.scroll').attr('style', 'margin-bottom: 176px');
        }else{
                $('div.scroll').attr('style', 'margin-bottom: 100px');
        }
}

$(function(){
        loadCartPageDetails();
});

$(document).on('click','.number-spinner button',function(){
        btn = $(this);
    input = btn.closest('.number-spinner').find('input');
    oldValue = btn.closest('.number-spinner').find('input').val().trim(),
        newVal = 0;
    btn.closest('.number-spinner').find('button').prop("disabled", false);
    var inc = 0;
    var dec = 0;
    var sku = btn.data('id');
    var unitPrice = btn.data('price');
    var prodname = btn.data('name');
    var brandname = btn.data('brand');
    var catalogItemId = btn.data('identifier');
    var minBuyQuantity = btn.data('minquantity');
    if(minBuyQuantity == "" || minBuyQuantity == undefined){
        minBuyQuantity =1;
    }
    var quantityStep = btn.data('quantitystep');
    if(quantityStep == "" || quantityStep == undefined){
        quantityStep =1;
    }
    var bulkpricing = btn.data('bulkpricing');
    var maxquantflag = false;
    if (btn.attr('data-dir') == 'up') {
                if ( input.attr('max') == undefined || parseInt(input.val()) < parseInt(input.attr('max')) ) {
                        if((parseInt(input.val())== 0 || parseInt(input.val())< minBuyQuantity) && (parseInt(input.attr('max')) >= minBuyQuantity)){    
                                inc = minBuyQuantity - parseInt(input.val());
                                newVal = parseInt(oldValue) + inc;
                        }
                        else{
                                inc = quantityStep;
                                if(parseInt(oldValue)< minBuyQuantity+(quantityStep*4)){
                                        newVal = parseInt(oldValue) + inc;
                                }
                                else if(parseInt(oldValue)< minBuyQuantity+(quantityStep*28)){
                                        var minqty = minBuyQuantity;
                                        if((parseInt(oldValue)+quantityStep) % quantityStep == 0 ){minqty = 0;}
                                        if(parseInt(oldValue) % (quantityStep*5) == 0){
                                                inc = (5*quantityStep)+minqty;
                                                newVal = parseInt(oldValue)+ (5*quantityStep)+minqty;
                                        }
                                        else{
                                                inc = minqty+ (5*quantityStep) - (parseInt(oldValue) % (5*quantityStep));
                                                newVal =minqty+ 5*quantityStep+ parseInt(oldValue) - (parseInt(oldValue) % (5*quantityStep));
                                        }
                                }
                                else{
                                        var minqty = minBuyQuantity;
                                        if((parseInt(oldValue)+quantityStep) % quantityStep == 0){minqty = 0;}
                                        if(parseInt(oldValue) % (quantityStep*10) == 0){
                                                inc = (10*quantityStep)+minqty;
                                                newVal = parseInt(oldValue)+ (10*quantityStep)+minqty;
                                        }
                                        else{
                                                inc = (10*quantityStep)  - (parseInt(oldValue) % (10*quantityStep)) +minqty;
                                                newVal =10*quantityStep + parseInt(oldValue) - (parseInt(oldValue) % (10*quantityStep)) +minqty;
                                        }
                                }
                                
                                
                                if(newVal>parseInt(input.attr('max'))){
                                        var minqty = minBuyQuantity;
                                        if((parseInt(oldValue)+quantityStep) % quantityStep == 0){minqty = 0;}
                                        newVal = parseInt(input.attr('max')) - (newVal - parseInt(input.attr('max'))) % (minqty +quantityStep);
                                        inc = newVal - parseInt(oldValue);
                                        maxquantflag = true
                                }
                        }
                }else{
                        newVal = parseInt(oldValue);
                        btn.prop("disabled", true);
                }
                if(newVal==parseInt(input.attr('max')) || maxquantflag == true){
                        input.attr('style', 'border: 2px solid #ff0000');
                }else{
                        input.attr('style', 'border: 1px solid #CCCCCC');
                }
        } else {
                if ( input.attr('min') == undefined || parseInt(input.val()) > parseInt(input.attr('min')) ) {
                        dec = quantityStep;
                        newVal = parseInt(oldValue) - dec;
                        var minBuyQtyDiff = parseInt(oldValue) - minBuyQuantity;
                        if(minBuyQtyDiff ==0){
                                dec = minBuyQuantity;
                                newVal = parseInt(oldValue) - dec;
                        }else if(dec>minBuyQtyDiff){
                                dec = minBuyQtyDiff;
                                newVal = parseInt(oldValue) - dec;
                        }
                }else{
                        btn.prop("disabled", true);
                }
                if(newVal==parseInt(input.attr('min'))){
                        input.attr('style', 'border: 2px solid #5bc0de');
                }else{
                        input.attr('style', 'border: 1px solid #CCCCCC');
                }
        }
    $("span.lineitemqty[data-id='"+sku+"']").text(newVal);
        btn.closest('.number-spinner').find('input').val(newVal);
        
        
        if (bulkpricing != undefined && bulkpricing.length != 0){               
        for(var i=0;i<bulkpricing.length;i++)
                {
                        if(newVal<bulkpricing[i]['quantity']){
                                break;
                        }
                        else{
                                
                                unitPrice = bulkpricing[i]['price'];
                        }
                }
    }
        $("span.lineitemprice[data-id='"+sku+"']").text(unitPrice);

        
        $("span.packQuantity[data-id='"+sku+"']").text(newVal*$("span.packQuantity[data-id='"+sku+"']").data('pack'));
        $("span.lineitemtotal[data-id='"+sku+"']").text(' ₹ '+ (parseInt(newVal)*parseInt(unitPrice)).toString());
        loadCartDetails();
        renderCartDerivedValues();
});

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

function handleCheckout(){
        var cart_details = localStorage.getItem('cart_details');
        if(cart_details!=undefined){
        var cartDetailsObj = JSON.parse(cart_details);
        //nonAccessoryShippingCharge = cartDetailsObj.shippingCharges - cartDetailsObj.accessoryShippingCharges;
        
        if(cartDetailsObj.shippingCharges > 0){
                        window.history.pushState('forward', null, './?user_id='+me);
                        $('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;'>"
                        +"<span>आप शिपिंग के लिए ₹50 का भुगतान कर रहे हैं।<br> फ्री शिपिंग के लिए कार्ट राशि ₹999 से अधिक की होनी चाहिए।</span>");
                        $('#myModal').modal('show');
                } else{
                        $('#cartLoadingModal').modal('show');
                        var url = apihost + 'shippings/';
                    var newForm = $('<form>', {
                        'action': url,
                        'method':'post'
                    }).append($('<input>', {
                        'name': 'cart_details',
                        'value': localStorage.getItem('cart_details'),
                        'type': 'hidden'
                    }));
                    newForm.appendTo($('body'));
                    newForm.submit();
                }
        }
}

$(document).on('click','button#addItems',function(){
        $('#myModal').modal('hide');
        $("#cartloader").removeClass('hidden');
        history.addItem="yes";
        history.back();
});

$(document).on('click','button#continueCheckout',function(){
        $('#myModal').modal('hide');
        $("#cartloader").removeClass('hidden');
        var url = apihost + 'shippings/';
    var newForm = $('<form>', {
        'action': url,
        'method':'post'
    }).append($('<input>', {
        'name': 'cart_details',
        'value': localStorage.getItem('cart_details'),
        'type': 'hidden'
    }));
    newForm.appendTo($('body'));
    history.form=newForm;
    history.back();
});

$(document).on('click','.changepincode',function(){
        $('#cartLoadingModal').modal('show');
        var pincode = "pin_"+$('.pincodeval').val();
        var url = apihost + 'cartdetails/?user_id='+me;
    var newForm = $('<form>', {
        'action': url,
        'method':'post'
    }).append($('<input>', {
        'name': 'cart_details',
        'value': localStorage.getItem('cart_details'),
        'type': 'hidden'
    })).append($('<input>', {
        'name': 'pincode',
        'value': pincode,
        'type': 'hidden'
    }));
    newForm.appendTo($('body'));
    newForm.submit();
});

$(document).on('click','a.addMoreItems',function(){
        $('#cartLoadingModal').modal('show');
});

$(document).on('click','.checkoutbtn',function(){               
        handleCheckout();
});
$(document).on('click','.backtodeals',function(){
        $('#cartLoadingModal').modal('show');
        window.location.href = apihost + 'categories/linkdeal/3?filtertype=exclusive';
});

$(document).on('click','span.clearCart',function(){
        $("#cartloader").removeClass('hidden');
        $('#clearCartModel').modal('show');
        $("#cartloader").addClass('hidden');
});

$(document).on('click','button#abortClearCartBtn',function(){
        $('#clearCartModel').modal('hide');
});

//TODO:Mohit Clear cart removes everything in the cart
function clearCart(){
        $('#clearCartModel').modal('hide');
        $("#cartloader").removeClass('hidden');
        var cart_details = localStorage.getItem('cart_details');
        if(cart_details!=undefined){
                var cartDetailsObj = JSON.parse(cart_details);
                $.each(cartDetailsObj.cartItems, function(key,val) {
                        cartDetailsObj.cartItems[key].quantity = 0;
                });
                cartDetailsObj.totalCartQuantity = 0;
                cartDetailsObj.totalCartValue = 0;
                cartDetailsObj.shippingCharges = 0;
                cartDetailsObj.totalSkus = 0;
                localStorage.setItem('cart_details',JSON.stringify(cartDetailsObj));
        }
        $('div.card').addClass('hidden');
        $('span.cartheader').text('');
        $('span.cartheader').attr('style', 'font-size: 12pt;padding-left: 30px;');
        $('span.cartheader').text('Cart Details');
        $('div.cartgrandtotal span.pull-right').text('₹ '+numberWithCommas(0));
        $('div.cartitemstotal').addClass('hidden');
        $('button.checkoutbtn').prop( "disabled", true );
        $('div.emptyCart').removeClass('hidden');
        $('div.popover-markup').addClass('hidden');
        $("#cartloader").addClass('hidden');
}

$(document).on('click','button#clearCartBtn',function(){
        clearCart();
        $("span.clearCart").removeClass('clearCart');
});

$(document).on('click','span.clearItem',function(){
        var itemId = $(this).attr('sku');
        var cart_details = localStorage.getItem('cart_details');
        if(cart_details!=undefined){
                var cartDetailsObj = JSON.parse(cart_details);
                var item = cartDetailsObj.cartItems[itemId];
                $("div.card[sku='"+itemId+"']").addClass("hidden");
                $(this).next().find('input').val(0);
                $(this).next().find("button[data-dir='up']").data('estimate', '');
                $("span.packQuantity[data-id='"+itemId+"']").text(0);
                $("span.lineitemtotal[data-id='"+itemId+"']").text(' ₹ '+ 0);
                if($('div.card:visible').length==0){
                        clearCart();
                        $("span.clearCart").removeClass('clearCart');
                }else{
                        loadCartDetails();
                        renderCartDerivedValues();
                }
        }
});

//TODO:MOHIT Cart info comes from html docuemnt with each cart item element
//New synced cart cache is being populated from that cart.
//This code is called when user comes to cart details page.
function loadCartDetails(){
        cartItems = {};
        oldCartItems = JSON.parse(localStorage.getItem('cart_details')).cartItems;
        $('.number-spinner').each(function (index, val) {
                var element = $(val);
                var quantity = element.find("input").val();

                var dataElement = element.find("button[data-dir='up']")
                var estimate = dataElement.data('estimate');
                var catalogItemId = dataElement.data('identifier');
                var sku = dataElement.data('id');
                var price = dataElement.data('price');
                var bulkpricing = dataElement.data('bulkpricing');
                var prodname = dataElement.data('name');
                var brandname = dataElement.data('brand');

                if (bulkpricing != undefined && bulkpricing.length != 0){
                for(var i=0;i<bulkpricing.length;i++)
                        {
                                if(quantity<bulkpricing[i]['quantity']){
                                        break;
                                }
                                else{
                                        price = bulkpricing[i]['price'];
                                }
                        }
            }
                itemDetail = {};
                if (estimate=="-1") {                   
                        itemDetail['quantity']=oldCartItems[sku.toString()].quantity
                } else {
                        itemDetail['quantity']=parseInt(quantity);
                }
                itemDetail['unitprice']=parseInt(price);
                itemDetail['productname']=prodname;
                itemDetail['brand']=brandname;
                itemDetail['catalogItemId'] = catalogItemId.toString();
                itemDetail['category'] = dataElement.data('category');
                cartItems[sku.toString()] = itemDetail;
        });
        setCartDetails(cartItems);
}


//TODO: MOHIT. This peice of code is used to sync server side cart validation response during successful handling
//in scenarios where 
function setCartDetails(cartItems) {
        var cartDetailsObj = {};
        cartDetailsObj.totalCartQuantity = 0; 
        cartDetailsObj.totalCartValue = 0;
        cartDetailsObj.mobileCount = 0;
        cartDetailsObj.totalSkus = 0;
        cartDetailsObj.shippingCharges = 0;
        //cartDetailsObj.accessoryShippingCharges = 0;
        cartDetailsObj.cartItems = cartItems;
        for(itemId in cartItems) {
                item = cartItems[itemId];
                if(item.quantity > 0){
                        cartDetailsObj.totalCartQuantity += item.quantity;
                        cartDetailsObj.totalSkus += 1;
                }
                cartDetailsObj.totalCartValue += item.quantity*item.unitprice;
                /*if(item.category=='Mobile Phone' || item.category=='Tablet') {
                        cartDetailsObj.mobileCount += item.quantity;
                } else {
                        cartDetailsObj.accessoryShippingCharges = 0;
                }*/
        }
        /*if(cartDetailsObj.totalCartQuantity<5){
                cartDetailsObj.shippingCharges = cartDetailsObj.accessoryShippingCharges + 60*cartDetailsObj.totalCartQuantity;
        } else {
                cartDetailsObj.shippingCharges = cartDetailsObj.accessoryShippingCharges + 30*cartDetailsObj.totalCartQuantity;
        }*/
        if(cartDetailsObj.totalCartValue < 1000){
                cartDetailsObj.shippingCharges = 50;
        }
        cartDetailsObj.shippingCharges = 
        localStorage.setItem('cart_details',JSON.stringify(cartDetailsObj));
}

//TODO MOHIT this logic will tell you about what all values that need to be derived from local cart storage for display
//purpose in cart page
function renderCartDerivedValues(){
        var cart_details = localStorage.getItem('cart_details');
        var cartDetailsObj = JSON.parse(cart_details);
        var totalCartValue = cartDetailsObj.totalCartValue;
        var totalCartQuantity = cartDetailsObj.totalCartQuantity;
        var cartItems = cartDetailsObj.cartItems;
        var shippingCharges =cartDetailsObj.shippingCharges;
        var totalSkus = cartDetailsObj.totalSkus;
        
        $('div.cartitemstotal span.itemstotal').text('₹ '+numberWithCommas(totalCartValue));
        $('div.cartitemstotal span.shippingval').text('₹ '+numberWithCommas(shippingCharges));
        var payable = 0;
        if(shippingCharges>0){
                if(totalCartValue>0){
                        $('.cartitemstotal').removeClass('hidden');
                        payable = parseInt(shippingCharges)+parseInt(totalCartValue);
                }else{
                        payable = 0;
                }
        }else{
                        payable = parseInt(totalCartValue);
                        $('.cartitemstotal').addClass('hidden');
        }
        $('div.cartgrandtotal span.pull-right').text('₹ '+numberWithCommas(payable));
        
        if(payable>0){
                $('button.checkoutbtn').prop( "disabled", false );
        }else{
                $('button.checkoutbtn').prop( "disabled", true );
        }
        var estimateString = $('div.popover-markup').data('str');
        if(estimateString!="Can't ship here"){
                $('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
                        $(this).prop('disabled', false);
                });
        }else{
                $('div.cartdetailscard').find('div, input, textarea, button, select').each(function () {
                        $(this).prop('disabled', true);
                });
        }
}