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