var dashBoard; var plot1; $( document ).ready(function() { var loadTabs = new LoadTabs(); /*var points = []; points['33'] = 5.4; points['23'] = 15.4; points['26'] =2.3; points['34'] = 15.00; points['37'] = 40.55; points['39'] = 1.55; points['43'] = 7.9; points.sort(function(a, b){return a-b}); for (var index in points) { alert(index); alert(points[index]); }*/ loadTabs.startLoading(); }); function LoadTabs(){ this.startLoading = function startLoading(){ this.generateExpenseList(); } this.calculateBalance = function calculateBalance(){ } this.loadParticipants = function loadParticipants(){ } this.loadSettings = function loadSettings(){ } this.generateExpenseList = function generateExpenseList(){ var expenseInfoObj = $.parseJSON($('#expense_info').val()); dashBoard = new DashBoard(); //var participantIndex = 0; var groupExpenseIndex = 0 $.each( expenseInfoObj, function( key, val ) { if(key == "Expense"){ var expenseObj = new Expense(); expenseObj.id = val.id; expenseObj.unique_url = val.unique_url; expenseObj.title = val.title; expenseObj.currency= val.currency; expenseObj.description = val.description; expenseObj.create_date = val.create_date; dashBoard.expense = expenseObj; // $(document.body).append(object.id); /* $.each(val, function (i, object) { expObj.id = $(document.body).append(i+"="+object); }); */ } else if(key === "Participant"){ $.each(val, function (i, object) { var participantObj = new Participant(); participantObj.id = object.id; participantObj.name = object.name; participantObj.isCreator = object.is_creator; participantObj.create_date = object.create_date; participantObj.balance = 0; //set login participant Id and name if(participantObj.isCreator == "1"){ dashBoard.loginParticipantId = participantObj.id; dashBoard.loginParticipantName = participantObj.name; } dashBoard.participants[participantObj.id] = participantObj; // $(document.body).append(i+"="+object); }); /* $.each(val, function (i, object) { $(document.body).append(i+"="+object); });*/ //participantObj.push(val); } else if(key === "GroupExpense"){ $.each(val, function (i, object) { var groupExpense = new GroupExpense(); groupExpense.index = dashBoard.globalExpenseIndex; groupExpense.id = object.id; groupExpense.paidBy = object.paid_by_participant_id; groupExpense.expenseName = object.what; groupExpense.create_date = object.create_date; groupExpense.amount = object.amount; groupExpense.participantAmountStr = object.participant_amount; groupExpense.expenseDate = object.expense_date; groupExpense.number_of_notes= object.number_of_notes; groupExpense.number_of_modificaiton= object.number_of_modificaiton; groupExpense.isDetails= object.isDetails; groupExpense.type= object.type; // alert(object.type); dashBoard.groupExpenses[dashBoard.globalExpenseIndex++] = groupExpense; // $(document.body).append(i+"="+object); }); } }); dashBoard.showExpenseList(); dashBoard.setCurrentDate(); } } function DashBoard(){ this.expense; this.participants = []; this.groupExpenses = []; this.filteredGroupExpenses = []; this.gridData = []; this.participantAmtHtmlFormat = ""; this.loginParticipantId = ""; this.loginParticipantName = ""; this.paidByHtml = ""; this.currentInputAmount = "0"; this.currentEditGroupExpense; this.currentDate ; this.isAddMode = true; this.globalExpenseIndex = 0; this.addGroupExpense = function addGroupExpense( exp){ groupExpenses.push(exp); } this.editGroupExpense = function editGroupExpense(index,exp){ groupExpenses.insert(index,exp); } this.deleteGroupExpense = function deleteGroupExpense(index){ groupExpenses.remove(index); } this.getParticipantNameById = function getParticipantNameById(id){ return dashBoard.participants[id].name; } this.getNumberOfParticipants = function getNumberOfParticipants(){ var totalParticipant = 0; for (var index in dashBoard.participants) { totalParticipant++; } return totalParticipant; } this.fetchAndShowLog = function fetchAndShowLog(){ var groupExpenseObj = new GroupExpense(); groupExpenseObj.isAdd = 4; groupExpenseObj.expenseId = dashBoard.expense.id; fetchDataFromServer(groupExpenseObj,"#ExpenseIndexForm"); } this.generateLogList = function generateLogList(logData){ var logList = $.parseJSON(logData); var data = []; $.each( logList, function( key, val ) { $.each(val, function (model, object) { if(model=="Log"){ data.push([object.id, object.create_date,object.previous_paid_by,object.previous_desc,object.new_desc]); } }); }); /* $.each( logList, function( key, val ) { $.each(val, function (i, object) { alert(i); alert(object.new_desc) data.push([object.id, object.create_date,object.previous_paid_by,object.previous_desc,object.new_desc]); } }); */ var maxRowNum = data.length; if(maxRowNum<101){ maxRowNum = 100; } $("#log_grid").jqGrid({ datatype: "local", height: 340, width: 840, colNames: ['SI', 'Date', 'Paid By','Previous Description','New Description'], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden:true }, { name: 'Date', index: 'Date', width: 110 , align:'center', editable: true } , { name: 'Paid By', index: 'Paid By', width: 100 , align:'center', editable: true } , { name: 'Previous Description', index: 'Previous Description', width: 220 , align:'center', cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } } , { name: 'New Description', index: 'New Description', width: 220 , align:'center', cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } } ], rowNum : maxRowNum, rowList:[10,20,50,maxRowNum], pager: '#log_pager', gridview:true, rownumbers:true, autoencode:true, ignoreCase:true, // sortname: 'invdate', viewrecords: true, sortorder: 'desc', caption:'Expense Log' } ); $("#log_grid").jqGrid('navGrid','#log_pager',{ add:false, edit:false , del:false , search:true,searchtitle: 'Find Log'} ); var names = ['SI', 'Date', 'Paid By','Previous Description','New Description']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } for (var i = 0; i < mydata.length; i++) { //alert(i + 1); //alert(mydata[i]); $("#log_grid").jqGrid('addRowData',data[i][0]+1, mydata[i]); } //jQuery("#log_grid").setGridParam({rowNum:maxRowNum}).trigger("reloadGrid"); } this.showExpenseList = function showExpenseList(){ // alert(this.groupExpenses.length) dashBoard.gridData = []; dashBoard.isAddMode = true; //var data = []; $.each(this.groupExpenses, function( key, value ) { //var filteredGroupExpenseObj = dashBoard.getFilteredExpenseObj(key,value); //dashBoard.filteredGroupExpenses[key] = filteredGroupExpenseObj; dashBoard.gridData.push(dashBoard.getDataByExpense(key,value)); // alert(value); // data.push([value.id, dashBoard.getParticipantNameById(value.paidBy), dashBoard.getFormatedAmount(value.amount), value.expenseName, dashBoard.getFormatedDate(value.expenseDate),dashBoard.getInvolveString(value.involves),dashBoard.getForYouString(value.involves)]); //data[] }); dashBoard.setParticipantAmtHtmlFormat(); dashBoard.reloadGrid(); /*data.sort(function(a, b) { if(a.value < b.value) return 1; if(a.value > b.value) return -1; return 0; });*/ // alert(data); //var data = [["48803", "DSK1", "", "02200220", "OPEN","OPEN","OPEN","OPEN","OPEN","OPEN"], ["48804", "DSK1", "", "02200220", "OPEN","OPEN","OPEN",]]; //(data1); } this.getDataByExpense = function getDataByExpense(key,groupExpenseObj){ dashBoard.filteredGroupExpenses[key] = dashBoard.getFilteredExpenseObj(key,groupExpenseObj); return [dashBoard.filteredGroupExpenses[key].id, dashBoard.filteredGroupExpenses[key].paidBy, dashBoard.showFormatedAmount(dashBoard.filteredGroupExpenses[key].amount), dashBoard.filteredGroupExpenses[key].expenseName, dashBoard.filteredGroupExpenses[key].expenseDate,dashBoard.filteredGroupExpenses[key].involves,dashBoard.showFormatedAmount(dashBoard.filteredGroupExpenses[key].forYou)]; } this.getFilteredExpenseObj = function getFilteredExpenseObj(key,groupExpenseObj){ var filteredGroupExpenseObj = new FilteredGroupExpense(); filteredGroupExpenseObj.id = groupExpenseObj.index; filteredGroupExpenseObj.paidBy = dashBoard.getParticipantNameById(groupExpenseObj.paidBy); filteredGroupExpenseObj.amount = dashBoard.getFormatedAmount(groupExpenseObj.amount); filteredGroupExpenseObj.expenseName=groupExpenseObj.expenseName; filteredGroupExpenseObj.expenseDate = dashBoard.getFormatedDate(groupExpenseObj.expenseDate); filteredGroupExpenseObj.involves=dashBoard.getInvolveString(groupExpenseObj.participantAmountStr); filteredGroupExpenseObj.forYou=dashBoard.getForYouString(groupExpenseObj.participantAmountStr); filteredGroupExpenseObj.noOfNotes=groupExpenseObj.noOfNotes; filteredGroupExpenseObj.noOfModification=groupExpenseObj.noOfModification; return filteredGroupExpenseObj; } this.reloadGrid = function reloadGrid(){ var initDateEdit = function(elem) { setTimeout(function() { $(elem).datepicker({ dateFormat: 'dd-M-yy', autoSize: true, showOn: 'button', // it dosn't work in searching dialog changeYear: true, changeMonth: true, showButtonPanel: true, showWeek: true }); //$(elem).focus(); },100); }; var maxRowNum = dashBoard.globalExpenseIndex; if(maxRowNum<101){ maxRowNum = 100; } $("#grid").jqGrid({ datatype: "local", height: 240, colNames: ['SI', 'Who paid?', 'How much('+dashBoard.expense.currency+')?', 'For what reason?', 'When?','Involves?','For you('+dashBoard.expense.currency+')?'], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden:true }, { name: 'PaidBy', index: 'PaidBy', width: 90 , align:'center', formoptions:{rowpos:2}, editable: true, edittype:'select', editoptions:{value:'1:X',defaultValue:'X' } }, { name: 'Amount', index: 'Amount', align:'center', width: 120, formoptions:{elmsuffix:'('+dashBoard.expense.currency+')', rowpos:4}, editable: true, editrules:{required:true}, editoptions:{ maxlength:18,dataInit: function (el) { $(el).keyup(function () { //alert(el.value); el.value = el.value.replace(/[^0-9\.]/g,''); if(el.value.replace(/[^.]/g, "").length == 2){ el.value = el.value.substring(0, el.value.length-1); } if(el.value == ""){ dashBoard.currentInputAmount = 0; } else { dashBoard.currentInputAmount = el.value; } dashBoard.changeExpenseAmount(); }); } } }, { name: 'Reason', index: 'Reason', align:'center', width: 190, formoptions:{rowpos:1}, editable: true, editrules:{required:true}, editoptions:{maxlength:25}, sorttype: "float" }, { name: 'Date', index: 'Date', width: 80, align:'center', sorttype:'date', formoptions:{rowpos:3}, editable:true, editrules:{required:true}, editoptions: {dataInit:initDateEdit} }, { name: 'Involve', index: 'Involve', align:'center', width: 150, sorttype: "float" }, { name: 'For you?', index: 'For you?', align:'center', width: 100, sorttype: "float" } ], rowNum : maxRowNum, rowList:[10,20,50,maxRowNum], pager: '#expense_pager', gridview:true, rownumbers:true, autoencode:true, ignoreCase:true, // sortname: 'invdate', viewrecords: true, sortorder: 'desc', caption:'Expense List' // ondblClickRow: function(rowid,iRow,iCol,e){alert('double clicked');} } ); //jQuery("#grid").setGridParam({rowNum:10}).trigger("reloadGrid"); dashBoard.addRowsToGrid(dashBoard.gridData); // $(".ui-jqgrid-titlebar").hide(); $("#grid").jqGrid('setGridParam', { onSelectRow: function(rowid,iRow,iCol,e){ if(!iCol){ //alert(rowid); dashBoard.removeParticipantAmtRows(); dashBoard.isAddMode = false; dashBoard.loadForEdit(); //jQuery(this).jqGrid('editGridRow', rowid); } } } ); $("#grid").jqGrid('setGridParam', {ondblClickRow: function(rowid,iRow,iCol,e){ dashBoard.isAddMode = false; jQuery(this).jqGrid('editGridRow', rowid); }}); //$("#grid").jqGrid('setGridParam', { onRightClickRow: function(rowid,iRow,iCol,e){alert('Right Click!');}}); $("#grid").jqGrid('navGrid','#expense_pager',{ add:true,addtitle: 'Add Expense', edit:true,edittitle: 'Modify Expense', del:true,deltitle: 'Delete Expense' , search:true,searchtitle: 'Find Expenses'}, { // Edit recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = false; // alert("in edit"); // inEdit = true; } }, { // Add recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = true; // inEdit = false; } } ); dashBoard.setExpenseGridExtension(); //$('html, body').animate({scrollBottom: $("#gbox_grid").offset().bottom}, 2000); jQuery("#grid").setGridParam({rowNum:maxRowNum}).trigger("reloadGrid"); // alert($('#gbox_grid')[0].scrollHeight); $('.ui-jqgrid-bdiv').scrollTop($('#gbox_grid')[0].scrollHeight); } this.setExpenseGridExtension = function setExpenseGridExtension(){ $.extend($.jgrid.edit, { addCaption: "Add Expense", editCaption: "Modify Expense", bSubmit: "Save", bCancel: "Cancel", width:300, recreateForm: true, beforeShowForm: function () { if(dashBoard.isAddMode == true){ $('#tr_Amount>td.DataTD>input').insertAfter( ' '); $(dashBoard.participantAmtHtmlFormat).insertAfter("#tr_Amount"); $('Save & Continue') .click(function() { dashBoard.validateExpenseAddForm(0); }) .addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left") .prependTo("#Act_Buttons>td.EditButton"); $('#PaidBy').find('option').remove().end().append(dashBoard.paidByHtml); dashBoard.refreshParticipantsExpenseProperties(1); dashBoard.setAllCheckImpact(); dashBoard.hideShowParticipantDetails(false); $("#Date").val(dashBoard.currentDate); } else { dashBoard.loadForEdit(); } }, beforeSubmit: function(response, postData) { dashBoard.validateExpenseAddForm(1); } }); $.extend($.jgrid.del, { caption: "Delete Expense", msg: "Do you want to delete the expense?", beforeSubmit: function(response, postData) { dashBoard.deleteExpense(); } }); } this.removeParticipantAmtRows = function removeParticipantAmtRows(){ $('#tr_IsDetails').remove(); $('#tr_selectAll').remove(); for (var index in dashBoard.participants) { $('#tr_Participant'+dashBoard.participants[index].id).remove(); $('#tr_ParticipantDetails'+dashBoard.participants[index].id).remove(); } } this.loadForEdit = function loadForEdit(){ $('#tr_Amount>td.DataTD>input').insertAfter( ' '); $(dashBoard.participantAmtHtmlFormat).insertAfter("#tr_Amount"); // alert("in LoadForEdit"); var rowId =$("#grid").jqGrid('getGridParam','selrow'); //alert(dashBoard.groupExpenses.length); var rowData = jQuery("#grid").getRowData(rowId); //alert(dashBoard.groupExpenses[rowData['SI']].id); dashBoard.showEditUI(dashBoard.groupExpenses[rowData['SI']]); $('#PaidBy').find('option').remove().end().append(dashBoard.paidByHtml); } this.changeSingleInvolve = function changeSingleInvolve(participantId){ if($("#chkParticipant"+participantId).is(':checked')){ dashBoard.participants[participantId].currentInputExpensePart = 1; } else { $("#selectAll").prop('checked', false); dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].isFreeze = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.setShadowOnPartTextBox(); dashBoard.scanCheckAllCheckbox(); dashBoard.scanParticipantCheckBoxs(); } this.changeDetailsPart = function changeDetailsPart(participantId){ var originalValue = $("#participantTextPart"+participantId).val(); var filteredValue = $("#participantTextPart"+participantId).val().replace(/[^0-9]/g,''); if(filteredValue != "" && parseInt(filteredValue) != dashBoard.participants[participantId].currentInputExpensePart){ //alert("1"); dashBoard.participants[participantId].currentInputExpensePart = parseInt(filteredValue); dashBoard.participants[participantId].isFreeze = 0; dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if(originalValue != "") { // alert("2"); if(filteredValue == "0"){ dashBoard.participants[participantId].isFreeze = 0; dashBoard.participants[participantId].currentInputExpensePart = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if(originalValue == "") { if(dashBoard.participants[participantId].isFreeze == 0){ //dashBoard.participants[participantId].isFreeze = 0 dashBoard.participants[participantId].currentInputExpensePart = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } } this.changeDetailsFreeze = function changeDetailsFreeze(participantId){ var originalValue = $("#participantTextFreeze"+participantId).val(); var filteredValue = $("#participantTextFreeze"+participantId).val().replace(/[^0-9\.]/g,''); if(filteredValue.replace(/[^.]/g, "").length == 2){ filteredValue = filteredValue.substring(0, filteredValue.length-1); } if(filteredValue != "" && dashBoard.showFormatedAmount(parseFloat(filteredValue)) != dashBoard.showFormatedAmount(parseFloat(dashBoard.participants[participantId].currentInputExpenseFreezeAmt))){ //alert("1"); //validate if all the freeze amount exceed the input amount, set the current freeze amount = input-(all other freeze amount) //filteredValue = //dashBoard.setFreezeOnUI(participantId,filteredValue); dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(parseFloat(filteredValue)); if(parseFloat(filteredValue) == parseFloat(0)){ dashBoard.participants[participantId].isFreeze = 0; } else { dashBoard.participants[participantId].isFreeze = 1; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if(originalValue != "") { dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if(originalValue == "") { //alert("3"); dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); dashBoard.participants[participantId].isFreeze = 0; dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } } this.changeExpenseAmount = function changeExpenseAmount(){ dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } this.setShadowOnPartTextBox = function setShadowOnPartTextBox(){ //alert(participantId); //alert(dashBoard.participants[participantId].isFreeze); for (var index in dashBoard.participants) { if(dashBoard.participants[index].isFreeze == 1){ $("#participantTextPart"+dashBoard.participants[index].id).prop("value", ''); $("#participantTextPart"+dashBoard.participants[index].id).css('background-color' , '#DEDEDE'); } else { $("#participantTextPart"+dashBoard.participants[index].id).css('background-color' , '#FFFFF'); /*if($("#participantTextPart"+participantId).hasProp("background-color")){ $("#participantTextPart"+participantId).removeProp("background-color"); }*/ } } } /*this.setFreezeOnUI = function setFreezeOnUI(participantId,newValue){ if(parseFloat(dashBoard.participants[participantId].currentInputExpenseFreezeAmt) != parseFloat(newValue)){ $("#participantTextPart"+participantId).prop("value", ''); $("#participantTextPart"+participantId).css('background-color' , '#DEDEDE'); } }*/ this.scanParticipantCheckBoxs = function scanParticipantCheckBoxs(){ var isAllCheck = true; var numberOfInvolves = 0; for (var index in dashBoard.participants) { if(parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) > 0){ numberOfInvolves++; $("#chkParticipant"+dashBoard.participants[index].id).prop('checked', true); } else { isAllCheck = false; $("#chkParticipant"+dashBoard.participants[index].id).prop('checked', false); } } if(numberOfInvolves == dashBoard.participants.length){ isAllCheck = true; } if(isAllCheck == false){ $("#selectAll").prop('checked', false); } else { $("#selectAll").prop('checked', true); } } this.scanCheckAllCheckbox = function scanCheckAllCheckbox(){ var numberOfInvolves = 0; for (var index in dashBoard.participants) { if(parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) > 0){ numberOfInvolves++; } if(numberOfInvolves == dashBoard.participants.length){ $("#selectAll").prop('checked', true); } else { $("#selectAll").prop('checked', false); } } } this.setAllCheckImpact = function setAllCheckImpact(){ var commonValue = dashBoard.getFormatedAmount(0); var isCheckAll = false; if($("#selectAll").is(':checked')){ isCheckAll = true; //commonValue = dashBoard.getFormatedAmount(dashBoard.currentInputAmount/dashBoard.getNumberOfParticipants()); } for (var index in dashBoard.participants) { if(isCheckAll == true){ $("#chkParticipant"+dashBoard.participants[index].id).prop('checked', true); if(dashBoard.participants[index].currentInputExpensePart >= 0){ dashBoard.participants[index].currentInputExpensePart = 1; } } else { $("#chkParticipant"+dashBoard.participants[index].id).prop('checked', false); dashBoard.participants[index].currentInputExpensePart=0; dashBoard.participants[index].currentInputExpenseFreezeAmt=dashBoard.getFormatedAmount(0); } //$("#pamount_"+dashBoard.participants[index].id).html(commonValue+" "+dashBoard.expense.currency); } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.setShadowOnPartTextBox(); } this.refreshParticipantsExpenseProperties = function refreshParticipantsExpenseProperties(defaultPart){ dashBoard.currentInputAmount = 0; for (var index in dashBoard.participants) { dashBoard.participants[index].currentInputExpensePart = defaultPart; dashBoard.participants[index].isFreeze = 0; dashBoard.participants[index].currentInputExpenseFreezeAmt=dashBoard.getFormatedAmount(0); } } this.showFreezeAmount = function showFreezeAmount(){ for (var index in dashBoard.participants) { $("#pamount_"+dashBoard.participants[index].id).html(dashBoard.showFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt)+" "+dashBoard.expense.currency); } } this.calculateFinalFreezeExpenseAmount = function calculateFinalFreezeExpenseAmount(){ //get total parts of current participants var totalParts = 0; var totalFreezeAmt = dashBoard.getFormatedAmount(0); for (var index in dashBoard.participants) { //alert(dashBoard.participants[index].currentInputExpensePart); if(parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) == parseFloat(0)){ dashBoard.participants[index].isFreeze = 0; } if(dashBoard.participants[index].isFreeze == 0){ totalParts += parseInt(dashBoard.participants[index].currentInputExpensePart); } else { totalFreezeAmt = dashBoard.getFormatedAmount(parseFloat(totalFreezeAmt)+ parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } } if((dashBoard.getFormatedAmount(dashBoard.currentInputAmount) > dashBoard.getFormatedAmount(0)) && (parseFloat(totalFreezeAmt) > parseFloat(dashBoard.currentInputAmount))){ //if totalFreeze amount exceed expense input reset all the parts and freeze amount equal //totalFreezeAmt = dashBoard.getFormatedAmount(0); //dashBoard.resetAllPartAndFreezeAmt(); //totalParts = dashBoard.getNumberOfParticipants(); } else if(dashBoard.getFormatedAmount(dashBoard.currentInputAmount)>0 && parseFloat(totalFreezeAmt) == parseFloat(dashBoard.currentInputAmount)){ //if totalFreeze amount is equal to expense input amount,no need to keep part for where isFreeze=0 dashBoard.resetUnfreezeAmt(); totalParts = 0; } //set final freeze amount for (var index in dashBoard.participants) { if(dashBoard.participants[index].isFreeze == 0 && totalParts > 0){ dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(((parseFloat(dashBoard.currentInputAmount)-parseFloat(totalFreezeAmt))/totalParts)*dashBoard.participants[index].currentInputExpensePart); //Freeze amount can not be negative if(parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) < 0){ dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } else if(dashBoard.participants[index].isFreeze == 0){ dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } } this.resetAllPartAndFreezeAmt = function resetAllPartAndFreezeAmt(){ for (var index in dashBoard.participants) { if(dashBoard.participants[index].isFreeze == 0){ dashBoard.participants[index].currentInputExpensePart = 1; dashBoard.participants[index].isFreeze = 0; } } } this.resetUnfreezeAmt = function resetUnfreezeAmt(){ /*for (var index in dashBoard.participants) { if(dashBoard.participants[index].isFreeze == 0){ //dashBoard.participants[index].currentInputExpensePart = 0; } }*/ } this.updateBalance = function updateBalance(){ //balance } this.setParticipantAmtHtmlFormat = function setParticipantAmtHtmlFormat(){ dashBoard.paidByHtml = ""; var result = ' Breakdown'; result += ' Check All'; for (var index in dashBoard.participants) { result += ''+dashBoard.getParticipantNameById(dashBoard.participants[index].id)+'
'; } dashBoard.setPaidBy(dashBoard.loginParticipantId); for (var index in dashBoard.participants) { result += ''+dashBoard.getParticipantNameById(dashBoard.participants[index].id)+' '+dashBoard.expense.currency+''; } dashBoard.participantAmtHtmlFormat = result; } this.setPaidBy = function setPaidBy(selectedParticipantId){ dashBoard.paidByHtml = ""; for (var index in dashBoard.participants) { if(dashBoard.participants[index].id == selectedParticipantId){ dashBoard.paidByHtml += ''; } else { dashBoard.paidByHtml += ''; } } } this.setParticipantAmountInfoByAmtStr = function setParticipantAmountInfoByAmtStr(amtStr){ var amtStrArray = amtStr.split(","); var totalInvolves = 0; for(var i=0;i parseFloat(0)){ totalInvolves++; $("#chkParticipant"+values[0]).prop('checked', true); } } //check or uncheck checkBox if(totalInvolves != dashBoard.participants.length ){ $("#selectAll").prop('checked', false); } } this.showEditUI =function showEditUI(expenseObj){ dashBoard.currentEditGroupExpense = expenseObj; //set paid by dashBoard.setPaidBy(expenseObj.paidBy); //assign parts and freeze amounts to all participants if(expenseObj.isDetails == 1){ dashBoard.refreshParticipantsExpenseProperties(1); } else { dashBoard.refreshParticipantsExpenseProperties(0); } dashBoard.setParticipantAmountInfoByAmtStr(expenseObj.participantAmountStr); dashBoard.currentInputAmount = expenseObj.amount; //hide show details section // alert(expenseObj.isDetails); if(expenseObj.isDetails == 1){ dashBoard.hideShowParticipantDetails(true); $("#Details").prop('checked', true); dashBoard.setDetailsCheckImpact(); } else { dashBoard.hideShowParticipantDetails(false) dashBoard.setDetailsCheckImpact(); } /* this.isFreeze; this.currentInputExpensePart; this.currentInputExpenseFreezeAmt; */ //alert(expenseObj.paidBy); //alert(expenseObj.paidBy); //dashBoard.calculateFinalFreezeExpenseAmount(); //dashBoard.showFreezeAmount(); //dashBoard.setShadowOnPartTextBox(); //alert(dashBoard.paidByHtml); /*for (var index in dashBoard.participants) { $("#chkParticipant"+dashBoard.participants[index].id).check(true); }*/ } this.setDetailsCheckImpact = function setDetailsCheckImpact(){ if($("#Details").is(':checked')){ dashBoard.hideShowParticipantDetails(true); } else { dashBoard.hideShowParticipantDetails(false); } dashBoard.setShadowOnPartTextBox(); } this.showPartAndFreezeAmtInDetails = function showPartAndFreezeAmtInDetails(){ for (var index in dashBoard.participants) { //set part and freezeAmt from participants $("#participantTextPart"+dashBoard.participants[index].id).val(dashBoard.participants[index].currentInputExpensePart); $("#participantTextFreeze"+dashBoard.participants[index].id).val(dashBoard.showFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } } this.hideShowParticipantDetails = function hideShowParticipantDetails(isDetails){ if(isDetails == true){ //hide simple $("#tr_selectAll").hide(); for (var index in dashBoard.participants) { $("#tr_Participant"+dashBoard.participants[index].id).hide(); $("#tr_ParticipantDetails"+dashBoard.participants[index].id).show(); } dashBoard.showPartAndFreezeAmtInDetails(); } else { $("#tr_selectAll").show(); for (var index in dashBoard.participants) { $("#tr_Participant"+dashBoard.participants[index].id).show(); $("#tr_ParticipantDetails"+dashBoard.participants[index].id).hide(); } dashBoard.showFreezeAmount(); } } // Utilities functions this.getCurrency = function getCurrency(){ return dashBoard.expense.currency; } this.getFormatedAmount = function getFormatedAmount(amount){ return parseFloat(amount).toFixed(15); } this.getFormatedAmountDB = function getFormatedAmountDB(amount){ return parseFloat(amount).toFixed(4); } this.showFormatedAmount = function showFormatedAmount(amount){ return parseFloat(amount).toFixed(2); } this.getFormatedDate = function getFormatedDate(date){ var dateObj = new Date(date*1000); //return date.getdays()+"/"+date.getMonths()+"/"+date.getYears(); var a = new Date(UNIX_timestamp*1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var year = dateObj.getFullYear(); var month = months[dateObj.getMonth()]; var date = String(dateObj.getDate()); var time ; if(date.length == 1){ time = '0'+ date + '-' + month + '-' + year ; } else { time = date + '-' + month + '-' + year ; } return time; } this.setCurrentDate = function setCurrentDate(){ var dateObj = new Date(); //return date.getdays()+"/"+date.getMonths()+"/"+date.getYears(); var a = new Date(UNIX_timestamp*1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var year = dateObj.getFullYear(); var month = months[dateObj.getMonth()]; var date = String(dateObj.getDate()); if(date.length == 1){ date = "0"+date; } dashBoard.currentDate = date + '-' + month + '-' + year ; } this.getInvolveString = function getInvolveString(participantAmountStr){ var involveStrAll = ""; var involveStrExcept = ""; var involveParticipantList = []; //calculate involveStr var participantInvolveList = participantAmountStr.split(","); for(var i=0;iinvolveStrExcept.length){ return involveStrExcept; } else{ return involveStrAll; } } this.inArrayElement = function inArrayElement(array, value){ var result = false; for(var i=0;i25){ errorMessage = "Expense name must be less than to 26 characters" } //validate amount field if(errorMessage == ""){ if(!$('#Amount').val().trim()){ errorMessage = "Please enter valid amount" } else if (parseFloat($('#Amount').val()) <= parseFloat(0)) { errorMessage = "Please enter valid amount" } } //validate freeze amount if(errorMessage == ""){ var totalFreezeAmt = dashBoard.getFormatedAmount(0); for (var index in dashBoard.participants) { totalFreezeAmt = parseFloat(totalFreezeAmt) + parseFloat(dashBoard.getFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } if(dashBoard.showFormatedAmount(totalFreezeAmt) != dashBoard.showFormatedAmount($('#Amount').val().trim())){ errorMessage = "The distributed amount is not the same as the expense amount" } } //validate date if(errorMessage == ""){ if($('#Date').val().trim() != ""){ var dateArray = $('#Date').val().trim().split("-"); if(dateArray.length != 3){ errorMessage = "Date is not valid"; } else { errorMessage = isValidDate(dateArray); } } } //set or clear error message if(errorMessage != ""){ dashBoard.showErrorMessage(errorMessage); } else { dashBoard.clearErrorMessage(); addExpense(); if(source == 1){ $(".ui-icon-closethick").trigger('click'); } else { dashBoard.clearAddForm(); } } } this.showErrorMessage = function showErrorMessage(msg){ $("#FormError").show(); $(".ui-state-error").html(msg); } this.clearErrorMessage = function clearErrorMessage(){ $("#FormError").hide(); $(".ui-state-error").html(""); } this.clearAddForm = function clearAddForm(){ $('#Reason').val(""); $('#Amount').val(""); $("#Details").prop('checked', false); $("#selectAll").prop('checked', true); dashBoard.refreshParticipantsExpenseProperties(1); dashBoard.setAllCheckImpact(); dashBoard.hideShowParticipantDetails(false); $('#Reason').focus(); } this.addRowsToGrid = function addRowsToGrid(data){ var names = ['SI', 'PaidBy', 'Amount', 'Reason', 'Date','Involve','For you?']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } if(dashBoard.isAddMode == true){ for (var i = 0; i < mydata.length; i++) { //alert(i + 1); //alert(mydata[i]); $("#grid").jqGrid('addRowData',data[i][0]+1, mydata[i]); } //Set the page to the last page } else { $("#grid").jqGrid('setRowData', data[0][0]+1, mydata[0]); dashBoard.isAddMode = true; } } this.getExpenseUniqueId = function getExpenseUniqueId(){ var maxExpId = 0; var extractedIndex = 0; var expenseIdArray; for(var i=0;i (rowNum*lastPage)){ lastPage++; } $(grid_id).setGridParam({page:lastPage}); $(grid_id).trigger("reloadGrid"); } } this.setPageAfterDelete = function setPageAfterDelete(grid_id){ var currentPage = $(grid_id).getGridParam('page'); var rowCount = $(grid_id).getGridParam('reccount'); var rowNum = $(grid_id).getGridParam('rowNum'); if(rowCount==0 && currentPage>1){ currentPage = currentPage-1; $(grid_id).setGridParam({page:currentPage}); } $(grid_id).trigger("reloadGrid"); } this.getGeneratedLog = function getGeneratedLog(expenseObj){ var logStr = ""; logStr += "[Expense:"+expenseObj.expenseName+"],"; logStr += "[PaidBy:"+dashBoard.getParticipantNameById(expenseObj.paidBy)+"],"; logStr += "[Date:"+dashBoard.getFormatedDate(expenseObj.expenseDate)+"],"; logStr += "[Amount:"+expenseObj.amount+' '+dashBoard.expense.currency+"],"; logStr += "[Involves:"; var participantAmtStrArray = expenseObj.participantAmountStr.split(","); for (var index in participantAmtStrArray) { var dataArray = participantAmtStrArray[index].split("|"); if(index == 0){ logStr += dashBoard.getParticipantNameById(dataArray[0])+"="+dataArray[2]; } else { logStr += ","+dashBoard.getParticipantNameById(dataArray[0])+"="+dataArray[2]; } } logStr += "]"; return logStr; } this.getInputFormData = function getInputFormData(groupExpenseObj){ var amountStr = ""; var isDetails = false; groupExpenseObj.paidBy = $('#PaidBy').val(); groupExpenseObj.expenseName = $('#Reason').val(); groupExpenseObj.amount = $('#Amount').val(); groupExpenseObj.expenseDate = getTimeStampByInputDate($('#Date').val()); //return groupExpenseObj; for (var index in dashBoard.participants) { if($("#chkParticipant"+dashBoard.participants[index].id).is(':checked')){ if(amountStr == ""){ if(dashBoard.participants[index].isFreeze == 1){ dashBoard.participants[index].currentInputExpensePart = ""; } amountStr += dashBoard.participants[index].id+"|"+dashBoard.participants[index].currentInputExpensePart+"|"+dashBoard.getFormatedAmountDB(dashBoard.participants[index].currentInputExpenseFreezeAmt); } else { if(dashBoard.participants[index].isFreeze == 1){ dashBoard.participants[index].currentInputExpensePart = ""; } amountStr += ","+ dashBoard.participants[index].id+"|"+dashBoard.participants[index].currentInputExpensePart+"|"+dashBoard.getFormatedAmountDB(dashBoard.participants[index].currentInputExpenseFreezeAmt); } } if((dashBoard.participants[index].isFreeze == 1) || dashBoard.participants[index].currentInputExpensePart > 1){ isDetails = true; } } if(isDetails){ groupExpenseObj.isDetails = 1; } else { groupExpenseObj.isDetails = 0; } groupExpenseObj.participantAmountStr = amountStr; return groupExpenseObj; } this.deleteExpense = function deleteExpense(){ var rowId =$("#grid").jqGrid('getGridParam','selrow'); var i; // alert(rowId); $('#grid').jqGrid('delRowData', rowId); var deletedExpObj = dashBoard.groupExpenses[rowId-1]; //alert(deletedExpObj.id); deletedExpObj.isAdd = "3"; //set log info deletedExpObj.previousDesc = dashBoard.getGeneratedLog(deletedExpObj); deletedExpObj.newDesc = "Deleted"; deletedExpObj.previousPaidBy = dashBoard.getParticipantNameById(deletedExpObj.paidBy); for(i=rowId-1;i 0){ positiveParticipantBalance[index] = dashBoard.participants[index].balance; } else if(parseFloat(dashBoard.participants[index].balance) < 0) { negativeParticipantBalance[index] = dashBoard.participants[index].balance; } } //sort postivie and negative /*positiveParticipantBalance.sort(function(a, b) { return b - a; }); negativeParticipantBalance.sort(function(a, b) { return a - b; });*/ //add balance amount in positive and negative /*for (var index in balanceEntryParticipantBalance) { if(parseFloat(balanceEntryParticipantBalance[index]) > 0 ){ positiveParticipantBalance[index] = dashBoard.getFormatedAmountDB(parseFloat(positiveParticipantBalance[index]) - parseFloat(balanceEntryParticipantBalance[index])); } else if(parseFloat(balanceEntryParticipantBalance[index]) < 0 ){ negativeParticipantBalance[index] = dashBoard.getFormatedAmountDB(parseFloat(negativeParticipantBalance[index]) + parseFloat(balanceEntryParticipantBalance[index])); } }*/ //scan and shift positive and negative //sort positive and negative again //calculate who needs to pay whom // alert("3"); //if pos and neg values are same, then direct exchange payment for (var posIndex in positiveParticipantBalance) { if(dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))){ for (var negIndex in negativeParticipantBalance) { // alert(dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex]))); // alert(dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1))); if(dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) == dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)) && dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))){ if(balanceString == ""){ balanceString = balanceString + negIndex +"|" + posIndex +"|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)); } else{ balanceString = balanceString+"," + negIndex +"|" + posIndex +"|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)); } //update array amount positiveParticipantBalance[posIndex] = 0; negativeParticipantBalance[negIndex] = 0; } } } } //alert("4"); //distribute amount among pos values var maxPartIndex = dashBoard.getMaxMinParticipantId(positiveParticipantBalance,1); var minPartIndex = dashBoard.getMaxMinParticipantId(negativeParticipantBalance,2); while(maxPartIndex != "" && minPartIndex != ""){ var maxVal = parseFloat(positiveParticipantBalance[maxPartIndex]); //alert(maxVal) //alert(negativeParticipantBalance[minPartIndex]); if(minPartIndex != ""){ var decrementalVal = parseFloat(negativeParticipantBalance[minPartIndex]) *(-1); if(parseFloat(decrementalVal) >parseFloat(maxVal)){ decrementalVal = dashBoard.getFormatedAmountDB(maxVal); } //update array positiveParticipantBalance[maxPartIndex] = dashBoard.getFormatedAmountDB(parseFloat(positiveParticipantBalance[maxPartIndex]) - parseFloat(decrementalVal)); negativeParticipantBalance[minPartIndex] = dashBoard.getFormatedAmountDB(parseFloat(negativeParticipantBalance[minPartIndex]) + parseFloat(decrementalVal)); if(balanceString == ""){ balanceString = balanceString + minPartIndex +"|" + maxPartIndex +"|" + decrementalVal; } else{ balanceString = balanceString+"," + minPartIndex +"|" + maxPartIndex +"|" + decrementalVal; } } //alert("5"); //check equal for (var posIndex in positiveParticipantBalance) { if(dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))){ for (var negIndex in negativeParticipantBalance) { if(dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) == dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)) && dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))){ if(balanceString == ""){ balanceString = balanceString + negIndex +"|" + posIndex +"|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)); } else{ balanceString = balanceString+"," + negIndex +"|" + posIndex +"|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex])*(-1)); } //update array amount positiveParticipantBalance[posIndex] = 0; negativeParticipantBalance[negIndex] = 0; } } } } maxPartIndex = dashBoard.getMaxMinParticipantId(positiveParticipantBalance,1); minPartIndex = dashBoard.getMaxMinParticipantId(negativeParticipantBalance,2); } //alert(balanceString); return balanceString; } this.getMaxMinParticipantId = function getMaxMinParticipantId(balanceList,ind){ var result = 0; var participantIndex=''; for (var index in balanceList) { //alert(dashBoard.showFormatedAmount(parseFloat(balanceList[index]))); if(ind == 1){ if(dashBoard.showFormatedAmount(parseFloat(balanceList[index])) > parseFloat(result)){ participantIndex = index; result = parseFloat(balanceList[index]); } } else { if(dashBoard.showFormatedAmount(parseFloat(balanceList[index])) < parseFloat(result)){ participantIndex = index; result = parseFloat(balanceList[index]); } } } return participantIndex; } this.createGraphImage = function createGraphImage(){ $("#balance_chart_image").html(""); var imgData = $('#balance_chart').jqplotToImageStr({}); var imgElem = $('').attr('src',imgData).attr('id',"graph_image_id").attr('alt',"balance.png"); $("#balance_chart_image").html(imgElem); dashBoard.downloadImage("graph_image_id"); // $('#balance_chart_image').append(imgElem);​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ } this.downloadImage = function downloadImage(imageURL) { /* var oImage = document.getElementById(imageURL); var canvas = document.createElement("canvas"); document.body.appendChild(canvas); if (typeof canvas.getContext == "undefined" || !canvas.getContext) { alert("browser does not support this action, sorry"); return false; }*/ try { var img = document.getElementById(imageURL); // window.location.href = img.src.replace('image/png', 'image/octet-stream'); window.open(img.src.replace('image/png', 'image/png'), "_blank"); /* var context = canvas.getContext("2d"); var width = oImage.width; var height = oImage.height; canvas.width = width; canvas.height = height; canvas.style.width = width + "px"; canvas.style.height = height + "px"; context.drawImage(oImage, 0, 0, width, height); var rawImageData = canvas.toDataURL("image/png;base64"); rawImageData = rawImageData.replace("image/png", "image/octet-stream"); document.location.href = rawImageData; // document.location.setAttribute("download", "YourFileName.jpeg"); document.body.removeChild(canvas);*/ } catch (err) { // document.body.removeChild(canvas); alert("Sorry, can't download"); } return true; } this.drawGraph = function drawGraph(){ if(plot1){ plot1.destroy(); } var balanceString = dashBoard.updateParticipantBalance(); var data = []; var barLabel = []; var ticks = []; for (var index in dashBoard.participants) { // alert(parseFloat(dashBoard.participants[index].balance)); data.push(parseFloat(dashBoard.showFormatedAmount(dashBoard.participants[index].balance))); barLabel.push(dashBoard.showFormatedAmount(parseFloat(dashBoard.participants[index].balance))); ticks.push(dashBoard.getParticipantNameById(dashBoard.participants[index].id) ); } // Can specify a custom tick Array. // Ticks should match up one for each y value (category) in the series. //var ticks = ['Rajib', 'Athar', 'Usama', 'Ajmal']; var options = { // The "seriesDefaults" option is an options object that will // be applied to all series in the chart. seriesDefaults:{ renderer:$.jqplot.BarRenderer, rendererOptions: {fillToZero: true} }, // Custom labels for the series are specified with the "label" // option on the series option. Here a series option object // is specified for each series. series:[ { color: '#008000', showMarker: true, pointLabels:{ show: true, labels:barLabel } } ], // Show the legend and put it outside the grid, but inside the // plot container, shrinking the grid to accomodate the legend. // A value of "outside" would not shrink the grid and allow // the legend to overflow the container. negativeSeriesColors: ["#FF0000"], axes: { // Use a category axis on the x axis and use our custom ticks. xaxis: { renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks }, // Pad the y axis just a little so bars can get close to, but // not touch, the grid boundaries. 1.2 is the default padding. yaxis: { pad: 1.18, tickOptions: {formatString: '%d '+dashBoard.expense.currency} } }, title: { text: 'Balance of "'+dashBoard.expense.title+'"' }, }; plot1 = $.jqplot('balance_chart', [data],options); dashBoard.showBalanceDetails(balanceString); // dashBoard.createGraphImage(); // alert(plot1); } this.showBalanceDetails = function showBalanceDetails(balanceString){ var balancePaymentHtml = ""; if(balanceString != ""){ var balanceStringArr = balanceString.split(","); //alert(balanceStringArr.length); for (var index in balanceStringArr) { //alert(balanceStringArr[index]); var balanceStringval = balanceStringArr[index].split("|"); balancePaymentHtml = balancePaymentHtml + ''; } } balancePaymentHtml = balancePaymentHtml + "
'+dashBoard.getParticipantNameById(balanceStringval[0])+' should pay to '+dashBoard.getParticipantNameById(balanceStringval[1])+'            '+dashBoard.showFormatedAmount(parseFloat(balanceStringval[2]))+' '+dashBoard.expense.currency+' (Mark as Paid)
"; // alert(balancePaymentHtml); $("#balance_payment_div").html(balancePaymentHtml); } this.insertBalanceEntry = function insertBalanceEntry(payerId,paytoId,amount){ groupExpenseObj= new GroupExpense(); groupExpenseObj.index = dashBoard.globalExpenseIndex++; groupExpenseObj.id = dashBoard.getExpenseUniqueId(); groupExpenseObj.expenseId = dashBoard.expense.id; groupExpenseObj.isAdd = "1"; groupExpenseObj.type = 2; //1=normal expense,2=balance expense groupExpenseObj.paidBy = payerId; groupExpenseObj.expenseName = "Balance Expense"; groupExpenseObj.amount = amount; groupExpenseObj.expenseDate = Math.round(+new Date()/1000); groupExpenseObj.isDetails = 0; groupExpenseObj.participantAmountStr = paytoId+'|'+'1'+'|'+amount; groupExpenseObj.isreimburse = 0; dashBoard.processExpenseData(groupExpenseObj); dashBoard.drawGraph(); } ///////////////////////////////////////////////////////////////// Participant section //////////////////////////////////////////// this.validParticipantInputForm = function validParticipantInputForm(name,skipPartId){ var errorMessage = ""; //validate participant name if (!name.trim()) { errorMessage = "Please enter participant name" } else if (name.trim().length>12){ errorMessage = "Expense name must be less than to 12 characters" } if(errorMessage == ""){ //check the participant name already exist or not for (var index in dashBoard.participants) { if(skipPartId != dashBoard.participants[index].id){ if(dashBoard.participants[index].name.toLowerCase() == name.trim().toLowerCase()){ errorMessage = "Participant already exist" break; } } } } return errorMessage; } this.processAfterValidation = function processAfterValidation(errorMessage){ if(errorMessage != ""){ dashBoard.showErrorMessage(errorMessage); } else { dashBoard.clearErrorMessage(); dashBoard.addParticipant(); $(".ui-icon-closethick").trigger('click'); } } this.addParticipant = function addParticipant(){ //generate auto ID for new participant var newParticipantId = 0; for (var index in dashBoard.participants) { if(dashBoard.participants[index].id > newParticipantId){ newParticipantId = dashBoard.participants[index].id; } } var participantObj = new Participant(); participantObj.id = ++newParticipantId; participantObj.name = $('#Name').val().trim(); participantObj.isCreator = 0; participantObj.create_date = Math.round(+new Date()/1000); participantObj.balance = 0; participantObj.isFreeze = 0; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 1; //participants.push(participantObj); //insert into grid dashBoard.processParticipantData(participantObj); //send to database } this.processParticipantData = function processParticipantData(participantObj){ dashBoard.participants[participantObj.id] = participantObj; var data = []; //alert(dashBoard.getDataByExpense(groupExpenseObj.index,groupExpenseObj)); data.push([participantObj.id, participantObj.name,dashBoard.showFormatedAmount(participantObj.balance)+" "+dashBoard.expense.currency,""]); //alert(participantObj.name); //dashBoard.setParticipantAmtHtmlFormat(); //go to the last page after adding record $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); dashBoard.addRowsToParticipantGrid(data,true); dashBoard.setParticipantGridExtension(); // $('#participant_grid').jqGrid('GridUnload'); //dashBoard.displayParticipantList(); dashBoard.setPageAfterAdd('#participant_grid'); sendDataToServer(participantObj,"#participantForm"); } this.updateParticipant = function updateParticipant(participantId,newName){ // alert("helo"); var participantObj = new Participant(); participantObj.id = participantId; participantObj.name = newName; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 2; //update participant array; var existingPartcipantObj = dashBoard.participants[participantId]; existingPartcipantObj.name = newName; dashBoard.participants[participantId] = existingPartcipantObj; //update grid var data = []; //alert(dashBoard.getDataByExpense(groupExpenseObj.index,groupExpenseObj)); data.push([existingPartcipantObj.id, existingPartcipantObj.name,dashBoard.showFormatedAmount(existingPartcipantObj.balance)+" "+dashBoard.expense.currency,""]); //alert("helo2"); dashBoard.addRowsToParticipantGrid(data,false); //dashBoard.setParticipantAmtHtmlFormat(); // alert("helo3"); //jQuery("#participant_grid").trigger("reloadGrid"); $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); dashBoard.setParticipantGridExtension(); //alert("helo4"); dashBoard.setPageAfterAdd('#participant_grid'); //alert("helo5"); //$('#participant_grid').jqGrid('GridUnload'); //dashBoard.displayParticipantList(); sendDataToServer(participantObj,"#participantForm"); } this.deleteParticipant = function deleteParticipant(index){ //alert("hello"); var rowId =$("#participant_grid").jqGrid('getGridParam','selrow'); var i; var rowData = jQuery("#participant_grid").getRowData(rowId); //prepare delete object var participantObj = new Participant(); participantObj.id = rowData['SI']; participantObj.name = rowData['Name']; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 3; //alert(rowData['SI']); //delete record from list //dashBoard.participants[participantObj.id] $('#participant_grid').jqGrid('delRowData', rowId); delete dashBoard.participants[ participantObj.id]; //alert(dashBoard.participants[ participantObj.id]); //dashBoard.setParticipantAmtHtmlFormat(); $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); // $('#participant_grid').jqGrid('GridUnload'); //dashBoard.displayParticipantList(); dashBoard.setParticipantGridExtension(); dashBoard.setPageAfterDelete('#participant_grid'); sendDataToServer(participantObj,"#participantForm"); $(".ui-icon-closethick").trigger('click'); } this.displayParticipantList = function displayParticipantList(){ var partNameBeforeEdit = ""; var maxRowNum = 0; for(var index in dashBoard.participants.length){ maxRowNum++; } if(maxRowNum<51){ maxRowNum = 50; } $("#participant_grid").jqGrid({ datatype: "local", height: 140, width: 540, colNames: ['SI', 'Name', 'Current Balance',''], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden:true }, { name: 'Name', index: 'Name', width: 90 , align:'center', editable: true } , { name: 'Current Balance', index: 'Current Balance', width: 90 , align:'center', } , { name: 'Action', index: 'Action', width: 20 , align:'center', //formatter: 'actions', formatter: function(cellvalue,options,rowObject) { return dashBoard.inlineNavAction(cellvalue,options,rowObject, (options.rowId!='new_row')); }, formatoptions:{ keys:true, onSuccess : function(){ // alert(rowId); var rowId =$("#participant_grid").jqGrid('getGridParam','selrow'); var rowData = jQuery("#participant_grid").getRowData(rowId); var inputVal = $("#"+rowData['SI']+"1_Name").val().trim(); //alert(dashBoard.participants[rowData['SI']].name); //alert(inputVal); if(dashBoard.participants[rowData['SI']].name != inputVal){ var errorMsg = dashBoard.validParticipantInputForm(inputVal,rowData['SI']); if( errorMsg == ""){ dashBoard.updateParticipant(rowData['SI'],inputVal); } else { $("#error_dialog" ).html(errorMsg); $("#error_dialog" ).dialog(); /*$("#error_dialog" ).html(errorMsg); $("#error_dialog" ).dialog();*/ $("#"+rowData['SI']+"1_Name").focus(); jQuery.fn.fmatter.rowactions.call(this,'edit'); } } } } } ], rowNum : maxRowNum, rowList:[6,10,20,maxRowNum], pager: '#participant_pager', gridview:true, rownumbers:true, autoencode:true, ignoreCase:true, // sortname: 'invdate', viewrecords: true, sortorder: 'desc', caption:'Participant List', loadComplete: function(){ dashBoard.setParticipantGridExtension(); } } ); $("#participant_grid").jqGrid('navGrid','#participant_pager',{ add:true,addtitle: 'Add Participant', edit:false,edittitle: 'Modify Participant', del:false,deltitle: 'Delete Participant' , search:true,searchtitle: 'Find Participant'}, { // Edit recreateForm: true, beforeInitData: function () { } }, { // Add recreateForm: true, beforeInitData: function () { } } ); $("#participant_grid").jqGrid('setGridParam', {ondblClickRow: function(rowid,iRow,iCol,e){ //dashBoard.isAddMode = false; //jQuery(this).jqGrid('editGridRow', rowid); //var object = $("jEditButton_"+rowid); //alert(object); // jQuery(this).jqGrid('editGridRow', rowid); jQuery.fn.fmatter.rowactions.call(document.getElementById("jEditButton_"+rowid),'edit'); //alert("hello"); //alert(rowid); }}); var data = []; $("#participant_grid").jqGrid("clearGridData", true).trigger("reloadGrid"); for (var index in dashBoard.participants) { data.push([dashBoard.participants[index].id, dashBoard.participants[index].name,dashBoard.showFormatedAmount(dashBoard.participants[index].balance)+" "+dashBoard.expense.currency,""]); } dashBoard.addRowsToParticipantGrid(data,true); } this.inlineNavAction = function inlineNavAction(cellvalue, options, rowObject, isSavedRow){ var rowid = options.rowId; var ocl = "id='jEditButton_"+rowid+"' onclick=jQuery.fn.fmatter.rowactions.call(this,'edit'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; var str = "
"; if(parseFloat(rowObject['Current Balance']) == parseFloat(0) && dashBoard.participants[rowObject['SI']].isCreator != "1" && rowObject['SI'] != dashBoard.loginParticipantId){ ocl = "id='jDeleteButton_"+rowid+"' onclick=jQuery.fn.fmatter.rowactions.call(this,'del'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += "
"; } ocl = "id='jSaveButton_"+rowid+"' onclick=jQuery.fn.fmatter.rowactions.call(this,'save'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += ""; ocl = "id='jCancelButton_"+rowid+"' onclick=jQuery.fn.fmatter.rowactions.call(this,'cancel'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += ""; return "
" + str + "
"; } this.setParticipantGridExtension = function setParticipantGridExtension(){ $.extend($.jgrid.edit, { addCaption: "Add Participant", editCaption: "Modify Participant", bSubmit: "Save", bCancel: "Cancel", width:300, recreateForm: true, beforeShowForm: function () { }, beforeSubmit: function(response, postData) { dashBoard.processAfterValidation(dashBoard.validParticipantInputForm($('#Name').val(),-1)) } }); $.extend($.jgrid.del, { caption: "Delete Participant", msg: "Do you want to delete the participant?", beforeSubmit: function(response, postData) { dashBoard.deleteParticipant(); } }); } this.addRowsToParticipantGrid = function addRowsToParticipantGrid(data,isAdd){ var names = ['SI', 'Name', 'Current Balance','']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } if(isAdd == true){ for (var i = 0; i < mydata.length; i++) { //alert(i + 1); //alert(mydata[i]); $("#participant_grid").jqGrid('addRowData',data[i][0]+1, mydata[i]); } //Set the page to the last page } else { $("#participant_grid").jqGrid('setRowData', data[0][0]+1, mydata[0]); } } } function isValidDate(dateArray){ var errorMessage = ""; var error = "Date is not valid"; var day = dateArray[0]; var month = dateArray[1]; var year = dateArray[2]; month = getNoMonthFromStrMon(month); if(month == ""){ errorMessage = error; } if(errorMessage == ""){ if((parseInt(day) <= 31 && parseInt(day) >= 1) && (parseInt(month) <= 12 && parseInt(month) >= 1) && (parseInt(year) <= 2999 && parseInt(year) >= 1900)){ if(parseInt(month)== 2 && parseInt(day) > 28){ if(!isLeapYear(year)){ errorMessage = error; } } } else { errorMessage = error; } } return errorMessage; } function getNoMonthFromStrMon(month){ var months = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec']; switch (month.toLowerCase()) { case months[0]: month = "01"; break; case months[1]: month = "02"; break; case months[2]: month = "03"; break; case months[3]: month = "04"; break; case months[4]: month = "05"; break; case months[5]: month = "06"; break; case months[6]: month = "07"; break; case months[7]: month = "08"; break; case months[8]: month = "09"; break; case months[9]: month = "10"; break; case months[10]: month = "11"; break; case months[11]: month = "12"; break; default: month = ""; } return month; } function getTimeStampByInputDate(dateStr){ var dateArray = dateStr.trim().split("-"); if(dateArray[0].length == 1){ dateArray[0] = "0"+dateArray[0]; } return (new Date(dateArray[2]+"-"+getNoMonthFromStrMon(dateArray[1])+"-"+dateArray[0]).getTime())/1000; } function isLeapYear(year) { return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); } function pad(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } function addExpense(){ if(dashBoard.isAddMode == true){ dashBoard.addExpenseToGrid(); // sendDataToServer(); } else { dashBoard.addExpenseToGrid(); //sendDataToServer(); } //ReloadBalance(); //updateParticipantBalance(); } function sendDataToServer(formData,formName){ // alert(formName); //get form action var formUrl = $(formName).attr('action'); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function(data,textStatus,xhr){ // alert(data); if(data.trim() == "+000"){ //alert("Success") } else{ showMessage("Data saving failed!"); } }, error: function(xhr,textStatus,error){ // alert(error); } }); } $('#sendEmailForm').submit(function(){ $("#ExpenseEmailExpenseTitle").val(dashBoard.expense.title); $("#ExpenseEmailUniqueURL").val(window.location.href); //document.getElementById("dvLoading").style.display = "block"; //serialize form data var formData = $(this).serialize(); //get form action var formUrl = $(this).attr('action'); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function(data,textStatus,xhr){ showMessage("Email Sent!"); }, error: function(xhr,textStatus,error){ showMessage("Email Sending Failed!"); } }); return false; }); $('#viewLogForm').submit(function(){ $("#ExpenseLogExpenseId").val(dashBoard.expense.id); document.getElementById("dvLoading").style.display = "block"; //serialize form data var formData = $(this).serialize(); //get form action var formUrl = $(this).attr('action'); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function(data,textStatus,xhr){ dashBoard.generateLogList(data); document.getElementById("dvLoading").style.display = "none"; }, error: function(xhr,textStatus,error){ // alert(error); } }); return false; }); $('#updateGroupExpenseForm').submit(function(){ //serialize form data var formData = $(this).serialize(); //get form action var formUrl = $(this).attr('action'); $('#updateGroupExpenseForm').find('span').text(""); if(dashBoard.expense.title == $("#ExpenseTitle").val().trim() && dashBoard.expense.currency == $("#ExpenseCurrency").val().trim() & dashBoard.expense.description == $("#ExpenseDescription").val().trim() ){ return false; } dashBoard.expense.title = $("#ExpenseTitle").val(); dashBoard.expense.currency = $("#ExpenseCurrency").val(); dashBoard.expense.description = $("#ExpenseDescription").val(); $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function(data,textStatus,xhr){ if(data.trim() == "+000"){ $("#error_dialog" ).html("Data saved successfully!"); $("#error_dialog" ).dialog(); //alert("SUCCESSFULLY updated"); } else{ var lineArray = data.split("#"); var totalLine = lineArray.length-1; for(var i=0;i