var dashBoard; var userPermission; var plot1; $(document).ready(function () { var dialog, form, name = $("#name"), allFields = $([]).add(name), tips = $(".validateTips"); function updateTips(t) { tips.text(t).addClass("ui-state-highlight"); } function checkLength(o, min, max) { if (o.val().length < min) { o.focus(); updateTips(lblEnterName); return false; } else if (o.val().length > max) { o.focus(); updateTips(lblNameMustHaveLessThan + max + lblCharacters); return false; } else { return true; } } function checkParticipantAvailability(o, value) { var result = true; var participantName = value.trim(); for (var index in dashBoard.participants) { if (dashBoard.participants[index].name.toLowerCase() == participantName.toLowerCase()) { o.focus(); updateTips(lblParticipantExist); result = false; } } if (participantName != "" && participantName.indexOf(',') === -1 && participantName.indexOf('|') === -1) { } else { updateTips(lblParticipantShouldNotContain); result = false; } return result; } function addNewParticipant() { var valid = true; allFields.removeClass("ui-state-error"); valid = checkLength(name, 1, 12); if (valid) { valid = checkParticipantAvailability(name, name.val()); } if (valid) { dashBoard.addParticipant(name.val(), "1"); dialog.dialog("close"); } return valid; } dialog = $("#dialog-form").dialog({ autoOpen: false, height: 170, width: 70, modal: true, buttons: { "Add": addNewParticipant, Cancel: function () { dialog.dialog("close"); } }, close: function () { form[0].reset(); allFields.removeClass("ui-state-error"); } }); form = dialog.find("form").on("submit", function (event) { event.preventDefault(); addNewParticipant(); }); $("#create-participant").click(function () { dialog.dialog("open"); }); if ($("#expenseData").val() == "") { $("#expense_table_title_id").html(""); $("#div_participant").html("




" + LBL_EXPENSE_NOT_FOUND + "

"); $("#create-participant").hide(); 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.loadParticipants = function loadParticipants() { } 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.defaultMeal = val.default_meal; expenseObj.version = val.version; dashBoard.expense = expenseObj; $("#expenseTitleDiv").html(expenseObj.title); $("#expenseDescDiv").html(expenseObj.description); $("#ExpenseVersion").val(expenseObj.version); } else if (key === "Participant") { $.each(val, function (i, object) { var participantObj = new Participant(); participantObj.id = object.participant_id; participantObj.name = object.name; participantObj.isCreator = object.is_creator; participantObj.create_date = object.create_date; participantObj.balance = 0; participantObj.numberOfMeal = 0.0; participantObj.mealCost = 0; participantObj.totalPaid = 0; participantObj.totalSpent = 0; dashBoard.participants[participantObj.id] = participantObj; }); } else if (key === "GroupExpense") { $.each(val, function (i, object) { var groupExpense = new GroupExpense(); groupExpense.id = object.id; groupExpense.expenseType = object.expense_type; groupExpense.paidBy = object.paid_by_participant_id; groupExpense.expenseName = object.what; groupExpense.create_date = object.create_date; groupExpense.amount = object.amount; groupExpense.participantAmountStr = object.participant_amount; groupExpense.expenseDate = object.expense_date_new; groupExpense.number_of_notes = object.number_of_notes; groupExpense.number_of_modificaiton = object.number_of_modificaiton; groupExpense.isDetails = object.isDetails; groupExpense.type = object.type; groupExpense.extras = object.extras; groupExpense.advance = object.advance; groupExpense.images = object.images; groupExpense.expense_type = object.expense_type; dashBoard.groupExpenses[groupExpense.id] = groupExpense; dashBoard.globalExpenseIndex++; }); } else if (key === "Meal") { $.each(val, function (i, object) { var meal = new Meal(); meal.id = object.id; meal.expenseId = object.expense_id; meal.date = object.date_new; meal.participantMealStr = object.meal_amount; dashBoard.meals[meal.id] = meal; dashBoard.globalMealIndex++; }); } 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.setDefaultMeal(); dashBoard.setCurrentDate(); } } function DashBoard() { this.restrict_mode; this.expense; this.participants = []; this.groupExpenses = []; this.filteredGroupExpenses = []; this.permissions = []; this.meals = []; this.filteredMeals = []; this.gridData = []; this.participantAmtHtmlFormat = ""; this.mealAmtHtmlFormat = ""; this.loginParticipantId = ""; this.loginParticipantName = ""; this.paidByHtml = ""; this.currentInputAmount = "0"; this.currentEditGroupExpense; this.currentEditMeal; this.currentDate; this.isAddMode = true; this.globalExpenseIndex = 0; this.globalMealIndex = 0; this.defaultBreakfast = 0; this.defaultLunch = 0; this.defaultDinner = 0; this.maxMealDate = 0; this.isMealGridLoadedAlready = 0; this.totalMeal; this.yourMeal; this.totalCost; this.yourCost; this.setDefaultMeal = function setDefaultMeal() { var defaultMealStrArray = dashBoard.expense.defaultMeal.split("|"); this.defaultBreakfast = dashBoard.showMealFormatedAmount(defaultMealStrArray[0]); this.defaultLunch = dashBoard.showMealFormatedAmount(defaultMealStrArray[1]); this.defaultDinner = dashBoard.showMealFormatedAmount(defaultMealStrArray[2]); } this.displayCovePage = function displayCovePage() { var justCreated = $("#justCreated").val(); var createdBy = ""; if (justCreated == "yes") { var createdById = ""; for (var index in dashBoard.participants) { if (dashBoard.participants[index].isCreator == "1") { createdBy = dashBoard.participants[index].name; createdById = dashBoard.participants[index].id; break; } } dashBoard.loginParticipant(createdById); $("#expenseCreatedByDiv").html(lblCreatedBy + " " + createdBy + " " + lblOn + " " + dashBoard.getFormatedDbDate(dashBoard.expense.create_date)); $("#tabs").tabs({ active: 3 }); dashBoard.resetParticipantBalance(); dashBoard.displayParticipantList(); dashBoard.setParticipantGridExtension(); } else { $("#dvLoading").hide(); dashBoard.addParticipantToList(); } } this.addParticipantToList = function addParticipantToList() { var participantListHtml = ''; var noOfParticipant = 0; for (var index in dashBoard.participants) { noOfParticipant++; } for (var index in dashBoard.participants) { if (dashBoard.participants[index].isCreator == "1") { createdBy = dashBoard.participants[index].name; } if (noOfParticipant < 6) { participantListHtml = participantListHtml + ''; } else { participantListHtml = participantListHtml + ''; } } participantListHtml = participantListHtml + "
 ' + dashBoard.participants[index].name + '
 ' + dashBoard.participants[index].name + '
"; $("#expenseCreatedByDiv").html(lblCreatedBy + createdBy + lblOn + dashBoard.getFormatedDbDate(dashBoard.expense.create_date)); $("#div_participant").html(participantListHtml); } this.loginParticipant = function loginParticipant(participantId) { dashBoard.loginParticipantId = participantId; dashBoard.loginParticipantName = session_profile_id ? session_profile_id : dashBoard.participants[participantId].name; $("#expenseLoginAsDiv").html(lblLoggedInAs + " " + dashBoard.loginParticipantName + " [Quit]"); dashBoard.showExpenseList(); $("#printOptionId").show(); $("#mealsOptionId").show(); $("#participantBox").hide(); $("#tabs").show(); dashBoard.setPaidBy(dashBoard.loginParticipantId); //setCookie(participantId); } this.logout = function logout() { $("#expenseLoginAsDiv").html(""); $("#participantBox").show(); $("#tabs").hide(); } this.getNumberOfParticipants = function getNumberOfParticipants() { var totalParticipant = 0; for (var index in dashBoard.participants) { totalParticipant++; } return totalParticipant; } this.generateLogList = function generateLogList(logData, source) { var logList = []; if (logData != "") { logList = $.parseJSON(logData); } var data = []; $.each(logList, function (key, val) { $.each(val, function (model, object) { if (model == "Log") { var action = 'Deleted'; var new_desc = 'N/A'; var changed_by = object.changed_by; if(object.new_desc.toLowerCase() !== 'deleted'){ var action = 'Edited'; var new_desc = object.new_desc; } if(changed_by == null || changed_by === ''){ changed_by = 'Unknown'; } data.push([object.id, object.create_date, changed_by, object.previous_desc, new_desc,action]); } }); }); var maxRowNum = data.length; if (maxRowNum < 101) { maxRowNum = 100; } if (source == 2 && data.length == 0) { data.push([lblRecordNotFound]); $("#log_grid").jqGrid({ datatype: "local", height: 190, colNames: [' '], colModel: [ { name: ' ', index: ' ', sortable: false, width: 650, align: 'center', } ], gridview: true, viewrecords: true, caption: lblExpenseLog } ); var names = [' ']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } for (var i = 0; i < mydata.length; i++) { $("#log_grid").jqGrid('addRowData', data[i][0] + 1, mydata[i]); } } else { $("#log_grid").jqGrid({ datatype: "local", height: 230, colNames: ['SI', lblChangedOn, lblChangedBy, lblPreviousExpense, lblNewExpense, lblOperation], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden: true }, { name: 'Changed On', index: 'Changed On', width: 110, align: 'center', editable: true }, { name: 'Changed By', index: 'Changed By', width: 80, align: 'center', editable: true }, { name: 'Previous Expense', index: 'Previous Expense', width: 242, align: 'center', cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } }, { name: 'New Expense', index: 'New Expense', width: 242, align: 'center', cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal !important;"' } }, { name: 'Operation', index: 'Operation', width: 80, align: 'center', editable: true } ], rowNum: maxRowNum, rowList: [10, 20, 50, maxRowNum], pager: '#log_pager', gridview: true, rownumbers: true, autoencode: true, ignoreCase: true, viewrecords: true, sortorder: 'desc', caption: lblExpenseLog } ); $("#log_grid").jqGrid('navGrid', '#log_pager', { add: false, edit: false, del: false, search: true, searchtitle: lblFindLog } ); var names = ['SI', lblChangedOn, lblChangedBy, lblPreviousExpense, lblNewExpense, lblOperation]; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } for (var i = 0; i < mydata.length; i++) { $("#log_grid").jqGrid('addRowData', data[i][0] + 1, mydata[i]); } } } this.showExpenseList = function showExpenseList() { dashBoard.gridData = []; dashBoard.isAddMode = true; for (var index in dashBoard.groupExpenses) { dashBoard.gridData.push(dashBoard.getDataByExpense(dashBoard.groupExpenses[index])); } dashBoard.setParticipantAmtHtmlFormat(); dashBoard.reloadGrid(); } this.setUIMealDate = function setUIMealDate() { var maxDate = 0; for (var index in dashBoard.meals) { if (maxDate < dashBoard.meals[index].date) { maxDate = dashBoard.meals[index].date; } } if (maxDate == 0) { dashBoard.maxMealDate = dashBoard.currentDate; } else { dashBoard.maxMealDate = this.getNextDayFormatedDate(maxDate); } } this.getDataByExpense = function getDataByExpense(groupExpenseObj) { var key = groupExpenseObj.id; dashBoard.filteredGroupExpenses[key] = dashBoard.getFilteredExpenseObj(groupExpenseObj); return [dashBoard.filteredGroupExpenses[key].id, dashBoard.filteredGroupExpenses[key].expenseType, dashBoard.filteredGroupExpenses[key].paidBy, dashBoard.showFormatedAmount(dashBoard.filteredGroupExpenses[key].amount), dashBoard.filteredGroupExpenses[key].expenseName, dashBoard.filteredGroupExpenses[key].expenseDate, dashBoard.filteredGroupExpenses[key].involves, dashBoard.filteredGroupExpenses[key].forYou]; } this.getDataByMeal = function getDataByMeal(mealObj) { var key = mealObj.id; dashBoard.filteredMeals[key] = dashBoard.getFilteredMealObj(mealObj); return [dashBoard.filteredMeals[key].id, dashBoard.filteredMeals[key].date, dashBoard.filteredMeals[key].day, dashBoard.filteredMeals[key].breakfast, dashBoard.filteredMeals[key].lunch, dashBoard.filteredMeals[key].dinner, dashBoard.filteredMeals[key].involves]; } this.getFilteredExpenseObj = function getFilteredExpenseObj(groupExpenseObj) { var filteredGroupExpenseObj = new FilteredGroupExpense(); filteredGroupExpenseObj.id = groupExpenseObj.id; filteredGroupExpenseObj.expenseType = groupExpenseObj.expenseType; filteredGroupExpenseObj.paidBy = dashBoard.participants[groupExpenseObj.paidBy].name; filteredGroupExpenseObj.amount = dashBoard.getFormatedAmount(groupExpenseObj.amount); filteredGroupExpenseObj.expenseName = groupExpenseObj.expenseName; filteredGroupExpenseObj.expenseDate = groupExpenseObj.expenseDate;//dashBoard.getFormatedDate(groupExpenseObj.expenseDate); if (filteredGroupExpenseObj.expenseType == "2") { filteredGroupExpenseObj.involves = "[Mess Members]"; filteredGroupExpenseObj.forYou = "-"; } else { filteredGroupExpenseObj.involves = dashBoard.getInvolveString(groupExpenseObj.participantAmountStr); filteredGroupExpenseObj.forYou = dashBoard.showFormatedAmount(dashBoard.getForYouString(groupExpenseObj.participantAmountStr)); } filteredGroupExpenseObj.noOfNotes = groupExpenseObj.noOfNotes; filteredGroupExpenseObj.noOfModification = groupExpenseObj.noOfModification; return filteredGroupExpenseObj; } this.getFilteredExpenseObjPrint = function getFilteredExpenseObjPrint(groupExpenseObj) { var filteredGroupExpenseObj = new FilteredGroupExpense(); filteredGroupExpenseObj.id = groupExpenseObj.id; filteredGroupExpenseObj.expenseType = groupExpenseObj.expenseType; filteredGroupExpenseObj.paidBy = dashBoard.participants[groupExpenseObj.paidBy].name; filteredGroupExpenseObj.amount = dashBoard.showFormatedAmount(groupExpenseObj.amount); filteredGroupExpenseObj.expenseName = groupExpenseObj.expenseName; filteredGroupExpenseObj.expenseDate = groupExpenseObj.expenseDate;//dashBoard.getFormatedDate(groupExpenseObj.expenseDate); if (filteredGroupExpenseObj.expenseType == "2") { filteredGroupExpenseObj.involves = "[Mess Members]"; filteredGroupExpenseObj.forYou = "-"; } else { filteredGroupExpenseObj.involves = dashBoard.getInvolveString(groupExpenseObj.participantAmountStr); filteredGroupExpenseObj.forYou = dashBoard.showFormatedAmount(dashBoard.getForYouString(groupExpenseObj.participantAmountStr)); } filteredGroupExpenseObj.noOfNotes = groupExpenseObj.noOfNotes; filteredGroupExpenseObj.noOfModification = groupExpenseObj.noOfModification; return filteredGroupExpenseObj; } this.getFilteredMealObj = function getFilteredMealObj(mealObj) { var breakfast = parseFloat(0); var lunch = parseFloat(0); var dinner = parseFloat(0); var filteredMealObj = new FilteredMeal(); filteredMealObj.id = mealObj.id; filteredMealObj.date = mealObj.date;//dashBoard.getFormatedDate(mealObj.date); filteredMealObj.day = dashBoard.getDayByDate(mealObj.date); if (mealObj.participantMealStr != "") { var participantStrArr = mealObj.participantMealStr.split(","); for (var i = 0; i < participantStrArr.length; i++) { var participantArr = participantStrArr[i].split("|"); if (dashBoard.showFormatedAmount(parseFloat(participantArr[1])) != dashBoard.showFormatedAmount(0)) { breakfast = breakfast + parseFloat(participantArr[1]); } if (dashBoard.showFormatedAmount(parseFloat(participantArr[2])) != dashBoard.showFormatedAmount(0)) { lunch = lunch + parseFloat(participantArr[2]); } if (dashBoard.showFormatedAmount(parseFloat(participantArr[3])) != dashBoard.showFormatedAmount(0)) { dinner = dinner + parseFloat(participantArr[3]); } } } filteredMealObj.breakfast = dashBoard.showMealFormatedAmount(breakfast); filteredMealObj.lunch = dashBoard.showMealFormatedAmount(lunch); filteredMealObj.dinner = dashBoard.showMealFormatedAmount(dinner); filteredMealObj.involves = dashBoard.getInvolveString(mealObj.participantMealStr); return filteredMealObj; } this.getFilteredMyMealObj = function getFilteredMyMealObj(mealObj) { var breakfast = parseFloat(0); var lunch = parseFloat(0); var dinner = parseFloat(0); var filteredMealObj = new FilteredMeal(); filteredMealObj.id = mealObj.id; filteredMealObj.date = mealObj.date;//dashBoard.getFormatedDate(mealObj.date); filteredMealObj.day = dashBoard.getDayByDate(mealObj.date); if (mealObj.participantMealStr != "") { var participantStrArr = mealObj.participantMealStr.split(","); for (var i = 0; i < participantStrArr.length; i++) { var participantArr = participantStrArr[i].split("|"); if (participantArr[0] == dashBoard.loginParticipantId) { if (dashBoard.showFormatedAmount(parseFloat(participantArr[1])) != dashBoard.showFormatedAmount(0)) { breakfast = breakfast + parseFloat(participantArr[1]); } if (dashBoard.showFormatedAmount(parseFloat(participantArr[2])) != dashBoard.showFormatedAmount(0)) { lunch = lunch + parseFloat(participantArr[2]); } if (dashBoard.showFormatedAmount(parseFloat(participantArr[3])) != dashBoard.showFormatedAmount(0)) { dinner = dinner + parseFloat(participantArr[3]); } } } } filteredMealObj.breakfast = dashBoard.showMealFormatedAmount(breakfast); filteredMealObj.lunch = dashBoard.showMealFormatedAmount(lunch); filteredMealObj.dinner = dashBoard.showMealFormatedAmount(dinner); filteredMealObj.involves = dashBoard.getInvolveString(mealObj.participantMealStr); return filteredMealObj; } this.getDayByDate = function getDayByDate(dateUnix) { var dateStrArray = dateUnix.split("-"); // alert(dateStrArray[2]+"-"+getNoMonthFromStrMon(dateStrArray[1])+"-"+dateStrArray[0]); //alert(dateStrArray[0]); //alert(dateStrArray[2]+"-"+getNoMonthFromStrMon(dateStrArray[1]+"-"+dateStrArray[0])); var dateObj = new Date(dateStrArray[2] + "-" + getNoMonthFromStrMon(dateStrArray[1]) + "-" + dateStrArray[0]); // 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', lblExpenseType, lblWhoPaid, lblHowMuch + '(' + dashBoard.expense.currency + ')?', lblWhatReason, lblWhen, lblInvoles, lblForYou + '(' + dashBoard.expense.currency + ')?'], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden: true, key: true }, { name: 'ExpenseType', index: 'ExpenseType', width: 0, sorttype: "int", hidden: true }, { name: 'PaidBy', index: 'PaidBy', width: 90, align: 'center', formoptions: { rowpos: 2 }, editable: true, edittype: 'select', editoptions: { value: '1:X', defaultValue: 'X' } }, { name: 'Amount', index: 'Amount', align: 'center', sorttype: "int", 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); } if (el.value == "") { dashBoard.currentInputAmount = 0; } else { dashBoard.currentInputAmount = el.value; } dashBoard.changeExpenseAmount(); }); } } }, { name: 'Reason', index: 'Reason', align: 'center', width: 190, formoptions: { rowpos: 1 }, editable: true, editrules: { required: true }, editoptions: { maxlength: 25 }, // sorttype: "float" }, { name: 'Date', index: 'Date', width: 80, align: 'center', sorttype: 'date', datefmt: 'd-M-Y', formoptions: { rowpos: 3 }, editable: true, editrules: { required: true }, editoptions: { dataInit: initDateEdit } }, { name: 'Involve', index: 'Involve', align: 'center', width: 150, sorttype: "float" }, { name: 'For you?', index: 'For you?', align: 'center', width: 100, sorttype: "float" } ], rowNum: maxRowNum, rowList: [10, 20, 50, maxRowNum], pager: '#expense_pager', gridview: true, rownumbers: true, autoencode: true, ignoreCase: true, viewrecords: true, sortorder: 'desc', caption: lblExpenseList } ); dashBoard.addRowsToGrid(dashBoard.gridData); $("#grid").jqGrid('setGridParam', { onSelectRow: function (rowid, iRow, iCol, e) { if (!iCol) { dashBoard.removeParticipantAmtRows(); 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: lblEditExpense, del: isPermitted, deltitle: lblDeleteExpense, search: true, searchtitle: lblFindExpenses }, { // Edit recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = false; } }, { // Add 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: lblEditExpense, bSubmit: lblSave, bCancel: lblCancel, width: 300, recreateForm: true, beforeShowForm: function () { var dlgDiv = $("#editmodgrid"); dlgDiv[0].style.top = "30px"; if (dashBoard.isAddMode == true) { $('#tr_Amount>td.DataTD>input').insertAfter(' '); $(dashBoard.participantAmtHtmlFormat).insertAfter("#tr_Amount"); $('' + lblSaveContinue + '') .click(function () { dashBoard.validateExpenseAddForm(0); }) .addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left") .prependTo("#Act_Buttons>td.EditButton"); $('#PaidBy').find('option').remove().end().append(dashBoard.paidByHtml); dashBoard.refreshParticipantsExpenseProperties(1); dashBoard.setAllCheckImpact(); dashBoard.hideShowParticipantDetails(false); dashBoard.showMessHtml(); $("#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.removeParticipantAmtRows = function removeParticipantAmtRows() { $('#tr_IsMessExpense').remove(); $('#tr_IsDetails').remove(); $('#tr_selectAll').remove(); for (var index in dashBoard.participants) { $('#tr_Participant' + dashBoard.participants[index].id).remove(); $('#tr_ParticipantDetails' + dashBoard.participants[index].id).remove(); } } this.loadForEdit = function loadForEdit() { $('#tr_Amount>td.DataTD>input').insertAfter(' '); $(dashBoard.participantAmtHtmlFormat).insertAfter("#tr_Amount"); var rowId = $("#grid").jqGrid('getGridParam', 'selrow'); var rowData = jQuery("#grid").getRowData(rowId); dashBoard.showEditUI(dashBoard.groupExpenses[rowData['SI']]); $('#PaidBy').find('option').remove().end().append(dashBoard.paidByHtml); } this.loadForEditMeal = function loadForEditMeal() { $('#tr_Date>td.DataTD>input').insertAfter(' '); $(dashBoard.mealAmtHtmlFormat).insertAfter("#tr_Date"); var rowId = $("#meal_grid").jqGrid('getGridParam', 'selrow'); var rowData = jQuery("#meal_grid").getRowData(rowId); dashBoard.showEditMealUI(dashBoard.meals[rowData['SI']]); } this.changeSingleInvolve = function changeSingleInvolve(participantId) { if ($("#chkParticipant" + participantId).is(':checked')) { dashBoard.participants[participantId].currentInputExpensePart = 1; } else { $("#selectAll").prop('checked', false); dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].isFreeze = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.setShadowOnPartTextBox(); dashBoard.scanCheckAllCheckbox(); dashBoard.scanParticipantCheckBoxs(); } this.changeSingleInvolveMeal = function changeSingleInvolveMeal(participantId) { var numberOfUnselect = 0; var numberOfSelect = 0; var total = 0; for (var index in dashBoard.participants) { total++; if ($("#chkParticipantMeal" + dashBoard.participants[index].id).is(':checked')) { numberOfSelect++; } else { numberOfUnselect++; } } if (numberOfSelect == total) { $("#selectAllMeal").prop('checked', true); } else if (numberOfUnselect == total) { $("#selectAllMeal").prop('checked', false); } if ($("#chkParticipantMeal" + dashBoard.participants[participantId].id).is(':checked')) { dashBoard.participants[participantId].breakfast = dashBoard.defaultBreakfast; dashBoard.participants[participantId].lunch = dashBoard.defaultLunch; dashBoard.participants[participantId].dinner = dashBoard.defaultDinner; } else { dashBoard.participants[participantId].breakfast = 0; dashBoard.participants[participantId].lunch = 0; dashBoard.participants[participantId].dinner = 0; } $("#breakfast_" + dashBoard.participants[participantId].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[participantId].breakfast)); $("#lunch_" + dashBoard.participants[participantId].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[participantId].lunch)); $("#dinner_" + dashBoard.participants[participantId].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[participantId].dinner)); } this.changeDetailsPart = function changeDetailsPart(participantId) { var originalValue = $("#participantTextPart" + participantId).val(); var filteredValue = $("#participantTextPart" + participantId).val().replace(/[^0-9]/g, ''); if (filteredValue != "" && parseInt(filteredValue) != dashBoard.participants[participantId].currentInputExpensePart) { dashBoard.participants[participantId].currentInputExpensePart = parseInt(filteredValue); dashBoard.participants[participantId].isFreeze = 0; dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if (originalValue != "") { if (filteredValue == "0") { dashBoard.participants[participantId].isFreeze = 0; dashBoard.participants[participantId].currentInputExpensePart = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if (originalValue == "") { if (dashBoard.participants[participantId].isFreeze == 0) { dashBoard.participants[participantId].currentInputExpensePart = 0; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } } this.changeDetailsFreeze = function changeDetailsFreeze(participantId) { var originalValue = $("#participantTextFreeze" + participantId).val(); var filteredValue = $("#participantTextFreeze" + participantId).val().replace(/[^0-9\.]/g, ''); if (filteredValue.replace(/[^.]/g, "").length == 2) { filteredValue = filteredValue.substring(0, filteredValue.length - 1); } if (filteredValue != "" && dashBoard.showFormatedAmount(parseFloat(filteredValue)) != dashBoard.showFormatedAmount(parseFloat(dashBoard.participants[participantId].currentInputExpenseFreezeAmt))) { dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(parseFloat(filteredValue)); if (parseFloat(filteredValue) == parseFloat(0)) { dashBoard.participants[participantId].isFreeze = 0; } else { dashBoard.participants[participantId].isFreeze = 1; } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if (originalValue != "") { dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } else if (originalValue == "") { dashBoard.participants[participantId].currentInputExpensePart = 0; dashBoard.participants[participantId].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); dashBoard.participants[participantId].isFreeze = 0; dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } } this.changeExpenseAmount = function changeExpenseAmount() { dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.showPartAndFreezeAmtInDetails(); dashBoard.scanParticipantCheckBoxs(); dashBoard.setShadowOnPartTextBox(); } this.setShadowOnPartTextBox = function setShadowOnPartTextBox() { for (var index in dashBoard.participants) { if (dashBoard.participants[index].isFreeze == 1) { $("#participantTextPart" + dashBoard.participants[index].id).prop("value", ''); $("#participantTextPart" + dashBoard.participants[index].id).css('background-color', '#DEDEDE'); } else { $("#participantTextPart" + dashBoard.participants[index].id).css('background-color', '#FFFFF'); } } } this.scanParticipantCheckBoxs = function scanParticipantCheckBoxs() { var isAllCheck = true; var numberOfInvolves = 0; var noOfParticipant = 0; for (var index in dashBoard.participants) { noOfParticipant++; if (parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) > 0) { numberOfInvolves++; $("#chkParticipant" + dashBoard.participants[index].id).prop('checked', true); } else { isAllCheck = false; $("#chkParticipant" + dashBoard.participants[index].id).prop('checked', false); } } if (numberOfInvolves == noOfParticipant) { isAllCheck = true; } if (isAllCheck == false) { $("#selectAll").prop('checked', false); } else { $("#selectAll").prop('checked', true); } } this.scanCheckAllCheckbox = function scanCheckAllCheckbox() { var numberOfInvolves = 0; var noOfParticipant = 0; for (var index in dashBoard.participants) { noOfParticipant++; if (parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) > 0) { numberOfInvolves++; } } if (numberOfInvolves == noOfParticipant) { $("#selectAll").prop('checked', true); } else { $("#selectAll").prop('checked', false); } } this.setAllCheckImpact = function setAllCheckImpact() { var commonValue = dashBoard.getFormatedAmount(0); var isCheckAll = false; if ($("#selectAll").is(':checked')) { isCheckAll = true; } for (var index in dashBoard.participants) { if (isCheckAll == true) { $("#chkParticipant" + dashBoard.participants[index].id).prop('checked', true); if (dashBoard.participants[index].currentInputExpensePart >= 0) { dashBoard.participants[index].currentInputExpensePart = 1; } } else { $("#chkParticipant" + dashBoard.participants[index].id).prop('checked', false); dashBoard.participants[index].currentInputExpensePart = 0; dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } dashBoard.calculateFinalFreezeExpenseAmount(); dashBoard.showFreezeAmount(); dashBoard.setShadowOnPartTextBox(); } this.setAllCheckImpactMeal = function setAllCheckImpactMeal() { var commonValue = dashBoard.getFormatedAmount(0); var isCheckAll = false; if ($("#selectAllMeal").is(':checked')) { isCheckAll = true; } for (var index in dashBoard.participants) { if (isCheckAll == true) { $("#chkParticipantMeal" + dashBoard.participants[index].id).prop('checked', true); dashBoard.participants[index].breakfast = dashBoard.defaultBreakfast; dashBoard.participants[index].lunch = dashBoard.defaultLunch; dashBoard.participants[index].dinner = dashBoard.defaultDinner; } else { $("#chkParticipantMeal" + dashBoard.participants[index].id).prop('checked', false); dashBoard.participants[index].breakfast = 0; dashBoard.participants[index].lunch = 0; dashBoard.participants[index].dinner = 0; } } dashBoard.showMealAmount(); } this.refreshParticipantsExpenseProperties = function refreshParticipantsExpenseProperties(defaultPart) { dashBoard.currentInputAmount = 0; for (var index in dashBoard.participants) { dashBoard.participants[index].currentInputExpensePart = defaultPart; dashBoard.participants[index].isFreeze = 0; dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } this.refreshParticipantsMealProperties = function refreshParticipantsMealProperties() { for (var index in dashBoard.participants) { dashBoard.participants[index].breakfast = dashBoard.defaultBreakfast; dashBoard.participants[index].lunch = dashBoard.defaultLunch; dashBoard.participants[index].dinner = dashBoard.defaultDinner; } } this.showFreezeAmount = function showFreezeAmount() { for (var index in dashBoard.participants) { $("#pamount_" + dashBoard.participants[index].id).html(dashBoard.showFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt) + " " + dashBoard.expense.currency); } } this.showMealAmount = function showMealAmount() { for (var index in dashBoard.participants) { $("#breakfast_" + dashBoard.participants[index].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[index].breakfast)); $("#lunch_" + dashBoard.participants[index].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[index].lunch)); $("#dinner_" + dashBoard.participants[index].id).val(dashBoard.showMealFormatedAmount(dashBoard.participants[index].dinner)); } } this.calculateFinalFreezeExpenseAmount = function calculateFinalFreezeExpenseAmount() { //get total parts of current participants var totalParts = 0; var totalFreezeAmt = dashBoard.getFormatedAmount(0); for (var index in dashBoard.participants) { if (parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) == parseFloat(0)) { dashBoard.participants[index].isFreeze = 0; } if (dashBoard.participants[index].isFreeze == 0) { totalParts += parseInt(dashBoard.participants[index].currentInputExpensePart); } else { totalFreezeAmt = dashBoard.getFormatedAmount(parseFloat(totalFreezeAmt) + parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } } if ((dashBoard.getFormatedAmount(dashBoard.currentInputAmount) > dashBoard.getFormatedAmount(0)) && (parseFloat(totalFreezeAmt) > parseFloat(dashBoard.currentInputAmount))) { } else if (dashBoard.getFormatedAmount(dashBoard.currentInputAmount) > 0 && parseFloat(totalFreezeAmt) == parseFloat(dashBoard.currentInputAmount)) { dashBoard.resetUnfreezeAmt(); totalParts = 0; } //set final freeze amount for (var index in dashBoard.participants) { if (dashBoard.participants[index].isFreeze == 0 && totalParts > 0) { dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(((parseFloat(dashBoard.currentInputAmount) - parseFloat(totalFreezeAmt)) / totalParts) * dashBoard.participants[index].currentInputExpensePart); if (parseFloat(dashBoard.participants[index].currentInputExpenseFreezeAmt) < 0) { dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } else if (dashBoard.participants[index].isFreeze == 0) { dashBoard.participants[index].currentInputExpenseFreezeAmt = dashBoard.getFormatedAmount(0); } } } this.resetAllPartAndFreezeAmt = function resetAllPartAndFreezeAmt() { for (var index in dashBoard.participants) { if (dashBoard.participants[index].isFreeze == 0) { dashBoard.participants[index].currentInputExpensePart = 1; dashBoard.participants[index].isFreeze = 0; } } } this.resetUnfreezeAmt = function resetUnfreezeAmt() { } this.updateBalance = function updateBalance() { } this.filterMealInput = function filterMealInput(objid) { var value = $(objid).val(); $(objid).val(value.replace(/[^0-9\.]/g, '')); if (value.replace(/[^.]/g, "").length == 2) { $(objid).val(value.substring(0, value.length - 1)); } if ($(objid).val() == "") { $(objid).val(0); } } this.setParticipantAmtHtmlFormat = function setParticipantAmtHtmlFormat() { dashBoard.paidByHtml = ""; var result = '  Room Expense   Advance'; result += '  Split'; result += ''; result += ''; for (var index in dashBoard.participants) { result += ''; } result = result + '
' + lblAll + '  
' + dashBoard.participants[index].name + '
'; dashBoard.setPaidBy(dashBoard.loginParticipantId); result += ''; for (var index in dashBoard.participants) { result += ''; } result = result + '
' + dashBoard.participants[index].name + ' ' + dashBoard.expense.currency + '
'; dashBoard.participantAmtHtmlFormat = result; } this.setMealAmtHtmlFormat = function setMealAmtHtmlFormat() { var result = ''; result += ''; result += ''; for (var index in dashBoard.participants) { result += ''; } result = result + '
' + lblAll + ' BreakfastLunchDinner
' + dashBoard.participants[index].name + '
'; dashBoard.mealAmtHtmlFormat = result; } this.setPaidBy = function setPaidBy(selectedParticipantId) { dashBoard.paidByHtml = ""; for (var index in dashBoard.participants) { if (dashBoard.participants[index].id == selectedParticipantId) { dashBoard.paidByHtml += ''; } else { dashBoard.paidByHtml += ''; } } } this.setParticipantAmountInfoByAmtStr = function setParticipantAmountInfoByAmtStr(amtStr) { var amtStrArray = amtStr.split(","); var totalInvolves = 0; var noOfParticipant = 0; for (var index in dashBoard.participants) { noOfParticipant++; } for (var i = 0; i < amtStrArray.length; i++) { var values = amtStrArray[i].split("|"); if (values[1] == "") { dashBoard.participants[values[0]].isFreeze = 1; dashBoard.participants[values[0]].currentInputExpensePart = 0; } else { dashBoard.participants[values[0]].isFreeze = 0; dashBoard.participants[values[0]].currentInputExpensePart = values[1]; } dashBoard.participants[values[0]].currentInputExpenseFreezeAmt = values[2]; if (parseFloat(dashBoard.participants[values[0]].currentInputExpenseFreezeAmt) > parseFloat(0)) { totalInvolves++; $("#chkParticipant" + values[0]).prop('checked', true); } } //check or uncheck checkBox if (totalInvolves != noOfParticipant) { $("#selectAll").prop('checked', false); } } this.setParticipantMealInfoByMealStr = function setParticipantMealInfoByMealStr(mealStr) { var mealStrArray = mealStr.split(","); var totalInvolves = 0; var totalParNum = 0; for (var index in dashBoard.participants) { dashBoard.participants[index].breakfast = dashBoard.defaultBreakfast; dashBoard.participants[index].lunch = dashBoard.defaultLunch; dashBoard.participants[index].dinner = dashBoard.defaultDinner; totalParNum++; } for (var i = 0; i < mealStrArray.length; i++) { var values = mealStrArray[i].split("|"); dashBoard.participants[values[0]].breakfast = values[1]; dashBoard.participants[values[0]].lunch = values[2]; dashBoard.participants[values[0]].dinner = values[3]; if (parseFloat(values[1]) > parseFloat(0) || parseFloat(values[2]) > parseFloat(0) || parseFloat(values[3]) > parseFloat(0)) { totalInvolves++; $("#chkParticipantMeal" + values[0]).prop('checked', true); } } if (totalInvolves != totalParNum) { $("#selectAllMeal").prop('checked', false); } dashBoard.showMealAmount(); } this.showEditUI = function showEditUI(expenseObj) { dashBoard.currentEditGroupExpense = expenseObj; //set paid by dashBoard.setPaidBy(expenseObj.paidBy); //assign parts and freeze amounts to all participants if (expenseObj.isDetails == 1) { dashBoard.refreshParticipantsExpenseProperties(0); } else { dashBoard.refreshParticipantsExpenseProperties(0); } if (expenseObj.expenseType == "1") { dashBoard.setParticipantAmountInfoByAmtStr(expenseObj.participantAmountStr); } dashBoard.currentInputAmount = expenseObj.amount; if (expenseObj.isDetails == 1) { dashBoard.hideShowParticipantDetails(true); $("#Details").prop('checked', true); } else { dashBoard.hideShowParticipantDetails(false) } if (expenseObj.expenseType == "2") { dashBoard.showMessHtml(); } else { $("#isMessExpense").prop('checked', false); dashBoard.showGroupExpenseHtml(); dashBoard.setDetailsCheckImpact(); } console.log(expenseObj); var extraGroupExpense = checkExtraGroupExpense(expenseObj.extras, expenseObj.expenseName); if (extraGroupExpense === 1) { $("#Reason").attr("data-extras", "1"); } else if (extraGroupExpense === 2) { $("#advance").attr("checked", "checked"); $("#Reason").attr("data-extras", "2"); $("#isMessExpense").attr("checked", false); } if (expenseObj.advance == 1) { $("#advance").attr("checked", "checked"); $("#advance").attr("disabled", false); $("#isMessExpense").attr("checked", false); } } this.showEditMealUI = function showEditMealUI(mealObj) { dashBoard.currentEditMeal = mealObj; dashBoard.setParticipantMealInfoByMealStr(mealObj.participantMealStr); var totalParNum = 0; var totalSelectedPart = 0; for (var index in dashBoard.participants) { totalParNum++; } var participantMealStrArr = mealObj.participantMealStr.split(","); for (var index in participantMealStrArr) { if (participantMealStrArr[index] != "") { totalSelectedPart++; } } if (totalSelectedPart == totalParNum) { $("#selectAllMeal").prop('checked', true); } } this.setIsMessCheckImpact = function setIsMessCheckImpact() { if ($("#isMessExpense").is(':checked')) { dashBoard.showMessHtml(); $("#advance").attr('checked', false); } else { $("#Details").prop('checked', false); $("#selectAll").prop('checked', true); dashBoard.setAllCheckImpact(); dashBoard.showGroupExpenseHtml(); } }; this.setIsAdvanceCheckImpact = function setIsAdvanceCheckImpact() { if ($("#advance").is(':checked')) { dashBoard.showMessHtml(); $("#isMessExpense").attr('checked', false); $("#Details").prop('checked', false); $("#selectAll").prop('checked', true); dashBoard.setAllCheckImpact(); dashBoard.showGroupExpenseHtml(); } }; this.showMessHtml = function showMessHtml() { $("#tr_IsDetails").hide(); $("#tr_selectAll").hide(); for (var index in dashBoard.participants) { $("#tr_Participant" + dashBoard.participants[index].id).hide(); $("#tr_ParticipantDetails" + dashBoard.participants[index].id).hide(); } } this.showGroupExpenseHtml = function showGroupExpenseHtml() { $("#tr_IsDetails").show(); $("#tr_selectAll").show(); if ($("#tr_IsDetails").is(':checked')) { for (var index in dashBoard.participants) { $("#tr_Participant" + dashBoard.participants[index].id).hide(); $("#tr_ParticipantDetails" + dashBoard.participants[index].id).show(); } } else { for (var index in dashBoard.participants) { $("#tr_Participant" + dashBoard.participants[index].id).show(); $("#tr_ParticipantDetails" + dashBoard.participants[index].id).hide(); } } } this.setDetailsCheckImpact = function setDetailsCheckImpact() { if ($("#Details").is(':checked')) { dashBoard.hideShowParticipantDetails(true); } else { dashBoard.hideShowParticipantDetails(false); } dashBoard.setShadowOnPartTextBox(); } this.showPartAndFreezeAmtInDetails = function showPartAndFreezeAmtInDetails() { for (var index in dashBoard.participants) { //set part and freezeAmt from participants $("#participantTextPart" + dashBoard.participants[index].id).val(dashBoard.participants[index].currentInputExpensePart); $("#participantTextFreeze" + dashBoard.participants[index].id).val(dashBoard.showFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } } this.hideShowParticipantDetails = function hideShowParticipantDetails(isDetails) { if (isDetails == true) { //hide simple $("#tr_selectAll").hide(); for (var index in dashBoard.participants) { $("#tr_Participant" + dashBoard.participants[index].id).hide(); $("#tr_ParticipantDetails" + dashBoard.participants[index].id).show(); } dashBoard.showPartAndFreezeAmtInDetails(); } else { $("#tr_selectAll").show(); for (var index in dashBoard.participants) { $("#tr_Participant" + dashBoard.participants[index].id).show(); $("#tr_ParticipantDetails" + dashBoard.participants[index].id).hide(); } dashBoard.showFreezeAmount(); } } // Utilities functions this.getCurrency = function getCurrency() { return dashBoard.expense.currency; } this.getFormatedAmount = function getFormatedAmount(amount) { return parseFloat(amount).toFixed(15); } this.getFormatedAmountDB = function getFormatedAmountDB(amount) { return parseFloat(amount).toFixed(4); } this.showFormatedAmount = function showFormatedAmount(amount) { return parseFloat(amount).toFixed(2); } this.showMealFormatedAmount = function showMealFormatedAmount(amount) { return parseFloat(amount).toFixed(1); } 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.getNextDayFormatedDate = function getNextDayFormatedDate(date) { var dateObj = new Date((new Date(date * 1000)).toUTCString()); dateObj.setTime(dateObj.getTime() + 86400000); 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) { 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.getInvolveString = function getInvolveString(participantAmountStr) { var involveStrAll = ""; var involveStrExcept = ""; var involveParticipantList = []; //calculate involveStr var participantInvolveList = participantAmountStr.split(","); for (var i = 0; i < participantInvolveList.length; i++) { var participantAndAmountArray = participantInvolveList[i].split("|"); involveParticipantList[i] = participantAndAmountArray[0]; if (i == 0) { involveStrAll = dashBoard.participants[participantAndAmountArray[0]].name; } else { involveStrAll += "," + dashBoard.participants[participantAndAmountArray[0]].name; } } //calculate involveStrExcept if (dashBoard.getNumberOfParticipants() == involveParticipantList.length) { involveStrExcept = "all"; } else { for (var index in dashBoard.participants) { if (dashBoard.inArrayElement(involveParticipantList, dashBoard.participants[index].id) == false) { if (involveStrExcept == "") { involveStrExcept += "all except " + dashBoard.participants[index].name; } else { involveStrExcept += "," + dashBoard.participants[index].name; } } } } if (involveStrAll.length > involveStrExcept.length) { return involveStrExcept; } else { return involveStrAll; } } 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.getForYouString = function getForYouString(participantAmountStr) { var forYou = ""; var participantInvolveList = participantAmountStr.split(","); for (var i = 0; i < participantInvolveList.length; i++) { var participantAndAmountArray = participantInvolveList[i].split("|"); if (participantAndAmountArray[0] == dashBoard.loginParticipantId) { forYou = dashBoard.getFormatedAmount(participantAndAmountArray[2]); } } if (forYou == "") { forYou = dashBoard.getFormatedAmount(0); } return forYou; } this.validateExpenseAddForm = function validateExpenseAddForm(source) { var errorMessage = ""; //validate Balance Expense var extrasVal = $('#Reason').data('extras'); console.log(extrasVal); if ($('#Reason').val() == 'Balance Expense' || parseInt(extrasVal) == 1) { errorMessage = lblSettledExpenseNotEditable } //validate expense name if (!$('#Reason').val().trim()) { errorMessage = lblPleaseEnterNameOfExpense } 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 freeze amount if (errorMessage == "") { var totalFreezeAmt = dashBoard.getFormatedAmount(0); for (var index in dashBoard.participants) { totalFreezeAmt = parseFloat(totalFreezeAmt) + parseFloat(dashBoard.getFormatedAmount(dashBoard.participants[index].currentInputExpenseFreezeAmt)); } if (!$("#isMessExpense").is(':checked')) { if (dashBoard.showFormatedAmount(totalFreezeAmt) != dashBoard.showFormatedAmount($('#Amount').val().trim())) { errorMessage = lblDistributedAmountSame } } } //validate date if (errorMessage == "") { if ($('#Date').val().trim() != "") { var dateArray = $('#Date').val().trim().split("-"); if (dateArray.length != 3) { errorMessage = LBL_DATE_NOT_VALID; } else { errorMessage = isValidDate(dateArray); } } } //set or clear error message if (errorMessage != "") { dashBoard.showErrorMessage(errorMessage); } else { dashBoard.clearErrorMessage(); addExpense(); if (source == 1) { $(".ui-icon-closethick").trigger('click'); } else { dashBoard.clearAddForm(); dashBoard.setIsMessCheckImpact(); } } } this.validateMealAddForm = function validateMealAddForm(source) { var errorMessage = ""; if (errorMessage == "") { if ($('#Date').val().trim() != "") { var dateArray = $('#Date').val().trim().split("-"); if (dateArray.length != 3) { errorMessage = lblDateNotValid; } else { errorMessage = isValidDate(dateArray); } } } //check the date already exist in grid or not if (errorMessage == "") { var checkDate = true; var dateVal = $('#Date').val().trim();//getTimeStampByInputDate($('#Date').val().trim()); if (dashBoard.isAddMode == false) { var rowId = $("#meal_grid").jqGrid('getGridParam', 'selrow'); var rowData = jQuery("#meal_grid").getRowData(rowId); if ($('#Date').val().trim() == dashBoard.meals[rowData['SI']].date) { checkDate = false; } } if (checkDate) { for (var id in dashBoard.meals) { if (dashBoard.meals[id].date == dateVal) { errorMessage = lblMealsAddedOnThisDate; break; } } } } //set or clear error message if (errorMessage != "") { dashBoard.showErrorMessage(errorMessage); } else { dashBoard.clearErrorMessage(); addMeal(); if (source == 1) { $(".ui-icon-closethick").trigger('click'); } else { dashBoard.clearMealForm(); } } } this.showErrorMessage = function showErrorMessage(msg) { $("#FormError").show(); $(".ui-state-error").html(msg); } this.clearErrorMessage = function clearErrorMessage() { $("#FormError").hide(); $(".ui-state-error").html(""); } this.clearAddForm = function clearAddForm() { $('#Reason').val(""); $('#Amount').val(""); $("#Details").prop('checked', false); $("#selectAll").prop('checked', true); dashBoard.refreshParticipantsExpenseProperties(1); dashBoard.setAllCheckImpact(); dashBoard.hideShowParticipantDetails(false); $('#Reason').focus(); } this.addRowsToGrid = function addRowsToGrid(data) { var names = ['SI', 'ExpenseType', 'PaidBy', 'Amount', 'Reason', 'Date', 'Involve', 'For you?']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } if (dashBoard.isAddMode == true) { for (var i = 0; i < mydata.length; i++) { $("#grid").jqGrid('addRowData', data[i][0], mydata[i]); } //Set the page to the last page } else { $("#grid").jqGrid('setRowData', data[0][0], mydata[0]); dashBoard.isAddMode = true; } } this.addMealRowsToGrid = function addMealRowsToGrid(data) { var names = ['SI', 'Date', 'Day', 'Breakfast', 'Lunch', 'Dinner', 'Involves']; 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++) { $("#meal_grid").jqGrid('addRowData', data[i][0], mydata[i]); } //Set the page to the last page } else { $("#meal_grid").jqGrid('setRowData', data[0][0], mydata[0]); dashBoard.isAddMode = true; } } this.getExpenseUniqueId = function getExpenseUniqueId() { var maxExpId = 0; var extractedIndex = 0; var expenseIdArray; for (var id in dashBoard.groupExpenses) { expenseIdArray = dashBoard.groupExpenses[id].id.split("-"); if (expenseIdArray[0] == dashBoard.loginParticipantId && maxExpId < parseInt(expenseIdArray[1])) { maxExpId = parseInt(expenseIdArray[1]); } } return String(dashBoard.loginParticipantId) + "-" + String(pad(maxExpId + 1, 5)) + "-" + dashBoard.expense.id; } this.getMealUniqueId = function getMealUniqueId() { var maxExpId = 0; var extractedIndex = 0; var mealIdArray; for (var id in dashBoard.meals) { mealIdArray = dashBoard.meals[id].id.split("-"); if (mealIdArray[0] == dashBoard.loginParticipantId && maxExpId < parseInt(mealIdArray[1])) { maxExpId = parseInt(mealIdArray[1]); } } return String(dashBoard.loginParticipantId) + "-" + 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.paidBy != newExpObj.paidBy) { isChanged = true; } else if (oldExpObj.expenseDate != newExpObj.expenseDate) { isChanged = true; } else if (parseFloat(oldExpObj.amount) != parseFloat(newExpObj.amount)) { isChanged = true; } else if (oldExpObj.participantAmountStr != newExpObj.participantAmountStr) { isChanged = true; } else if (oldExpObj.expenseType != newExpObj.expenseType) { isChanged = true; } else if (oldExpObj.advance != newExpObj.advance) { isChanged = true; } return isChanged; } this.isMealValueModified = function isMealValueModified(oldMealObj, newMealObj) { var isChanged = false; if (newMealObj.oldDate != newMealObj.date) { isChanged = true; } else if (oldMealObj.participantMealStr != newMealObj.participantMealStr) { isChanged = true; } return isChanged; } this.addExpenseToGrid = function addExpenseToGrid() { var groupExpenseObj; var previousDesc; var newDesc; var previousPaidBy; var advance = 0; //collect data from edit form if (dashBoard.isAddMode == true) { groupExpenseObj = new GroupExpense(); groupExpenseObj.id = dashBoard.getExpenseUniqueId(); groupExpenseObj.expenseId = dashBoard.expense.id; groupExpenseObj.isAdd = "1"; groupExpenseObj = dashBoard.getInputFormData(groupExpenseObj); groupExpenseObj.type = 1; dashBoard.globalExpenseIndex++; } else { groupExpenseObj = new GroupExpense(); groupExpenseObj = dashBoard.getInputFormData(groupExpenseObj); //check whether data is modified or not. If not change then return if (!dashBoard.isValueModified(dashBoard.currentEditGroupExpense, groupExpenseObj)) { return; } else { previousPaidBy = dashBoard.participants[dashBoard.currentEditGroupExpense.paidBy].name; previousDesc = dashBoard.getGeneratedLog(dashBoard.currentEditGroupExpense); newDesc = dashBoard.getGeneratedLog(groupExpenseObj); } groupExpenseObj = dashBoard.currentEditGroupExpense; groupExpenseObj = dashBoard.getInputFormData(groupExpenseObj); groupExpenseObj.expenseId = dashBoard.expense.id; groupExpenseObj.isAdd = "2"; groupExpenseObj.id = dashBoard.currentEditGroupExpense.id; groupExpenseObj.previousDesc = previousDesc; groupExpenseObj.newDesc = newDesc; groupExpenseObj.previousPaidBy = previousPaidBy; if (document.getElementById("advance").checked == true) { advance = 1; groupExpenseObj.extras = "2"; $("#advance").attr("checked", "checked"); $("#advance").attr("disabled", false); } groupExpenseObj.advance = advance; } if (groupExpenseObj.expenseType == "2") { groupExpenseObj.isDetails = 0; } groupExpenseObj.isreimburse = 0; dashBoard.processExpenseData(groupExpenseObj); } this.addMealToGrid = function addMealToGrid() { var mealObj; //collect data from edit form if (dashBoard.isAddMode == true) { mealObj = new Meal(); mealObj.expenseId = dashBoard.expense.id; mealObj.isAdd = "5"; mealObj.id = dashBoard.getMealUniqueId(); mealObj = dashBoard.getMealInputFormData(mealObj); dashBoard.globalMealIndex++; } else { mealObj = new Meal(); mealObj = dashBoard.getMealInputFormData(mealObj); //check whether data is modified or not. If not change then return var rowId = $("#meal_grid").jqGrid('getGridParam', 'selrow'); var rowData = jQuery("#meal_grid").getRowData(rowId); mealObj.oldDate = dashBoard.meals[rowData['SI']].date; if (!dashBoard.isMealValueModified(dashBoard.meals[rowData['SI']], mealObj)) { return; } mealObj.expenseId = dashBoard.expense.id; mealObj.isAdd = "6"; mealObj.id = dashBoard.currentEditMeal.id; } dashBoard.processMealData(mealObj); } this.processExpenseData = function processExpenseData(groupExpenseObj) { dashBoard.groupExpenses[groupExpenseObj.id] = groupExpenseObj; sendDataToServer(groupExpenseObj, "#expenseForm"); var data = []; data.push(dashBoard.getDataByExpense(groupExpenseObj)); dashBoard.addRowsToGrid(data); //go to the last page after adding record dashBoard.setPageAfterAdd('#grid'); } this.processMealData = function processMealDate(mealObj) { dashBoard.meals[mealObj.id] = mealObj; sendDataToServer(mealObj, "#expenseForm"); var data = []; data.push(dashBoard.getDataByMeal(mealObj)); dashBoard.addMealRowsToGrid(data); //go to the last page after adding record dashBoard.setPageAfterAdd('#meal_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.getGeneratedLog = function getGeneratedLog(expenseObj) { var logStr = ""; logStr += "[Title:" + expenseObj.expenseName + "],"; logStr += "[PaidBy:" + dashBoard.participants[expenseObj.paidBy].name + "],"; logStr += "[Date:" + expenseObj.expenseDate + "],"; logStr += "[Amount:" + dashBoard.showFormatedAmount(expenseObj.amount) + ' ' + dashBoard.expense.currency + "],"; logStr += "[Involves:"; if (expenseObj.expenseType == "2") { logStr += "Mess Members"; } else { var participantAmtStrArray = expenseObj.participantAmountStr.split(","); for (var index in participantAmtStrArray) { var dataArray = participantAmtStrArray[index].split("|"); if (index == 0) { logStr += dashBoard.participants[dataArray[0]].name + "=" + dashBoard.showFormatedAmount(dataArray[2]); } else { logStr += "," + dashBoard.participants[dataArray[0]].name + "=" + dashBoard.showFormatedAmount(dataArray[2]); } } } logStr += "]"; return logStr; } this.getInputFormData = function getInputFormData(groupExpenseObj) { var amountStr = ""; var isDetails = false; var advance = 0; if (document.getElementById("advance").checked == true) { advance = 1; } groupExpenseObj.advance = advance; groupExpenseObj.paidBy = $('#PaidBy').val(); groupExpenseObj.expenseName = $('#Reason').val(); groupExpenseObj.amount = $('#Amount').val(); groupExpenseObj.expenseDate = $('#Date').val();//getTimeStampByInputDate($('#Date').val()); //return groupExpenseObj; for (var index in dashBoard.participants) { if ($("#chkParticipant" + dashBoard.participants[index].id).is(':checked')) { if (amountStr == "") { if (dashBoard.participants[index].isFreeze == 1) { dashBoard.participants[index].currentInputExpensePart = ""; } amountStr += dashBoard.participants[index].id + "|" + dashBoard.participants[index].currentInputExpensePart + "|" + dashBoard.getFormatedAmountDB(dashBoard.participants[index].currentInputExpenseFreezeAmt); } else { if (dashBoard.participants[index].isFreeze == 1) { dashBoard.participants[index].currentInputExpensePart = ""; } amountStr += "," + dashBoard.participants[index].id + "|" + dashBoard.participants[index].currentInputExpensePart + "|" + dashBoard.getFormatedAmountDB(dashBoard.participants[index].currentInputExpenseFreezeAmt); } } if ((dashBoard.participants[index].isFreeze == 1) || dashBoard.participants[index].currentInputExpensePart > 1) { isDetails = true; } } if (isDetails) { groupExpenseObj.isDetails = 1; } else { groupExpenseObj.isDetails = 0; } groupExpenseObj.participantAmountStr = amountStr; //set expenseType if ($("#isMessExpense").is(':checked')) { groupExpenseObj.expenseType = "2"; } else { groupExpenseObj.expenseType = "1"; } return groupExpenseObj; } this.getMealInputFormData = function getMealInputFormData(mealObj) { var mealStr = ""; mealObj.date = $('#Date').val();//getTimeStampByInputDate($('#Date').val()); for (var index in dashBoard.participants) { if ($("#chkParticipantMeal" + dashBoard.participants[index].id).is(':checked')) { if (mealStr == "") { mealStr += dashBoard.participants[index].id + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#breakfast_" + dashBoard.participants[index].id).val())) + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#lunch_" + dashBoard.participants[index].id).val())) + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#dinner_" + dashBoard.participants[index].id).val())); } else { mealStr += "," + dashBoard.participants[index].id + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#breakfast_" + dashBoard.participants[index].id).val())) + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#lunch_" + dashBoard.participants[index].id).val())) + "|" + dashBoard.showMealFormatedAmount(parseFloat($("#dinner_" + dashBoard.participants[index].id).val())); } } } mealObj.participantMealStr = mealStr; return mealObj; } this.deleteExpense = function deleteExpense() { var rowId = $("#grid").jqGrid('getGridParam', 'selrow'); var i; $('#grid').jqGrid('delRowData', rowId); var deletedExpObj = dashBoard.groupExpenses[rowId]; delete dashBoard.groupExpenses[rowId]; deletedExpObj.isAdd = "3"; //set log info deletedExpObj.previousDesc = dashBoard.getGeneratedLog(deletedExpObj); deletedExpObj.newDesc = "Deleted"; deletedExpObj.previousPaidBy = dashBoard.participants[deletedExpObj.paidBy].name; //call ajax for DB update deletedExpObj.expenseId = dashBoard.expense.id; dashBoard.setPageAfterDelete('#grid'); sendDataToServer(deletedExpObj, "#expenseForm"); $(".ui-icon-closethick").trigger('click'); } this.deleteMeal = function deleteMeal() { var rowId = $("#meal_grid").jqGrid('getGridParam', 'selrow'); var i; $('#meal_grid').jqGrid('delRowData', rowId); var deletedMeal = dashBoard.meals[rowId]; delete dashBoard.meals[rowId]; deletedMeal.isAdd = "7"; //set log info deletedMeal.expenseId = dashBoard.expense.id; dashBoard.setPageAfterDelete('#meal_grid'); sendDataToServer(deletedMeal, "#expenseForm"); $(".ui-icon-closethick").trigger('click'); } this.resetParticipantBalance = function resetParticipantBalance() { var amtStr = ""; var paidBy; var amount; var totalMeal = 0; var totalCost = 0; var perMealCost = 0; var yourMeal = 0; var yourCost = 0; dashBoard.resetParticipantMeal(); for (var index in dashBoard.participants) { dashBoard.participants[index].balance = dashBoard.getFormatedAmountDB(parseFloat(0)); dashBoard.participants[index].totalPaid = dashBoard.getFormatedAmountDB(parseFloat(0)); dashBoard.participants[index].totalSpent = dashBoard.getFormatedAmountDB(parseFloat(0)); if (parseFloat(dashBoard.participants[index].numberOfMeal) > 0) { dashBoard.participants[index].isDeletable = 0; } else { dashBoard.participants[index].isDeletable = 1; } if (dashBoard.participants[index].id == dashBoard.loginParticipantId) { yourMeal = dashBoard.getFormatedAmountDB(parseFloat(yourMeal) + parseFloat(dashBoard.participants[index].numberOfMeal)); } totalMeal = dashBoard.getFormatedAmountDB(parseFloat(totalMeal) + parseFloat(dashBoard.participants[index].numberOfMeal)); } //for(var i=0;i 0) { perMealCost = dashBoard.getFormatedAmountDB(parseFloat(totalCost) / parseFloat(totalMeal)); } //reset balance by deducting (permeal cost * meal amount) for (var index in dashBoard.participants) { dashBoard.participants[index].mealCost = dashBoard.getFormatedAmountDB(parseFloat(perMealCost) * parseFloat(dashBoard.participants[index].numberOfMeal)); dashBoard.participants[index].totalSpent = dashBoard.getFormatedAmountDB(parseFloat(dashBoard.participants[index].totalSpent) + parseFloat(dashBoard.participants[index].mealCost)); dashBoard.participants[index].balance = dashBoard.getFormatedAmountDB(parseFloat(dashBoard.participants[index].balance) - (parseFloat(perMealCost) * parseFloat(dashBoard.participants[index].numberOfMeal))); } dashBoard.totalMeal = totalMeal; dashBoard.yourMeal = yourMeal; dashBoard.totalCost = totalCost; dashBoard.yourCost = dashBoard.getFormatedAmountDB(parseFloat(perMealCost) * parseFloat(yourMeal)); } this.resetParticipantMeal = function resetParticipantMeal() { var mealStr = ""; for (var index in dashBoard.participants) { dashBoard.participants[index].numberOfMeal = dashBoard.showMealFormatedAmount(parseFloat(0)); } //for(var i=0;i 0) { positiveParticipantBalance[index] = dashBoard.participants[index].balance; } else if (parseFloat(dashBoard.participants[index].balance) < 0) { negativeParticipantBalance[index] = dashBoard.participants[index].balance; } } //sort postivie and negative //add balance amount in positive and negative //if pos and neg values are same, then direct exchange payment for (var posIndex in positiveParticipantBalance) { if (dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))) { for (var negIndex in negativeParticipantBalance) { if (dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) == dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)) && dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))) { if (balanceString == "") { balanceString = balanceString + negIndex + "|" + posIndex + "|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)); } else { balanceString = balanceString + "," + negIndex + "|" + posIndex + "|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)); } //update array amount positiveParticipantBalance[posIndex] = 0; negativeParticipantBalance[negIndex] = 0; } } } } //distribute amount among pos values var maxPartIndex = dashBoard.getMaxMinParticipantId(positiveParticipantBalance, 1); var minPartIndex = dashBoard.getMaxMinParticipantId(negativeParticipantBalance, 2); while (maxPartIndex != "" && minPartIndex != "") { var maxVal = parseFloat(positiveParticipantBalance[maxPartIndex]); if (minPartIndex != "") { var decrementalVal = parseFloat(negativeParticipantBalance[minPartIndex]) * (-1); if (parseFloat(decrementalVal) > parseFloat(maxVal)) { decrementalVal = dashBoard.getFormatedAmountDB(maxVal); } //update array positiveParticipantBalance[maxPartIndex] = dashBoard.getFormatedAmountDB(parseFloat(positiveParticipantBalance[maxPartIndex]) - parseFloat(decrementalVal)); negativeParticipantBalance[minPartIndex] = dashBoard.getFormatedAmountDB(parseFloat(negativeParticipantBalance[minPartIndex]) + parseFloat(decrementalVal)); if (balanceString == "") { balanceString = balanceString + minPartIndex + "|" + maxPartIndex + "|" + decrementalVal; } else { balanceString = balanceString + "," + minPartIndex + "|" + maxPartIndex + "|" + decrementalVal; } } //check equal for (var posIndex in positiveParticipantBalance) { if (dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))) { for (var negIndex in negativeParticipantBalance) { if (dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) == dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)) && dashBoard.showFormatedAmount(parseFloat(positiveParticipantBalance[posIndex])) > dashBoard.showFormatedAmount(parseFloat(0))) { if (balanceString == "") { balanceString = balanceString + negIndex + "|" + posIndex + "|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)); } else { balanceString = balanceString + "," + negIndex + "|" + posIndex + "|" + dashBoard.showFormatedAmount(parseFloat(negativeParticipantBalance[negIndex]) * (-1)); } //update array amount positiveParticipantBalance[posIndex] = 0; negativeParticipantBalance[negIndex] = 0; } } } } maxPartIndex = dashBoard.getMaxMinParticipantId(positiveParticipantBalance, 1); minPartIndex = dashBoard.getMaxMinParticipantId(negativeParticipantBalance, 2); } return balanceString; } this.getMaxMinParticipantId = function getMaxMinParticipantId(balanceList, ind) { var result = 0; var participantIndex = ''; for (var index in balanceList) { if (ind == 1) { if (dashBoard.showFormatedAmount(parseFloat(balanceList[index])) > parseFloat(result)) { participantIndex = index; result = parseFloat(balanceList[index]); } } else { if (dashBoard.showFormatedAmount(parseFloat(balanceList[index])) < parseFloat(result)) { participantIndex = index; result = parseFloat(balanceList[index]); } } } return participantIndex; } this.createGraphImage = function createGraphImage() { $("#balance_chart_image").html(""); var imgData = $('#balance_chart').jqplotToImageStr({}); var imgElem = $('').attr('src', imgData).attr('id', "graph_image_id").attr('alt', "balance.png"); $("#balance_chart_image").html(imgElem); dashBoard.downloadImage("graph_image_id"); } 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.showBalanceDisposalMessage = function showBalanceDisposalMessage() { var result = false; var hasMeal = false; var hasMealExpense = false; for (var index in dashBoard.meals) { hasMeal = true; break; } for (var index in dashBoard.groupExpenses) { if (dashBoard.groupExpenses[index].expenseType == "2") { hasMealExpense = true; break; } } if (hasMeal == false && hasMealExpense == true) { result = true; $("#balanceDivErrorId").show(); $("#balanceDivId").hide(); $("#balanceSummaryDivId").hide(); } return result; } this.drawGraph = function drawGraph() { $("#balanceDivErrorId").hide(); $("#balanceDivId").show(); $("#balanceSummaryDivId").show(); if (dashBoard.showBalanceDisposalMessage() == true) { return; } if (plot1) { plot1.destroy(); } var balanceString = dashBoard.updateParticipantBalance(); var data = []; var barLabel = []; var ticks = []; var noOfParticipant = 0; for (var index in dashBoard.participants) { data.push(parseFloat(dashBoard.showFormatedAmount(dashBoard.participants[index].balance))); barLabel.push(dashBoard.showFormatedAmount(parseFloat(dashBoard.participants[index].balance))); ticks.push(dashBoard.participants[index].name); noOfParticipant++; } // Can specify a custom tick Array. // Ticks should match up one for each y value (category) in the series. $("#balance_chart").css("width", (noOfParticipant * 100) + "px"); var options = { // The "seriesDefaults" option is an options object that will // be applied to all series in the chart. seriesDefaults: { renderer: $.jqplot.BarRenderer, rendererOptions: { fillToZero: true } }, // Custom labels for the series are specified with the "label" // option on the series option. Here a series option object // is specified for each series. series: [ { color: '#008000', showMarker: true, pointLabels: { show: true, labels: barLabel } } ], // Show the legend and put it outside the grid, but inside the // plot container, shrinking the grid to accomodate the legend. // A value of "outside" would not shrink the grid and allow // the legend to overflow the container. negativeSeriesColors: ["#FF0000"], axes: { // Use a category axis on the x axis and use our custom ticks. xaxis: { renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks }, // Pad the y axis just a little so bars can get close to, but // not touch, the grid boundaries. 1.2 is the default padding. yaxis: { pad: 1.18, tickOptions: { formatString: '%d ' + dashBoard.expense.currency } } }, title: { text: 'Balance of "' + dashBoard.expense.title + '"' }, }; plot1 = $.jqplot('balance_chart', [data], options); dashBoard.showBalanceDetails(balanceString); } this.showBalanceDetails = function showBalanceDetails(balanceString) { var balancePaymentHtml = ""; var balanceSummaryHtml = ""; var perMealCost = 0; if (balanceString != "") { var balanceStringArr = balanceString.split(","); for (var index in balanceStringArr) { var balanceStringval = balanceStringArr[index].split("|"); var name1 = dashBoard.participants[balanceStringval[0]].name; var name2 = dashBoard.participants[balanceStringval[1]].name; var balance = dashBoard.showFormatedAmount(parseFloat(balanceStringval[2])); //balancePaymentHtml = eval(lblBalanceLink) + ' Mark Settle

'; if (isPermitted) { balancePaymentHtml = eval(lblBalanceLink) + ' Mark Settle

'; } else { balancePaymentHtml = eval(lblBalanceLink) + ' Mark Settle

'; } } } if (parseFloat(dashBoard.totalMeal) > 0) { perMealCost = dashBoard.getFormatedAmountDB(parseFloat(dashBoard.totalCost) / parseFloat(dashBoard.totalMeal)); } balanceSummaryHtml = "*" + lblMealsForYou + ": " + dashBoard.showMealFormatedAmount(dashBoard.yourMeal) + "( " + lblOutOf + dashBoard.showMealFormatedAmount(dashBoard.totalMeal) + ")" + lblAndCost + ": " + dashBoard.showFormatedAmount(dashBoard.yourCost) + " " + dashBoard.expense.currency + "(" + lblOutOf + dashBoard.showFormatedAmount(dashBoard.totalCost) + " " + dashBoard.expense.currency + ")." + lblHencePerCost + "" + dashBoard.showFormatedAmount(perMealCost) + " " + dashBoard.expense.currency; $("#balance_payment_div").html(balancePaymentHtml); $("#balanceSummaryDivId").html(balanceSummaryHtml); } this.insertBalanceEntry = function insertBalanceEntry(payerId, paytoId, amount) { if (!confirm("Do you like to mark it as settled?")) { return false; } dashBoard.isAddMode = true; advance = 0; groupExpenseObj = new GroupExpense(); groupExpenseObj.id = dashBoard.getExpenseUniqueId(); groupExpenseObj.expenseId = dashBoard.expense.id; groupExpenseObj.isAdd = "1"; groupExpenseObj.type = 2; //1=normal expense,2=balance expense groupExpenseObj.paidBy = payerId; groupExpenseObj.expenseName = "Balance Expense"; groupExpenseObj.amount = amount; groupExpenseObj.expenseDate = dashBoard.currentDate; groupExpenseObj.isDetails = 0; groupExpenseObj.participantAmountStr = paytoId + '|' + '1' + '|' + amount; groupExpenseObj.extras = "1"; groupExpenseObj.isreimburse = 0; groupExpenseObj.expenseType = 1; dashBoard.processExpenseData(groupExpenseObj); dashBoard.drawGraph(); } ///////////////////////////////////////////////////////////////// Participant section //////////////////////////////////////////// this.validParticipantInputForm = function validParticipantInputForm(name, skipPartId) { var errorMessage = ""; //validate participant name if (!name.trim()) { errorMessage = lblEnterParticipantName; } else if (name.trim().length > nameLength) { errorMessage = nameErrorMessage; } if (errorMessage == "") { //check the participant name already exist or not for (var index in dashBoard.participants) { if (skipPartId != dashBoard.participants[index].id) { if (dashBoard.participants[index].name.toLowerCase() == name.trim().toLowerCase()) { errorMessage = lblParticipantAlreadyExist; break; } } } } if (errorMessage == "") { //check the participant name already exist or not if (name.trim().indexOf(',') === -1 && name.trim().indexOf('|') === -1) { } else { errorMessage = lblParticipantShouldNotContain; } } return errorMessage; } 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.addParticipant = function addParticipant(participantName, source) { //generate auto ID for new participant var participantObj = new Participant(); participantObj.id = dashBoard.getParticipantId(); participantObj.name = participantName; participantObj.isCreator = 0; participantObj.create_date = Math.round(+new Date() / 1000); participantObj.balance = 0; participantObj.isFreeze = 0; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 1; participantObj.isDeletable = 1; //participants.push(participantObj); //insert into grid if (source == "1") { dashBoard.processParticipantDataByPopup(participantObj); } else { dashBoard.processParticipantData(participantObj); } //send to database } this.getParticipantId = function getParticipantId() { //dashBoard.loginParticipantId var SI = 1; var maxId = 0; var participantIdStrArry; for (var index in dashBoard.participants) { if (dashBoard.participants[index].id == dashBoard.loginParticipantId) { break; } SI++; } //var participantLoginStrArr = dashBoard.loginParticipantId.split("_"); for (var index in dashBoard.participants) { participantIdStrArry = dashBoard.participants[index].id.split("_"); if (SI == participantIdStrArry[0]) { if (parseInt(participantIdStrArry[1]) > parseInt(maxId)) { maxId = parseInt(participantIdStrArry[1]); } } } maxId++; return SI + "_" + maxId; } this.processParticipantData = function processParticipantData(participantObj) { dashBoard.participants[participantObj.id] = participantObj; if (typeof participantObj.numberOfMeal == "undefined") { participantObj.numberOfMeal = 0; } if (typeof participantObj.mealCost == "undefined") { participantObj.mealCost = 0; } if (typeof participantObj.totalSpent == "undefined") { participantObj.totalSpent = 0; } if (typeof participantObj.totalPaid == "undefined") { participantObj.totalPaid = 0; } var data = []; data.push([participantObj.id, participantObj.name, dashBoard.showMealFormatedAmount(participantObj.numberOfMeal), dashBoard.showFormatedAmount(participantObj.mealCost) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(participantObj.totalSpent) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(participantObj.totalPaid) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(participantObj.balance) + " " + dashBoard.expense.currency, ""]); //go to the last page after adding record $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); dashBoard.addRowsToParticipantGrid(data, true); dashBoard.setParticipantGridExtension(); dashBoard.setPageAfterAdd('#participant_grid'); sendDataToServer(participantObj, "#participantForm"); } this.updateParticipant = function updateParticipant(participantId, oldName, newName) { var participantObj = new Participant(); participantObj.id = participantId; participantObj.name = newName; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 2; //update participant array; var existingPartcipantObj = dashBoard.participants[participantId]; existingPartcipantObj.name = newName; dashBoard.participants[participantId] = existingPartcipantObj; //update grid var data = []; data.push([existingPartcipantObj.id, existingPartcipantObj.name, dashBoard.showMealFormatedAmount(existingPartcipantObj.numberOfMeal), dashBoard.showFormatedAmount(existingPartcipantObj.mealCost) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(existingPartcipantObj.totalSpent) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(existingPartcipantObj.totalPaid) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(existingPartcipantObj.balance) + " " + dashBoard.expense.currency, ""]); dashBoard.addRowsToParticipantGrid(data, false); $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); $("#participant_grid").trigger("reloadGrid"); dashBoard.setParticipantGridExtension(); sendDataToServer(participantObj, "#participantForm"); } this.deleteParticipant = function deleteParticipant(index) { var rowId = $("#participant_grid").jqGrid('getGridParam', 'selrow'); var i; var rowData = jQuery("#participant_grid").getRowData(rowId); //prepare delete object var participantObj = new Participant(); participantObj.id = rowData['SI']; participantObj.name = rowData['Name']; participantObj.expense_id = dashBoard.expense.id; participantObj.isAdd = 3; $('#participant_grid').jqGrid('delRowData', rowId); delete dashBoard.participants[participantObj.id]; $('#grid').jqGrid('GridUnload'); dashBoard.showExpenseList(); dashBoard.setParticipantGridExtension(); dashBoard.setPageAfterDelete('#participant_grid'); sendDataToServer(participantObj, "#participantForm"); $(".ui-icon-closethick").trigger('click'); } this.displayParticipantList = function displayParticipantList() { var partNameBeforeEdit = ""; var maxRowNum = 0; for (var index in dashBoard.participants) { maxRowNum++; } if (maxRowNum < 51) { maxRowNum = 50; } $("#participant_grid").jqGrid({ datatype: "local", height: 232, colNames: ['SI', lblName, lblTotalMeal, lblMealCharge, lblTotalCharge, lblTotalPaid, lblBalance, ''], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden: true }, { name: 'Name', index: 'Name', width: 120, align: 'center', editable: true }, { name: 'Total Meal', index: 'Total Meal', width: 70, align: 'center', }, { name: 'Meal Charge', index: 'Meal Charge', width: 110, align: 'center', }, { name: 'Total Charge', index: 'Total Charge', width: 110, align: 'center', }, { name: 'Total Paid', index: 'Total Paid', width: 110, align: 'center', }, { name: 'Balance', index: 'Balance', width: 130, align: 'center', }, { name: 'Action', index: 'Action', width: 60, align: 'center', formatter: function (cellvalue, options, rowObject) { return dashBoard.inlineNavAction(cellvalue, options, rowObject, (options.rowId != 'new_row')); }, formatoptions: { keys: true, onSuccess: function () { var rowId = $("#participant_grid").jqGrid('getGridParam', 'selrow'); var rowData = jQuery("#participant_grid").getRowData(rowId); var inputVal = $("#" + rowData['SI'] + "_Name").val().trim(); if (dashBoard.participants[rowData['SI']].name != inputVal) { var errorMsg = dashBoard.validParticipantInputForm(inputVal, rowData['SI']); if (errorMsg == "") { dashBoard.updateParticipant(rowData['SI'], dashBoard.participants[rowData['SI']].name, inputVal); } else { $("#" + rowData['SI'] + "_Name").focus(); jQuery.fn.fmatter.rowactions.call(this, 'edit'); } } } } } ], rowNum: maxRowNum, rowList: [6, 10, 20, maxRowNum], pager: '#participant_pager', gridview: true, rownumbers: true, autoencode: true, ignoreCase: true, viewrecords: true, sortorder: 'desc', caption: lblParticipantList, loadComplete: function () { dashBoard.setParticipantGridExtension(); } } ); $("#participant_grid").jqGrid('navGrid', '#participant_pager', { add: isPermitted, addtitle: lblAddParticipant, edit: isPermitted, edittitle: lblEditParticipant, del: isPermitted, deltitle: lblDeleteParticipant, search: true, searchtitle: lblFindParticipant }, { // Edit recreateForm: true, beforeInitData: function () { } }, { // Add recreateForm: true, beforeInitData: function () { } } ); $("#participant_grid").jqGrid('setGridParam', { ondblClickRow: function (rowid, iRow, iCol, e) { if (!isPermitted) { return false; } jQuery.fn.fmatter.rowactions.call(document.getElementById("jEditButton_" + rowid), 'edit'); } }); var data = []; $("#participant_grid").jqGrid("clearGridData", true).trigger("reloadGrid"); for (var index in dashBoard.participants) { data.push([dashBoard.participants[index].id, dashBoard.participants[index].name, dashBoard.showMealFormatedAmount(dashBoard.participants[index].numberOfMeal), dashBoard.showFormatedAmount(dashBoard.participants[index].mealCost) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(dashBoard.participants[index].totalSpent) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(dashBoard.participants[index].totalPaid) + " " + dashBoard.expense.currency, dashBoard.showFormatedAmount(dashBoard.participants[index].balance) + " " + dashBoard.expense.currency, ""]); } dashBoard.addRowsToParticipantGrid(data, true); } this.inlineNavAction = function inlineNavAction(cellvalue, options, rowObject, isSavedRow) { var rowid = options.rowId; var ocl = "id='jEditButton_" + rowid + "' onclick=jQuery.fn.fmatter.rowactions.call(this,'edit'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; var str = "
"; if (dashBoard.participants[rowObject['SI']].isDeletable == 1 && dashBoard.participants[rowObject['SI']].isCreator != "1" && rowObject['SI'] != dashBoard.loginParticipantId) { ocl = "id='jDeleteButton_" + rowid + "' onclick=jQuery.fn.fmatter.rowactions.call(this,'del'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += "
"; } ocl = "id='jSaveButton_" + rowid + "' onclick=jQuery.fn.fmatter.rowactions.call(this,'save'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += ""; ocl = "id='jCancelButton_" + rowid + "' onclick=jQuery.fn.fmatter.rowactions.call(this,'cancel'); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; str += ""; if (!isPermitted) { return "
Edit
"; } return "
" + str + "
"; } this.setParticipantGridExtension = function setParticipantGridExtension() { $.extend($.jgrid.edit, { addCaption: lblAddParticipant, editCaption: lblEditParticipant, bSubmit: lblSave, bCancel: lblCancel, width: 300, recreateForm: true, beforeShowForm: function () { }, beforeSubmit: function (response, postData) { var rowId = response.participant_grid_id; if (rowId == '_empty'){ dashBoard.processAfterValidation(dashBoard.validParticipantInputForm($('#Name').val(), -1)) }else{ var rowData = jQuery("#participant_grid").getRowData(rowId); dashBoard.updateParticipant(rowData['SI'],dashBoard.participants[rowData['SI']].name,$('#Name').val()); $.jgrid.hideModal("#editmodparticipant_grid"); } } }); $.extend($.jgrid.del, { caption: lblDeleteParticipant, msg: lblWantDeleteParticipant, beforeShowForm: function (){ var rowId = $("#participant_grid").jqGrid('getGridParam', 'selrow'); var rowData = dashBoard.participants[rowId]; if(rowData.isDeletable == 1 && rowData.isCreator != "1" && rowId != dashBoard.loginParticipantId){ $.jgrid.viewModal("#delmodparticipant_grid"); }else { alert(lblPerticipentNotDelete); setTimeout(function () { $.jgrid.hideModal("#delmodparticipant_grid"); }, 1); return false; } }, beforeSubmit: function (response, postData) { dashBoard.deleteParticipant(); } }); } this.addRowsToParticipantGrid = function addRowsToParticipantGrid(data, isAdd) { var names = ['SI', 'Name', 'Total Meal', 'Meal Charge', 'Total Charge', 'Total Paid', 'Balance', '']; var mydata = []; for (var i = 0; i < data.length; i++) { mydata[i] = {}; for (var j = 0; j < data[i].length; j++) { mydata[i][names[j]] = data[i][j]; } } if (isAdd == true) { for (var i = 0; i < mydata.length; i++) { $("#participant_grid").jqGrid('addRowData', data[i][0], mydata[i]); } //Set the page to the last page } else { $("#participant_grid").jqGrid('setRowData', data[0][0], mydata[0]); } } this.printExpense = function printExpense() { var data = []; var createdBy; for (var id in dashBoard.groupExpenses) { data.push(dashBoard.getFilteredExpenseObjPrint(dashBoard.groupExpenses[id])); } var balanceString = dashBoard.updateParticipantBalance(); var balancePaymentHtml = ""; if (balanceString != "") { var balanceStringArr = balanceString.split(","); for (var index in balanceStringArr) { var balanceStringval = balanceStringArr[index].split("|"); balancePaymentHtml = balancePaymentHtml + dashBoard.participants[balanceStringval[0]].name + "|" + dashBoard.participants[balanceStringval[1]].name + "|" + dashBoard.showFormatedAmount(parseFloat(balanceStringval[2])) + ","; } } for (var index in dashBoard.participants) { if (dashBoard.participants[index].isCreator == "1") { createdBy = dashBoard.participants[index].name; break; } } $("#printExpense").val(JSON.stringify(dashBoard.expense)); $("#printExpenseList").val(JSON.stringify(data)); $("#printBalance").val(JSON.stringify(balancePaymentHtml)); $("#printNames").val(JSON.stringify(dashBoard.loginParticipantName + "," + createdBy + "," + dashBoard.getFormatedDbDate(dashBoard.expense.create_date))); $("#printOption").val(JSON.stringify("1")); $("#printForm").submit(); } this.printMeals = function printMeals() { var data = []; var createdBy; for (var id in dashBoard.meals) { data.push(dashBoard.getFilteredMealObj(dashBoard.meals[id])); } var balanceString = dashBoard.resetParticipantBalance(); var balancePaymentHtml = ""; for (var index in dashBoard.participants) { if (dashBoard.participants[index].isCreator == "1") { createdBy = dashBoard.participants[index].name; break; } } $("#printExpense").val(JSON.stringify(dashBoard.expense)); $("#printExpenseList").val(JSON.stringify(data)); $("#printBalance").val(JSON.stringify(dashBoard.showMealFormatedAmount(dashBoard.totalMeal) + "," + dashBoard.showMealFormatedAmount(dashBoard.yourMeal) + "," + dashBoard.showFormatedAmount(dashBoard.totalCost) + "," + dashBoard.showFormatedAmount(dashBoard.yourCost))); $("#printNames").val(JSON.stringify(dashBoard.loginParticipantName + "," + createdBy + "," + dashBoard.getFormatedDbDate(dashBoard.expense.create_date))); $("#printOption").val(JSON.stringify("2")); $("#printForm").submit(); } this.printMyMeals = function printMyMeals() { var data = []; var createdBy; for (var id in dashBoard.meals) { data.push(dashBoard.getFilteredMyMealObj(dashBoard.meals[id])); } var balanceString = dashBoard.resetParticipantBalance(); var balancePaymentHtml = ""; for (var index in dashBoard.participants) { if (dashBoard.participants[index].isCreator == "1") { createdBy = dashBoard.participants[index].name; break; } } $("#printExpense").val(JSON.stringify(dashBoard.expense)); $("#printExpenseList").val(JSON.stringify(data)); $("#printBalance").val(JSON.stringify(dashBoard.showMealFormatedAmount(dashBoard.totalMeal) + "," + dashBoard.showMealFormatedAmount(dashBoard.yourMeal) + "," + dashBoard.showFormatedAmount(dashBoard.totalCost) + "," + dashBoard.showFormatedAmount(dashBoard.yourCost))); $("#printNames").val(JSON.stringify(dashBoard.loginParticipantName + "," + createdBy + "," + dashBoard.getFormatedDbDate(dashBoard.expense.create_date))); $("#printOption").val(JSON.stringify("3")); $("#printForm").submit(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// this.loadMealGrid = function loadMealGrid() { 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.globalMealIndex; if (maxRowNum < 101) { maxRowNum = 100; } $("#meal_grid").jqGrid({ datatype: "local", height: 232, title: false, colNames: ['SI', lblDate, lblDay, lblBreakfast, lblLunch, lblDinner, lblInvoles], colModel: [ { name: 'SI', index: 'SI', width: 0, sorttype: "int", hidden: true, key: true }, { name: 'Date', index: 'Date', width: 80, align: 'center', sorttype: 'date', formoptions: { rowpos: 3 }, editable: true, editrules: { required: true }, editoptions: { dataInit: initDateEdit } }, { name: 'Day', index: 'Day', align: 'center', width: 120, editable: false, }, { name: 'Breakfast', index: 'Breakfast', align: 'center', width: 190, formoptions: { rowpos: 1 }, editable: false, sorttype: "float" }, { name: 'Lunch', index: 'Lunch', width: 90, align: 'center', editable: false, }, { name: 'Dinner', index: 'Dinner', align: 'center', width: 150, sorttype: "float" }, { name: 'Involves', index: 'Involves', align: 'center', width: 100, sorttype: "float" } ], rowNum: maxRowNum, rowList: [10, 20, 50, maxRowNum], pager: '#meal_expense_pager', gridview: true, rownumbers: true, autoencode: true, ignoreCase: true, viewrecords: true, sortorder: 'desc', caption: lblMealList } ); if (dashBoard.isMealGridLoadedAlready == 0) { var mealData = []; for (var index in dashBoard.meals) { mealData.push(dashBoard.getDataByMeal(dashBoard.meals[index])); } dashBoard.addMealRowsToGrid(mealData); dashBoard.isMealGridLoadedAlready = 1; } $("#meal_grid").jqGrid('setGridParam', { onSelectRow: function (rowid, iRow, iCol, e) { if (!iCol) { dashBoard.isAddMode = false; dashBoard.loadForEdit(); } } } ); $("#meal_grid").jqGrid('setGridParam', { ondblClickRow: function (rowid, iRow, iCol, e) { if (!isPermitted) { return false; } dashBoard.isAddMode = false; jQuery(this).jqGrid('editGridRow', rowid); } }); $("#meal_grid").jqGrid('navGrid', '#meal_expense_pager', { add: isPermitted, addtitle: lblAddMealInformation, edit: isPermitted, edittitle: lblEditMealInformation, del: isPermitted, deltitle: lblDeleteMealInformation, search: true, searchtitle: lblFindMealInformation }, { // Edit recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = false; } }, { // Add recreateForm: true, beforeInitData: function () { dashBoard.isAddMode = true; } } ); dashBoard.setMealAmtHtmlFormat(); dashBoard.setMealGridExtension(); jQuery("#meal_grid").setGridParam({ rowNum: maxRowNum }).trigger("reloadGrid"); $('.ui-jqgrid-bdiv').scrollTop($('#meal_grid')[0].scrollHeight); } this.setMealGridExtension = function setMealGridExtension() { $.extend($.jgrid.edit, { addCaption: lblAddMealInformation, editCaption: lblEditMealInformation, bSubmit: lblSave, bCancel: lblCancel, width: 300, recreateForm: true, beforeShowForm: function () { if (dashBoard.isAddMode == true) { $('#tr_Date>td.DataTD>input').insertAfter(' '); $(dashBoard.mealAmtHtmlFormat).insertAfter("#tr_Date"); $('' + lblSaveContinue + '') .click(function () { dashBoard.validateMealAddForm(0); }) .addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left") .prependTo("#Act_Buttons>td.EditButton"); dashBoard.refreshParticipantsMealProperties(); dashBoard.setAllCheckImpactMeal(); dashBoard.setUIMealDate(); $("#Date").val(dashBoard.maxMealDate); } else { dashBoard.loadForEditMeal(); } }, beforeSubmit: function (response, postData) { dashBoard.validateMealAddForm(1); } }); $.extend($.jgrid.del, { caption: lblDeleteMeal, msg: lblWantDeleteMeal, beforeSubmit: function (response, postData) { dashBoard.deleteMeal(); } }); } } 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 addMeal() { if (dashBoard.isAddMode == true) { dashBoard.addMealToGrid(); } else { dashBoard.addMealToGrid(); } } function sendDataToServer(formData, formName) { var formUrl = $(formName).attr('action'); formData.unique_url = getUniqueUrl(); console.log(formData); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function (data, textStatus, xhr) { if (data.trim() == "+000") { dashBoard.expense.version = parseInt(dashBoard.expense.version) + 1; $("#ExpenseVersion").val(dashBoard.expense.version); } else { alert(lblDataSavingFailed); } }, error: function (xhr, textStatus, error) { } }); } function loadData(formData, formName) { //get form action 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") { } else { } }, error: function (xhr, textStatus, error) { } }); } $('#sendEmailForm').submit(function () { $(".submit").css("float", "left"); $("#loadImg2").css("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) { $("#loadImg2").css("display", "none"); alert(lblEmailSent); }, error: function (xhr, textStatus, error) { $("#loadImg2").css("display", "none"); alert(lblEmailSentFail); } }); return false; }); $('#viewLogForm').submit(function () { $("#ExpenseLogExpenseId").val(dashBoard.expense.id); $(".submit").css("float", "left"); document.getElementById('loadImg').style.display = 'inline-block' //serialize form data var formData = $(this).serialize(); //get form action var formUrl = $(this).attr('action'); $.ajax({ type: 'POST', url: formUrl, data: formData, success: function (data, textStatus, xhr) { $('#log_grid').jqGrid('GridUnload'); dashBoard.generateLogList(data, 2); document.getElementById("loadImg").style.display = "none"; }, error: function (xhr, textStatus, error) { } }); return false; }); $('#updateGroupExpenseForm').submit(function () { //serialize form data $(".submit").css("float", "left"); $("#loadImg1").css("display", "inline-block"); //get form action var formUrl = $(this).attr('action'); $('#updateGroupExpenseForm').find('span').text(""); var defaultBreakfast = 0; var defaultLunch = 0; var defaultDinner = 0; if ($("#ExpenseDefaultBreakfast").val().trim() != "") { defaultBreakfast = $("#ExpenseDefaultBreakfast").val().trim(); } if ($("#ExpenseDefaultLunch").val().trim() != "") { defaultLunch = $("#ExpenseDefaultLunch").val().trim(); } if ($("#ExpenseDefaultDinner").val().trim() != "") { defaultDinner = $("#ExpenseDefaultDinner").val().trim(); } var defaultMealStr = dashBoard.showMealFormatedAmount(defaultBreakfast) + "|" + dashBoard.showMealFormatedAmount(defaultLunch) + "|" + dashBoard.showMealFormatedAmount(defaultDinner); if (dashBoard.expense.title == $("#ExpenseTitle").val().trim() && dashBoard.expense.currency == $("#ExpenseCurrency").val().trim() && dashBoard.expense.description == $("#ExpenseDescription").val().trim() && dashBoard.expense.defaultMeal == defaultMealStr ) { 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; dashBoard.expense.defaultMeal = defaultMealStr; //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(); dashBoard.setDefaultMeal(); $.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('loadImg1').style.display = 'none'; }, error: function (xhr, textStatus, error) { dashBoard.expense.version = parseInt(dashBoard.expense.version) - 1; $("#ExpenseVersion").val(dashBoard.expense.version); document.getElementById('loadImg1').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.defaultMeal; this.version } function Meal() { this.id; this.expenseId; this.date; this.oldDate; this.isAdd; this.participantMealStr; } function GroupExpense() { this.id; this.expenseType; this.expenseId; this.isAdd; this.paidBy; this.expenseName; this.amount; this.participantAmountStr; this.expenseDate; this.participantAmtHtml; this.noOfNotes; this.noOfModification; this.isDetails; this.isreimburse; this.previousDesc; this.newDesc; this.previousPaidBy; this.type;//1=normal expense,2=balance entry this.extras; this.advance; } function FilteredGroupExpense() { this.id; this.expenseType; this.paidBy; this.amount; this.expenseName; this.expenseDate; this.involves; this.forYou; this.noOfNotes; this.noOfModification; } function FilteredMeal() { this.id; this.date; this.day; this.breakfast; this.lunch; this.dinner; this.involves; } function Log() { this.expenseId; this.fromDate; this.toDate; } function Email() { this.email; this.uniqueURL; this.title; } function Participant() { this.id; this.name; this.isCreator; this.create_date; this.balance; this.numberOfMeal; this.mealCost; this.totalPaid; this.totalSpent; this.isFreeze; this.currentInputExpensePart; this.currentInputExpenseFreezeAmt; this.breakfast; this.lunch; this.dinner; this.expense_id; this.isAdd; this.isDeletable; }