var dashBoard; var plot1,plot2,plot3; $( document ).ready(function() { if($("#expenseData").val() == ""){ $("#div_participant").html("




"+lblExpenseNOTFOUND+"

"); return; } var loadTabs = new LoadTabs(); loadTabs.startLoading( $.parseJSON($("#expenseData").val())); }); function LoadTabs(){ this.startLoading = function startLoading(data){ this.generateExpenseList(data); } this.calculateBalance = function calculateBalance(){ } this.loadSettings = function loadSettings(){ } this.generateExpenseList = function generateExpenseList(expenseInfoObj){ dashBoard = new DashBoard(); $.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; expenseObj.version = val.version; dashBoard.expense = expenseObj; $("#expenseTitleDiv").html(expenseObj.title); $("#expenseDescDiv").html(expenseObj.description); } else if(key === "FamilyExpense"){ $.each(val, function (i, object) { var familyExpense = new FamilyExpense(); familyExpense.id = object.id; familyExpense.expenseId = object.id; familyExpense.recordType = object.record_type; familyExpense.expenseName = object.what; familyExpense.expenseCategory = object.category; familyExpense.category = object.category; familyExpense.amount = object.amount; familyExpense.expenseDate = object.expense_date_new; familyExpense.create_date = object.create_date; familyExpense.number_of_notes= object.number_of_notes; familyExpense.type= object.type; if(familyExpense.recordType == 1){ dashBoard.familyExpenses[familyExpense.id] = familyExpense; dashBoard.globalExpenseIndex++; } else { dashBoard.familyIncomes[familyExpense.id] = familyExpense; dashBoard.globalIncomeIndex++; } }); } else if(key === "Category"){ $.each(val, function (i, object) { var category = new Category(); category.id = object.id; category.type = object.type; category.name = object.name; dashBoard.categories[category.id] = category; }); } }); dashBoard.displayCovePage(); dashBoard.setCurrentDate(); } } function DashBoard(){ this.expense; this.familyExpenses = []; this.filteredFamilyExpenses = []; this.familyIncomes = []; this.filteredFamilyIncomes = []; this.categories = []; this.gridData = []; this.gridIncomeData = []; this.currentEditFamilyExpense; this.categoryHtml = ""; this.currentRecordType = 1; this.currentDate ; this.isAddMode = true; this.globalExpenseIndex = 0; this.globalIncomeIndex = 0; this.displayCovePage = function displayCovePage(){ var justCreated = $("#justCreated").val(); $("#participantBox").hide(); $("#tabs").show(); $("#tabs" ).tabs( { active: 1 } ); $("#expenseCreatedByDiv").html(lblCreatedOna + dashBoard.getFormatedDbDate(dashBoard.expense.create_date)); if(justCreated == "yes"){ $("#tabs" ).tabs( { active: 1 } ); // dashBoard.setParticipantGridExtension(); } else{ //hide loading $("#dvLoading").hide(); } dashBoard.showIncomeList(); dashBoard.showExpenseList(); // dashBoard.setCategory(1,""); } this.showExpenseList = function showExpenseList(){ dashBoard.gridData = []; dashBoard.isAddMode = true; for (var index in dashBoard.familyExpenses) { dashBoard.gridData.push(dashBoard.getDataByExpense(dashBoard.familyExpenses[index])); } dashBoard.reloadGrid(); } this.showIncomeList = function showIncomeList(){ dashBoard.gridIncomeData = []; dashBoard.isAddMode = true; for (var index in dashBoard.familyIncomes) { dashBoard.gridIncomeData.push(dashBoard.getDataByExpense(dashBoard.familyIncomes[index])); } dashBoard.loadIncomeGrid(); } this.getDataByExpense = function getDataByExpense(familyExpenseObj){ var key = familyExpenseObj.id; dashBoard.filteredFamilyExpenses[key] = dashBoard.getFilteredExpenseObj(familyExpenseObj); return [dashBoard.filteredFamilyExpenses[key].id,dashBoard.filteredFamilyExpenses[key].expenseName,dashBoard.filteredFamilyExpenses[key].expenseCategory,dashBoard.filteredFamilyExpenses[key].expenseDate,dashBoard.filteredFamilyExpenses[key].expenseDay,dashBoard.showFormatedAmount(dashBoard.filteredFamilyExpenses[key].amount)]; } this.getFilteredExpenseObj = function getFilteredExpenseObj(familyExpenseObj){ var filteredFamilyExpenseObj = new FilteredFamilyExpense(); filteredFamilyExpenseObj.id = familyExpenseObj.id; filteredFamilyExpenseObj.expenseName=familyExpenseObj.expenseName; filteredFamilyExpenseObj.expenseCategory=familyExpenseObj.expenseCategory; filteredFamilyExpenseObj.expenseDate = familyExpenseObj.expenseDate;//dashBoard.getFormatedDate(familyExpenseObj.expenseDate); filteredFamilyExpenseObj.expenseDay = dashBoard.getDayByDate(familyExpenseObj.expenseDate); filteredFamilyExpenseObj.amount = dashBoard.getFormatedAmount(familyExpenseObj.amount); filteredFamilyExpenseObj.noOfNotes=familyExpenseObj.noOfNotes; return filteredFamilyExpenseObj; } this.getFilteredExpenseObjPrint = function getFilteredExpenseObjPrint(familyExpenseObj){ var filteredFamilyExpenseObj = new FilteredFamilyExpense(); filteredFamilyExpenseObj.id = familyExpenseObj.id; filteredFamilyExpenseObj.amount = dashBoard.showFormatedAmount(familyExpenseObj.amount); filteredFamilyExpenseObj.expenseName=familyExpenseObj.expenseName; filteredFamilyExpenseObj.expenseCategory=familyExpenseObj.expenseCategory; filteredFamilyExpenseObj.expenseDate = familyExpenseObj.expenseDate;//dashBoard.getFormatedDate(familyExpenseObj.expenseDate); filteredFamilyExpenseObj.noOfNotes=familyExpenseObj.noOfNotes; return filteredFamilyExpenseObj; } this.getDayByDate = function getDayByDate(dateUnix){ var dateObj = new Date(dateUnix*1000); var d = new Date(); var weekday = new Array(7); weekday[0]= "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; return weekday[dateObj.getDay()]; } 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: 232, title:false, colNames: ['SI', lblForWhatReason, lblCategory, lblWhen, lblDay, lblAmount+'('+dashBoard.expense.currency+')?'], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden:true, key:true }, { name: 'Reason', index: 'Reason', align:'center', width: 290, formoptions:{rowpos:1}, editable: true, editrules:{required:true}, editoptions:{maxlength:25}, sorttype: "float" }, { name: 'Category', index: 'Category', width: 180 , align:'center', formoptions:{rowpos:2}, editable: true, edittype:'select', editoptions:{value:'1:X',defaultValue:'X' } }, { name: 'Date', index: 'Date', width: 85, align:'center', sorttype:'date', formoptions:{rowpos:3}, editable:true, editrules:{required:true}, editoptions: {dataInit:initDateEdit} }, { name: 'Day', index: 'Day', align:'center', width: 75, sorttype: "float", cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } }, { 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 () { 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); } dashBoard.changeExpenseAmount(); }); } } }, ], rowNum : maxRowNum, rowList:[10,20,50,maxRowNum], pager: '#expense_pager', gridview:true, rownumbers:true, autoencode:true, ignoreCase:true, viewrecords: true, sortorder: 'desc', caption:'Expense List' } ); dashBoard.addRowsToGrid(dashBoard.gridData,'#grid'); $("#grid").jqGrid('setGridParam', { onSelectRow: function(rowid,iRow,iCol,e){ if(!iCol){ dashBoard.isAddMode = false; dashBoard.loadForEdit(); } } } ); $("#grid").jqGrid('setGridParam', {ondblClickRow: function(rowid,iRow,iCol,e){ dashBoard.isAddMode = false; jQuery(this).jqGrid('editGridRow', rowid); }}); $("#grid").jqGrid('navGrid','#expense_pager',{ add:true,addtitle: lblAddExpense, edit:true,edittitle: lblModifyExpense, del:true,deltitle: lblDeleteExpense , search:true,searchtitle: lblFindExpenses}, { recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = false; } }, { recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = true; } } ); dashBoard.setExpenseGridExtension(); jQuery("#grid").setGridParam({rowNum:maxRowNum}).trigger("reloadGrid"); $('.ui-jqgrid-bdiv').scrollTop($('#grid')[0].scrollHeight); } this.setExpenseGridExtension = function setExpenseGridExtension(){ $.extend($.jgrid.edit, { addCaption: lblAddExpense, editCaption: lblModifyExpense, bSubmit: lblSave, bCancel: lblCancel, recreateForm: true, beforeShowForm: function () { if(dashBoard.isAddMode == true){ $('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"); $('#Category').find('option').remove().end().append(dashBoard.categoryHtml); $("#Date").val(dashBoard.currentDate); } else { dashBoard.loadForEdit(); } }, beforeSubmit: function(response, postData) { dashBoard.validateExpenseAddForm(1); } }); $.extend($.jgrid.del, { caption: lblDeleteExpense, msg: lblWantDeleteExpense, beforeSubmit: function(response, postData) { dashBoard.deleteExpense(); } }); } this.loadIncomeGrid = function loadIncomeGrid(){ 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 }); },100); }; var maxRowNum = dashBoard.globalIncomeIndex; if(maxRowNum<101){ maxRowNum = 100; } $("#income_grid").jqGrid({ datatype: "local", height: 232, title:false, colNames: ['SI', lblForWhatReason, lblCategory, lblWhen, lblDay, lblAmount + '('+dashBoard.expense.currency+')?'], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden:true, key:true }, { name: 'Reason', index: 'Reason', align:'center', width: 290, formoptions:{rowpos:1}, editable: true, editrules:{required:true}, editoptions:{maxlength:25}, sorttype: "float" }, { name: 'Category', index: 'Category', width: 180 , align:'center', formoptions:{rowpos:2}, editable: true, edittype:'select', editoptions:{value:'1:X',defaultValue:'X' } }, { name: 'Date', index: 'Date', width: 85, align:'center', sorttype:'date', formoptions:{rowpos:3}, editable:true, editrules:{required:true}, editoptions: {dataInit:initDateEdit} }, { name: 'Day', index: 'Day', align:'center', width: 75, sorttype: "float", cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } }, { 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); } dashBoard.changeExpenseAmount(); }); } } }, ], rowNum : maxRowNum, rowList:[10,20,50,maxRowNum], pager: '#income_pager', gridview:true, rownumbers:true, autoencode:true, ignoreCase:true, viewrecords: true, sortorder: 'desc', caption:lblIncomeList } ); dashBoard.addRowsToGrid(dashBoard.gridIncomeData,'#income_grid'); $("#income_grid").jqGrid('setGridParam', { onSelectRow: function(rowid,iRow,iCol,e){ if(!iCol){ dashBoard.isAddMode = false; dashBoard.loadForEdit(); } } } ); $("#income_grid").jqGrid('setGridParam', {ondblClickRow: function(rowid,iRow,iCol,e){ dashBoard.isAddMode = false; jQuery(this).jqGrid('editGridRow', rowid); }}); $("#income_grid").jqGrid('navGrid','#income_pager',{ add:true,addtitle: lblAddIncome, edit:true,edittitle: lblModifyIncome, del:true,deltitle: lblDeleteIncome , search:true,searchtitle: lblFindIncome}, { recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = false; } }, { recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = true; } } ); jQuery("#income_grid").setGridParam({rowNum:maxRowNum}).trigger("reloadGrid"); $('.ui-jqgrid-bdiv').scrollTop($('#income_grid')[0].scrollHeight); } this.setIncomeGridExtension = function setIncomeGridExtension(){ $.extend($.jgrid.edit, { addCaption: lblAddIncome, editCaption: lblModifyIncome, bSubmit: lblSave, bCancel: lblCancel, // width:300, recreateForm: true, beforeShowForm: function () { if(dashBoard.isAddMode == true){ $('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"); $('#Category').find('option').remove().end().append(dashBoard.categoryHtml); $("#Date").val(dashBoard.currentDate); } else { dashBoard.loadForEdit(); } }, beforeSubmit: function(response, postData) { dashBoard.validateExpenseAddForm(1); } }); $.extend($.jgrid.del, { caption: lblDeleteIncome, msg: lblWantDeleteIncome, beforeSubmit: function(response, postData) { dashBoard.deleteIncome(); } }); } this.loadForEdit = function loadForEdit(){ if(dashBoard.currentRecordType == "1"){ var rowId =$("#grid").jqGrid('getGridParam','selrow'); var rowData = jQuery("#grid").getRowData(rowId); dashBoard.showEditUI(dashBoard.familyExpenses[rowData['SI']]); } else { var rowId =$("#income_grid").jqGrid('getGridParam','selrow'); var rowData = jQuery("#income_grid").getRowData(rowId); dashBoard.showEditUI(dashBoard.familyIncomes[rowData['SI']]); } $('#Category').find('option').remove().end().append(dashBoard.categoryHtml); } this.updateBalance = function updateBalance(){ //balance } this.setCategory = function setCategory(type,defaultValue){ dashBoard.categoryHtml = ""; dashBoard.currentRecordType = type; for (var index in dashBoard.categories) { if(dashBoard.categories[index].type == "0" || dashBoard.categories[index].type == type ){ if(defaultValue == dashBoard.categories[index].name){ dashBoard.categoryHtml += ''; } else { dashBoard.categoryHtml += ''; } } } } this.showEditUI =function showEditUI(expenseObj){ dashBoard.currentEditFamilyExpense = expenseObj; //set Category dashBoard.setCategory(dashBoard.currentRecordType,expenseObj.expenseCategory); //assign parts and freeze amounts to all participants } // 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((new Date(date*1000)).toUTCString()); 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.getFormatedDbDate = function getFormatedDbDate(date){ var time ; if(date != ""){ var dateObj = date.split(" "); var dateInfo = dateObj[0].split("-"); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var year = dateInfo[0]; var month = months[parseInt(dateInfo[1])-1]; var date = String(dateInfo[2]); if(date.length == 1){ time = '0'+ date + '-' + month + '-' + year ; } else { time = date + '-' + month + '-' + year ; } } return time; } this.setCurrentDate = function setCurrentDate(){ var dateObj = new Date(); 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.inArrayElement = function inArrayElement(array, value){ var result = false; for(var i=0;i25){ errorMessage = lblExpenseNameLessThanChar } //validate amount field if(errorMessage == ""){ if(!$('#Amount').val().trim()){ errorMessage = lblValidAmount } else if (parseFloat($('#Amount').val()) <= parseFloat(0)) { errorMessage = lblValidAmount } } //validate date if(errorMessage == ""){ if($('#Date').val().trim() != ""){ var dateArray = $('#Date').val().trim().split("-"); if(dateArray.length != 3){ errorMessage = lblDateNotValid; } 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(""); $('#Reason').focus(); } this.addRowsToGrid = function addRowsToGrid(data,grid_id){ var names = ['SI', 'Reason','Category', 'Date', 'Day', 'Amount']; 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++) { $(grid_id).jqGrid('addRowData',data[i][0], mydata[i]); } } else { $(grid_id).jqGrid('setRowData', data[0][0], mydata[0]); dashBoard.isAddMode = true; } } this.getExpenseUniqueId = function getExpenseUniqueId(){ var maxExpId = 0; var extractedIndex = 0; var expenseIdArray; if(dashBoard.currentRecordType == "1"){ for (var id in dashBoard.familyExpenses) { expenseIdArray = dashBoard.familyExpenses[id].id.split("-"); if(maxExpId < parseInt(expenseIdArray[1])){ maxExpId = parseInt(expenseIdArray[1]); } } } else { for (var id in dashBoard.familyIncomes) { expenseIdArray = dashBoard.familyIncomes[id].id.split("-"); if(maxExpId < parseInt(expenseIdArray[1])){ maxExpId = parseInt(expenseIdArray[1]); } } } return dashBoard.currentRecordType+"-"+String(pad(maxExpId+1, 5))+"-"+dashBoard.expense.id; } this.isValueModified = function isValueModified(oldExpObj,newExpObj){ var isChanged = false; if(oldExpObj.expenseName != newExpObj.expenseName){ isChanged = true; } else if(oldExpObj.expenseCategory != newExpObj.expenseCategory){ isChanged = true; } else if(oldExpObj.expenseDate != newExpObj.expenseDate){ isChanged = true; } else if(parseFloat(oldExpObj.amount) != parseFloat(newExpObj.amount)){ isChanged = true; } return isChanged; } this.addExpenseToGrid = function addExpenseToGrid(){ var familyExpenseObj ; //collect data from edit form if(dashBoard.isAddMode == true){ familyExpenseObj= new FamilyExpense(); familyExpenseObj.id = dashBoard.getExpenseUniqueId(); familyExpenseObj.expenseId = dashBoard.expense.id; familyExpenseObj.isAdd = "8"; familyExpenseObj = dashBoard.getInputFormData(familyExpenseObj); familyExpenseObj.type = 1; familyExpenseObj.recordType = dashBoard.currentRecordType; if(familyExpenseObj.recordType == "1"){ dashBoard.globalExpenseIndex++; } else { dashBoard.globalIncomeIndex++; } } else { familyExpenseObj = new FamilyExpense(); familyExpenseObj = dashBoard.getInputFormData(familyExpenseObj); //check whether data is modified or not. If not change then return if(!dashBoard.isValueModified(dashBoard.currentEditFamilyExpense,familyExpenseObj)){ return; } familyExpenseObj = dashBoard.currentEditFamilyExpense; familyExpenseObj = dashBoard.getInputFormData(familyExpenseObj); familyExpenseObj.expenseId = dashBoard.expense.id; familyExpenseObj.isAdd = "9"; familyExpenseObj.id = dashBoard.currentEditFamilyExpense.id; } familyExpenseObj.isreimburse = 0; dashBoard.processExpenseData(familyExpenseObj); } this.processExpenseData = function processExpenseData(familyExpenseObj){ if(familyExpenseObj.recordType == "1"){ dashBoard.familyExpenses[familyExpenseObj.id] = familyExpenseObj; sendDataToServer(familyExpenseObj,"#expenseForm"); var data = []; data.push(dashBoard.getDataByExpense(familyExpenseObj)); dashBoard.addRowsToGrid(data,'#grid'); //go to the last page after adding record dashBoard.setPageAfterAdd('#grid'); } else { dashBoard.familyIncomes[familyExpenseObj.id] = familyExpenseObj; sendDataToServer(familyExpenseObj,"#expenseForm"); var data = []; data.push(dashBoard.getDataByExpense(familyExpenseObj)); dashBoard.addRowsToGrid(data,'#income_grid'); //go to the last page after adding record dashBoard.setPageAfterAdd('#income_grid'); } } this.setPageAfterAdd = function setPageAfterAdd(grid_id){ if(dashBoard.isAddMode == true){ var lastPage = $(grid_id).getGridParam('lastpage'); var totalRecords = $(grid_id).getGridParam('records'); var rowNum = $(grid_id).getGridParam('rowNum'); if(totalRecords > (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.getInputFormData = function getInputFormData(familyExpenseObj){ var amountStr = ""; var isDetails = false; familyExpenseObj.expenseCategory = $('#Category').val(); familyExpenseObj.expenseName = $('#Reason').val(); familyExpenseObj.amount = $('#Amount').val(); familyExpenseObj.expenseDate = $('#Date').val();// getTimeStampByInputDate($('#Date').val()); return familyExpenseObj; } this.deleteExpense = function deleteExpense(){ var rowId =$("#grid").jqGrid('getGridParam','selrow'); var i; $('#grid').jqGrid('delRowData', rowId); var deletedExpObj = dashBoard.familyExpenses[rowId]; delete dashBoard.familyExpenses[rowId]; deletedExpObj.isAdd = "10"; deletedExpObj.expenseId = dashBoard.expense.id; dashBoard.setPageAfterDelete('#grid'); sendDataToServer(deletedExpObj,"#expenseForm"); $(".ui-icon-closethick").trigger('click'); } this.deleteIncome = function deleteIncome(){ var rowId =$("#income_grid").jqGrid('getGridParam','selrow'); var i; $('#income_grid').jqGrid('delRowData', rowId); var deletedExpObj = dashBoard.familyIncomes[rowId]; delete dashBoard.familyIncomes[rowId]; deletedExpObj.isAdd = "10"; deletedExpObj.expenseId = dashBoard.expense.id; dashBoard.setPageAfterDelete('#income_grid'); sendDataToServer(deletedExpObj,"#expenseForm"); $(".ui-icon-closethick").trigger('click'); } 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"); dashBoard.downloadImage("graph_image_id"); } this.downloadImage = function downloadImage(imageURL) { try { var img = document.getElementById(imageURL); window.open(img.src.replace('image/png', 'image/png'), "_blank"); } catch (err) { alert(lblCantDownload); } return true; } this.drawGraph = function drawGraph(){ if(plot1){ plot1.destroy(); } if(plot2){ plot2.destroy(); } if(plot3){ plot3.destroy(); } var data = []; var barLabel = []; var ticks = []; var data_income = []; var barLabel_income = []; var ticks_income = []; var data_balance = []; var totalExpense = 0; var totalIncome = 0; var balance = 0; var balance_color_code = "#008000"; var actualBalance = 0; var catObj; var expenseCategories = []; var incomeCategories = []; var noOfExpenseCategories = 0; var noOfIncomeCategories = 0; for (var index in dashBoard.familyExpenses) { totalExpense = parseFloat(totalExpense) + parseFloat(dashBoard.familyExpenses[index].amount); if(dashBoard.isCategoryExistInObj(expenseCategories,dashBoard.familyExpenses[index].expenseCategory)){ //get the object catObj = expenseCategories[dashBoard.familyExpenses[index].expenseCategory]; catObj.amount = parseFloat(catObj.amount) + parseFloat(dashBoard.familyExpenses[index].amount); expenseCategories[dashBoard.familyExpenses[index].expenseCategory] = catObj; } else { noOfExpenseCategories++; //insert new entry into expenseCategories catObj = new Category(); catObj.name = dashBoard.familyExpenses[index].expenseCategory; catObj.amount = dashBoard.familyExpenses[index].amount; expenseCategories[catObj.name] = catObj; } } var sortableExpenseCategories = []; for (var index in expenseCategories) sortableExpenseCategories.push([expenseCategories[index].name, expenseCategories[index].amount]) sortableExpenseCategories.sort(function(a, b) {return b[1] - a[1]}) for (var index in sortableExpenseCategories ) { data.push(parseFloat(dashBoard.showFormatedAmount(sortableExpenseCategories[index][1]))); barLabel.push(dashBoard.showFormatedAmount(parseFloat(sortableExpenseCategories[index][1]))); ticks.push(sortableExpenseCategories[index][0] + "\n"+parseFloat(dashBoard.showFormatedAmount(sortableExpenseCategories[index][1]))+" "+dashBoard.expense.currency); } // for (var index in expenseCategories) { // data.push(parseFloat(dashBoard.showFormatedAmount(expenseCategories[index].amount))); // barLabel.push(dashBoard.showFormatedAmount(parseFloat(expenseCategories[index].amount))); // ticks.push(expenseCategories[index].name + "\n"+parseFloat(dashBoard.showFormatedAmount(expenseCategories[index].amount))+" "+dashBoard.expense.currency); // } for (var index in dashBoard.familyIncomes) { totalIncome = parseFloat(totalIncome) + parseFloat(dashBoard.familyIncomes[index].amount); if(dashBoard.isCategoryExistInObj(incomeCategories,dashBoard.familyIncomes[index].expenseCategory)){ //get the object catObj = incomeCategories[dashBoard.familyIncomes[index].expenseCategory]; catObj.amount = parseFloat(catObj.amount) + parseFloat(dashBoard.familyIncomes[index].amount); incomeCategories[dashBoard.familyIncomes[index].expenseCategory] = catObj; } else { noOfIncomeCategories++; //insert new entry into incomeCategories catObj = new Category(); catObj.name = dashBoard.familyIncomes[index].expenseCategory; catObj.amount = dashBoard.familyIncomes[index].amount; incomeCategories[catObj.name] = catObj; } } //calculate balance balance = parseFloat(totalIncome) - parseFloat(totalExpense); actualBalance = balance; if(parseFloat(balance) < parseFloat(0)){ balance_color_code = "#FF0000"; balance = parseFloat(balance) * (-1); } var sortableIncomeCategories = []; for (var index in incomeCategories) sortableIncomeCategories.push([incomeCategories[index].name, incomeCategories[index].amount]) sortableIncomeCategories.sort(function(a, b) {return b[1] - a[1]}) for (var index in sortableIncomeCategories ) { data_income.push(parseFloat(dashBoard.showFormatedAmount(sortableIncomeCategories[index][1]))); barLabel_income.push(dashBoard.showFormatedAmount(parseFloat(sortableIncomeCategories[index][1]))); ticks_income.push(sortableIncomeCategories[index][0] + "\n"+parseFloat(dashBoard.showFormatedAmount(sortableIncomeCategories[index][1]))+" "+dashBoard.expense.currency); } // for (var index in incomeCategories) { // data_income.push(parseFloat(dashBoard.showFormatedAmount(incomeCategories[index].amount))); // barLabel_income.push(dashBoard.showFormatedAmount(parseFloat(incomeCategories[index].amount))); // ticks_income.push(incomeCategories[index].name+"\n"+parseFloat(dashBoard.showFormatedAmount(incomeCategories[index].amount))+" "+dashBoard.expense.currency); // } if(noOfExpenseCategories < 3){ $("#expense_chart").css("width", "250px"); } else { $("#expense_chart").css("width", (noOfExpenseCategories*100)+"px"); } if(noOfIncomeCategories < 3){ $("#income_chart").css("width", "250px"); } else { $("#income_chart").css("width", (noOfIncomeCategories*100)+"px"); } var options_income = { seriesDefaults:{ renderer:$.jqplot.BarRenderer, rendererOptions: {fillToZero: true} }, axesDefaults:{min:0}, series:[ { color: '#ADFF2F', showMarker: true, pointLabels:{ show: true, labels:barLabel_income } } ], negativeSeriesColors: ["#FF0000"], axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks_income }, yaxis: { pad: 0.18, tickOptions: {formatString: '%d '+dashBoard.expense.currency} } }, title: { text: 'Incomes of "'+dashBoard.expense.title+'"' }, }; var options_expense = { seriesDefaults:{ renderer:$.jqplot.BarRenderer, rendererOptions: {fillToZero: true} }, axesDefaults:{min:0}, series:[ { color: '#A9A9A9', showMarker: true, pointLabels:{ show: true, labels:barLabel } } ], negativeSeriesColors: ["#FF0000"], axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks }, yaxis: { pad: 0.18, tickOptions: {formatString: '%d '+dashBoard.expense.currency} } }, title: { text: 'Expenses of "'+dashBoard.expense.title+'"' }, highlighter: { show:true, sizeAdjust: 10, tooltipLocation: 'n', tooltipAxes: 'yref', useAxesFormatters: false, }, }; /* var options_balance = { gridPadding: {top:0, bottom:38, left:0, right:0}, seriesDefaults:{ renderer:$.jqplot.PieRenderer, trendline:{ show:false }, rendererOptions: { padding: 8, showDataLabels: false } }, seriesColors: ["#068481","#B7C8B6", balance_color_code], legend:{ show:true, placement: 'outside', rendererOptions: { numberRows: 1 }, location:'s', marginTop: '15px' } }; */ var ticks = [lblIncome, lblExpens, lblBalance]; var data_balance = [['Income', totalIncome],['Expense',totalExpense],['Balance',balance]]; var options_balance = { seriesDefaults:{ renderer:$.jqplot.BarRenderer, rendererOptions: { fillToZero: true, varyBarColor: true }, pointLabels: {show: true} }, seriesColors: ["#ADFF2F","#A9A9A9", balance_color_code], axesDefaults:{min:0}, axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks }, yaxis: { pad: 0.18, } } , highlighter: { show:true, sizeAdjust: 10, tooltipLocation: 'n', tooltipAxes: 'yref', useAxesFormatters: false, }, }; // var data_balance = [totalIncome,totalExpense,balance]; // var data_balance = [['Income', totalIncome],['Expense', totalExpense], ['Balance', balance]]; var data_balance = [totalIncome,totalExpense,balance]; plot1 = $.jqplot('income_chart', [data_income],options_income); plot2 = $.jqplot('expense_chart', [data],options_expense); plot3 = $.jqplot('balance_chart', [data_balance],options_balance); //set balance description var balancePaymentHtml = ""; balancePaymentHtml = balancePaymentHtml + '
'+lblTotalIncome+' :'+dashBoard.showFormatedAmount(totalIncome)+' '+dashBoard.expense.currency+'
'; balancePaymentHtml = balancePaymentHtml + lblTotalExpense+' :'+dashBoard.showFormatedAmount(totalExpense)+' '+dashBoard.expense.currency+'
'; balancePaymentHtml = balancePaymentHtml + '

-----------------------------

'; balancePaymentHtml = balancePaymentHtml + '

' + lblBalance+' :'+dashBoard.showFormatedAmount(actualBalance)+' '+dashBoard.expense.currency+'

'; $("#balance_description_div").html(balancePaymentHtml); } ///////////////////////////////////////////////////////////////// Participant section //////////////////////////////////////////// this.processAfterValidation = function processAfterValidation(errorMessage){ if(errorMessage != ""){ dashBoard.showErrorMessage(errorMessage); } else { dashBoard.clearErrorMessage(); dashBoard.addParticipant($('#Name').val().trim(),"2"); $(".ui-icon-closethick").trigger('click'); } } this.printExpense = function printExpense(){ var data_expense =[]; var data_income =[]; var totalExpense = 0; var totalIncome = 0; var balance = 0; for (var id in dashBoard.familyExpenses) { totalExpense = parseFloat(totalExpense) + parseFloat(dashBoard.familyExpenses[id].amount); data_expense.push(dashBoard.getFilteredExpenseObjPrint(dashBoard.familyExpenses[id])); } for (var id in dashBoard.familyIncomes) { totalIncome = parseFloat(totalIncome) + parseFloat(dashBoard.familyIncomes[id].amount); data_income.push(dashBoard.getFilteredExpenseObjPrint(dashBoard.familyIncomes[id])); } //calculate balance balance = parseFloat(totalIncome) - parseFloat(totalExpense); $("#printExpense").val(JSON.stringify(dashBoard.expense)); $("#printExpenseList").val(JSON.stringify(data_expense)); $("#printIncomeList").val(JSON.stringify(data_income)); $("#printNames").val(JSON.stringify(dashBoard.getFormatedDbDate(dashBoard.expense.create_date)+","+dashBoard.showFormatedAmount(totalIncome)+","+dashBoard.showFormatedAmount(totalExpense)+","+dashBoard.showFormatedAmount(balance))); $("#printForm").submit(); } } 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(); } else { dashBoard.addExpenseToGrid(); } } function sendDataToServer(formData,formName){ } function loadData(formData,formName){ var formUrl = $(formName).attr('action'); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function(data,textStatus,xhr){ var loadTabs = new LoadTabs(); loadTabs.startLoading( $.parseJSON(data)); if(data.trim() == "+000"){ // alert("Success") } else{ } }, error: function(xhr,textStatus,error){ } }); } $('#sendEmailForm').submit(function(){ $("#ExpenseEmailExpenseTitle").val(dashBoard.expense.title); $("#ExpenseEmailUniqueURL").val(dashBoard.expense.unique_url); //serialize form data var formData = $(this).serialize(); //get form action var formUrl = $(this).attr('action'); return false; }); $('#updateGroupExpenseForm').submit(function(){ //serialize form data //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(); dashBoard.expense.version = parseInt(dashBoard.expense.version) + 1; $("#ExpenseVersion").val(dashBoard.expense.version); //show updated value $("#expenseTitleDiv").html(dashBoard.expense.title); $("#expenseDescDiv").html(dashBoard.expense.description); var formData = $(this).serialize(); $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); $('#income_grid').jqGrid('GridUnload'); dashBoard.showIncomeList(); return false; }); function showMessage(message){ $("#error_dialog" ).html(message); $("#error_dialog" ).dialog(); } function sendEmail(formData,formName){ //get form action var formUrl = $(formName).attr('action'); } function Expense(){ this.id; this.unique_url; this.title; this.currency; this.description; this.create_date; this.version } function FamilyExpense(){ //this.index; this.id; this.expenseId; this.recordType; this.isAdd; this.expenseName; this.expenseCategory; this.amount; this.expenseDate; this.expenseDay; this.noOfNotes; this.isreimburse; this.type;//1=normal expense,2=balance entry } function FilteredFamilyExpense(){ this.id; this.amount; this.expenseName; this.expenseCategory; this.expenseDate; this.expenseDay; this.noOfNotes; } function Category(){ this.id; this.name; this.type; this.amount; } function Email(){ this.email; this.uniqueURL; this.title; }