Subversion Repositories SmartDukaan

Rev

Rev 23443 | Rev 23783 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

$().ready(function() {
        $("form#cd input").each(function(){
                $(this).attr('autocomplete', 'off');
        });
});
$().ready(function() {
    // validate the comment form when it is submitted
    $('#cd').validate({
                rules:{
                        name:{
                                required:true
                        },
                        email:{
                                required:true,
                                email:true
                        },
                        line1:{
                                required:true
                        },
                        state:{
                                required:true
                        },
                        city:{
                                required:true
                        },
                        pincode:{
                                required:true,
                                digits:true,
                                minlength: 6,
                maxlength: 6,
                        },
                        phone:{
                                required:true,
                                minlength:10,
                                maxlength:10,
                                digits:true
                        },
                },
                messages:{
                        name:{
                                required:"Please enter the name"
                        },
                        line1:{
                                required:"Please enter the address"
                        },
                        state:{
                                required: "Please select a state"
                        },
                        city:{
                                required: "Please enter the city"
                        },
                        email:{
                                require: "Please enter a valid email address"
                        },
                        pincode:{
                                required: "Please enter the pincode",
                                digits:"Please enter a valid pincode"
                        },
                        phone:{
                                required: "Please enter the phone number",
                                digits:"Please enter a valid number",
                                minlength:"Number should be of 10 digits"
                        }
                },
                submitHandler: function (form, event) {
                        event.preventDefault();
                        var payload = orderDetailsPayload();
                        if(!validateOrderDetails()){
                                alert("Please fix highlighted errors");
                                return false;
                        }
                        doAjaxRequestWithJsonHandler(context+"/create-order", "POST", payload, function(response){
                                emptyBag();
                                $('#main-content').html(response);
                        });
            return false; // required to block normal submit since you used ajax
         }
        });
    
        $("input.unitPrice").blur(function() {
                console.log("unitPrice blur called");
                var $element = $(this);
                var unitPrice = $element.val();
                var mopPrice = parseFloat($(this).attr('mopPrice'));
                if(parseFloat(unitPrice) < mopPrice){
                        //error = true;
                        alert("sellingPrice must be greater than equal to mop")
                        $element.addClass("border-highlight");
                }else{
                        $element.removeClass("border-highlight")
                        if(unitPrice == mopPrice){
                                $("input.discountAmount").removeAttr("readonly");
                        }
                        if(unitPrice != ''){
                                doAjaxRequestHandler(context+"/insurancePrices?price="+unitPrice, "GET", function(response){
                                        console.log("response : "+JSON.stringify(response));
                                        var insurancePriceMap = response.response;
                                        for(key in insurancePriceMap){
                                                var dealerPrice = insurancePriceMap[key].dealerPrice;
                                                var sellingPrice = insurancePriceMap[key].sellingPrice;
                                                $element.closest('tr').find('.insuranceAmount').attr("placeholder", dealerPrice + "-" + sellingPrice);
                                                break;
                                        }
                                });
                    }
                }
        }).focus(function(){
                console.log("unitPrice focus called");
                var $element = $(this);
                $element.closest('tr').find('.insuranceAmount').attr("placeholder", "");
        });
        
        $( "input.phone").change(function() {
                console.log("phone blur called");
                var mobileNumber = $(this).val();
                if(mobileNumber.length < 10) {
                        return;
                }
                writeOldCustomerDetailsByMobileNumber(mobileNumber);
                var itemIds = [];
                $("form#cd input.serialNumber").each(function(){
                        var itemId = parseInt($(this).attr("itemId"));
                        itemIds.push(itemId);
                });
                console.log(itemIds);
                calculateTotalAmount();
                checkPrebookingOrdersByCustomerMobileNumber(mobileNumber, itemIds);
        });
  
});


