From 43b78100a8cd32ac31238c1d051c26a46119ca22 Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Fri, 14 Oct 2022 14:15:33 +0530 Subject: [PATCH] Feat: Collateral Module (#3398) --- app/global-translations/locale-en.json | 29 ++++- .../CreateClientCollateralController.js | 65 ++++++++++ .../client/EditClientCollateralController.js | 39 ++++++ .../ViewAllClientCollateralsController.js | 18 +++ .../client/ViewClientCollateralController.js | 47 ++++++++ .../client/ViewClientController.js | 23 ++-- .../loanAccount/EditLoanAccAppController.js | 66 +++++----- .../loanAccount/NewLoanAccAppController.js | 30 +++-- .../ViewLoanCollateralDataController.js | 15 +++ .../product/CollateralController.js | 18 +++ .../product/CreateCollateralController.js | 28 +++++ .../product/EditCollateralController.js | 39 ++++++ .../product/ViewCollateralController.js | 33 +++++ app/scripts/mifosXComponents.js | 9 ++ app/scripts/routes.js | 31 ++++- .../services/ResourceFactoryProvider.js | 22 ++++ app/views/clients/createclientcollateral.html | 113 ++++++++++++++++++ app/views/clients/editclientcollateral.html | 66 ++++++++++ .../clients/viewallclientcollaterals.html | 38 ++++++ app/views/clients/viewclient.html | 40 +++++++ app/views/clients/viewclientcollateral.html | 73 +++++++++++ app/views/loans/editloanaccount.html | 73 +++++++---- app/views/loans/editloancharge.html | 2 +- app/views/loans/newloanaccount.html | 38 +++--- app/views/loans/viewloanaccountdetails.html | 14 ++- app/views/loans/viewloancollateraldata.html | 53 ++++++++ app/views/products/collaterals.html | 40 +++++++ app/views/products/createcollateral.html | 96 +++++++++++++++ app/views/products/deletecollateral.html | 0 app/views/products/editcollateral.html | 85 +++++++++++++ app/views/products/products.html | 6 + app/views/products/viewcollateral.html | 55 +++++++++ 32 files changed, 1206 insertions(+), 98 deletions(-) create mode 100644 app/scripts/controllers/client/CreateClientCollateralController.js create mode 100644 app/scripts/controllers/client/EditClientCollateralController.js create mode 100644 app/scripts/controllers/client/ViewAllClientCollateralsController.js create mode 100644 app/scripts/controllers/client/ViewClientCollateralController.js create mode 100644 app/scripts/controllers/loanAccount/ViewLoanCollateralDataController.js create mode 100644 app/scripts/controllers/product/CollateralController.js create mode 100644 app/scripts/controllers/product/CreateCollateralController.js create mode 100644 app/scripts/controllers/product/EditCollateralController.js create mode 100644 app/scripts/controllers/product/ViewCollateralController.js create mode 100644 app/views/clients/createclientcollateral.html create mode 100644 app/views/clients/editclientcollateral.html create mode 100644 app/views/clients/viewallclientcollaterals.html create mode 100644 app/views/clients/viewclientcollateral.html create mode 100644 app/views/loans/viewloancollateraldata.html create mode 100644 app/views/products/collaterals.html create mode 100644 app/views/products/createcollateral.html create mode 100644 app/views/products/deletecollateral.html create mode 100644 app/views/products/editcollateral.html create mode 100644 app/views/products/viewcollateral.html diff --git a/app/global-translations/locale-en.json b/app/global-translations/locale-en.json index 7a95bcf8..bce40a1f 100644 --- a/app/global-translations/locale-en.json +++ b/app/global-translations/locale-en.json @@ -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", diff --git a/app/scripts/controllers/client/CreateClientCollateralController.js b/app/scripts/controllers/client/CreateClientCollateralController.js new file mode 100644 index 00000000..e9e03a19 --- /dev/null +++ b/app/scripts/controllers/client/CreateClientCollateralController.js @@ -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 || {})); diff --git a/app/scripts/controllers/client/EditClientCollateralController.js b/app/scripts/controllers/client/EditClientCollateralController.js new file mode 100644 index 00000000..9c194e8d --- /dev/null +++ b/app/scripts/controllers/client/EditClientCollateralController.js @@ -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 || {})); diff --git a/app/scripts/controllers/client/ViewAllClientCollateralsController.js b/app/scripts/controllers/client/ViewAllClientCollateralsController.js new file mode 100644 index 00000000..26f931fb --- /dev/null +++ b/app/scripts/controllers/client/ViewAllClientCollateralsController.js @@ -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 || {})); \ No newline at end of file diff --git a/app/scripts/controllers/client/ViewClientCollateralController.js b/app/scripts/controllers/client/ViewClientCollateralController.js new file mode 100644 index 00000000..1d30ea46 --- /dev/null +++ b/app/scripts/controllers/client/ViewClientCollateralController.js @@ -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 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) { diff --git a/app/scripts/controllers/loanAccount/NewLoanAccAppController.js b/app/scripts/controllers/loanAccount/NewLoanAccAppController.js index c0386a98..16675f35 100755 --- a/app/scripts/controllers/loanAccount/NewLoanAccAppController.js +++ b/app/scripts/controllers/loanAccount/NewLoanAccAppController.js @@ -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) { diff --git a/app/scripts/controllers/loanAccount/ViewLoanCollateralDataController.js b/app/scripts/controllers/loanAccount/ViewLoanCollateralDataController.js new file mode 100644 index 00000000..1b7da607 --- /dev/null +++ b/app/scripts/controllers/loanAccount/ViewLoanCollateralDataController.js @@ -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 || {})); diff --git a/app/scripts/controllers/product/CollateralController.js b/app/scripts/controllers/product/CollateralController.js new file mode 100644 index 00000000..4ae07340 --- /dev/null +++ b/app/scripts/controllers/product/CollateralController.js @@ -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 || {})); \ No newline at end of file diff --git a/app/scripts/controllers/product/CreateCollateralController.js b/app/scripts/controllers/product/CreateCollateralController.js new file mode 100644 index 00000000..56562e4e --- /dev/null +++ b/app/scripts/controllers/product/CreateCollateralController.js @@ -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 || {})); diff --git a/app/scripts/controllers/product/EditCollateralController.js b/app/scripts/controllers/product/EditCollateralController.js new file mode 100644 index 00000000..6a08d6e5 --- /dev/null +++ b/app/scripts/controllers/product/EditCollateralController.js @@ -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 || {})); diff --git a/app/scripts/controllers/product/ViewCollateralController.js b/app/scripts/controllers/product/ViewCollateralController.js new file mode 100644 index 00000000..2a59ab33 --- /dev/null +++ b/app/scripts/controllers/product/ViewCollateralController.js @@ -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 || {})); diff --git a/app/scripts/mifosXComponents.js b/app/scripts/mifosXComponents.js index 9a86b70b..ea5582f1 100755 --- a/app/scripts/mifosXComponents.js +++ b/app/scripts/mifosXComponents.js @@ -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', diff --git a/app/scripts/routes.js b/app/scripts/routes.js index 0c22749d..7550953d 100755 --- a/app/scripts/routes.js +++ b/app/scripts/routes.js @@ -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' }) diff --git a/app/scripts/services/ResourceFactoryProvider.js b/app/scripts/services/ResourceFactoryProvider.js index 19490b36..76b07667 100755 --- a/app/scripts/services/ResourceFactoryProvider.js +++ b/app/scripts/services/ResourceFactoryProvider.js @@ -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'} diff --git a/app/views/clients/createclientcollateral.html b/app/views/clients/createclientcollateral.html new file mode 100644 index 00000000..6e8a2e24 --- /dev/null +++ b/app/views/clients/createclientcollateral.html @@ -0,0 +1,113 @@ +
+
+
+
+

{{ 'label.heading.createcollateral' | translate }}

+
+
+
+ +
+
+ + +
+ +
+
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+
+
+
+
\ No newline at end of file diff --git a/app/views/clients/editclientcollateral.html b/app/views/clients/editclientcollateral.html new file mode 100644 index 00000000..2a39e498 --- /dev/null +++ b/app/views/clients/editclientcollateral.html @@ -0,0 +1,66 @@ +
+
+
+
+

{{ 'label.heading.editcollateral' | translate }}

+
+
+
+ +
+
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+
+
+
+
\ No newline at end of file diff --git a/app/views/clients/viewallclientcollaterals.html b/app/views/clients/viewallclientcollaterals.html new file mode 100644 index 00000000..0d1f5c0f --- /dev/null +++ b/app/views/clients/viewallclientcollaterals.html @@ -0,0 +1,38 @@ +
+ + +
+
+

List of Collaterals

+
+
+ + + + + + + + + + + + + + + + + + +
{{'label.heading.name' | translate}}{{'label.heading.quantity' | translate}}{{'label.heading.totalValue' | translate}}{{'label.heading.totalCollateralValue' | translate}}
{{collateral.name | translate}}{{collateral.quantity}}{{collateral.totalValue}}{{collateral.totalCollateralValue}}
+ +
+ +
\ No newline at end of file diff --git a/app/views/clients/viewclient.html b/app/views/clients/viewclient.html index c20faef2..61cd5975 100755 --- a/app/views/clients/viewclient.html +++ b/app/views/clients/viewclient.html @@ -226,6 +226,11 @@
  • {{'label.button.newshareaccount' | translate}}
  • + +
  • + {{'label.button.createcollateral' | translate}} +
  • +
  • {{'label.newfixeddepositaccount' | translate}}
  • @@ -481,6 +486,41 @@ + +
    +
    + + + +
    +
    + + {{'label.heading.collaterals' | translate }} + +
    + + + + + + + + + + + + + + + +
    {{'label.heading.id' | translate}}{{'label.heading.name' | translate}}{{'label.heading.quantity' | translate}}{{'label.heading.totalValue' | translate}}{{'label.heading.totalCollateralValue' | translate}}
    + {{collateral.id}} + {{collateral.name}}{{collateral.quantity}}{{collateral.total}}{{collateral.totalCollateral}}
    +
    diff --git a/app/views/clients/viewclientcollateral.html b/app/views/clients/viewclientcollateral.html new file mode 100644 index 00000000..539b7f90 --- /dev/null +++ b/app/views/clients/viewclientcollateral.html @@ -0,0 +1,73 @@ +
    + +
    +

    {{collateral.name}} +
    +   {{'label.button.edit' | translate}} + +
    +

    +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    {{'label.heading.name' | translate}}{{collateral.name}}
    {{'label.heading.quantity' | translate}}{{collateral.quantity}}
    {{'label.heading.totalValue' | translate}}{{collateral.total}}
    {{'label.heading.totalCollateralValue' | translate}}{{collateral.totalCollateral}}
    +
    +
    +
    +

    Transaction Details

    +
    + + + + + + + + + + + + + + + + + +
    {{'label.heading.id' | translate}}{{'label.heading.lastRepayment' | translate}}{{'label.heading.remainingAmount' | translate}}{{'label.heading.lastRepaymentDate' | translate}}
    {{transaction.loanId}}{{transaction.lastRepayment}}{{transaction.remainingAmount}}{{transaction.lastRepaymentDate.date | date}}
    +
    +
    +
    diff --git a/app/views/loans/editloanaccount.html b/app/views/loans/editloanaccount.html index d7f28e5b..fa9a7447 100755 --- a/app/views/loans/editloanaccount.html +++ b/app/views/loans/editloanaccount.html @@ -539,34 +539,57 @@
    - -    -    - -   +
    + +
    +
    + +
    +
    + +
    +
    - - - - - - - - - - - - - -
    {{'label.heading.name' | translate}}{{'label.heading.value' | translate}}{{'label.heading.description' | translate}}{{'label.heading.actions' | translate}}
    + + + + + + + + + + + + + + +
    {{'label.heading.id' | translate}}{{'label.heading.quantity' | translate}}{{'label.heading.totalValue' | translate}}{{'label.heading.totalCollateralValue' | translate}}
    + + + + + + + + + + + +
    diff --git a/app/views/loans/editloancharge.html b/app/views/loans/editloancharge.html index 35b1db39..2b6dc946 100644 --- a/app/views/loans/editloancharge.html +++ b/app/views/loans/editloancharge.html @@ -1,6 +1,6 @@
    diff --git a/app/views/loans/newloanaccount.html b/app/views/loans/newloanaccount.html index af11194b..8634d69a 100755 --- a/app/views/loans/newloanaccount.html +++ b/app/views/loans/newloanaccount.html @@ -696,20 +696,24 @@

    -
    +
    -   
    - +
    - + +
    +
    +

    -
    +
    - - - - + + + + +
    {{'label.heading.type' | translate}}{{'label.heading.value' | translate}}{{'label.heading.description' | translate}}{{'label.heading.actions' | translate}}{{'label.heading.id' | translate}}{{'label.heading.quantity' | translate}}{{'label.heading.totalValue' | translate}}{{'label.heading.totalCollateralValue' | translate}}
    - + - + - + + + diff --git a/app/views/loans/viewloanaccountdetails.html b/app/views/loans/viewloanaccountdetails.html index 7f0b1b79..6d72a187 100755 --- a/app/views/loans/viewloanaccountdetails.html +++ b/app/views/loans/viewloanaccountdetails.html @@ -718,15 +718,17 @@ - - - + + + + - - - + + + +
    {{'label.heading.type' | translate}}{{'label.heading.value' | translate}}{{'label.heading.description' | translate}}{{'label.heading.id' | translate}}{{'label.heading.quantity' | translate}}{{'label.heading.totalValue' | translate}}{{'label.heading.totalCollateralValue' | translate}}
    {{collateral.type.name}}{{collateral.value | number}}{{collateral.description}}{{collateral.id}}{{collateral.quantity | number}}{{collateral.total | number}}{{collateral.totalCollateral | number}}
    diff --git a/app/views/loans/viewloancollateraldata.html b/app/views/loans/viewloancollateraldata.html new file mode 100644 index 00000000..11fa70ff --- /dev/null +++ b/app/views/loans/viewloancollateraldata.html @@ -0,0 +1,53 @@ +
    + + +
    +
    +
    +

    {{'label.heading.viewcollateral' | translate}}

    + +
    +
    + + + + + + + + + + + + + + + + + +
    {{'label.heading.id' | translate}}{{collateral.collateralId}}
    {{'label.heading.quantity' | translate}}{{collateral.quantity}}
    {{'label.heading.totalValue' | translate}}{{collateral.total}}
    {{'label.heading.totalCollateralValue' | translate}}{{collateral.totalCollateral}}
    +
    +
    +
    +
    diff --git a/app/views/products/collaterals.html b/app/views/products/collaterals.html new file mode 100644 index 00000000..9ccba19e --- /dev/null +++ b/app/views/products/collaterals.html @@ -0,0 +1,40 @@ +
    + + +
    +
    +

    List of Collaterals

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    {{'label.heading.name' | translate}}{{'label.heading.quality' | translate}}{{'label.heading.basePrice' | translate}}{{'label.heading.pctToBase' | translate}}{{'label.heading.unitType' | translate}}
    {{collateral.name | translate}}{{collateral.quality | translate }}{{collateral.basePrice}}{{collateral.pctToBase}}{{collateral.unitType}}
    + +
    + +
    \ No newline at end of file diff --git a/app/views/products/createcollateral.html b/app/views/products/createcollateral.html new file mode 100644 index 00000000..5e1c780f --- /dev/null +++ b/app/views/products/createcollateral.html @@ -0,0 +1,96 @@ +
    + +
    +
    +
    +

    {{ 'label.heading.createcollateral' | translate }}

    +
    +
    +
    + +
    +
    + + +
    + +
    + +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    + +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/app/views/products/deletecollateral.html b/app/views/products/deletecollateral.html new file mode 100644 index 00000000..e69de29b diff --git a/app/views/products/editcollateral.html b/app/views/products/editcollateral.html new file mode 100644 index 00000000..1d90db87 --- /dev/null +++ b/app/views/products/editcollateral.html @@ -0,0 +1,85 @@ +
    + + +
    +
    + {{'label.heading.editcollateral' | translate}} +
    + + +
    + + +
    +
    +
    + + +
    + +
    + +
    + +
    + +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + {{'label.button.cancel' | translate}} + +
    +
    +
    +
    diff --git a/app/views/products/products.html b/app/views/products/products.html index 8a48ecdb..e75a6169 100644 --- a/app/views/products/products.html +++ b/app/views/products/products.html @@ -40,6 +40,12 @@

    {{'label.rates' | translate}}

    + +

      {{ + 'label.anchor.collaterals' | translate }}

    +

    {{'label.collaterals' | translate}}

    +
    +
    diff --git a/app/views/products/viewcollateral.html b/app/views/products/viewcollateral.html new file mode 100644 index 00000000..e6dae0cc --- /dev/null +++ b/app/views/products/viewcollateral.html @@ -0,0 +1,55 @@ +
    + +
    +

    {{collateral.name}} +
    +   {{'label.button.edit' | translate}} + +
    +

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    {{'label.heading.name' | translate}}{{collateral.name}}
    {{'label.heading.quality' | translate}}{{collateral.quality}}
    {{'label.heading.basePrice' | translate}}{{collateral.basePrice}}
    {{'label.heading.pctToBase' | translate}}{{collateral.pctToBase}}
    {{'label.heading.unitType' | translate}}{{collateral.unitType}}
    +
    +
    +
    +
    \ No newline at end of file