1948 lines
46 KiB
JavaScript
1948 lines
46 KiB
JavaScript
var dashBoard;
|
|
var userPermission;
|
|
var plot1, plot2, plot3;
|
|
|
|
|
|
|
|
$(document).ready(function () {
|
|
|
|
if ($("#expenseData").val() == "") {
|
|
|
|
$("#div_participant").html("<br/><br/><br/><br/><br/><center><h3>" + lblExpenseNOTFOUND + "</h3></center>");
|
|
|
|
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) {
|
|
|
|
$('<a >' + lblSaveContinue + '<span class="ui-icon ui-icon-disk"></span></a>')
|
|
.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) {
|
|
|
|
$('<a >' + lblSaveContinue + '<span class="ui-icon ui-icon-disk"></span></a>')
|
|
.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 += '<option value="' + dashBoard.categories[index].name + '" selected role="option">' + dashBoard.categories[index].name + '</option>';
|
|
} else {
|
|
dashBoard.categoryHtml += '<option value="' + dashBoard.categories[index].name + '" role="option">' + dashBoard.categories[index].name + '</option>';
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
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 = $('<img\/>').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 + '<br/>' + lblTotalIncome + ' :<span><b>' + dashBoard.showFormatedAmount(totalIncome) + '</b> ' + dashBoard.expense.currency + '</span><br/>';
|
|
balancePaymentHtml = balancePaymentHtml + lblTotalExpense + ' :<span><b>' + dashBoard.showFormatedAmount(totalExpense) + '</b> ' + dashBoard.expense.currency + '</span><br/>';
|
|
balancePaymentHtml = balancePaymentHtml + '<p>-----------------------------</p>';
|
|
balancePaymentHtml = balancePaymentHtml + '<p><b>' + lblBalance + ' :</b><span>' + dashBoard.showFormatedAmount(actualBalance) + ' ' + dashBoard.expense.currency + '</span></p>';
|
|
|
|
|
|
$("#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 = lblDateNotValid;
|
|
|
|
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];
|
|
}
|
|
//Jan/2017/25 12:44:33 UTC
|
|
var formatedDateStr = dateArray[1] + "/" + dateArray[2] + "/" + dateArray[0] + " " + "00:00:00" + " UTC";
|
|
return (new Date(formatedDateStr).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) {
|
|
|
|
|
|
var formUrl = $(formName).attr('action');
|
|
formData.unique_url = getUniqueUrl();
|
|
console.log(formUrl);
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: formUrl,
|
|
data: formData,
|
|
success: function (data, textStatus, xhr) {
|
|
//alert(data);
|
|
if (data.trim() == "+000") {
|
|
dashBoard.expense.version = parseInt(dashBoard.expense.version) + 1;
|
|
$("#ExpenseVersion").val(dashBoard.expense.version);
|
|
|
|
} else {
|
|
|
|
alert("Data saving failed!");
|
|
}
|
|
},
|
|
error: function (xhr, textStatus, error) {
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
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 () {
|
|
|
|
$(".submit").css("float", "left");
|
|
document.getElementById('loadImg').style.display = 'inline-block';
|
|
$("#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');
|
|
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: formUrl,
|
|
data: formData,
|
|
success: function (data, textStatus, xhr) {
|
|
|
|
alert(lblEmailSent);
|
|
document.getElementById('loadImg').style.display = 'none';
|
|
},
|
|
error: function (xhr, textStatus, error) {
|
|
|
|
alert(lblEmailSentFail);
|
|
document.getElementById('loadImg').style.display = 'none';
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#updateGroupExpenseForm').submit(function () {
|
|
//serialize form data
|
|
document.getElementById('loadImg2').style.display = 'inline-block';
|
|
$(".submit").css("float", "left");
|
|
|
|
//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()
|
|
) {
|
|
document.getElementById('loadImg2').style.display = 'none';
|
|
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;
|
|
|
|
//show updated value
|
|
$("#expenseTitleDiv").html(dashBoard.expense.title);
|
|
$("#expenseDescDiv").html(dashBoard.expense.description);
|
|
$("#ExpenseVersion").val(dashBoard.expense.version);
|
|
var formData = $(this).serialize();
|
|
formData = formData + '&unique_url=' + getUniqueUrl();
|
|
|
|
$('#grid').jqGrid('GridUnload');
|
|
dashBoard.showExpenseList();
|
|
$('#income_grid').jqGrid('GridUnload');
|
|
dashBoard.showIncomeList();
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: formUrl,
|
|
data: formData,
|
|
success: function (data, textStatus, xhr) {
|
|
|
|
if (data.trim() == "+000") {
|
|
document.getElementById('loadImg2').style.display = 'none';
|
|
alert(lblDataSaved);
|
|
|
|
} else {
|
|
dashBoard.expense.version = parseInt(dashBoard.expense.version) - 1;
|
|
$("#ExpenseVersion").val(dashBoard.expense.version);
|
|
var lineArray = data.split("#");
|
|
var totalLine = lineArray.length - 1;
|
|
for (var i = 0; i < totalLine; i++) {
|
|
var msgArray = lineArray[i].split("|");
|
|
$('#error_' + msgArray[0]).text(msgArray[1]);
|
|
}
|
|
}
|
|
document.getElementById('loadImg').style.display = 'none';
|
|
},
|
|
error: function (xhr, textStatus, error) {
|
|
dashBoard.expense.version = parseInt(dashBoard.expense.version) - 1;
|
|
$("#ExpenseVersion").val(dashBoard.expense.version);
|
|
// alert(error);
|
|
document.getElementById('loadImg').style.display = 'none';
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
|
|
function showMessage(message) {
|
|
$("#error_dialog").html(message);
|
|
$("#error_dialog").dialog();
|
|
}
|
|
|
|
function sendEmail(formData, formName) {
|
|
|
|
//get form action
|
|
var formUrl = $(formName).attr('action');
|
|
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: formUrl,
|
|
data: formData,
|
|
success: function (data, textStatus, xhr) {
|
|
|
|
if (data.trim() == "+000") {
|
|
|
|
|
|
} else {
|
|
|
|
}
|
|
},
|
|
error: function (xhr, textStatus, error) {
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
}
|
|
|