function validateOrderDetails(){
        var sNumbers = [];
        var error = false;
        $("form#cd input.serialNumber").each(function(){
                var input = $(this).val().trim();
                var itemType = $(this).attr("itemType");
                $(this).removeClass("border-highlight");
                if (sNumbers.indexOf(input) !=-1 || (itemType ==='SERIALIZED' && !input)){
                        error = true;
                        $(this).addClass("border-highlight");
                }
                sNumbers.push(input);
        });
        
        $("form#cd input.unitPrice").each(function(){
                var input = $(this).val().trim();
                $(this).removeClass("border-highlight");
                if (!input || parseInt(input)<=0 || isNaN(input)){
                        error=true;
                        $(this).addClass("border-highlight");
                }
                var unitPrice = parseFloat(input);
                var mopPrice = parseFloat($(this).attr('mopPrice'));
                if(unitPrice < mopPrice){
                        error = true;
                        alert("sellingPrice must be greater than equal to mop")
                        $(this).addClass("border-highlight");
                }
        });
        
        // checking input discountAmount is not greater than maxDiscountAmount
        $("form#cd input.discountAmount").each(function(){
                var input = $(this).val().trim();
                var mop = $(this).attr("mop");
                
                if(mop){
                        var maxDiscountPriceRangeString = $(this).attr("placeholder");
                        var maxDiscountPrice = 0;
                        if(maxDiscountPriceRangeString != undefined && maxDiscountPriceRangeString != ''){
                                maxDiscountPrice = maxDiscountPriceRangeString.substring(6);
                        }
                        $(this).removeClass("border-highlight");
                        if (!input || parseFloat(input)<0 || isNaN(input)){
                                alert("DiscountAmount value can not be lesser than 0 or invalid value");
                                error=true;
                                $(this).addClass("border-highlight");
                        }
                        if(parseFloat(input) > maxDiscountPrice){
                                alert("DiscountAmount [" + parseFloat(input) + "] value can not be greater than the suggested maxDiscountPrice [" + maxDiscountPrice + "]");
                                error=true;
                                $(this).addClass("border-highlight");
                        }
                }
        });
        
        var gstNumber = $("form#cd input[name=gstNumber]").val();
        $("form#cd input[name=gstNumber]").removeClass("border-highlight");
        if(gstNumber.length > 0 && gstNumber.length != 15){
                alert("Please provide valid gstNumber");
                error = true;
                $("form#cd input[name=gstNumber]").addClass("border-highlight");
        }
        
        /*if(localStorage.getItem('otpVerified') == null || localStorage.getItem('otpVerified') == "false"){
                alert("Please verify prebooking orders otp");
                error = true;
        }*/
        
        var amount = 0;
        var netPayableAmount = parseFloat($("form#cd input.netPayableAmount").val());
        var totalAdvanceAmount = parseFloat($("form#cd input.totalAdvanceAmount").val());
        
        netPayableAmount = netPayableAmount - totalAdvanceAmount;
        
        $("form#cd input.amount").each(function(){
                if ($(this).val() == ""){
                        $(this).val(0);
                }
                var tmpAmount = parseFloat($(this).val());
                amount = amount + tmpAmount;
        });
        
        console.log(amount);
        console.log(netPayableAmount);
        
        if (amount != netPayableAmount){
                if(amount < netPayableAmount){
                        alert("[" + (netPayableAmount - amount) + "] is more required to complete the payment");
                }else{
                        alert("[" + (amount - netPayableAmount) + "] is extra amount, please reduce the amount");
                }
                $("form#cd input.netPayableAmount").each(function(){
                        $(this).addClass("border-highlight");
                });
                error = true;
        }
        
        if (error){
                return false;
        }
        return true;
        
}


function getSerialNumbersFromOrder($el){
        var $serialNumberElement = $el.find('.serialNumber');
        if($serialNumberElement.val() == ''){
                return null;
        }
        var insuranceAmount = parseFloat($el.find('.insuranceAmount').val());
        if(insuranceAmount > 0){
                insurance = true;
                globalInsurace = true;
        }else{
                insurance = false;
        }
        return {'serialNumber':$serialNumberElement.val(),'insurance':insurance,'amount':insuranceAmount}
}

