Feat: Collateral Module (#3398)

This commit is contained in:
Benura Abeywardena 2022-10-14 14:15:33 +05:30 committed by GitHub
parent 4eb953d569
commit 43b78100a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 1206 additions and 98 deletions

View File

@ -2,6 +2,8 @@
"#Common": "....",
"#Headings": "..",
"label.heading.totalshares": "Total Shares",
"label.heading.editcollateral": "Edit Collateral",
"label.heading.collaterals": "Collaterals",
"label.heading.sharenominalprice": "Nominal/Unit Price",
"label.heading.totalsharestobeissued": "Total Shares to be Issued",
"label.heading.sharecapitalvalue": "Total Shares Capital Value",
@ -11,6 +13,16 @@
"label.heading.equityaccount": "Equity Account",
"label.heading.allowdividendsforinactiveclients": "Allow dividends for inactive clients",
"label.heading.name": "Name",
"label.heading.quality": "Quality/Type",
"label.heading.basePrice": "Base Price",
"label.heading.pctToBase": "Base Percentage",
"label.heading.unitType": "Unit Type",
"label.heading.quantity": "Quantity",
"label.heading.totalValue": "Total Value",
"label.heading.totalCollateralValue": "Total Collateral Value",
"label.heading.lastRepayment": "Last Repayment",
"label.heading.remainingAmount": "Remaining Amount",
"label.heading.lastRepaymentDate": "Last Repayment Date",
"label.heading.alias": "Alias",
"label.heading.amountDue": "Amount Due",
"label.heading.cbid": "Credit Bureau ID",
@ -126,6 +138,9 @@
"label.heading.fromdate": "From Date:",
"label.heading.interestrate": "Interest Rate",
"label.heading.patternupdate": "Pattern Update",
"label.input.collateralName": "Collateral Name",
"label.input.quantity": "Quantity",
"label.input.collateralSelection": "Collaterals",
"label.input.between": "Between",
"label.input.provisioningcriteria": "Provisioning Criteria",
"label.input.floatingratename": "Floating Rate Name",
@ -205,6 +220,8 @@
"label.menu.businessRule": "Select Business Rule",
"#Anchors": "..",
"label.anchor.delete": "Delete",
"label.anchor.editCollateral": "Edit Collateral",
"label.anchor.createcollateral": "Create Collateral",
"label.achor.activate": "Activate",
"label.anchor.close": "Close",
"label.anchor.assignstaff": "Assign Staff",
@ -216,6 +233,9 @@
"label.anchor.editpermissions": "Edit Permissions",
"#Inputs": "..",
"label.input.name": "Name",
"label.input.unittype": "Unit Type",
"label.input.pcttobase": "Percentage To Base",
"label.input.baseprice": "Base Price",
"label.input.firstname": "First name",
"label.input.lastname": "Last name",
"label.input.middlename": "Middle name",
@ -264,6 +284,7 @@
"label.input.group": "Group",
"label.input.meetingcalendar": "Meeting calendar",
"label.input.total": "Total",
"label.input.totalCollateralValue": "Total Collateral Value",
"label.input.note": "Note",
"label.input.dueforcollectedon": "Due for collection on:",
"label.input.language": "Language",
@ -298,6 +319,9 @@
"label.input.email": "Email",
"#Buttons": "..",
"label.button.previous": "Previous",
"label.button.createcollateral": "Create Collateral",
"label.button.viewcollaterals": "View Collaterals",
"label.button.createclientcollateral": "Create Client Collateral",
"label.button.next": "Next",
"label.button.save": "Submit",
"label.button.searchdata": "Search Data",
@ -1317,13 +1341,13 @@
"label.heading.loanproduct": "Loan Product",
"label.heading.addloancharge": "Add Loan Charge",
"label.heading.addloancollateral": "Add Loan Collateral",
"label.heading.createcollateral": "Create Collateral",
"label.heading.uploaddocument": "Upload Document",
"label.heading.assignloanofficer": "Assign Loan Officer",
"label.heading.guarantor": "Guarantor",
"label.heading.createguarantor": "Create Guarantor",
"label.heading.editloanaccount": "Edit Loan Account",
"label.heading.editloanapplication": "Edit Loan Application",
"label.heading.collaterals": "Collateral",
"label.heading.value": "Value",
"label.heading.loanamountandbalance": "Loan Amount and Balance",
"label.heading.totalcostofloan": "Total Cost of Loan",
@ -4368,8 +4392,11 @@
"label.anchor.rates": "Rates",
"label.anchor.collaterals": "Collaterals Management",
"label.anchor.clientcollateral": "Client Collateral Management",
"label.heading.rates": "Rates",
"label.rates" : "Define rates for loan products, savings and deposit products.",
"label.collaterals": "Define collaterals for Collateral Management",
"label.button.createrate" : "Create Rate",
"label.anchor.createrate" : "Create Rate",
"label.heading.rateappliesto" : "Rate applies to",

View File

@ -0,0 +1,65 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateClientCollateralController: function (scope, resourceFactory, routeParams, location) {
scope.formData = {};
scope.clientId = routeParams.id;
scope.collateralData = {};
scope.disable = true;
scope.collateralDataRequestBody = {};
scope.collateralId;
scope.updateValues = function () {
scope.formData.quantity = scope.formData.quantity * 1.0;
scope.formData.total = scope.formData.quantity * scope.formData.basePrice;
scope.formData.totalCollateral = scope.formData.total * scope.formData.pctToBase/100.00;
}
scope.collateralProductChange = function (collateralId) {
resourceFactory.collateralResource.get({collateralId: collateralId}, function (data) {
scope.collateralData = data;
scope.collateralId = collateralId;
scope.formData.name = scope.collateralData.name;
scope.formData.type = scope.collateralData.quality;
scope.formData.basePrice = scope.collateralData.basePrice;
scope.formData.pctToBase = scope.collateralData.pctToBase;
scope.formData.unitType = scope.collateralData.unitType;
scope.formData.collateralId = collateralId;
scope.formData.quantity = 0.0;
scope.formData.total = 0.0;
scope.formData.totalCollateral = 0.0
scope.disabled = false;
});
}
resourceFactory.collateralResource.getAllCollaterals(function (data) {
scope.collaterals = data;
});
scope.cancel = function () {
location.path('/viewclient/' + scope.clientId);
};
scope.submit = function () {
this.formData.locale = scope.optlang.code;
delete this.formData.name;
delete this.formData.pctToBase;
delete this.formData.basePrice;
delete this.formData.type;
delete this.formData.unitType;
delete this.formData.total;
delete this.formData.totalCollateral;
resourceFactory.clientcollateralResource.save({clientId: scope.clientId}, this.formData, function (data) {
location.path('/viewclient/' + scope.clientId + '/viewclientcollateral/' + data.resourceId);
});
};
}
});
mifosX.ng.application.controller('CreateClientCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', mifosX.controllers.CreateClientCollateralController]).run(function ($log) {
$log.info("CreateClientCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,39 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditClientCollateralController: function (scope, resourceFactory, routeParams, location) {
scope.formData = {};
scope.clientId = routeParams.id;
scope.collateralId = routeParams.collateralId;
scope.collateralDataRequestBody = {};
resourceFactory.clientcollateralResource.get({clientId: scope.clientId, collateralParamId: scope.collateralId}, function (data) {
scope.collaterals = data;
scope.formData = {
name: data.name,
quantity: data.quantity,
total: data.total,
totalCollateral: data.totalCollateral
}
});
scope.cancel = function () {
location.path('/viewclient/' + scope.clientId);
};
scope.submit = function () {
this.formData.locale = scope.optlang.code;
scope.collateralDataRequestBody.collateralId = scope.collateralId;
scope.collateralDataRequestBody.quantity = this.formData.quantity;
scope.collateralDataRequestBody.locale = this.formData.locale;
resourceFactory.clientcollateralResource.update({clientId: scope.clientId, collateralParamId: scope.collateralId}, scope.collateralDataRequestBody, function (data) {
location.path('/viewclient/' + scope.clientId + '/viewclientcollateral/' + data.resourceId);
});
};
}
});
mifosX.ng.application.controller('EditClientCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', mifosX.controllers.EditClientCollateralController]).run(function ($log) {
$log.info("EditClientCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,18 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewAllClientCollateralController: function (scope, resourceFactory, routeParams, location) {
scope.clientId = routeParams.id;
scope.routeTo = function (id) {
location.path('/clients/' + routeParams.id + '/viewclientcollateral/' + id);
};
scope.CollateralPerPage = 15;
resourceFactory.clientcollateralResource.getAllCollaterals({clientId: scope.clientId}, function (data) {
scope.collaterals = data;
});
}
});
mifosX.ng.application.controller('ViewAllClientCollateralController', ['$scope', 'ResourceFactory', '$location', mifosX.controllers.ViewAllClientCollateralController]).run(function ($log) {
$log.info("ViewAllClientCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,47 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewClientCollateralController: function (scope, resourceFactory, routeParams, location, $uibModal) {
scope.formData = {};
scope.clientId = routeParams.id;
scope.collateralId = routeParams.collateralId;
scope.loanTransactions = [];
resourceFactory.clientcollateralResource.get({clientId: scope.clientId, collateralParamId: scope.collateralId}, function (data) {
scope.collateral = data;
scope.loanTransactions = scope.collateral.loanTransactionData;
for (var i=0; i<scope.loanTransactions.length; i++){
scope.loanTransactions[i].lastRepaymentDate.date = new Date(scope.loanTransactions[i].lastRepaymentDate.date);
}
});
scope.deleteClientCollateral = function () {
$uibModal.open({
templateUrl: 'deleteclientcollateral.html',
controller: CollateralDeleteCtrl
});
};
scope.TransactionsPerPage =15;
var CollateralDeleteCtrl = function ($scope, $uibModalInstance) {
$scope.delete = function () {
resourceFactory.clientcollateralResource.delete({clientId: scope.clientId, collateralParamId: scope.collateralId}, function (data) {
$uibModalInstance.close('delete');
location.path('/viewclient/' + scope.clientId);
});
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
};
scope.cancel = function () {
location.path('/viewclient/' + scope.clientId);
};
}
});
mifosX.ng.application.controller('ViewClientCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', '$uibModal', mifosX.controllers.ViewClientCollateralController]).run(function ($log) {
$log.info("ViewClientCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -18,6 +18,8 @@
scope.charges = [];
scope.legalform = 'm_client';
scope.collaterals = [];
// address
scope.addresses=[];
@ -96,23 +98,14 @@
}
// end of address
// family members
scope.families=[];
resourceFactory.familyMembers.get({clientId:routeParams.id},function(data)
{
scope.families=data;
});
scope.deleteFamilyMember=function(clientFamilyMemberId)
@ -126,6 +119,10 @@
}
scope.viewCollaterals=function() {
location.path('/clients/'+ routeParams.id +'/viewallclientcollaterals');
}
scope.editFamilyMember=function(clientFamilyMemberId)
{
@ -173,9 +170,15 @@
location.path('/viewshareaccount/'+id)
};
scope.routeToCollateral = function(id) {
location.path('/viewclient/' + routeParams.id + '/viewclientcollateral/' + id);
}
scope.haveFile = [];
resourceFactory.clientResource.get({clientId: routeParams.id}, function (data) {
scope.client = data;
scope.collaterals = scope.client.clientCollateralManagements;
scope.collateralSize = scope.collaterals.length;
scope.isClosedClient = scope.client.status.value == 'Closed';
scope.staffData.staffId = data.staffId;
if (data.imagePresent) {

View File

@ -45,11 +45,15 @@
scope.formData.externalId = data.externalId;
//update collaterals
resourceFactory.clientcollateralTemplateResource.getAllCollaterals({clientId: scope.clientId}, function(data) {
scope.collateralsData = data;
if (scope.loanaccountinfo.collateral) {
for (var i in scope.loanaccountinfo.collateral) {
scope.collaterals.push({type: scope.loanaccountinfo.collateral[i].type.id, name: scope.loanaccountinfo.collateral[i].type.name, value: scope.loanaccountinfo.collateral[i].value, description: scope.loanaccountinfo.collateral[i].description});
scope.collateralsData = scope.collateralsData.filter((x) => x.collateralId !== scope.loanaccountinfo.collateral[i].clientCollateralId);
}
}
});
scope.previewClientLoanAccInfo();
scope.ratesEnabled= scope.loanaccountinfo.isRatesEnabled;
@ -70,7 +74,6 @@
resourceFactory.loanResource.get(inparams, function (data) {
scope.loanaccountinfo = data;
scope.collaterals = [];
scope.previewClientLoanAccInfo();
});
@ -79,6 +82,27 @@
});
}
scope.collateralAddedDataArray = [];
scope.addCollateral = function () {
scope.collateralAddedDataArray.push(scope.collateralsData.filter((collateral) => scope.collateralFormData.collateralId == collateral.collateralId)[0]);
scope.collateralsData = scope.collateralsData.filter((collateral) => scope.collateralFormData.collateralId != collateral.collateralId);
scope.collaterals.push({collateralId: scope.collateralFormData.collateralId, quantity: scope.collateralFormData.quantity, total: scope.collateralFormData.total, totalCollateral: scope.collateralFormData.totalCollateral});
};
scope.updateValues = function() {
scope.collateralObject = scope.collateralsData.filter((collateral) => collateral.collateralId == scope.collateralFormData.collateralId)[0];
scope.collateralFormData.total = scope.collateralFormData.quantity * scope.collateralObject.basePrice;
scope.collateralFormData.totalCollateral = scope.collateralFormData.total * scope.collateralObject.pctToBase / 100.0;
}
scope.deleteCollateral = function (index) {
scope.collateralId = scope.collaterals[index].collateralId;
scope.collateralObject = scope.collateralAddedDataArray.filter((collateral) => collateral.collateralId == scope.collateralId)[0];
scope.collateralsData.push(scope.collateralObject);
scope.collaterals.splice(index, 1);
};
scope.previewClientLoanAccInfo = function () {
scope.previewRepayment = false;
for (var i in scope.loanaccountinfo.charges) {
@ -263,19 +287,6 @@
}
};
scope.addCollateral = function () {
if (scope.collateralFormData.collateralIdTemplate && scope.collateralFormData.collateralValueTemplate) {
scope.collaterals.push({type: scope.collateralFormData.collateralIdTemplate.id, name: scope.collateralFormData.collateralIdTemplate.name, value: scope.collateralFormData.collateralValueTemplate, description: scope.collateralFormData.collateralDescriptionTemplate});
scope.collateralFormData.collateralIdTemplate = undefined;
scope.collateralFormData.collateralValueTemplate = undefined;
scope.collateralFormData.collateralDescriptionTemplate = undefined;
}
};
scope.deleteCollateral = function (index) {
scope.collaterals.splice(index, 1);
};
scope.previewRepayments = function () {
// Make sure charges and collaterals are empty before initializing.
delete scope.formData.charges;
@ -294,14 +305,6 @@
}
}
if (scope.collaterals.length > 0) {
scope.formData.collateral = [];
for (var i in scope.collaterals) {
scope.formData.collateral.push({type: scope.collaterals[i].type, value: scope.collaterals[i].value, description: scope.collaterals[i].description});
}
}
if (this.formData.syncRepaymentsWithMeeting) {
if(scope.loanaccountinfo.calendarOptions){
this.formData.calendarId = scope.loanaccountinfo.calendarOptions[0].id;
@ -350,12 +353,17 @@
}
}
scope.formData.collateral = [];
if (scope.collaterals.length > 0) {
scope.formData.collateral = [];
for (var i in scope.collaterals) {
scope.formData.collateral.push({type: scope.collaterals[i].type, value: scope.collaterals[i].value, description: scope.collaterals[i].description});
scope.formData.collateral.push({clientCollateralId: scope.collaterals[i].collateralId, quantity: scope.collaterals[i].quantity * 1.0});
}
if (scope.loanaccountinfo.collateral) {
for (var i in scope.loanaccountinfo.collateral) {
scope.collateralsData = scope.collateralsData.filter((x) => x.collateralId !== scope.loanaccountinfo.collateral[i].clientCollateralId);
scope.formData.collateral.push({clientCollateralId: scope.loanaccountinfo.collateral[i].clientCollateralId, id: scope.loanaccountinfo.collateral[i].id, quantity: scope.loanaccountinfo.collateral[i].quantity});
}
}
;
}
if (this.formData.syncRepaymentsWithMeeting) {

View File

@ -24,6 +24,9 @@
scope.disabled = true;
scope.translate= translate;
scope.rateFlag=false;
scope.collateralAddedDataArray = [];
scope.collateralsData = {};
scope.addedCollateral = {};
scope.date.first = new Date();
@ -49,9 +52,11 @@
}
scope.inparams.staffInSelectedOfficeOnly = true;
scope.currencyType;
resourceFactory.loanResource.get(scope.inparams, function (data) {
scope.products = data.productOptions;
console.log(scope.products);
scope.ratesEnabled = data.isRatesEnabled;
if (data.clientName) {
@ -66,6 +71,10 @@
// _.isUndefined(scope.datatables) ? scope.tempDataTables = [] : scope.tempDataTables = scope.datatables;
// WizardHandler.wizard().removeSteps(1, scope.tempDataTables.length);
scope.inparams.productId = loanProductId;
resourceFactory.clientcollateralTemplateResource.getAllCollaterals({clientId: scope.clientId, prodId: loanProductId}, function(data) {
scope.collateralsData = data;
scope.collateralsData = scope.collateralsData.filter((collateral) => collateral.quantity != 0);
});
// scope.datatables = [];
resourceFactory.loanResource.get(scope.inparams, function (data) {
scope.loanaccountinfo = data;
@ -285,15 +294,21 @@
};
scope.addCollateral = function () {
if (scope.collateralFormData.collateralIdTemplate && scope.collateralFormData.collateralValueTemplate) {
scope.collaterals.push({type: scope.collateralFormData.collateralIdTemplate.id, name: scope.collateralFormData.collateralIdTemplate.name, value: scope.collateralFormData.collateralValueTemplate, description: scope.collateralFormData.collateralDescriptionTemplate});
scope.collateralFormData.collateralIdTemplate = undefined;
scope.collateralFormData.collateralValueTemplate = undefined;
scope.collateralFormData.collateralDescriptionTemplate = undefined;
}
scope.collateralAddedDataArray.push(scope.collateralsData.filter((collateral) => scope.collateralFormData.collateralId == collateral.collateralId)[0]);
scope.collateralsData = scope.collateralsData.filter((collateral) => scope.collateralFormData.collateralId != collateral.collateralId);
scope.collaterals.push({collateralId: scope.collateralFormData.collateralId, quantity: scope.collateralFormData.quantity, total: scope.collateralFormData.total, totalCollateral: scope.collateralFormData.totalCollateral});
};
scope.updateValues = function() {
scope.collateralObject = scope.collateralsData.filter((collateral) => collateral.collateralId == scope.collateralFormData.collateralId)[0];
scope.collateralFormData.total = scope.collateralFormData.quantity * scope.collateralObject.basePrice;
scope.collateralFormData.totalCollateral = scope.collateralFormData.total * scope.collateralObject.pctToBase / 100.0;
}
scope.deleteCollateral = function (index) {
scope.collateralId = scope.collaterals[index].collateralId;
scope.collateralObject = scope.collateralAddedDataArray.filter((collateral) => collateral.collateralId == scope.collateralId)[0];
scope.collateralsData.push(scope.collateralObject);
scope.collaterals.splice(index, 1);
};
@ -404,9 +419,8 @@
if (scope.collaterals.length > 0) {
scope.formData.collateral = [];
for (var i in scope.collaterals) {
scope.formData.collateral.push({type: scope.collaterals[i].type, value: scope.collaterals[i].value, description: scope.collaterals[i].description});
scope.formData.collateral.push({clientCollateralId: scope.collaterals[i].collateralId, quantity: scope.collaterals[i].quantity * 1.0});
}
;
}
if (this.formData.syncRepaymentsWithMeeting) {

View File

@ -0,0 +1,15 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewLoanCollateralDataController: function (scope, resourceFactory, routeParams, location, $uibModal) {
scope.loanId = routeParams.id;
scope.collateralId = routeParams.collateralId;
resourceFactory.loancollateralResource.get({collateralId: scope.collateralId}, function (data) {
scope.collateral = data;
});
}
});
mifosX.ng.application.controller('ViewLoanCollateralDataController', ['$scope', 'ResourceFactory', '$routeParams', '$location', '$uibModal', mifosX.controllers.ViewLoanCollateralDataController]).run(function ($log) {
$log.info("ViewLoanCollateralDataController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,18 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CollateralController: function (scope, resourceFactory, location) {
scope.routeTo = function (id) {
location.path('/viewcollateral/' + id);
};
scope.CollateralPerPage =15;
resourceFactory.collateralResource.getAllCollaterals(function (data) {
scope.collaterals = data;
});
}
});
mifosX.ng.application.controller('CollateralController', ['$scope', 'ResourceFactory', '$location', mifosX.controllers.CollateralController]).run(function ($log) {
$log.info("CollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,28 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateCollateralController: function (scope, resourceFactory, routeParams, location) {
scope.currencyOptions = [];
scope.formData = {};
scope.collateralId = routeParams.id;
resourceFactory.collateralTemplateResource.getAllCurrency(function (data) {
scope.currencyOptions = data;
});
scope.cancel = function () {
location.path('/collaterals/');
};
scope.submit = function () {
this.formData.locale = scope.optlang.code;
resourceFactory.collateralResource.save(this.formData, function (data) {
location.path('/viewcollateral/' + data.resourceId);
});
};
}
});
mifosX.ng.application.controller('CreateCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', mifosX.controllers.CreateCollateralController]).run(function ($log) {
$log.info("CreateCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,39 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditCollateralController: function (scope, resourceFactory, routeParams, location) {
scope.collateralId = routeParams.id;
resourceFactory.collateralTemplateResource.getAllCurrency(function (data) {
scope.currencyOptions = data;
});
resourceFactory.collateralResource.get({collateralId: scope.collateralId}, function (data) {
scope.collateral = data;
scope.formData = {
name: data.name,
unitType: data.unitType,
basePrice: data.basePrice,
type: data.quality,
pctToBase: data.pctToBase,
currency: data.currency
};
});
scope.cancel = function () {
location.path('/collaterals');
};
scope.submit = function () {
this.formData.locale = scope.optlang.code;
resourceFactory.collateralResource.update({collateralId: scope.collateralId}, this.formData, function (data) {
location.path('/viewcollateral/' + scope.collateralId);
});
};
}
});
mifosX.ng.application.controller('EditCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', mifosX.controllers.EditCollateralController]).run(function ($log) {
$log.info("EditCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,33 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewCollateralController: function (scope, resourceFactory, routeParams, location, $uibModal) {
scope.collateralId = routeParams.id;
resourceFactory.collateralResource.get({collateralId: scope.collateralId}, function (data) {
scope.collateral = data;
});
scope.deleteCollateral = function () {
$uibModal.open({
templateUrl: 'deletecollateralprod.html',
controller: CollateralDeleteCtrl
});
};
var CollateralDeleteCtrl = function ($scope, $uibModalInstance) {
$scope.delete = function () {
resourceFactory.collateralResource.delete({collateralId: scope.collateralId}, function (data) {
$uibModalInstance.close('delete');
location.path('/viewcollateral/' + scope.collateralId);
});
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
};
}
});
mifosX.ng.application.controller('ViewCollateralController', ['$scope', 'ResourceFactory', '$routeParams', '$location', '$uibModal', mifosX.controllers.ViewCollateralController]).run(function ($log) {
$log.info("ViewCollateralController initialized");
});
}(mifosX.controllers || {}));

