mirror of
https://github.com/openMF/community-app.git
synced 2026-02-06 14:26:51 +00:00
916 lines
45 KiB
JavaScript
Executable File
916 lines
45 KiB
JavaScript
Executable File
(function (module) {
|
|
mifosX.controllers = _.extend(module, {
|
|
ViewLoanDetailsController: function (scope, routeParams, resourceFactory, location, route, http, $modal, dateFilter, API_VERSION, $sce, $rootScope) {
|
|
scope.loandocuments = [];
|
|
scope.report = false;
|
|
scope.hidePentahoReport = true;
|
|
scope.formData = {};
|
|
scope.date = {};
|
|
scope.date.payDate = new Date();
|
|
scope.hideTransactions = [];
|
|
scope.hideTransactions.type =[];
|
|
scope.hideTransactions.type.accrual = false;
|
|
scope.loandetails = [];
|
|
scope.addSubsidyTransactionTypeId = 50;
|
|
scope.revokeSubsidyTransactionTypeId = 51;
|
|
scope.glimClientsDetails = [];
|
|
scope.isGlim = false;
|
|
scope.waiveLink = "#/loanaccountcharge/{{loandetails.id}}/waivecharge/{{charge.id}}";
|
|
|
|
scope.routeTo = function (loanId, transactionId, transactionTypeId) {
|
|
if (transactionTypeId == 2 || transactionTypeId == 4 || transactionTypeId == 1
|
|
|| transactionTypeId == scope.addSubsidyTransactionTypeId || transactionTypeId == scope.revokeSubsidyTransactionTypeId ) {
|
|
location.path('/viewloantrxn/' + loanId + '/trxnId/' + transactionId);
|
|
}
|
|
;
|
|
};
|
|
scope.hideTransactionDetails = false;
|
|
|
|
scope.clickEvent = function (eventName, accountId) {
|
|
eventName = eventName || "";
|
|
switch (eventName) {
|
|
case "addloancharge":
|
|
location.path('/addloancharge/' + accountId);
|
|
break;
|
|
case "addcollateral":
|
|
location.path('/addcollateral/' + accountId);
|
|
break;
|
|
case "assignloanofficer":
|
|
location.path('/assignloanofficer/' + accountId);
|
|
break;
|
|
case "modifyapplication":
|
|
location.path('/editloanaccount/' + accountId);
|
|
break;
|
|
case "approve":
|
|
location.path('/loanaccount/' + accountId + '/approve');
|
|
break;
|
|
case "reject":
|
|
location.path('/loanaccount/' + accountId + '/reject');
|
|
break;
|
|
case "withdrawnbyclient":
|
|
location.path('/loanaccount/' + accountId + '/withdrawnByApplicant');
|
|
break;
|
|
case "delete":
|
|
resourceFactory.LoanAccountResource.delete({loanId: accountId}, {}, function (data) {
|
|
var destination = '/viewgroup/' + data.groupId;
|
|
if (data.clientId) destination = '/viewclient/' + data.clientId;
|
|
location.path(destination);
|
|
});
|
|
break;
|
|
case "undoapproval":
|
|
location.path('/loanaccount/' + accountId + '/undoapproval');
|
|
break;
|
|
case "disburse":
|
|
location.path('/loanaccount/' + accountId + '/disburse');
|
|
break;
|
|
case "disbursetosavings":
|
|
location.path('/loanaccount/' + accountId + '/disbursetosavings');
|
|
break;
|
|
case "undodisbursal":
|
|
location.path('/loanaccount/' + accountId + '/undodisbursal');
|
|
break;
|
|
case "makerepayment":
|
|
location.path('/loanaccount/' + accountId + '/repayment');
|
|
break;
|
|
case "prepayment":
|
|
location.path('/loanaccount/' + accountId + '/prepayloan');
|
|
break;
|
|
case "waiveinterest":
|
|
location.path('/loanaccount/' + accountId + '/waiveinterest');
|
|
break;
|
|
case "writeoff":
|
|
location.path('/loanaccount/' + accountId + '/writeoff');
|
|
break;
|
|
case "recoverypayment":
|
|
location.path('/loanaccount/' + accountId + '/recoverypayment');
|
|
break;
|
|
case "close-rescheduled":
|
|
location.path('/loanaccount/' + accountId + '/close-rescheduled');
|
|
break;
|
|
case "transferFunds":
|
|
if (scope.loandetails.clientId) {
|
|
location.path('/accounttransfers/fromloans/' + accountId);
|
|
}
|
|
break;
|
|
case "close":
|
|
location.path('/loanaccount/' + accountId + '/close');
|
|
break;
|
|
case "createguarantor":
|
|
location.path('/guarantor/' + accountId);
|
|
break;
|
|
case "listguarantor":
|
|
location.path('/listguarantors/' + accountId);
|
|
break;
|
|
case "recoverguarantee":
|
|
location.path('/loanaccount/' + accountId + '/recoverguarantee');
|
|
break;
|
|
case "unassignloanofficer":
|
|
location.path('/loanaccount/' + accountId + '/unassignloanofficer');
|
|
break;
|
|
case "loanscreenreport":
|
|
location.path('/loanscreenreport/' + accountId);
|
|
break;
|
|
case "reschedule":
|
|
location.path('/loans/' +accountId + '/reschedule');
|
|
break;
|
|
case "adjustrepaymentschedule":
|
|
location.path('/adjustrepaymentschedule/'+accountId) ;
|
|
break ;
|
|
case "undolastdisbursal":
|
|
location.path('/loanaccount/' + accountId + '/undolastdisbursal');
|
|
break;
|
|
case "schedulepreview":
|
|
scope.previewSchedule();
|
|
break;
|
|
case "addsubsidy":
|
|
location.path('/loanaccount/' + accountId + '/addsubsidy');
|
|
break;
|
|
case "revokesubsidy":
|
|
location.path('/loanaccount/' + accountId + '/revokesubsidy');
|
|
break;
|
|
case "foreclosure":
|
|
location.path('loanforeclosure/' + accountId);
|
|
break;
|
|
}
|
|
};
|
|
|
|
scope.delCharge = function (id) {
|
|
$modal.open({
|
|
templateUrl: 'delcharge.html',
|
|
controller: DelChargeCtrl,
|
|
resolve: {
|
|
ids: function () {
|
|
return id;
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
var DelChargeCtrl = function ($scope, $modalInstance, ids) {
|
|
$scope.delete = function () {
|
|
resourceFactory.LoanAccountResource.delete({loanId: routeParams.id, resourceType: 'charges', chargeId: ids}, {}, function (data) {
|
|
|
|
$modalInstance.close('delete');
|
|
route.reload();
|
|
});
|
|
};
|
|
$scope.cancel = function () {
|
|
$modalInstance.dismiss('cancel');
|
|
};
|
|
};
|
|
|
|
scope.tabs = [
|
|
{ active: true },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false },
|
|
{ active: false }
|
|
];
|
|
|
|
|
|
/* For multiple disbursement loans, if second loan is due for disbursement, disburse button does not appearing,
|
|
hot fix is done by adding "associations: multiTranchDataRequest,isFetchSpecificData: true" in the first request itself
|
|
*/
|
|
|
|
resourceFactory.LoanAccountResource.getLoanAccountDetails({loanId: routeParams.id, associations: 'all', exclude: 'guarantors'}, function (data) {
|
|
scope.loandetails = data;
|
|
$rootScope.loanproductName = data.loanProductName;
|
|
$rootScope.clientId=data.clientId;
|
|
$rootScope.LoanHolderclientName=data.clientName;
|
|
scope.convertDateArrayToObject('date');
|
|
scope.recalculateInterest = data.recalculateInterest || true;
|
|
scope.isWaived = scope.loandetails.repaymentSchedule.totalWaived > 0;
|
|
scope.date.fromDate = new Date(data.timeline.actualDisbursementDate);
|
|
scope.date.toDate = new Date();
|
|
scope.status = data.status.value;
|
|
scope.chargeAction = data.status.value == "Submitted and pending approval" ? true : false;
|
|
scope.decimals = data.currency.decimalPlaces;
|
|
if (scope.loandetails.charges) {
|
|
scope.charges = scope.loandetails.charges;
|
|
for (var i in scope.charges) {
|
|
if (scope.charges[i].paid || scope.charges[i].waived || scope.charges[i].chargeTimeType.value == 'Disbursement' || scope.loandetails.status.value != 'Active') {
|
|
var actionFlag = true;
|
|
}
|
|
else {
|
|
var actionFlag = false;
|
|
}
|
|
scope.charges[i].actionFlag = actionFlag;
|
|
}
|
|
|
|
scope.chargeTableShow = true;
|
|
}
|
|
else {
|
|
scope.chargeTableShow = false;
|
|
}
|
|
if (scope.status == "Submitted and pending approval" || scope.status == "Active" || scope.status == "Approved") {
|
|
scope.choice = true;
|
|
}
|
|
if (data.status.value == "Submitted and pending approval") {
|
|
scope.buttons = { singlebuttons: [
|
|
{
|
|
name: "button.addloancharge",
|
|
icon: "icon-plus-sign",
|
|
taskPermissionName: 'CREATE_LOANCHARGE'
|
|
},
|
|
{
|
|
name: "button.approve",
|
|
icon: "icon-ok",
|
|
taskPermissionName: 'APPROVE_LOAN'
|
|
},
|
|
{
|
|
name: "button.modifyapplication",
|
|
icon: "icon-edit",
|
|
taskPermissionName: 'UPDATE_LOAN'
|
|
},
|
|
{
|
|
name: "button.reject",
|
|
icon: "icon-remove",
|
|
taskPermissionName: 'REJECT_LOAN'
|
|
}
|
|
],
|
|
options: [
|
|
{
|
|
name: "button.assignloanofficer",
|
|
taskPermissionName: 'UPDATELOANOFFICER_LOAN'
|
|
},
|
|
{
|
|
name: "button.withdrawnbyclient",
|
|
taskPermissionName: 'WITHDRAW_LOAN'
|
|
},
|
|
{
|
|
name: "button.delete",
|
|
taskPermissionName: 'DELETE_LOAN'
|
|
},
|
|
{
|
|
name: "button.addcollateral",
|
|
taskPermissionName: 'CREATE_COLLATERAL'
|
|
},
|
|
{
|
|
name: "button.listguarantor",
|
|
taskPermissionName: 'READ_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.createguarantor",
|
|
taskPermissionName: 'CREATE_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.loanscreenreport",
|
|
taskPermissionName: 'READ_LOAN'
|
|
}
|
|
]
|
|
|
|
};
|
|
if(data.isVariableInstallmentsAllowed) {
|
|
scope.buttons.options.push({
|
|
name: "button.adjustrepaymentschedule",
|
|
taskPermissionName: 'ADJUST_REPAYMENT_SCHEDULE'
|
|
}) ;
|
|
}
|
|
}
|
|
|
|
if (data.status.value == "Approved") {
|
|
scope.buttons = { singlebuttons: [
|
|
{
|
|
name: "button.assignloanofficer",
|
|
icon: "icon-user",
|
|
taskPermissionName: 'UPDATELOANOFFICER_LOAN'
|
|
},
|
|
{
|
|
name: "button.disburse",
|
|
icon: "icon-flag",
|
|
taskPermissionName: 'DISBURSE_LOAN'
|
|
},
|
|
{
|
|
name: "button.disbursetosavings",
|
|
icon: "icon-flag",
|
|
taskPermissionName: 'DISBURSETOSAVINGS_LOAN'
|
|
},
|
|
{
|
|
name: "button.undoapproval",
|
|
icon: "icon-undo",
|
|
taskPermissionName: 'APPROVALUNDO_LOAN'
|
|
}
|
|
],
|
|
options: [
|
|
{
|
|
name: "button.addloancharge",
|
|
taskPermissionName: 'CREATE_LOANCHARGE'
|
|
},
|
|
{
|
|
name: "button.listguarantor",
|
|
taskPermissionName: 'READ_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.createguarantor",
|
|
taskPermissionName: 'CREATE_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.loanscreenreport",
|
|
taskPermissionName: 'READ_LOAN'
|
|
}
|
|
]
|
|
|
|
};
|
|
}
|
|
|
|
if (data.status.value == "Active") {
|
|
scope.buttons = { singlebuttons: [
|
|
{
|
|
name: "button.addloancharge",
|
|
icon: "icon-plus-sign",
|
|
taskPermissionName: 'CREATE_LOANCHARGE'
|
|
},
|
|
{
|
|
name: "button.makerepayment",
|
|
icon: "icon-dollar",
|
|
taskPermissionName: 'REPAYMENT_LOAN'
|
|
},
|
|
{
|
|
name: "button.undodisbursal",
|
|
icon: "icon-undo",
|
|
taskPermissionName: 'DISBURSALUNDO_LOAN'
|
|
}
|
|
],
|
|
options: [
|
|
{
|
|
name: "button.addsubsidy",
|
|
taskPermissionName: 'READ_SUBSIDY'
|
|
},
|
|
{
|
|
name: "button.waiveinterest",
|
|
taskPermissionName: 'WAIVEINTERESTPORTION_LOAN'
|
|
},
|
|
{
|
|
name: "button.reschedule",
|
|
taskPermissionName: 'CREATE_RESCHEDULELOAN'
|
|
},
|
|
{
|
|
name: "button.writeoff",
|
|
taskPermissionName: 'WRITEOFF_LOAN'
|
|
},
|
|
{
|
|
name: "button.close-rescheduled",
|
|
taskPermissionName: 'CLOSEASRESCHEDULED_LOAN'
|
|
},
|
|
{
|
|
name: "button.close",
|
|
taskPermissionName: 'CLOSE_LOAN'
|
|
},
|
|
{
|
|
name: "button.loanscreenreport",
|
|
taskPermissionName: 'READ_LOAN'
|
|
},
|
|
{
|
|
name: "button.schedulepreview",
|
|
taskPermissionName: 'READ_LOAN'
|
|
},
|
|
{
|
|
name: "button.listguarantor",
|
|
taskPermissionName: 'READ_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.createguarantor",
|
|
taskPermissionName: 'CREATE_GUARANTOR'
|
|
},
|
|
{
|
|
name: "button.recoverguarantee",
|
|
taskPermissionName: 'RECOVERGUARANTEES_LOAN'
|
|
},
|
|
{
|
|
name: "button.undolastdisbursal",
|
|
taskPermissionName: 'DISBURSALLASTUNDO_LOAN'
|
|
}
|
|
]
|
|
|
|
};
|
|
|
|
for(var i = 0; i < scope.loandetails.transactions.length; i++){
|
|
if(scope.loandetails.transactions[i].type.value == "Add Subsidy"){
|
|
scope.buttons.options.unshift({
|
|
name: "button.revokesubsidy",
|
|
taskPermissionName: 'READ_SUBSIDY'
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < scope.loandetails.transactions.length; i++) {
|
|
if (angular.isUndefined(scope.loandetails.interestRecalculationData) || !scope.loandetails.interestRecalculationData.isSubsidyApplicable) {
|
|
scope.buttons.options.splice(0, 1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (data.canDisburse) {
|
|
scope.buttons.singlebuttons.splice(1, 0, {
|
|
name: "button.disburse",
|
|
icon: "icon-flag",
|
|
taskPermissionName: 'DISBURSE_LOAN'
|
|
});
|
|
scope.buttons.singlebuttons.splice(1, 0, {
|
|
name: "button.disbursetosavings",
|
|
icon: "icon-flag",
|
|
taskPermissionName: 'DISBURSETOSAVINGS_LOAN'
|
|
});
|
|
}
|
|
var count = 0;
|
|
for(var i in data.disbursementDetails){
|
|
if(data.disbursementDetails[i].actualDisbursementDate){
|
|
count++;
|
|
}
|
|
}
|
|
if(count <= 1){
|
|
scope.buttons.options.splice(scope.buttons.options.length-1,1);
|
|
}
|
|
//loan officer not assigned to loan, below logic
|
|
//helps to display otherwise not
|
|
if (!data.loanOfficerName) {
|
|
scope.buttons.singlebuttons.splice(1, 0, {
|
|
name: "button.assignloanofficer",
|
|
icon: "icon-user",
|
|
taskPermissionName: 'UPDATELOANOFFICER_LOAN'
|
|
});
|
|
}
|
|
|
|
if(scope.recalculateInterest && scope.loandetails.interestRecalculationData){
|
|
scope.hideTransactionDetails = scope.loandetails.interestRecalculationData.isCompoundingToBePostedAsTransaction || false;
|
|
scope.buttons.singlebuttons.splice(1, 0, {
|
|
name: "button.prepayment",
|
|
icon: "icon-money",
|
|
taskPermissionName: 'REPAYMENT_LOAN'
|
|
});
|
|
}else{
|
|
scope.buttons.singlebuttons.splice(1, 0, {
|
|
name: "button.foreclosure",
|
|
icon: "icon-money",
|
|
taskPermissionName: 'FORECLOSURE_LOAN'
|
|
});
|
|
}
|
|
}
|
|
if (data.status.value == "Overpaid") {
|
|
scope.buttons = { singlebuttons: [
|
|
{
|
|
name: "button.transferFunds",
|
|
icon: "icon-exchange",
|
|
taskPermissionName: 'CREATE_ACCOUNTTRANSFER'
|
|
}
|
|
]
|
|
};
|
|
}
|
|
if (data.status.value == "Closed (written off)") {
|
|
scope.buttons = { singlebuttons: [
|
|
{
|
|
name: "button.recoverypayment",
|
|
icon: "icon-briefcase",
|
|
taskPermissionName: 'RECOVERYPAYMENT_LOAN'
|
|
}
|
|
]
|
|
};
|
|
}
|
|
scope.isWriteOff = false;
|
|
if(scope.loandetails.summary!=null) {
|
|
if (scope.loandetails.summary.writeoffReasonId != null) {
|
|
scope.isWriteOff = true;
|
|
}
|
|
}
|
|
//scope.getAllLoanNotes();
|
|
scope.convertDateArrayToObject('date');
|
|
});
|
|
|
|
scope.isRepaymentSchedule = false;
|
|
scope.istransactions = false;
|
|
scope.iscollateral = false;
|
|
scope.isMultiDisburseDetails = false;
|
|
scope.isInterestRatesPeriods = false;
|
|
scope.ischarges = false;
|
|
scope.getSpecificData = function (associations){
|
|
scope.isDataAlreadyFetched = false;
|
|
if(associations === 'repaymentSchedule'){
|
|
associations = "repaymentSchedule,futureSchedule,originalSchedule";
|
|
}
|
|
if(associations === 'multiDisburseDetails'){
|
|
associations = "multiDisburseDetails,emiAmountVariations";
|
|
}
|
|
if((associations === 'repaymentSchedule' || associations === 'repaymentSchedule,futureSchedule,originalSchedule' )&& scope.isRepaymentSchedule === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}else if(associations === 'transactions' && scope.istransactions === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}else if(associations === 'collateral' && scope.iscollateral === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}else if(associations === 'multiDisburseDetails,emiAmountVariations' && scope.isMultiDisburseDetails === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}else if(associations === 'interestRatesPeriods' && scope.isInterestRatesPeriods === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}else if(associations === 'charges' && scope.ischarges === true){
|
|
scope.isDataAlreadyFetched = true;
|
|
}
|
|
if(!scope.isDataAlreadyFetched){
|
|
resourceFactory.LoanAccountResource.getLoanAccountDetails({loanId: routeParams.id, associations: associations,isFetchSpecificData: true}, function (data) {
|
|
scope.loanSpecificData = data;
|
|
if(associations === 'repaymentSchedule' || associations === 'repaymentSchedule,futureSchedule,originalSchedule'){
|
|
scope.isRepaymentSchedule = true;
|
|
scope.loandetails.originalSchedule = scope.loanSpecificData.originalSchedule;
|
|
scope.loandetails.repaymentSchedule = scope.loanSpecificData.repaymentSchedule;
|
|
scope.isWaived = scope.loandetails.repaymentSchedule.totalWaived > 0;
|
|
}else if(associations === 'transactions'){
|
|
scope.istransactions = true;
|
|
scope.loandetails.transactions = scope.loanSpecificData.transactions;
|
|
scope.convertDateArrayToObject('date');
|
|
}else if(associations === 'collateral'){
|
|
scope.iscollateral = true;
|
|
scope.loandetails.collateral = scope.loanSpecificData.collateral;
|
|
}else if(associations === 'multiDisburseDetails,emiAmountVariations'){
|
|
scope.isMultiDisburseDetails = true;
|
|
scope.loandetails.disbursementDetails = scope.loanSpecificData.disbursementDetails;
|
|
scope.loandetails.emiAmountVariations = scope.loanSpecificData.emiAmountVariations;
|
|
}else if(associations === 'interestRatesPeriods'){
|
|
scope.isInterestRatesPeriods = true;
|
|
scope.loandetails.interestRatesPeriods = scope.loanSpecificData.interestRatesPeriods;
|
|
}else if(associations === 'charges'){
|
|
scope.ischarges = true;
|
|
scope.loandetails.charges = scope.loanSpecificData.charges;
|
|
if (scope.loandetails.charges) {
|
|
scope.charges = scope.loandetails.charges;
|
|
for (var i in scope.charges) {
|
|
if (scope.charges[i].paid || scope.charges[i].waived || scope.charges[i].chargeTimeType.value == 'Disbursement' || scope.loandetails.status.value != 'Active') {
|
|
var actionFlag = true;
|
|
}
|
|
else {
|
|
var actionFlag = false;
|
|
}
|
|
scope.charges[i].actionFlag = actionFlag;
|
|
}
|
|
|
|
scope.chargeTableShow = true;
|
|
}else {
|
|
scope.chargeTableShow = false;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
resourceFactory.loanResource.getAllNotes({loanId: routeParams.id,resourceType:'notes'}, function (data) {
|
|
scope.loanNotes = data;
|
|
});
|
|
|
|
resourceFactory.glimResource.getAllByLoan({loanId: routeParams.id}, function (data) {
|
|
scope.glimClientsDetails = data;
|
|
scope.isGlim = data.length>0;
|
|
});
|
|
scope.getChargeWaiveLink = function(loanId, chargeId){
|
|
var suffix = "loanaccountcharge/"+loanId+"/waivecharge/"+chargeId
|
|
var link = scope.isGlim?"#/glim"+suffix:"#/"+suffix;
|
|
return link;
|
|
}
|
|
|
|
scope.saveNote = function () {
|
|
resourceFactory.loanResource.save({loanId: routeParams.id, resourceType: 'notes'}, this.formData, function (data) {
|
|
var today = new Date();
|
|
temp = { id: data.resourceId, note: scope.formData.note, createdByUsername: "test", createdOn: today };
|
|
scope.loanNotes.push(temp);
|
|
scope.formData.note = "";
|
|
scope.predicate = '-id';
|
|
});
|
|
};
|
|
|
|
scope.getLoanDocuments = function () {
|
|
resourceFactory.LoanDocumentResource.getLoanDocuments({loanId: routeParams.id}, function (data) {
|
|
for (var i in data) {
|
|
var loandocs = {};
|
|
loandocs = API_VERSION + '/loans/' + data[i].parentEntityId + '/documents/' + data[i].id + '/attachment?tenantIdentifier=' + $rootScope.tenantIdentifier;
|
|
data[i].docUrl = loandocs;
|
|
}
|
|
scope.loandocuments = data;
|
|
});
|
|
|
|
};
|
|
|
|
scope.routeToRepaymentSchedule = function (glimId, disbursedAmount, clientId, clientName) {
|
|
$rootScope.principalAmount = disbursedAmount;
|
|
scope.disbursementDate = new Date(scope.loandetails.timeline.actualDisbursementDate);
|
|
$rootScope.disbursementDate = dateFilter(scope.disbursementDate, scope.df);
|
|
$rootScope.loanId = scope.loandetails.id;
|
|
$rootScope.clientName = clientName;
|
|
$rootScope.clientId = clientId;
|
|
location.path('/viewglimrepaymentschedule/' + glimId);
|
|
}
|
|
|
|
scope.getTotalAmount = function (amount1, amount2, amount3, amount4) {
|
|
amount4 = amount4 == null ? 0 : amount4;
|
|
return (amount1 + amount2 + amount3 + amount4).toFixed(2);
|
|
}
|
|
|
|
scope.getTotalOutstandingLoanBalance = function () {
|
|
return scope.glimPrincipalOutstandingAmount + scope.glimInterestOutstandingAmount + scope.glimFeeOutstandingAmount + scope.glimFeepenaltyOutstandingAmount
|
|
+ scope.glimFeepenaltyOutstandingAmount.toFixed(2);
|
|
}
|
|
|
|
resourceFactory.DataTablesResource.getAllDataTables({apptable: 'm_loan'}, function (data) {
|
|
scope.loandatatables = data;
|
|
});
|
|
|
|
scope.dataTableChange = function (datatable) {
|
|
resourceFactory.DataTablesResource.getTableDetails({datatablename: datatable.registeredTableName,
|
|
entityId: routeParams.id, genericResultSet: 'true'}, function (data) {
|
|
scope.datatabledetails = data;
|
|
scope.datatabledetails.isData = data.data.length > 0 ? true : false;
|
|
scope.datatabledetails.isMultirow = data.columnHeaders[0].columnName == "id" ? true : false;
|
|
scope.showDataTableAddButton = !scope.datatabledetails.isData || scope.datatabledetails.isMultirow;
|
|
scope.showDataTableEditButton = scope.datatabledetails.isData && !scope.datatabledetails.isMultirow;
|
|
scope.singleRow = [];
|
|
for (var i in data.columnHeaders) {
|
|
if (scope.datatabledetails.columnHeaders[i].columnCode) {
|
|
for (var j in scope.datatabledetails.columnHeaders[i].columnValues) {
|
|
for (var k in data.data) {
|
|
if (data.data[k].row[i] == scope.datatabledetails.columnHeaders[i].columnValues[j].id) {
|
|
data.data[k].row[i] = scope.datatabledetails.columnHeaders[i].columnValues[j].value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (scope.datatabledetails.isData) {
|
|
for (var i in data.columnHeaders) {
|
|
if (!scope.datatabledetails.isMultirow) {
|
|
var row = {};
|
|
row.key = data.columnHeaders[i].columnName;
|
|
row.value = data.data[0].row[i];
|
|
scope.singleRow.push(row);
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
scope.export = function () {
|
|
scope.report = true;
|
|
scope.printbtn = false;
|
|
scope.viewReport = false;
|
|
scope.viewLoanReport = true;
|
|
scope.viewTransactionReport = false;
|
|
};
|
|
|
|
scope.viewJournalEntries = function(){
|
|
location.path("/searchtransaction/").search({loanId: scope.loandetails.id});
|
|
};
|
|
|
|
scope.viewLoanDetails = function () {
|
|
scope.report = false;
|
|
scope.hidePentahoReport = true;
|
|
scope.viewReport = false;
|
|
};
|
|
|
|
scope.backToLoanDetails = function () {
|
|
scope.previewRepayment = "";
|
|
scope.report = false;
|
|
}
|
|
|
|
scope.viewLoanCollateral = function (collateralId){
|
|
location.path('/loan/'+scope.loandetails.id+'/viewcollateral/'+collateralId).search({status:scope.loandetails.status.value});
|
|
};
|
|
|
|
scope.viewDataTable = function (registeredTableName,data){
|
|
if (scope.datatabledetails.isMultirow) {
|
|
location.path("/viewdatatableentry/"+registeredTableName+"/"+scope.loandetails.id+"/"+data.row[0]);
|
|
}else{
|
|
location.path("/viewsingledatatableentry/"+registeredTableName+"/"+scope.loandetails.id);
|
|
}
|
|
};
|
|
|
|
scope.viewLoanChargeDetails = function (chargeId) {
|
|
location.path('/loan/'+scope.loandetails.id+'/viewcharge/'+chargeId).search({loanstatus:scope.loandetails.status.value});
|
|
};
|
|
|
|
scope.viewRepaymentDetails = function() {
|
|
|
|
scope.loanApprovedDate = new Date(scope.loandetails.timeline.approvedOnDate);
|
|
scope.loanApprovedDate = dateFilter(scope.loanApprovedDate, scope.df);
|
|
|
|
if(scope.report == false){
|
|
scope.repaymentscheduleinfo = scope.loandetails.originalSchedule;
|
|
scope.repaymentData = [];
|
|
scope.disbursedData = [];
|
|
for(var i in scope.repaymentscheduleinfo.periods) {
|
|
if(scope.repaymentscheduleinfo.periods[i].period) {
|
|
scope.repaymentData.push(scope.repaymentscheduleinfo.periods[i]);
|
|
} else {
|
|
scope.disbursedData.push(scope.repaymentscheduleinfo.periods[i]);
|
|
}
|
|
}
|
|
}
|
|
scope.previewRepayment = true;
|
|
scope.report = true;
|
|
}
|
|
|
|
scope.printDiv = function(print) {
|
|
var printContents = document.getElementById(print).innerHTML;
|
|
var popupWin = window.open('', '_blank', 'width=300,height=300');
|
|
popupWin.document.open();
|
|
popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="styles/repaymentscheduleprintstyle.css" />' +
|
|
'</head><body onload="window.print()">' + printContents + '<br></body></html>');
|
|
popupWin.document.close();
|
|
}
|
|
|
|
scope.viewprintdetails = function () {
|
|
//scope.printbtn = true;
|
|
scope.report = true;
|
|
scope.viewTransactionReport = false;
|
|
scope.viewReport = true;
|
|
scope.hidePentahoReport = true;
|
|
scope.formData.outputType = 'PDF';
|
|
scope.baseURL = $rootScope.hostUrl + API_VERSION + "/runreports/" + encodeURIComponent("Client Loan Account Schedule");
|
|
scope.baseURL += "?output-type=" + encodeURIComponent(scope.formData.outputType) + "&tenantIdentifier=" + $rootScope.tenantIdentifier+"&locale="+scope.optlang.code;
|
|
|
|
var reportParams = "";
|
|
scope.startDate = dateFilter(scope.date.fromDate, 'yyyy-MM-dd');
|
|
scope.endDate = dateFilter(scope.date.toDate, 'yyyy-MM-dd');
|
|
var paramName = "R_startDate";
|
|
reportParams += encodeURIComponent(paramName) + "=" + encodeURIComponent(scope.startDate)+ "&";
|
|
paramName = "R_endDate";
|
|
reportParams += encodeURIComponent(paramName) + "=" + encodeURIComponent(scope.endDate)+ "&";
|
|
paramName = "R_selectLoan";
|
|
reportParams += encodeURIComponent(paramName) + "=" + encodeURIComponent(scope.loandetails.accountNo);
|
|
if (reportParams > "") {
|
|
scope.baseURL += "&" + reportParams;
|
|
}
|
|
// allow untrusted urls for iframe http://docs.angularjs.org/error/$sce/insecurl
|
|
scope.viewReportDetails = $sce.trustAsResourceUrl(scope.baseURL);
|
|
|
|
};
|
|
|
|
scope.viewloantransactionreceipts = function (transactionId) {
|
|
//scope.printbtn = true;
|
|
scope.report = true;
|
|
scope.viewTransactionReport = true;
|
|
scope.viewLoanReport = false;
|
|
scope.viewReport = true;
|
|
scope.hidePentahoReport = true;
|
|
scope.formData.outputType = 'PDF';
|
|
scope.baseURL = $rootScope.hostUrl + API_VERSION + "/runreports/" + encodeURIComponent("Loan Transaction Receipt");
|
|
scope.baseURL += "?output-type=" + encodeURIComponent(scope.formData.outputType) + "&tenantIdentifier=" + $rootScope.tenantIdentifier+"&locale="+scope.optlang.code;
|
|
|
|
var reportParams = "";
|
|
var paramName = "R_transactionId";
|
|
reportParams += encodeURIComponent(paramName) + "=" + encodeURIComponent(transactionId);
|
|
if (reportParams > "") {
|
|
scope.baseURL += "&" + reportParams;
|
|
}
|
|
// allow untrusted urls for iframe http://docs.angularjs.org/error/$sce/insecurl
|
|
scope.viewReportDetails = $sce.trustAsResourceUrl(scope.baseURL);
|
|
|
|
};
|
|
scope.viewloantransactionjournalentries = function(transactionId){
|
|
var transactionId = "L" + transactionId;
|
|
if(scope.loandetails.clientId != null && scope.loandetails.clientId != ""){
|
|
location.path('/viewtransactions/' + transactionId).search({productName: scope.loandetails.loanProductName,loanId:scope.loandetails.id,clientId: scope.loandetails.clientId,
|
|
accountNo: scope.loandetails.accountNo,clientName: scope.loandetails.clientName});
|
|
}else{
|
|
location.path('/viewtransactions/' + transactionId).search({productName: scope.loandetails.loanProductName,loanId:scope.loandetails.id,accountNo: scope.loandetails.accountNo,
|
|
groupId :scope.loandetails.group.id,groupName :scope.loandetails.group.name});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
scope.printReport = function () {
|
|
window.print();
|
|
window.close();
|
|
}
|
|
|
|
scope.deleteAll = function (apptableName, entityId) {
|
|
resourceFactory.DataTablesResource.delete({datatablename: apptableName, entityId: entityId, genericResultSet: 'true'}, {}, function (data) {
|
|
route.reload();
|
|
});
|
|
};
|
|
|
|
scope.deleteDocument = function (documentId, index) {
|
|
resourceFactory.LoanDocumentResource.delete({loanId: scope.loandetails.id, documentId: documentId}, '', function (data) {
|
|
scope.loandocuments.splice(index, 1);
|
|
});
|
|
};
|
|
|
|
scope.downloadDocument = function (documentId) {
|
|
|
|
};
|
|
|
|
scope.transactionSort = {
|
|
column: 'date',
|
|
descending: true
|
|
};
|
|
scope.changeTransactionSort = function(column) {
|
|
var sort = scope.transactionSort;
|
|
if (sort.column == column) {
|
|
sort.descending = !sort.descending;
|
|
} else {
|
|
sort.column = column;
|
|
sort.descending = true;
|
|
}
|
|
};
|
|
|
|
scope.showEdit = function(disbursementDetail){
|
|
if((!disbursementDetail.actualDisbursementDate || disbursementDetail.actualDisbursementDate == null)
|
|
&& ((scope.status == 'Submitted and pending approval' && !scope.response.uiDisplayConfigurations.
|
|
viewLoanAccountDetails.isHiddenFeild.editTranches) || (scope.status =='Approved' && !scope.response.uiDisplayConfigurations.
|
|
viewLoanAccountDetails.isHiddenFeild.editTranches) || scope.status == 'Active')){
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
scope.showApprovedAmountBasedOnStatus = function () {
|
|
if (scope.status == 'Submitted and pending approval' || scope.status == 'Withdrawn by applicant' || scope.status == 'Rejected') {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
scope.showDisbursedAmountBasedOnStatus = function(){
|
|
if(scope.status == 'Submitted and pending approval' ||scope.status == 'Withdrawn by applicant' || scope.status == 'Rejected' ||
|
|
scope.status == 'Approved'){
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
scope.checkStatus = function(){
|
|
if(scope.status == 'Active' || scope.status == 'Closed (obligations met)' || scope.status == 'Overpaid' ||
|
|
scope.status == 'Closed (rescheduled)' || scope.status == 'Closed (written off)'){
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
scope.previewSchedule = function () {
|
|
$modal.open({
|
|
templateUrl: 'showschedule.html',
|
|
controller: PreviewScheduleCtrl,
|
|
windowClass: 'app-modal-window'
|
|
});
|
|
};
|
|
|
|
var PreviewScheduleCtrl = function ($scope, $modalInstance) {
|
|
$scope.loandetails = scope.loandetails;
|
|
resourceFactory.loanResource.get({loanId: routeParams.id, resourceType: 'schedulepreview'}, function (data) {
|
|
$scope.repaymentscheduleinfo = data;
|
|
});
|
|
|
|
$scope.cancel = function () {
|
|
$modalInstance.dismiss('cancel');
|
|
};
|
|
};
|
|
|
|
/***
|
|
* we are using orderBy(https://docs.angularjs.org/api/ng/filter/orderBy) filter to sort fields in ui
|
|
* api returns dates in array format[yyyy, mm, dd], converting the array of dates to date object
|
|
* @param dateFieldName
|
|
*/
|
|
scope.convertDateArrayToObject = function(dateFieldName){
|
|
for(var i in scope.loandetails.transactions){
|
|
scope.loandetails.transactions[i][dateFieldName] = new Date(scope.loandetails.transactions[i].date);
|
|
}
|
|
};
|
|
|
|
scope.showAddDeleteTrancheButtons = function(action){
|
|
scope.return = true;
|
|
if(scope.status == 'Closed (obligations met)' || scope.status == 'Overpaid' ||
|
|
scope.status == 'Closed (rescheduled)' || scope.status == 'Closed (written off)' ||
|
|
scope.status =='Submitted and pending approval'){
|
|
scope.return = false;
|
|
}
|
|
scope.totalDisbursedAmount = 0;
|
|
scope.count = 0;
|
|
for(var i in scope.loandetails.disbursementDetails){
|
|
if(scope.loandetails.disbursementDetails[i].actualDisbursementDate != null){
|
|
scope.totalDisbursedAmount += scope.loandetails.disbursementDetails[i].principal;
|
|
}
|
|
else{
|
|
scope.count += 1;
|
|
}
|
|
}
|
|
if(scope.totalDisbursedAmount == scope.loandetails.approvedPrincipal || scope.return == false){
|
|
return false;
|
|
}
|
|
if(scope.count == 0 && action == 'deletedisbursedetails'){
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
}
|
|
});
|
|
mifosX.ng.application.controller('ViewLoanDetailsController', ['$scope', '$routeParams', 'ResourceFactory', '$location', '$route', '$http', '$modal', 'dateFilter', 'API_VERSION', '$sce', '$rootScope', mifosX.controllers.ViewLoanDetailsController]).run(function ($log) {
|
|
$log.info("ViewLoanDetailsController initialized");
|
|
});
|
|
}(mifosX.controllers || {}));
|