function orderDetailsPayload(){
        var orderObj = {};
        var priceQtyArray = [];
        var customerObj = {};
        var paymentOptionIdAmount = [];
        var globalInsurance = false;
        
        $("form#cd input.serialNumber").each(function(){
                var itemId = parseInt($(this).attr("itemId"));
                if (orderObj.hasOwnProperty('fofoOrderItems')){
                        var itemDetails = orderObj['fofoOrderItems'];
                        if (itemDetails.hasOwnProperty(itemId)){
                                var serialNumbers = itemDetails[itemId];
                                serialNumbers.push($(this).val());
                                itemDetails[itemId] = serialNumbers;
                        }else{
                                var serialNumbers = [];
                                serialNumbers.push($(this).val());
                                itemDetails[itemId] = serialNumbers;
                        }
                }else{
                        var serialNumbers = [];
                        serialNumbers.push($(this).val());
                        var tmp ={};
                        tmp[itemId]  = serialNumbers;
                        orderObj['fofoOrderItems'] = tmp;
                }
        });
        console.log( JSON.stringify(orderObj));
        $("#order-details").find("tr:not(:first-child)").each(function(index, el){
                //console.log(el);
                //console.log(index);
                var $el = $(el);
                var $unitPriceElement = $el.find('.unitPrice');
                var $discountAmountElement = $el.find('.discountAmount');
                        
                var itemId = parseInt($unitPriceElement.attr("itemId"));
                var unitPrice = parseFloat($unitPriceElement.val());
                var qty = parseInt($unitPriceElement.attr("quantity"));
                var discountAmount = parseFloat($discountAmountElement.val());
                var mop = $discountAmountElement.attr("mop");
                var prebookingOrder = false;
                $('.prebooking-order-details').each(function(){
                        if($(this).find('.useAdvanceAmount').is(':checked')){
                                var prebookingOrderItemId = parseInt($(this).find('.prebooking-item-id').text());
                                if(prebookingOrderItemId == itemId){
                                        prebookingOrder = true;
                                }
                        }
                });
                
                var tmpObj = {'itemId':itemId,'sellingPrice':unitPrice,'quantity':qty, 'prebookingOrder':prebookingOrder};
                tmpObj.discountAmount = discountAmount;
                /*tmpObj['serialNumberDetails'] = [];
                var found = false;
                for(var i = 0; i < priceQtyArray.length; i++){                  
                        if (priceQtyArray[i]["itemId"] == itemId){
                                found = true;
                                break;
                        }
                }
                if(!found){
                        priceQtyArray.push(tmpObj);
                }else{
                        for(var i = 0; i < priceQtyArray.length; i++){                  
                                if (priceQtyArray[i]["itemId"] == itemId){
                                        priceQtyArray[i]["quantity"] = priceQtyArray[i]["quantity"] + 1;
                                        break;
                                }
                        }
                }
                var serialNumberDetails = getSerialNumbersFromOrder($el);
                if(serialNumberDetails != null){
                        for(var i = 0; i < priceQtyArray.length; i++){                  
                                if (priceQtyArray[i]["itemId"] == itemId){
                                        priceQtyArray[i]["serialNumberDetails"].push(serialNumberDetails);
                                        break;
                                }
                        }
                }
                });*/
                        
                if (orderObj['fofoOrderItems'][itemId] === undefined){
                        tmpObj['serialNumberDetails'] =[];
                }else{
                        //tmpObj['serialNumbers'] = orderObj['fofoLineItems'][itemId];
                        tmpObj['serialNumberDetails'] = [];
                }
                var found = false;
                for(var i = 0; i < priceQtyArray.length; i++){                  
                        if (priceQtyArray[i]["itemId"] == itemId){
                                priceQtyArray[i]["quantity"] = priceQtyArray[i]["quantity"] + 1;
                                found = true;
                                break;
                        }
                }
                if(!found){
                        priceQtyArray.push(tmpObj);
                }
        });     
                
        $("#order-details").find("tr:not(:first-child)").each(function(index,el){
                //console.log(el);
                //console.log(index);
                var $serialNumberElement = $(el).find('.serialNumber');
                var itemId = parseInt($serialNumberElement.attr("itemId"));
                var insuranceAmount = parseFloat($(el).find('.insuranceAmount').val());
                //if (priceQtyArray['fofoLineItems'][itemId] !=undefined){
                        
                //}
                //console.log($serialNumberElement.val());
                //console.log(itemId);
                for(var i = 0; i < priceQtyArray.length; i++){
                        console.log(priceQtyArray[i]["itemId"]);
                        if (priceQtyArray[i]["itemId"] == itemId){
                                if(insuranceAmount > 0){
                                        insurance = true;
                                        globalInsurance = true;
                                }else{
                                        insurance = false;
                                }
                                var serialNumberDetails = {'serialNumber':$serialNumberElement.val(),'insurance':insurance,'amount':insuranceAmount}
                                priceQtyArray[i]['serialNumberDetails'].push(serialNumberDetails);
                        }
        }
        });
        
        console.log("priceQtyArray : "+JSON.stringify(priceQtyArray));
        customerObj['firstName'] = $("form#cd input[name=firstName]").val();
        customerObj['lastName'] = $("form#cd input[name=lastName]").val();
        customerObj['mobileNumber'] = $("form#cd input[name=phone]").val(); 
        customerObj['emailId'] = $("form#cd input[name=email]").val();
        customerObj['gstNumber'] = $("form#cd input[name=gstNumber]").val();
        customerObj['dateOfBirth'] = $("form#cd input[name=dateOfBirth]").val();
        var customerAddress = {};
        customerAddress['name'] = $("form#cd input[name=firstName]").val() + " " + $("form#cd input[name=lastName]").val();
        customerAddress['line1'] = $("form#cd input[name=line1]").val();
        customerAddress['line2'] = $("form#cd input[name=line2]").val();
        customerAddress['landmark'] = $("form#cd input[name=landmark]").val();
        customerAddress['city'] = $("form#cd input[name=city]").val();
        customerAddress['state'] = $('select[name=state] option:selected').val();
        customerAddress['pinCode'] = $("form#cd input[name=pinCode]").val();
        customerAddress['phoneNumber'] = $("form#cd input[name=alternatePhone]").val();
        customerAddress['country'] = "India";
        customerObj['customerAddressId'] = parseInt($("form#cd input[name=phone]").attr("addressId"));
        customerObj['address'] = customerAddress; 
        console.log( JSON.stringify(customerObj));
        
        
        var paymentOptionSize = parseInt($('#payment-option-id-amount-container').attr("paymentOptionSize"));
        //console.log("paymentOptionSize = "+paymentOptionSize);
        for(var index = 0; index < paymentOptionSize; index++){
                var paymentOptionAmount = 0.0;
                if($('#paymentOptionIdAmount'+index).val() != ""){
                        paymentOptionAmount = parseFloat($('#paymentOptionIdAmount'+index).val());
                }
                var paymentOptionId = $('#paymentOptionIdAmount'+index).attr("paymentOptionId");
                var paymentOptionIdAmountObject = {};
                paymentOptionIdAmountObject['paymentOptionId'] = paymentOptionId;
                paymentOptionIdAmountObject['amount'] = paymentOptionAmount;
                paymentOptionIdAmount.push(paymentOptionIdAmountObject);
        }
        
        console.log( JSON.stringify(paymentOptionIdAmount));
        
        var retObj = {};
        var dateOfBirth = $("form#cd input[name=dateOfBirth]").val();
        if(globalInsurance){
                retObj['customerDateOfBirth'] = (dateOfBirth);
        }
        
        retObj['fofoOrderItems'] = (priceQtyArray);
        retObj['customer'] = (customerObj);
        retObj['paymentOptions'] =  (paymentOptionIdAmount);
        
        console.log(retObj);
        return  JSON.stringify(retObj);
}


