var dashBoard;
var userPermission;
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();
userPermission = new UserPermission();
$.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);
$("#ExpenseVersion").val(expenseObj.version);
} 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;
familyExpense.images = object.images;
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;
});
}
else if (key === "Permissions") {
// alert("hello Permission");
$.each(val, function (i, object) {
var permission = new Permission({
id : object.user_id,
name : object.name,
email : object.email,
permission : object.role,
expense_id : dashBoard.expense.id,
permission_name: object.role!= owner ? permission_list[object.role] : 'Owner'
}
);
userPermission.permissions[permission.id] = permission;
});
}
else if (key === "restricted_mode") {
userPermission.restrict_mode = val;
}
});
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;
setCookie('1_0'); // even family expnese has no participant but setting the default to use the common method as group and mess expense
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,
sorttype: "float",
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: lblParticipantList
}
);
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) {
if (!isPermitted) {
return false;
}
dashBoard.isAddMode = false;
jQuery(this).jqGrid('editGridRow', rowid);
}
});
$("#grid").jqGrid('navGrid', '#expense_pager', {
add: isPermitted, addtitle: lblAddExpense,
edit: isPermitted, edittitle: lblModifyExpense,
del: isPermitted, 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) {
$('' + lblSaveContinue + '')
.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,
beforeShowForm: function (){
$.jgrid.viewModal("#delmodgrid");
},
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) {
if (!isPermitted) {
return false;
}
dashBoard.isAddMode = false;
jQuery(this).jqGrid('editGridRow', rowid);
}
});
$("#income_grid").jqGrid('navGrid', '#income_pager', {
add: isPermitted, addtitle: lblAddIncome,
edit: isPermitted, edittitle: lblModifyIncome,
del: isPermitted, 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) {
$('' + lblSaveContinue + '')
.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,
beforeShowForm: function (){
$.jgrid.viewModal("#delmodincome_grid");
},
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 != "" && date != null) {
//alert(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; i < array.length; i++) {
if (array[i] === value) {
result = true;
break;
}
}
return result;
}
this.isCategoryExistInObj = function isCategoryExistInObj(catArray, categoryName) {
var result = false;
var category;
for (var id in catArray) {
category = catArray[id];
if (category.name === categoryName) {
result = true;
break;
}
}
return result;
}
this.validateExpenseAddForm = function validateExpenseAddForm(source) {
var errorMessage = "";
//validate expense name
if (!$('#Reason').val().trim()) {
errorMessage = lblEnterNameOfExpense
} else if ($('#Reason').val().trim().length > 25) {
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: lblIncomesOf + '"' + 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: lblIncomesOf + '"' + 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 + '