View File

@ -34,6 +34,7 @@ define(['Q', 'underscore', 'mifosX'], function (Q) {
'loanAccount/AssignLoanOfficerController',
'loanAccount/EditLoanAccAppController',
'loanAccount/ViewLoanCollateralController',
'loanAccount/ViewLoanCollateralDataController',
'loanAccount/EditLoanCollateralController',
'loanAccount/ViewLoanChargeController',
'loanAccount/EditLoanChargeController',
@ -52,6 +53,10 @@ define(['Q', 'underscore', 'mifosX'], function (Q) {
'loanAccount/CreditReportUploadThitsaWorksController',
'groups/AssignStaffController',
'client/ClientController',
'client/CreateClientCollateralController',
'client/EditClientCollateralController',
'client/ViewClientCollateralController',
'client/ViewAllClientCollateralsController',
'client/EditClientController',
'client/ViewClientController',
'client/CreateClientController',
@ -99,6 +104,10 @@ define(['Q', 'underscore', 'mifosX'], function (Q) {
'product/InterestRateChartController',
'product/CreateInterestRateChartController',
'product/EditInterestRateChartController',
'product/CollateralController',
'product/CreateCollateralController',
'product/ViewCollateralController',
'product/EditCollateralController',
'user/UserController',
'user/UserFormController',
'user/UserSettingController',

View File

@ -187,8 +187,8 @@
.when('/loan/:loanId/editcollateral/:id', {
templateUrl: 'views/loans/editloancollateral.html'
})
.when('/loan/:loanId/viewcollateral/:id', {
templateUrl: 'views/loans/viewloancollateral.html'
.when('/loan/:id/viewcollateral/:collateralId', {
templateUrl: 'views/loans/viewloancollateraldata.html'
})
.when('/loan/:loanId/viewcharge/:id', {
templateUrl: 'views/loans/viewloancharge.html'
@ -220,6 +220,24 @@
.when('/viewcharge/:id', {
templateUrl: 'views/products/viewcharge.html'
})
.when('/collaterals', {
templateUrl: 'views/products/collaterals.html'
})
.when('/createclientcollateral/:id', {
templateUrl: 'views/clients/createclientcollateral.html'
})
.when('/viewclient/:id/editclientcollateral/:collateralId', {
templateUrl: 'views/clients/editclientcollateral.html'
})
.when('/viewclient/:id/viewclientcollateral/:collateralId', {
templateUrl: 'views/clients/viewclientcollateral.html'
})
.when('/viewclient/:id/viewallclientcollaterals', {
templateUrl: 'views/clients/viewallclientcollaterals.html'
})
.when('/viewcollateral/:id', {
templateUrl: 'views/products/viewcollateral.html'
})
.when('/floatingrates', {
templateUrl: 'views/products/floatingrates/FloatingRates.html'
})
@ -701,9 +719,18 @@
.when('/createcharge', {
templateUrl: 'views/products/createcharge.html'
})
.when('/createcollateral', {
templateUrl: 'views/products/createcollateral.html'
})
.when('/editcharge/:id', {
templateUrl: 'views/products/editcharge.html'
})
.when('/editcollateral/:id', {
templateUrl: 'views/products/editcollateral.html'
})
.when('/loan/:id/viewcollateraldata/:collateralId', {
templateUrl: 'views/products/viewcollateraldata.html'
})
.when('/productivesheet/:officeId/:officeName/:meetingDate/:staffId', {
templateUrl: 'views/collection/productivecollectionsheet.html'
})

View File

@ -167,6 +167,25 @@
getCharge: {method: 'GET', params: {}},
update: {method: 'PUT', params: {}}
}),
clientcollateralResource: defineResource(apiVer + "/clients/:clientId/collaterals/:collateralParamId", {clientId: '@clientId', collateralParamId: '@collateralParamId'}, {
getAllCollaterals: {method: 'GET', params: {}, isArray: true},
get: {method: 'GET', params: {}},
update: {method: 'PUT', params: {}},
delete: {method: 'DELETE'}
}),
clientcollateralTemplateResource: defineResource(apiVer + "/clients/:clientId/collaterals/template", {clientId: '@clientId', prodId: '@prodId'}, {
getAllCollaterals: {method: 'GET', params: {prodId: '@prodId'}, isArray: true},
}),
collateralResource: defineResource(apiVer + "/collateral-management/:collateralId", {collateralId: '@collateralId'}, {
getAllCollaterals: {method: 'GET', params: {}, isArray: true},
get: {method: 'GET', params: {}},
update: {method: 'PUT', params: {}},
save: {method: 'POST', params: {}},
delete: {method: 'DELETE', params: {}}
}),
collateralTemplateResource: defineResource(apiVer + "/collateral-management/template", {}, {
getAllCurrency: {method: 'GET', params: {}, isArray: true},
}),
chargeTemplateResource: defineResource(apiVer + "/charges/template", {
get: {method: 'GET', params: {}, isArray: true},
getChargeTemplates: {method: 'GET', params: {}}
@ -214,6 +233,9 @@
loanTrxnsResource: defineResource(apiVer + "/loans/:loanId/transactions/:transactionId", {loanId: '@loanId', transactionId: '@transactionId'}, {
get: {method: 'GET', params: {}}
}),
loancollateralResource: defineResource(apiVer + "/loan-collateral-management/:collateralId", {collateralId: '@collateralId'}, {
get: {method: 'GET', params: {}},
}),
LoanAccountResource: defineResource(apiVer + "/loans/:loanId/:resourceType/:chargeId", {loanId: '@loanId', resourceType: '@resourceType', chargeId: '@chargeId'}, {
getLoanAccountDetails: {method: 'GET', params: {}},
update: {method: 'PUT'}

View File

@ -0,0 +1,113 @@
<div class="content-container" ng-controller="CreateClientCollateralController">
<div class="card">
<div class="content">
<div class="toolbar">
<h4>{{ 'label.heading.createcollateral' | translate }}</h4>
</div>
<br/>
<form name="createcollateralform" class="form-horizontal" ng-submit="submit()">
<api-validate></api-validate>
<fieldset>
<div class="form-group">
<label class="control-label col-sm-2" for="collateralId">{{ 'label.input.collateralSelection' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<select id="collateralId" ng-model="formData.collateralId" class="form-control"
ng-options="collateral.id as collateral.name for collateral in collaterals"
value="{{collateral.id}}" ng-change="collateralProductChange(formData.collateralId)"></select>
</div>
</div>
<div class="form-group" ng-show="disabled == false">
<label class="control-label col-sm-2" for="name">{{ 'label.input.name' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="name" name="name" type="text" class="form-control" ng-model="formData.name" required disabled>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="type">{{ 'label.input.type' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="type" name="type" type="text" class="form-control" ng-model="formData.type" disabled>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="unitType">{{ 'label.input.unittype' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="unitType" class="form-control" ng-model="formData.unitType" disabled>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="basePrice">{{'label.input.baseprice' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="basePrice" name="basePrice" type="text" ng-model="formData.basePrice" class="form-control" number-format disabled/>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="pctToBase">{{'label.input.pcttobase' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="pctToBase" name="pctToBase" type="text" ng-model="formData.pctToBase" class="form-control" number-format disabled/>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="quantity">{{'label.input.quantity' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="quantity" name="quantity" type="text" ng-model="formData.quantity" ng-change="updateValues()" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-2">
<form-validate valattributeform="createcollateralform" valattribute="quantity"/>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="total">{{'label.input.total' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="total" name="total" type="text" ng-model="formData.total" class="form-control" number-format required disabled/>
</div>
</div>
<div class="form-group" ng-if="disabled == false">
<label class="control-label col-sm-2" for="totalCollateral">{{'label.input.totalCollateralValue' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="totalCollateral" name="totalCollateral" type="text" ng-model="formData.totalCollateral" class="form-control" number-format required disabled/>
</div>
</div>
<div class="col-md-offset-3" ng-if="disabled == false">
<button id="cancel" type="reset" class="btn btn-default" ng-click="cancel()">{{ 'label.button.cancel' | translate
}}
</button>
<button id="save" type="submit" has-permission='CREATE_CLIENT_COLLATERAL' class="btn btn-primary">{{ 'label.button.save' | translate }}</button>
</div>
</fieldset>
</form>
</div>
</div>
</div>

View File

@ -0,0 +1,66 @@
<div class="content-container" ng-controller="EditClientCollateralController">
<div class="card">
<div class="content">
<div class="toolbar">
<h4>{{ 'label.heading.editcollateral' | translate }}</h4>
</div>
<br/>
<form name="editcollateralform" class="form-horizontal" ng-submit="submit()">
<api-validate></api-validate>
<fieldset>
<div class="form-group">
<label class="control-label col-sm-2" for="name">{{ 'label.input.name' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="name" name="name" type="text" class="form-control" ng-model="formData.name" required disabled>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="quantity">{{'label.input.quantity' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="quantity" name="quantity" type="text" ng-model="formData.quantity" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-2">
<form-validate valattributeform="createcollateralform" valattribute="quantity"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="total">{{'label.input.total' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="total" name="total" type="text" ng-model="formData.total" class="form-control" number-format disabled/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="totalCollateral">{{'label.input.totalCollateralValue' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="totalCollateral" name="totalCollateral" type="text" ng-model="formData.totalCollateral" class="form-control" number-format disabled/>
</div>
</div>
<div class="col-md-offset-3">
<button id="cancel" type="reset" class="btn btn-default" ng-click="cancel()">{{ 'label.button.cancel' | translate
}}
</button>
<button id="save" type="submit" has-permission='CREATE_CLIENT_COLLATERAL' class="btn btn-primary">{{ 'label.button.save' | translate }}</button>
</div>
</fieldset>
</form>
</div>
</div>
</div>

View File

@ -0,0 +1,38 @@
<div class="content-container" ng-controller="ViewAllClientCollateralController">
<ul class="breadcrumb">
<li><a href="#/viewclients">{{'label.anchor.clients' | translate}}</a></li>
<li class="active">{{'label.anchor.collaterals' | translate}}</li>
</ul>
<div class="card well">
<div class="toolbar">
<h4>List of Collaterals</h4>
</div>
<br>
<div class="row">
<div class="col-md-2 col-sm-3 paddedbottom20">
<a href="#/createclientcollateral/{{clientId}}" class="btn btn-primary pull-right" has-permission='CREATE_CLIENT_COLLATERAL'><i class="fa fa-plus "></i>&nbsp;&nbsp;{{'label.button.createclientcollateral' | translate}}</a>
</div>
</div>
<table class="table">
<thead>
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.quantity' | translate}}</th>
<th>{{'label.heading.totalValue' | translate}}</th>
<th>{{'label.heading.totalCollateralValue' | translate}}</th>
</tr>
</thead>
<tbody>
<tr class="pointer-main" dir-paginate="collateral in collaterals | orderBy:'name':reverse | itemsPerPage: CollateralsPerPage">
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.name | translate}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.quantity}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.totalValue}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.totalCollateralValue}}</td>
</tr>
</tbody>
</table>
<dir-pagination-controls boundary-links="true" template-url="bower_components/angular-utils-pagination/dirPagination.tpl.html"></dir-pagination-controls>
</div>
</div>

View File

@ -226,6 +226,11 @@
<li data-ng-show="client.status.value=='Active'">
<a href="#/createshareaccount/{{client.id}}" has-permission='CREATE_SHAREACCOUNT'>{{'label.button.newshareaccount' | translate}}</a>
</li>
<li data-ng-show="client.status.value=='Active'">
<a href="#/createclientcollateral/{{client.id}}" has-permission='CREATE_COLLATERAL'>{{'label.button.createcollateral' | translate}}</a>
</li>
<li data-ng-show="client.status.value=='Active'">
<a href="#/newclientfixeddepositaccount/{{client.id}}" has-permission='CREATE_FIXEDDEPOSITACCOUNT'>{{'label.newfixeddepositaccount' | translate}}</a>
</li>
@ -481,6 +486,41 @@
</tr>
</table>
</div>
<!-- Collateral Overview -->
<div data-ng-show="collateralSize != 0">
<div class="pull-right">
<span>
<button type="button" data-ng-click="viewCollaterals()"
class="btn-primary btn btn-sm">
{{ 'label.button.viewcollaterals' | translate }}
</button>
</span>
</div>
<div class="span gray-head">
<span class="boldlabel">
<strong>{{'label.heading.collaterals' | translate }}</strong>
</span>
</div>
<table class="table table-condensed">
<tr class="graybg">
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.quantity' | translate}}</th>
<th>{{'label.heading.totalValue' | translate}}</th>
<th>{{'label.heading.totalCollateralValue' | translate}}</th>
</tr>
<tr class="pointer-main"
ng-repeat="collateral in client.clientCollateralManagements">
<td class="pointer" data-ng-click="routeToCollateral(collateral.id)">
{{collateral.id}}
</td>
<td class="pointer" data-ng-click="routeToCollateral(collateral.name)">{{collateral.name}}</td>
<td class="pointer" data-ng-click="routeToCollateral(collateral.id)">{{collateral.quantity}}</td>
<td class="pointer" data-ng-click="routeToCollateral(collateral.id)">{{collateral.total}}</td>
<td class="pointer center" data-ng-click="routeToCollateral(collateral.id)">{{collateral.totalCollateral}}</td>
</tr>
</table>
</div>
<!-- Fixed deposits overview -->
<div data-ng-show="showFixed">
<div class="pull-right">

View File

@ -0,0 +1,73 @@
<div class="content-container" ng-controller="ViewClientCollateralController">
<ul class="breadcrumb">
<li><a href="#/clients">{{'label.anchor.clients' | translate}}</a></li>
<li><a href="#/viewclient/{{clientId}}">{{'label.anchor.clientcollateral' | translate}}</a></li>
<li class="active">{{collateralId}}</li>
</ul>
<div class="card well">
<h3 class="bolder">{{collateral.name}}
<div class="form-group pull-right">
<a href="#/viewclient/{{clientId}}/editclientcollateral/{{collateralId}}" class="btn btn-primary" has-permission='UPDATE_CLIENT_COLLATERAL_PRODUCT'><i class="fa fa-edit "></i>&nbsp;&nbsp;{{'label.button.edit' | translate}}</a>
<button type="button" data-ng-click="deleteClientCollateral()" class="btn btn-danger" has-permission='DELETE_CLIENT_COLLATERAL_PRODUCT'><i
class="fa fa-trash-o"></i>&nbsp;&nbsp;{{'label.button.delete' | translate}}
</button>
</div>
</h3>
<hr>
<script type="text/ng-template" id="deleteclientcollateral.html">
<div class="modal-header silver">
<h3 class="bolder">{{'label.heading.delete' | translate}}</h3>
</div>
<div class="modal-body">
<api-validate></api-validate>
<br>
<button class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' | translate}}</button>
<button class="btn btn-primary" ng-click="delete()">{{'label.button.confirm' | translate}}</button>
</div>
</script>
<div class="row">
<div class="col-md-6">
<table class="table table-bordered table-striped">
<tr>
<td>{{'label.heading.name' | translate}}</td>
<td>{{collateral.name}}</td>
</tr>
<tr>
<td>{{'label.heading.quantity' | translate}}</td>
<td>{{collateral.quantity}}</td>
</tr>
<tr>
<td>{{'label.heading.totalValue' | translate}}</td>
<td>{{collateral.total}}</td>
</tr>
<tr>
<td>{{'label.heading.totalCollateralValue' | translate}}</td>
<td>{{collateral.totalCollateral}}</td>
</tr>
</table>
</div>
</div>
<div class="row">
<h3 class="bolder"> Transaction Details </h3>
<hr>
<table class="table">
<thead>
<tr class="graybg">
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.lastRepayment' | translate}}</th>
<th>{{'label.heading.remainingAmount' | translate}}</th>
<th>{{'label.heading.lastRepaymentDate' | translate}}</th>
</tr>
</thead>
<tbody>
<tr class="pointer-main" dir-paginate="transaction in loanTransactions | itemsPerPage: TransactionsPerPage">
<td class="pointer" >{{transaction.loanId}}</td>
<td class="pointer" >{{transaction.lastRepayment}}</td>
<td class="pointer" >{{transaction.remainingAmount}}</td>
<td class="pointer" >{{transaction.lastRepaymentDate.date | date}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@ -539,32 +539,55 @@
</table>
</div>
<div class="col-md-12 paddedtop" ng-hide = "response.uiDisplayConfigurations.loanAccount.isHiddenSection.collateralSection == true">
<label><strong>{{ 'label.heading.collaterals' | translate }}</strong></label>
<select ng-model="collateralFormData.collateralIdTemplate" class="form-control width170px"
ng-options="collateralTemplate.name for collateralTemplate in collateralOptions"
value="{{collateralTemplate.id}}">
<label class="control-label col-sm-1">
<strong>{{ 'label.heading.collaterals' | translate }}</strong>
</label>
<select ng-model="collateralFormData.collateralId" ng-options="collateral.collateralId as collateral.name for collateral in collateralsData"
value="{{collateral.collateralId}}" class="form-control width170px col-sm-2">
</select>&nbsp;&nbsp;
<input class="form-control" type="text" ng-model="collateralFormData.collateralValueTemplate"
placeholder="{{'label.input.value' | translate}}">&nbsp;&nbsp;
<input type="text" ng-model="collateralFormData.collateralDescriptionTemplate" class="form-control"
placeholder="{{'label.input.description' | translate}}">
<a ng-click="addCollateral()">&nbsp;<i class="fa fa-plus "></i></a>
<div class="col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.quantity" placeholder="{{'label.input.quantity' | translate}}"
number-format ng-change="updateValues()">
</div>
<div class="col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.total"
number-format readonly>
</div>
<div class="col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.totalCollateral"
number-format readonly>
</div>
<div class="col-sm-1">
<a class="btn btn-primary" ng-click="addCollateral()" class="col-sm-1">&nbsp;
<i class="fa fa-plus "></i>&nbsp;Add</a>
</div>
</div>
<div ng-hide="response.uiDisplayConfigurations.loanAccount.isHiddenSection.collateralSection == true">
<table class="table" class="width100" ng-show="collaterals.length>0">
<table class="" class="width100" ng-show="collaterals.length>0">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.value' | translate}}</th>
<th>{{'label.heading.description' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.quantity' | translate}}</th>
<th>{{'label.heading.totalValue' | translate}}</th>
<th>{{'label.heading.totalCollateralValue' | translate}}</th>
</tr>
<tr ng-repeat="collateral in collaterals">
<td><input type="text" class="form-control" ng-model="collateral.name" readonly></td>
<td><input id="{{collaterals[$index].value}}" type="text" class="form-control"
ng-model="collateral.value"></td>
<td><input id="{{collaterals[$index].description}}" class="form-control" type="text" ng-model="collateral.description"
placeholder="{{'label.input.description' | translate}}"></td>
<td><a ng-click="deleteCollateral($index)"><i class="fa fa-times-circle fa-2x"></i></a></td>
<td>
<input type="text" class="input-sm form-control" ng-model="collateral.collateralId" readonly>
</td>
<td>
<input id="{{collaterals[$index].quantity}}" type="text" class="form-control" ng-model="collateral.quantity" readonly>
</td>
<td>
<input id="total" type="text" class="form-control" ng-model="collateral.total">
</td>
<td>
<input id="totalCollateral" type="text" class="form-control" ng-model="collateral.totalCollateral">
</td>
<td>
<a ng-click="deleteCollateral($index)">
<i class="fa fa-times-circle fa-2x"></i>
</a>
</td>
</tr>
</table>
</div>

View File

@ -1,6 +1,6 @@
<div class="content-container" ng-controller="EditLoanChargeController">
<ul class="breadcrumb">
<li><a href="#/viewloanaccount/{{loanId{{'label.anchor.viewloanaccount' | translate}}</a></li>
<li><a href="#/viewloanaccount/{{loanId{{'label.anchor.viewloanaccount' | translate}}"></a></li>
<li class="active">{{'label.anchor.editloancharge' | translate}}</li>
</ul>
<div class="card">

View File

@ -696,20 +696,24 @@
</table>
</div>
<br>
<div class="form-group" ng-hide="response.uiDisplayConfigurations.loanAccount.isHiddenSection.collateralSection == true">
<div class="form-group">
<label class="control-label col-sm-1">
<strong>{{ 'label.heading.collaterals' | translate }}</strong>
</label>
<select ng-model="collateralFormData.collateralIdTemplate" ng-options="collateralTemplate.name for collateralTemplate in collateralOptions"
value="{{collateralTemplate.id}}" class="form-control width170px col-sm-2">
<select ng-model="collateralFormData.collateralId" ng-options="collateral.collateralId as collateral.name for collateral in collateralsData"
value="{{collateral.collateralId}}" class="form-control width170px col-sm-2">
</select>&nbsp;&nbsp;
<div class="col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.collateralValueTemplate" placeholder="{{'label.input.value' | translate}}"
number-format>
<input class="form-control" type="text" ng-model="collateralFormData.quantity" placeholder="{{'label.input.quantity' | translate}}"
number-format ng-change="updateValues()">
</div>
<div class="col-sm-2">
<input type="text" ng-model="collateralFormData.collateralDescriptionTemplate" placeholder="{{'label.input.description' | translate}}"
class="form-control col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.total"
number-format readonly>
</div>
<div class="col-sm-2">
<input class="form-control" type="text" ng-model="collateralFormData.totalCollateral"
number-format readonly>
</div>
<div class="col-sm-1">
<a class="btn btn-primary" ng-click="addCollateral()" class="col-sm-1">&nbsp;
@ -717,24 +721,26 @@
</div>
</div>
<br>
<div ng-hide="response.uiDisplayConfigurations.loanAccount.isHiddenSection.collateralSection == true">
<div>
<table class="" class="width100" ng-show="collaterals.length>0">
<tr class="graybg">
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.value' | translate}}</th>
<th>{{'label.heading.description' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.quantity' | translate}}</th>
<th>{{'label.heading.totalValue' | translate}}</th>
<th>{{'label.heading.totalCollateralValue' | translate}}</th>
</tr>
<tr ng-repeat="collateral in collaterals">
<td>
<input type="text" class="input-sm form-control" ng-model="collateral.name" readonly>
<input type="text" class="input-sm form-control" ng-model="collateral.collateralId" readonly>
</td>
<td>
<input id="{{collaterals[$index].value}}" type="text" class="form-control" ng-model="collateral.value">
<input id="{{collaterals[$index].quantity}}" type="text" class="form-control" ng-model="collateral.quantity" readonly>
</td>
<td>
<input id="{{collaterals[$index].description}}" type="text" ng-model="collateral.description" placeholder="{{'label.input.description' | translate}}"
class="form-control" />
<input id="total" type="text" class="form-control" ng-model="collateral.total">
</td>
<td>
<input id="totalCollateral" type="text" class="form-control" ng-model="collateral.totalCollateral">
</td>
<td>
<a ng-click="deleteCollateral($index)">

View File

@ -718,15 +718,17 @@
<uib-tab heading="{{'label.heading.loancollaterals' | translate}}" ng-show="loandetails.collateral">
<table class="table">
<thead>
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.value' | translate}}</th>
<th>{{'label.heading.description' | translate}}</th>
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.quantity' | translate}}</th>
<th>{{'label.heading.totalValue' | translate}}</th>
<th>{{'label.heading.totalCollateralValue' | translate}}</th>
</thead>
<tbody>
<tr ng-repeat="collateral in loandetails.collateral" class="pointer-main">
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.type.name}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.value | number}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.description}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.id}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.quantity | number}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.total | number}}</td>
<td class="pointer" data-ng-click="viewLoanCollateral(collateral.id)">{{collateral.totalCollateral | number}}</td>
</tr>
</tbody>
</table>

View File

@ -0,0 +1,53 @@
<div class="content-container" ng-controller="ViewLoanCollateralDataController">
<ul class="breadcrumb">
<li><a href="#/viewloanaccount/{{loanId}}">{{'label.anchor.viewloanaccount' | translate}}</a></li>
<li class="active">{{ 'label.anchor.viewcollateral' | translate}}</li>
</ul>
<!-- <script type="text/ng-template" id="deletecollateral.html">
<div class="modal-header silver">
<h3 class="bolder">{{'label.heading.delete' | translate}}</h3>
</div>
<div class="modal-body">
<api-validate></api-validate>
<br>
<button class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' | translate}}</button>
<button class="btn btn-primary" ng-click="delete()">{{'label.button.confirm' | translate}}</button>
</div>
</script> -->
<div class="card">
<div class="content">
<div class="toolbar">
<h4>{{'label.heading.viewcollateral' | translate}}</h4>
<!-- <div class="pull-right" data-ng-show="showEditButtons">
<div class="btn-group">
<a href="#/loan/{{loanId}}/editloancollateral/{{collateralId}}" class="btn btn-primary btn-sm" has-permission='UPDATE_COLLATERAL'><i
class="fa fa-edit "></i> {{'label.button.edit' | translate}}</a>
<button type="button" ng-click="deleteCollateral()" class="btn btn-danger btn-sm" has-permission='DELETE_COLLATERAL'><i
class="fa fa-trash "></i>{{'label.button.delete' | translate}}
</button>
</div>
</div> -->
</div>
<div class="table-responsive">
<table class="table">
<tr>
<td class="width20">{{'label.heading.id' | translate}}</td>
<td class="width80">{{collateral.collateralId}}</td>
</tr>
<tr>
<td>{{'label.heading.quantity' | translate}}</td>
<td>{{collateral.quantity}}</td>
</tr>
<tr>
<td>{{'label.heading.totalValue' | translate}}</td>
<td>{{collateral.total}}</td>
</tr>
<tr>
<td>{{'label.heading.totalCollateralValue' | translate}}</td>
<td>{{collateral.totalCollateral}}</td>
</tr>
</table>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,40 @@
<div class="content-container" ng-controller="CollateralController">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a></li>
<li class="active">{{'label.anchor.collaterals' | translate}}</li>
</ul>
<div class="card well">
<div class="toolbar">
<h4>List of Collaterals</h4>
</div>
<br>
<div class="row">
<div class="col-md-2 col-sm-3 paddedbottom20">
<a href="#/createcollateral" class="btn btn-primary pull-right" has-permission='CREATE_COLLATERAL'><i class="fa fa-plus "></i>&nbsp;&nbsp;{{'label.button.createcollateral' | translate}}</a>
</div>
</div>
<table class="table">
<thead>
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.quality' | translate}}</th>
<th>{{'label.heading.basePrice' | translate}}</th>
<th>{{'label.heading.pctToBase' | translate}}</th>
<th>{{'label.heading.unitType' | translate}}</th>
</tr>
</thead>
<tbody>
<tr class="pointer-main" dir-paginate="collateral in collaterals | orderBy:'name':reverse | itemsPerPage: CollateralsPerPage">
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.name | translate}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.quality | translate }}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.basePrice}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.pctToBase}}</td>
<td class="pointer" data-ng-click="routeTo(collateral.id)">{{collateral.unitType}}</td>
</tr>
</tbody>
</table>
<dir-pagination-controls boundary-links="true" template-url="bower_components/angular-utils-pagination/dirPagination.tpl.html"></dir-pagination-controls>
</div>
</div>

View File

@ -0,0 +1,96 @@
<div class="content-container" ng-controller="CreateCollateralController">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a></li>
<li><a href="#/collaterals">{{'label.anchor.collaterals' | translate}}</a></li>
<li class="active">{{'label.anchor.createcollateral' | translate}}</li>
</ul>
<div class="card">
<div class="content">
<div class="toolbar">
<h4>{{ 'label.heading.createcollateral' | translate }}</h4>
</div>
<br/>
<form name="createcollateralform" class="form-horizontal" ng-submit="submit()">
<api-validate></api-validate>
<fieldset>
<div class="form-group">
<label class="control-label col-sm-2" for="name">{{ 'label.input.name' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="name" name="name" type="text" class="form-control" ng-model="formData.name" required late-validate>
</div>
<div class="col-sm-2">
<form-validate valattributeform="createcollateralform" valattribute="name"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="quality">{{ 'label.input.type' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="quality" name="quality" type="text" class="form-control" ng-model="formData.quality" required late-validate>
</div>
<div class="col-sm-2">
<form-validate valattributeform="createcollateralform" valattribute="quality"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="unitType">{{ 'label.input.unittype' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="unitType" class="form-control" ng-model="formData.unitType" required late-validate>
</div>
<div class="col-sm-3">
<form-validate valattributeform="createcollateralform" valattribute="unitType"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="basePrice">{{'label.input.baseprice' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="basePrice" name="basePrice" type="text" ng-model="formData.basePrice" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-3">
<form-validate valattributeform="createcollateralform" valattribute="basePrice"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="pctToBase">{{'label.input.pcttobase' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="pctToBase" name="pctToBase" type="text" ng-model="formData.pctToBase" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-3">
<form-validate valattributeform="createcollateralform" valattribute="pctToBase"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="currency">{{ 'label.input.currency' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<select id="currency" name="currency" ng-model="formData.currency" class="form-control"
ng-options="currency.code as currency.name for currency in currencyOptions"
value="{{currency.code}}"></select>
</div>
</div>
<div class="col-md-offset-3">
<button id="cancel" type="reset" class="btn btn-default" ng-click="cancel()">{{ 'label.button.cancel' | translate
}}
</button>
<button id="save" type="submit" has-permission='CREATE_COLLATERAL_PRODUCT' class="btn btn-primary">{{ 'label.button.save' | translate }}</button>
</div>
</fieldset>
</form>
</div>
</div>
</div>

View File

View File

@ -0,0 +1,85 @@
<div class="content-container" ng-controller="EditCollateralController">
<api-validate></api-validate>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a></li>
<li><a href="#/collaterals">{{'label.anchor.collaterals' | translate}}</a></li>
<li class="active">{{'label.anchor.editCollateral' | translate}}</li>
</ul>
<form name="editcollateralform" novalidate class="card form-horizontal well" rc-submit="submit()">
<fieldset>
<legend>{{'label.heading.editcollateral' | translate}}</legend>
<div class="form-group">
<label class="control-label col-sm-2" for="name">{{'label.input.name' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input name="name" ng-autofocus="true" type="text" id="name" ng-model="formData.name" class="form-control" required
late-Validate/>
<form-validate valattributeform="editcollateralform" valattribute="name"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{{'label.input.type' | translate}}<span class="required">*</span></label>
<div class="col-sm-3">
<input id="type" name="type" type="text" class="form-control" ng-model="formData.type" required late-validate>
</div>
<div class="col-sm-2">
<form-validate valattributeform="editcollateralform" valattribute="type"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="unitType">{{ 'label.input.unittype' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="unitType" class="form-control" ng-model="formData.unitType" required late-validate>
</div>
<div class="col-sm-3">
<form-validate valattributeform="editcollateralform" valattribute="unitType"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="basePrice">{{'label.input.baseprice' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="basePrice" name="basePrice" type="text" ng-model="formData.basePrice" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-3">
<form-validate valattributeform="editcollateralform" valattribute="basePrice"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="currency">{{ 'label.input.currency' | translate }}<span
class="required">*</span></label>
<div class="col-sm-3">
<select id="currency" name="currency" ng-model="formData.currency" class="form-control"
ng-options="currency.code as currency.name for currency in currencyOptions"
value="{{currency.code}}"></select>
</div>
<div class="col-sm-3">
<form-validate valattributeform="editcollateralform" valattribute="currency"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="pctToBase">{{'label.input.pcttobase' | translate}}<span
class="required">*</span></label>
<div class="col-sm-3">
<input id="pctToBase" name="pctToBase" type="text" ng-model="formData.pctToBase" class="form-control" number-format required late-Validate/>
</div>
<div class="col-sm-3">
<form-validate valattributeform="editcollateralform" valattribute="pctToBase"/>
</div>
</div>
<div class="col-md-offset-3">
<a id="cancel" href="#/viewcollateral/{{collateralId}}" class="btn btn-default">{{'label.button.cancel' | translate}}</a>
<button id="save" type="submit" class="btn btn-primary" has-permission='UPDATE_COLLATERAL_PRODUCT'>{{'label.button.save' | translate}}</button>
</div>
</fieldset>
</form>
</div>

View File

@ -40,6 +40,12 @@
<p class="list-group-item-text">{{'label.rates' | translate}}</p>
</a>
<a class="list-group-item" href="#/collaterals" has-permission='READ_COLLATERALS'>
<h4 class="list-group-item-heading"><i class="fa fa-bar-chart-o fa fa-large"></i>&nbsp;&nbsp;{{
'label.anchor.collaterals' | translate }}</h4>
<p class="list-group-item-text">{{'label.collaterals' | translate}}</p>
</a>
</div>
</div>
<div class="col-md-6 col-sm-6">

View File

@ -0,0 +1,55 @@
<div class="content-container" ng-controller="ViewCollateralController">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a></li>
<li><a href="#/collaterals">{{'label.anchor.collaterals' | translate}}</a></li>
<li class="active">{{collateralId}}</li>
</ul>
<div class="card well">
<h3 class="bolder">{{collateral.name}}
<div class="form-group pull-right">
<a href="#/editcollateral/{{collateralId}}" class="btn btn-primary" has-permission='UPDATE_COLLATERAL_PRODUCT'><i class="fa fa-edit "></i>&nbsp;&nbsp;{{'label.button.edit' | translate}}</a>
<button type="button" data-ng-click="deleteCollateral()" class="btn btn-danger" has-permission='DELETE_COLLATERAL_PRODUCT'><i
class="fa fa-trash-o"></i>&nbsp;&nbsp;{{'label.button.delete' | translate}}
</button>
</div>
</h3>
<hr>
<script type="text/ng-template" id="deletecollateralprod.html">
<div class="modal-header silver">
<h3 class="bolder">{{'label.heading.delete' | translate}}</h3>
</div>
<div class="modal-body">
<api-validate></api-validate>
<br>
<button class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' | translate}}</button>
<button class="btn btn-primary" ng-click="delete()">{{'label.button.confirm' | translate}}</button>
</div>
</script>
<div class="row">
<div class="col-md-6">
<table class="table table-bordered table-striped">
<tr>
<td>{{'label.heading.name' | translate}}</td>
<td>{{collateral.name}}</td>
</tr>
<tr>
<td>{{'label.heading.quality' | translate}}</td>
<td>{{collateral.quality}}</td>
</tr>
<tr>
<td>{{'label.heading.basePrice' | translate}}</td>
<td>{{collateral.basePrice}}</td>
</tr>
<tr>
<td>{{'label.heading.pctToBase' | translate}}</td>
<td>{{collateral.pctToBase}}</td>
</tr>
<tr>
<td>{{'label.heading.unitType' | translate}}</td>
<td>{{collateral.unitType}}</td>
</tr>
</table>
</div>
</div>
</div>
</div>