function writeOldCustomerDetailsByMobileNumber(mobileNumber){
        doAjaxRequestHandler(context+"/customer/mobileNumber?mobileNumber="+mobileNumber, "GET", function(response){
                var customer = response.response;
            $('#firstName').attr('value', customer.firstName);
            $('#lastName').attr('value', customer.lastName);
            $('#email').attr('value', customer.emailId);
            //$('#phone').attr('value', customer.mobileNumber);
            if(customer.address !== null) {
                $('#alternatePhone').attr('value', customer.address.phoneNumber);
                $('#line1').attr('value', customer.address.line1);
                $('#line2').attr('value', customer.address.line2);
                $('#landmark').attr('value', customer.address.landmark);
                $('#pinCode').attr('value', customer.address.pinCode);
                $('#city').attr('value', customer.address.city);
                $('#state').attr('value', customer.address.state).prop('selected',true);
                $('#phone').attr('addressId', customer.address.id);
            }
            //$('#state').val(customer.address.state).prop('selected', true);
        });
}

$(document).on('change', '.prebooking-order-details', function(){
        
        var itemIdQuantityMap = {};
        $("#order-details").find("tr:not(:first-child)").each(function(index, el){
                //console.log(el);
                //console.log(index);
                var $el = $(el);
                var $unitPriceElement = $el.find('.unitPrice');
                
                var itemId = parseInt($unitPriceElement.attr("itemId"));
                var qty = parseInt($unitPriceElement.attr("quantity"));
                if(itemIdQuantityMap[itemId] == null){
                        itemIdQuantityMap[itemId] = qty;
                }else{
                        itemIdQuantityMap[itemId] = itemIdQuantityMap[itemId] + qty;
                }
                
        });
        
        console.log(itemIdQuantityMap);
        
        console.log("use advance amount clicked");
    if ($('.useAdvanceAmount').is(':checked')) {
                //$(this).val('true');
                if(localStorage.getItem('otpVerified') != null && localStorage.getItem("otpVerified") == true){
                        $('#customer-otp-details').html('');
                }else{
                        var customerOtpDetailsDiv='<div class="row">'
                                +'<div class="col-lg-2 form-group">'
                                        +'<button class="btn btn-primary" id="generate-otp-button" onclick="generateOtp()" type="button">Generate Otp</button>'
                                +'</div>'
                                +'<div class="col-lg-2 form-group">'
                                        +'<input placeholder = "OTP" id="otpValue" name="otpValue"  type="text" class="form-control input-sm">'
                                +'</div>'
                                +'<div class="col-lg-2 form-group">'
                                        +'<button class="btn btn-primary" id="validate-otp-button" onclick="validateOtp()" type="button">Validate Otp</button>'
                                +'</div>';
                        +'</div>';
                        $('#customer-otp-details').html(customerOtpDetailsDiv);
                }
    }else{
                //$(this).val('false');
                $('#customer-otp-details').html('');
    }
    if($(this).find('.useAdvanceAmount').is(':checked')){
                $(this).find('.useAdvanceAmount').val('true');
                var advanceAmount = $(this).find('.prebooking-advance-amount').text();
                console.log("- advanceAmount : "+advanceAmount);
                var quantity = $(this).find('.prebooking-available-quantity').text();
                console.log("available quantity : "+quantity);
                var itemId = parseInt($(this).find('.prebooking-item-id').text());
                console.log("itemId : "+itemId);
                var prebookingAmount = 0.0;
                if(itemIdQuantityMap[itemId] < parseInt(quantity)){
                        prebookingAmount = parseFloat(advanceAmount) * parseFloat(itemIdQuantityMap[itemId]);
                }else{
                        prebookingAmount = parseFloat(advanceAmount) * parseFloat(quantity);
                }
                console.log("prebookingAmount : "+prebookingAmount);
                
                
                //calculateTotalAmount();
                //var netPayableAmount = $('#cd').find('input.netPayableAmount').val();
                //console.log("netPayableAmount : "+netPayableAmount);
                //$('#cd').find('input.netPayableAmount').val(parseFloat(netPayableAmount) - prebookingAmount);
                $('#cd').find('input.totalAdvanceAmount').val(prebookingAmount);
    }else if(!$(this).find('.useAdvanceAmount').is(':checked')){
                $(this).find('.useAdvanceAmount').val('false');
                var advanceAmount = $(this).find('.prebooking-advance-amount').text();
                console.log("+ advanceAmount : "+advanceAmount);
                var quantity = $(this).find('.prebooking-available-quantity').text();
                console.log("available quantity : "+quantity);
                var itemId = parseInt($(this).find('.prebooking-item-id').text());
                console.log("itemId : "+itemId);
                var prebookingAmount = 0.0;
                if(itemIdQuantityMap[itemId] < parseInt(quantity)){
                        prebookingAmount = parseFloat(advanceAmount) * parseFloat(itemIdQuantityMap[itemId]);
                        console.log("used quantity : "+itemIdQuantityMap[itemId]);
                }else{
                        prebookingAmount = parseFloat(advanceAmount) * parseFloat(quantity);
                        console.log("used quantity : "+quantity);
                }
                console.log("prebookingAmount : "+prebookingAmount);
                //calculateTotalAmount();
                //var netPayableAmount = $('#cd').find('input.netPayableAmount').val();
                //console.log("netPayableAmount : "+netPayableAmount);
                //$('#cd').find('input.netPayableAmount').val(parseFloat(netPayableAmount) + prebookingAmount);
                var totalAdvanceAmount = $('#cd').find('input.totalAdvanceAmount').val();
                $('#cd').find('input.totalAdvanceAmount').val(parseFloat(totalAdvanceAmount) - prebookingAmount);
    }
});

/*$(document).on('change', '.useAdvanceAmount', function() {
    if($(this).is(':checked')){
                $(this).val('true');
    }else{
                $(this).val('false');
    }
});*/

function generateOtp(){
        console.log("generate Otp button clicked")
        var itemIdQuantityMap = {};
        $("#order-details").find("tr:not(:first-child)").each(function(index, el){
                //console.log(el);
                //console.log(index);
                var $el = $(el);
                var $unitPriceElement = $el.find('.unitPrice');
                
                var itemId = parseInt($unitPriceElement.attr("itemId"));
                var qty = parseInt($unitPriceElement.attr("quantity"));
                if(itemIdQuantityMap[itemId] == null){
                        itemIdQuantityMap[itemId] = qty;
                }else{
                        itemIdQuantityMap[itemId] = itemIdQuantityMap[itemId] + qty;
                }
                
        });
        
        //console.log(itemIdQuantityMap);
        var itemIdAdvanceAmountMap = {};
        $('.prebooking-order-details').each(function(){
                if($(this).find('.useAdvanceAmount').is(':checked')){
                        var advanceAmount = $(this).find('.prebooking-advance-amount').text();
                        //console.log("- advanceAmount : "+advanceAmount);
                        var quantity = $(this).find('.prebooking-available-quantity').text();
                        //console.log("available quantity : "+quantity);
                        var itemId = parseInt($(this).find('.prebooking-item-id').text());
                        //console.log("itemId : "+itemId);
                        var prebookingAmount = 0.0;
                        if(itemIdQuantityMap[itemId] < parseInt(quantity)){
                                prebookingAmount = parseFloat(advanceAmount) * parseFloat(itemIdQuantityMap[itemId]);
                        }else{
                                prebookingAmount = parseFloat(advanceAmount) * parseFloat(quantity);
                        }
                        itemIdAdvanceAmountMap[itemId] = prebookingAmount;
            }
        });
        console.log(itemIdAdvanceAmountMap);
        var mobileNumber = $("form#cd input[name=phone]").val();
        var emailId = $("form#cd input[name=email]").val();
        var url = context+'/generateOtp?customerMobileNumber='+mobileNumber+'&customerEmailId='+emailId;
        doAjaxRequestWithJsonHandler(url, "POST", JSON.stringify(itemIdAdvanceAmountMap), function(response){
                console.log("generate Otp response : "+JSON.stringify(response));
                alert("OTP has been generated successfully, Please verify OTP for further process");
                var otpId = parseInt(response.response);
                localStorage.setItem("otpId", otpId);
                localStorage.setItem("otpVerified", false);
        });
}

function validateOtp(){
        console.log("validateOtp button click");
        var mobileNumber = $("form#cd input[name=phone]").val();
        var emailId = $("form#cd input[name=email]").val();
        var otpId = parseInt(localStorage.getItem('otpId'));
        var otpValue = $('#otpValue').val();
        if(otpId == null || otpValue == ""){
                alert("Please enter otpValue");
        }else{
                var url = context+'/validateOtp?customerMobileNumber='+mobileNumber+'&customerEmailId='+emailId+'&otpId='+otpId+'&otpValue='+otpValue;
                doAjaxRequestHandler(url, "GET", function(response){
                        alert(response.response);
                        localStorage.removeItem("otpId");
                        $('#customer-otp-details').html('');
                        //$('#generate-otp-button').prop("disabled", true);
                        //$('#otpValue').prop("disabled", true);
                        //$('#validate-otp-button').prop("disabled", true);
                        localStorage.setItem("otpVerified", true);
                });
        }
}


function checkPrebookingOrdersByCustomerMobileNumber(mobileNumber, itemIds){
        //window.dispatchEvent(new Event('resize'));
        
        doAjaxRequestWithJsonHandler(context+"/getPrebookingOrdersByCustomerMobileNumber?customerMobileNumber="+mobileNumber, "POST", JSON.stringify(itemIds), function(response){
                $('#prebooking-order-details').html(response);
        });
}