Advanced deposit products and accounts (FD & RD) with interest rate slabs

This commit is contained in:
ashok-conflux 2014-03-07 12:09:01 +05:30
parent 72bbe33794
commit 0175498d05
58 changed files with 11768 additions and 25 deletions

View File

@ -127,6 +127,8 @@
"label.input.dateformat":"Date format",
"label.input.savingsaccount":"Default Savings Account",
"label.input.no.decimalplaces":"No decimalplaces",
"label.input.gender":"Gender",
"label.input.dateofbirth":"Date of Birth",
"#Buttons": "..",
"label.button.previous": "Previous",
@ -165,6 +167,7 @@
"label.button.summary": "Summary",
"label.button.updatedefaultsavings":"Update Default Savings",
"#Misc Labels": "..",
"label.uniquelyidentifiedwithid": "Uniquely identified with Id",
"label.belongsto": "Belongs To",
@ -1305,7 +1308,7 @@
"-------": "------------",
"#Savings": "....",
"#Savings and Deposit accounts": "....",
"#Headings": "..",
"label.heading.approvesavingaccount": "Approve Saving Account",
@ -1343,12 +1346,42 @@
"label.heading.calculationtype": "Calculation Type",
"label.heading.assets": "Assets",
"label.heading.activatedon":"Activated On",
"label.heading.editfixeddepositapplication":"Edit Fixed Deposit application",
"label.heading.fixeddepositapplication":"Fixed Deposit application",
"label.heading.rejectfixeddepositaccount":"Reject Fixed Deposit application",
"label.heading.approvefixeddepositaccount":"Approve Fixed Deposit application",
"label.heading.withdrawnfixeddepositaccount":"Withdraw Fixed Deposit application",
"label.heading.undoapprovefixeddepositaccount":"Undo approval of Fixed Deposit application",
"label.heading.activatefixeddepositaccount":"Activate Fixed Deposit account",
"label.heading.recurringdepositapplication":"Recurring Deposit Application",
"label.heading.editrecurringdepositapplication":"Edit Recurring Deposit Application",
"label.heading.rejectrecurringdepositaccount":"Reject Recurring Deposit application",
"label.heading.approverecurringdepositaccount":"Approve Recurring Deposit application",
"label.heading.withdrawnrecurringdepositaccount":"Withdraw Recurring Deposit application",
"label.heading.undoapproverecurringdepositaccount":"Undo approval of Recurring Deposit application",
"label.heading.activaterecurringdepositaccount":"Activate Recurring Deposit account",
"label.heading.depositmoneytorecurringaccount":"Deposit Money to Recurring Deposit Account",
"label.heading.prematureclosefixeddepositaccount":"Premature Closure of Fixed Deposit Account",
"label.heading.closefixeddepositaccount":"Fixed Deposit Closure on Maturity",
"label.heading.closerecurringdepositaccount":"Recurring Deposit Closure on Maturity",
"label.heading.editrecurringdepositaccounttransaction":"Edit Recurring Account Transaction",
"label.heading.editfixeddepositaccounttransaction":"Edit Fixed Deposit Account Transaction",
"#Anchors": "..",
"label.anchor.addsavingcharges": "Add Saving Charges",
"label.anchor.viewsavingaccount": "View Saving Account",
"label.anchor.editsavingapplication": "Edit Saving Application",
"label.anchor.savingapplication": "Saving Application",
"label.anchor.editfixeddepositapplication":"Edit Fixed Deposit Application",
"label.anchor.viewfixeddepositaccount":"View Fixed Deposit Account",
"label.anchor.fixeddepositapplication":"Fixed Deposit Application",
"label.anchor.recurringdepositapplication":"Recurring Deposit Application",
"label.anchor.viewrecurringdepositaccount":"View Recurring Deposit Account",
"label.anchor.editrecurringdepositapplication":"Edit Recurring Deposit Application",
"label.anchor.add.fixed.deposit.charges":"Add Fixed Deposit Charge",
"label.anchor.add.recurring.deposit.charges":"Add Recurring Deposit Charge",
"#Inputs": "..",
"label.input.charges": "Charges",
@ -1391,8 +1424,15 @@
"label.input.duedate": "Due date",
"label.input.loanpurpose": "Loan purpose",
"label.input.months":"months",
"label.input.depositamount":"Deposit Amount",
"label.input.depositperiod":"Deposit Period",
"label.input.recurring.deposit.amount":"Recurring Deposit Amount",
"label.input.onAccountClosure":"Action",
"label.input.preMatureCloseOnDate":"Pre Mature Close Date",
"label.input.transfer.to.savings":"Transfer to Savings",
"label.input.transfer.description":"Transfer Description",
"#Buttons": "..",
"#Buttons": "..",
"label.button.undo": "Undo",
"label.button.modifyapplication": "Modify Application",
"label.button.withdrawnbyclient": "Withdrawn by client",
@ -1406,10 +1446,13 @@
"label.button.loanscreenreport": "Loan Screen Reports",
"label.button.paycharge":"Pay Charge",
"label.button.waivecharge":"Waive Charge",
"label.button.prematureClose":"Premature Close",
"#Misc Labels": "..",
"label.selectcharge": "Select charge",
"label.selectsavingproduct": "Select saving product",
"label.selectfixeddepositproduct": "Select Fixed Deposit Product",
"label.selectrecurringdepositproduct":"Select Recurring Deposit Product",
"label.selectloanofficer": "Select loan officer",
"label.totaldeposits": "Total Deposits",
"label.totalwithdarawals": "Total withdrawals",
@ -1427,6 +1470,20 @@
"label.on": "on",
"label.annaulfeedueon": "Annual fee (due on)",
"label.selectfieldofficer":"Select field officer",
"label.minimumdepositterm.and.inmultiplesof":"Minimum Deposit Term",
"label.maximumdepositterm":"Maximum Deposit Term",
"label.interestfreetoperiod":"Period when interest will not be paid",
"label.preclosurepenal":"Apply penal interest (less) for Preclosure",
"label.newfixeddepositaccount":"New Fixed Deposit",
"label.newrecurringdepositaccount":"New Recurring Deposit",
"label.recurringdeposittype":"Recurring Deposit Type",
"label.recurring.deposit.amount":"Recurring Deposit Amount",
"label.recurring.deposit.every":"Recurring Deposit Frequency",
"label.depositAmount":"Deposit Amount",
"label.maturityAmount":"Maturity amount",
"label.depositPeriod":"Deposit Period",
"label.maturityDate":"Maturity Date",
"label.actual.totalDeposits":"Actula total Deposits",
"#Enumeration & Error Messages": "..",
"savings.interest.rate.savingsPeriodFrequencyType.days": "Per day",
@ -1998,6 +2055,28 @@
"label.heading.numerOfRepaymentCycleVariations":"# of Repayments for Borrower Cycle ",
"label.heading.errorlog":"Error Log",
"label.heading.product":"Product",
"label.heading.interestchart":"Interest Rate Chart",
"label.heading.interestratechart.valid.from":"Valid From Date",
"label.heading.interestratechart.valid.to":"End Date",
"label.heading.interestratecharts":"Interest Rate Chart details",
"label.heading.editinterestratechart":"Edit Interest Rate Chart",
"label.heading.interestratedetails.period.type":"Period Type",
"label.heading.interestratedetails.period.from.to":"Period From / To",
"label.heading.interestratedetails.amount.range":"Amount Range",
"label.heading.interestratedetails.interest":"Interest",
"label.heading.interestratedetails.description":"Description",
"label.heading.interestratecharts":"Interest Rate Charts",
"label.heading.interestfreeperiodapplicable":"Period when interest will not be paid",
"label.heading.preclosurepenalapplicable":"Apply penal interest (less)",
"label.heading.recurringdeposittype":"Recurring Deposit Type",
"label.heading.recurringdepositfrequency":"Recurring Deposit Frequency",
"label.heading.minimumdepositterm":"Minimum Deposit Term",
"label.heading.maximumdepositterm":"Maximum Deposit Term",
"label.heading.deposittermtype":"Deposit Term Frequency",
"label.heading.inmultiplesofdeposit":"Deposit Term In multiple of",
"label.heading.createinterestratechart":"Create Interest Rate Chart",
"label.heading.prematurecloserecurringdepositaccount":"Premature Closure of Recurring Deposit",
"#Anchors": "..",
"label.anchor.products": "Products",
@ -2011,6 +2090,18 @@
"label.anchor.editloanproduct": "Edit Loan Product",
"label.anchor.editsavingproduct": "Edit Saving Product",
"label.anchor.productsmix": "Products Mix",
"label.anchor.fixeddepositproducts": "Fixed Deposit Products",
"label.anchor.interestratechartviewedit":"View / Edit Interest Rate Charts",
"label.anchor.interestratecharts":"Interest Rate Charts",
"label.add.row":"Add",
"label.remove.row":"Remove",
"label.anchor.createfixeddepositproduct":"Create Fixed Deposit Product",
"label.anchor.editfixeddepositproduct":"Edit Fixed Deposit",
"label.anchor.createinterestratechart":"Create Interest Rate Chart",
"label.anchor.recurringdepositproducts":"Recurring Deposit Products",
"label.anchor.editrecurringdepositproduct":"Edit Recurring Deposit Product",
"label.anchor.createrecurringdepositproduct":"Create Recurring Deposit Product",
"#Inputs": "..",
"label.input.selectproduct": "Select product",
@ -2070,12 +2161,27 @@
"label.input.decimalplaces":"Decimal places",
"label.input.applywithdrawalfeefortransfers":"Apply withdrawal fee for transfers",
"label.input.savingstransfersinsuspenpense":"Savings transfers in suspense",
"label.input.interestratechart.name":"Name",
"label.input.interestratechart.description":"Description",
"label.input.interestratechart.valid.from":"Valid From Date",
"label.input.interestratechart.valid.to":"End Date",
"label.checkbox.interestfreeperiodapplicable":"Period when interest will not be paid",
"label.checkbox.applypreclosurepenalinterest":"Apply penal interest (less)",
"label.input.recurringdepositamount":"Deposit Amount",
"label.input.recurringdepositfrequency":"Deposit Every",
"label.select.recurringdeposittype":"Recurring Deposit Type",
"label.input.minimumdepositterm":"Minimum Deposit Term",
"label.input.maximumdepositterm":"Maximum Deposit Term",
"label.input.inmultiplesof":"And thereafter, In Multiples of",
"#Buttons": "..",
"label.button.createcharge": "Create Charge",
"label.button.createloanproduct": "Create Loan Product",
"label.button.createsavingproduct": "Create Saving Product",
"label.button.top": "Top",
"label.button.createinterestratechart":"Create Interest rate chart",
"label.button.createfixeddepositproduct":"Create Fixed Deposit Product",
"label.button.createrecurringdepositproduct":"Create Recurring Deposit Product",
"#Misc Labels": "..",
"label.selectproduct": "Select Product",
@ -2085,6 +2191,10 @@
"label.addnewsavingproductor": "Add new saving product or modify or inactivate saving product",
"label.definesrulesfortakingmul": "Defines rules for taking multiple rules",
"label.notprovided":"Not provided",
"label.fixeddepositproduct.def":"Add, modify or inactivate a Fixed deposit product",
"label.prematureclosure":"For Pre-mature Closure:",
"label.recurringdepositproduct.def":"Add, modify or inactivate a Recurring Deposit product",
"#Enumeration & Error Messages": "..",
"chargeAppliesTo.loan": "Loan",
@ -2318,6 +2428,7 @@
"error.msg.product.loan.duplicate.short.name":"Loan product with short name {{params[0].value}} already exists.",
"error.msg.product.savings.duplicate.short.name":"Savings product with short name {{params[0].value}} already exists.",
"------------------": "------------",
"#Admin-Products": "....",

View File

@ -15,6 +15,7 @@
scope.staffs = data.staffOptions;
scope.formData.officeId = scope.offices[0].id;
scope.savingproducts = data.savingProductOptions;
scope.genderOptions = data.genderOptions;
if (data.savingProductOptions.length > 0) {
scope.showSavingOptions = true;
}
@ -45,11 +46,16 @@
this.formData.dateFormat = scope.df;
this.formData.activationDate = reqDate;
if (scope.first.submitondate) {
reqDate = dateFilter(scope.first.submitondate, scope.df);
this.formData.submittedOnDate = reqDate;
}
if (scope.first.dateOfBirth) {
this.formData.dateOfBirth = dateFilter(scope.first.dateOfBirth, scope.df);
}
if (!scope.opensavingsproduct) {
this.formData.savingsProductId = null;
}

View File

@ -12,8 +12,14 @@
scope.routeToLoan = function (id) {
location.path('/viewloanaccount/' + id);
};
scope.routeToSaving = function (id) {
location.path('/viewsavingaccount/' + id);
scope.routeToSaving = function (id, depositTypeCode) {
if (depositTypeCode === "depositAccountType.savingsDeposit"){
location.path('/viewsavingaccount/' + id);
}else if (depositTypeCode === "depositAccountType.fixedDeposit"){
location.path('/viewfixeddepositaccount/' + id);
}else if (depositTypeCode === "depositAccountType.recurringDeposit"){
location.path('/viewrecurringdepositaccount/' + id);
}
};
scope.haveFile = [];
resourceFactory.clientResource.get({clientId: routeParams.id}, function (data) {
@ -140,6 +146,7 @@
scope.isSavingClosed = function (savingaccount) {
if (savingaccount.status.code === "savingsAccountStatusType.withdrawn.by.applicant" ||
savingaccount.status.code === "savingsAccountStatusType.closed" ||
savingaccount.status.code === "savingsAccountStatusType.pre.mature.closure" ||
savingaccount.status.code === "savingsAccountStatusType.rejected") {
return true;
} else {
@ -286,6 +293,7 @@
scope.isSavingNotClosed = function (savingaccount) {
if (savingaccount.status.code === "savingsAccountStatusType.withdrawn.by.applicant" ||
savingaccount.status.code === "savingsAccountStatusType.closed" ||
savingaccount.status.code === "savingsAccountStatusType.pre.mature.closure" ||
savingaccount.status.code === "savingsAccountStatusType.rejected") {
return false;
} else {
@ -412,4 +420,4 @@
mifosX.ng.application.controller('ViewClientController', ['$scope', '$routeParams', '$route', '$location', 'ResourceFactory', '$http', '$modal', 'API_VERSION', '$rootScope', '$upload', mifosX.controllers.ViewClientController]).run(function ($log) {
$log.info("ViewClientController initialized");
});
}(mifosX.controllers || {}));
}(mifosX.controllers || {}));

View File

@ -0,0 +1,54 @@
(function (module) {
mifosX.controllers = _.extend(module, {
AddNewFixedDepositChargeController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.offices = [];
scope.cancelRoute = routeParams.id;
scope.date = {};
resourceFactory.savingsChargeResource.get({accountId: routeParams.id, resourceType: 'template'}, function (data) {
scope.chargeOptions = data.chargeOptions;
});
scope.chargeSelected = function (id) {
resourceFactory.chargeResource.get({chargeId: id, template: 'true'}, function (data) {
scope.chargeCalculationType = data.chargeCalculationType.id;
scope.chargeTimeType = data.chargeTimeType.id;
scope.chargeDetails = data;
scope.formData.amount = data.amount;
scope.withDrawCharge = data.chargeTimeType.value === "Withdrawal Fee" ? true : false;
scope.formData.feeInterval = data.feeInterval;
if (data.chargeTimeType.value === "Annual Fee" || data.chargeTimeType.value === "Monthly Fee") {
scope.chargeTimeTypeAnnualOrMonth = true;
}
});
};
scope.submit = function () {
this.formData.locale = "en";
if (scope.withDrawCharge !== true) {
if (scope.chargeTimeTypeAnnualOrMonth === true) {
this.formData.monthDayFormat = "dd MMMM";
if (scope.date.due) {
this.formData.feeOnMonthDay = dateFilter(scope.date.due, 'dd MMMM');
} else {
this.formData.feeOnMonthDay = "";
}
} else {
this.formData.dateFormat = "dd MMMM yyyy";
if (scope.date.specificduedate) {
this.formData.dueDate = dateFilter(scope.date.specificduedate, scope.df);
} else {
this.formData.dueDate = "";
}
}
}
resourceFactory.savingsChargeResource.save({accountId: routeParams.id}, this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + routeParams.id);
});
};
}
});
mifosX.ng.application.controller('AddNewFixedDepositChargeController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.AddNewFixedDepositChargeController]).run(function ($log) {
$log.info("AddNewFixedDepositChargeController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,305 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateFixedDepositAccountController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.products = [];
scope.fieldOfficers = [];
scope.formData = {};
scope.restrictDate = new Date();
scope.clientId = routeParams.clientId;
scope.groupId = routeParams.groupId;
if (routeParams.centerEntity) {
scope.centerEntity = true;
}
//interest rate chart details
scope.chart = {};
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
scope.charges = [];
scope.inparams = {};
if (scope.clientId) {
scope.inparams.clientId = scope.clientId
}
;
if (scope.groupId) {
scope.inparams.groupId = scope.groupId
}
;
if (scope.centerId) {
scope.inparams.centerId = scope.centerId
}
;
resourceFactory.fixedDepositAccountTemplateResource.get(scope.inparams, function (data) {
scope.products = data.productOptions;
scope.chargeOptions = data.chargeOptions;
scope.clientName = data.clientName;
scope.groupName = data.groupName;
});
scope.changeProduct = function () {
scope.inparams.productId = scope.formData.productId;
resourceFactory.fixedDepositAccountTemplateResource.get(scope.inparams, function (data) {
scope.data = data;
scope.charges = data.charges;
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value === "Annual Fee" && scope.charges[i].feeOnMonthDay) {
scope.charges[i].feeOnMonthDay.push('2013');
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
}
}
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.minRequiredOpeningBalance = data.minRequiredOpeningBalance;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
if (data.interestFreePeriodApplicable) scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
if (data.preClosurePenalApplicable) scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
});
};
scope.addCharge = function (chargeId) {
scope.errorchargeevent = false;
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, function (data) {
data.chargeId = data.id;
if (data.chargeTimeType.value == "Annual Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
} else if (data.chargeTimeType.value == "Monthly Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
}
scope.charges.push(data);
scope.chargeId = undefined;
});
} else {
scope.errorchargeevent = true;
scope.labelchargeerror = "selectcharge";
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.submit = function () {
if (scope.date) {
this.formData.submittedOnDate = dateFilter(scope.date.submittedOnDate, scope.df);
}
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
this.formData.monthDayFormat = "dd MMM";
this.formData.charges = [];
if (scope.clientId) this.formData.clientId = scope.clientId;
if (scope.groupId) this.formData.groupId = scope.groupId;
if (scope.centerId) this.formData.centerId = scope.centerId;
if (scope.charges.length > 0) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM')});
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
dueDate: dateFilter(scope.charges[i].dueDate, scope.df)});
} else if (scope.charges[i].chargeTimeType.value == 'Monthly Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM'), feeInterval: scope.charges[i].feeInterval});
} else {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount});
}
}
}
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.fixedDepositAccountResource.save(this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
};
scope.cancel = function () {
if (scope.clientId) {
location.path('/viewclient/' + scope.clientId);
} else if (scope.centerEntity) {
location.path('/viewcenter/' + scope.groupId);
} else {
location.path('/viewgroup/' + scope.groupId);
}
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs)),
isActiveChart: 'true'
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('CreateFixedDepositAccountController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.CreateFixedDepositAccountController]).run(function ($log) {
$log.info("CreateFixedDepositAccountController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,349 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditDepositAccountController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.products = [];
scope.fieldOfficers = [];
scope.formData = {};
scope.accountId = routeParams.id;
scope.charges = [];
scope.restrictDate = new Date();
//interest rate chart details
scope.chart = {};
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.fixedDepositAccountResource.get({accountId: scope.accountId, template: 'true', associations: 'charges'}, function (data) {
scope.data = data;
scope.charges = data.charges || [];
if (scope.charges) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
scope.charges[i].feeOnMonthDay.push(2013);
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
} else if (scope.charges[i].chargeTimeType.value == "Monthly Fee") {
scope.charges[i].feeOnMonthDay.push(2013);
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
scope.charges[i].dueDate = new Date(dateFilter(scope.charges[i].dueDate, scope.df));
}
}
}
if (data.clientId) {
scope.formData.clientId = data.clientId;
scope.clientName = data.clientName;
}
if (data.groupId) {
scope.formData.groupId = data.groupId;
scope.groupName = data.groupName;
}
scope.formData.productId = data.savingsProductId;
scope.products = data.productOptions;
if (data.fieldOfficerId != 0)scope.formData.fieldOfficerId = data.fieldOfficerId;
if (data.timeline) {
var submittedOnDate = dateFilter(data.timeline.submittedOnDate, scope.df);
scope.formData.submittedOnDate = new Date(submittedOnDate);
}
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.depositAmount = data.depositAmount;
scope.formData.depositPeriod = data.depositPeriod;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
/* FIX-ME: uncomment annualFeeAmount when datepicker avialable, because it depends on the date field 'annualFeeOnMonthDay'*/
//scope.formData.annualFeeAmount = data.annualFeeAmount;
//scope.formData.withdrawalFeeAmount = data.withdrawalFeeAmount;
//scope.formData.withdrawalFeeForTransfers = data.withdrawalFeeForTransfers;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
//if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var depositPeriodFrequencyId = (_.isNull(data.depositPeriodFrequency) || _.isUndefined(data.depositPeriodFrequency)) ? '' : data.depositPeriodFrequency.id;
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData.depositPeriodFrequencyId = depositPeriodFrequencyId;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
});
scope.changeProduct = function () {
var inparams = {productId: scope.formData.productId};
if (scope.formData.clientId) inparams.clientId = scope.formData.clientId;
if (scope.formData.groupId) inparams.groupId = scope.formData.groupId;
resourceFactory.savingsTemplateResource.get(inparams, function (data) {
scope.data = data;
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.depositAmount = data.depositAmount;
scope.formData.depositPeriod = data.depositPeriod;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
//if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var depositPeriodFrequencyId = (_.isNull(data.depositPeriodFrequency) || _.isUndefined(data.depositPeriodFrequency)) ? '' : data.depositPeriodFrequency.id;
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData.depositPeriodFrequencyId = depositPeriodFrequencyId;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
});
}
scope.addCharge = function (chargeId) {
scope.errorchargeevent = false;
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, function (data) {
data.chargeId = data.id;
if (data.chargeTimeType.value == "Annual Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
} else if (data.chargeTimeType.value == "Monthly Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
}
delete data.id;
scope.charges.push(data);
scope.chargeId = undefined;
});
} else {
scope.errorchargeevent = true;
scope.labelchargeerror = "selectcharge";
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.cancel = function () {
location.path('/viewsavingaccount/' + scope.accountId);
}
scope.submit = function () {
if (this.formData.submittedOnDate) this.formData.submittedOnDate = dateFilter(this.formData.submittedOnDate, scope.df);
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
this.formData.monthDayFormat = "dd MMM";
scope.formData.charges = [];
if (scope.charges.length > 0) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM')});
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
dueDate: dateFilter(scope.charges[i].dueDate, scope.df)});
} else if (scope.charges[i].chargeTimeType.value == 'Monthly Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM'), feeInterval: scope.charges[i].feeInterval});
} else {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount});
}
}
}
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.fixedDepositAccountResource.update({'accountId': scope.accountId}, this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
};
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs)),
isActiveChart: 'true'
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('EditDepositAccountController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.EditDepositAccountController]).run(function ($log) {
$log.info("EditDepositAccountController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,304 @@
(function (module) {
mifosX.controllers = _.extend(module, {
FixedDepositAccountActionsController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.action = routeParams.action || "";
scope.accountId = routeParams.id;
scope.savingAccountId = routeParams.id;
scope.formData = {};
scope.restrictDate = new Date();
// Transaction UI Related
scope.isAccountClose = false;
scope.showPaymentDetails = false;
scope.paymentTypes = [];
switch (scope.action) {
case "approve":
scope.title = 'label.heading.approvefixeddepositaccount';
scope.labelName = 'label.input.savingaccountapprovedOnDate';
scope.modelName = 'approvedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Approve application';
break;
case "reject":
scope.title = 'label.heading.rejectfixeddepositaccount';
scope.labelName = 'label.input.rejectedon';
scope.modelName = 'rejectedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Reject application';
break;
case "withdrawnByApplicant":
scope.title = 'label.heading.withdrawnfixeddepositaccount';
scope.labelName = 'label.input.withdrawnon';
scope.modelName = 'withdrawnOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Withdrawn by applicant';
break;
case "undoapproval":
scope.title = 'label.heading.undoapprovefixeddepositaccount';
scope.showDateField = false;
scope.showNoteField = true;
scope.actionName = 'Undo Approve application';
break;
case "activate":
scope.title = 'label.heading.activatefixeddepositaccount';
scope.labelName = 'label.input.activatedon';
scope.modelName = 'activatedOnDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.actionName = 'Approve application';
break;
/*case "deposit":
resourceFactory.savingsTrxnsTemplateResource.get({savingsId:scope.accountId, command:'deposit'}, function (data) {
scope.paymentTypes=data.paymentTypeOptions;
});
scope.title = 'label.heading.depositmoneytosavingaccount';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
break;
case "withdrawal":
resourceFactory.savingsTrxnsTemplateResource.get({savingsId:scope.accountId, command:'withdrawal'}, function (data) {
scope.paymentTypes=data.paymentTypeOptions;
});
scope.title = 'label.heading.withdrawmoneyfromsavingaccount';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
break;
case "applyAnnualFees":
resourceFactory.savingsResource.get({accountId : routeParams.id, resourceType : 'charges', chargeId : routeParams.chargeId},
function (data) {
scope.formData.amount = data.amount;
if (data.dueDate) {
var dueDate = dateFilter(data.dueDate, scope.df);
scope.formData.dueDate = new Date(dueDate);
}
});
scope.title = 'label.heading.savingaccountapplyannualFee';
scope.labelName = 'label.input.annualfeetransactiondate';
scope.modelName = 'dueDate';
scope.showDateField = true;
scope.showAnnualAmountField = true;
scope.showAmountField = false;
scope.showNoteField = false;
break;*/
case "close":
resourceFactory.fixedDepositAccountResource.get({accountId: routeParams.id, resourceType: 'template', command: 'close'},
function (data) {
scope.maturityAmount = data.maturityAmount;
scope.onAccountClosureOptions = data.onAccountClosureOptions;
scope.savingsAccounts = data.savingsAccounts;
scope.paymentTypes = data.paymentTypeOptions;
scope.currency = data.currency;
});
scope.title = 'label.heading.closefixeddepositaccount';
scope.labelName = 'label.input.closedon';
scope.modelName = 'closedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.isAccountClose = true;
break;
case "prematureClose":
scope.title = 'label.heading.prematureclosefixeddepositaccount';
scope.labelName = 'label.input.preMatureCloseOnDate';
scope.modelName = 'closedOnDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.retrievePreMatureAmount = true;
break;
case "modifytransaction":
resourceFactory.fixedDepositTrxnsResource.get({savingsId: scope.accountId, transactionId: routeParams.transactionId, template: 'true'},
function (data) {
scope.title = 'label.heading.editfixeddepositaccounttransaction';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.formData[scope.modelName] = new Date(data.date) || new Date();
scope.paymentTypes = data.paymentTypeOptions;
scope.formData.transactionAmount = data.amount;
if (data.paymentDetailData) {
if (data.paymentDetailData.paymentType) {
scope.formData.paymentTypeId = data.paymentDetailData.paymentType.id;
}
scope.formData.accountNumber = data.paymentDetailData.accountNumber;
scope.formData.checkNumber = data.paymentDetailData.checkNumber;
scope.formData.routingCode = data.paymentDetailData.routingCode;
scope.formData.receiptNumber = data.paymentDetailData.receiptNumber;
scope.formData.bankNumber = data.paymentDetailData.bankNumber;
}
});
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
scope.showPaymentType = true;
scope.showAmount = true;
break;
case "editsavingcharge":
resourceFactory.savingsResource.get({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId},
function (data) {
scope.formData.amount = data.amount;
if (data.feeOnMonthDay) {
scope.dateArray = [];
scope.dateArray.push(2013)
for (var i in data.feeOnMonthDay) {
scope.dateArray.push(data.feeOnMonthDay[i]);
}
var feeOnMonthDay = dateFilter(scope.dateArray, scope.df);
scope.formData.feeOnMonthDayFullDate = new Date(feeOnMonthDay);
scope.labelName = 'label.heading.savingaccounttransactionDate';
scope.modelName = 'feeOnMonthDayFullDate';
scope.showDateField = true;
scope.showAnnualAmountField = true;
scope.showAmountField = false;
} else {
scope.labelName = 'label.amount';
scope.modelName = 'amount';
scope.showDateField = false;
scope.showAnnualAmountField = false;
scope.showAmountField = true;
}
});
break;
case "deletesavingcharge":
scope.showDelete = true;
break;
case "paycharge":
scope.formData.dueDate = new Date();
resourceFactory.savingsResource.get({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId,
command: 'paycharge'}, function (data) {
scope.formData.amount = data.amountOutstanding;
});
scope.labelName = 'label.amount';
scope.showAmountField = true;
scope.paymentDatefield = true;
scope.modelName = 'dueDate';
break;
case "waive":
scope.waiveCharge = true;
break;
}
scope.cancel = function () {
location.path('/viewfixeddepositaccount/' + routeParams.id);
};
scope.submit = function () {
var params = {command: scope.action};
if (scope.action != "undoapproval") {
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
}
if (scope.action == "deposit" || scope.action == "withdrawal" || scope.action == "modifytransaction") {
if (scope.action == "withdrawal") {
if (this.formData.transactionDate) {
this.formData.transactionDate = dateFilter(this.formData.transactionDate, scope.df);
}
} else if (scope.action == "deposit") {
if (this.formData.transactionDate) {
this.formData.transactionDate = dateFilter(this.formData.transactionDate, scope.df);
}
}
if (scope.action == "modifytransaction") {
params.command = 'modify';
if (this.formData.transactionDate) {
this.formData.transactionDate = dateFilter(this.formData.transactionDate, scope.df);
}
params.transactionId = routeParams.transactionId;
}
params.savingsId = scope.accountId;
resourceFactory.fixedDepositTrxnsResource.save(params, this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
} else if (scope.action == "editsavingcharge") {
if (this.formData.feeOnMonthDayFullDate) {
this.formData.feeOnMonthDay = dateFilter(this.formData.feeOnMonthDayFullDate, scope.df);
this.formData.monthDayFormat = "dd MMM";
this.formData.feeOnMonthDay = this.formData.feeOnMonthDay.substring(0, this.formData.feeOnMonthDay.length - 5);
delete this.formData.feeOnMonthDayFullDate;
}
resourceFactory.savingsResource.update({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId}, this.formData,
function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
} else if (scope.action == "deletesavingcharge") {
resourceFactory.savingsResource.delete({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId}, this.formData,
function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
} else if (scope.action == "paycharge" || scope.action == "waive") {
params = {accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId, command: scope.action};
if (this.formData.dueDate) {
this.formData.dueDate = dateFilter(this.formData.dueDate, scope.df);
}
resourceFactory.savingsResource.save(params, this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
} else {
params.accountId = scope.accountId;
if (scope.action == "approve") {
if (this.formData.approvedOnDate) {
this.formData.approvedOnDate = dateFilter(this.formData.approvedOnDate, scope.df);
}
} else if (scope.action == "withdrawnByApplicant") {
if (this.formData.withdrawnOnDate) {
this.formData.withdrawnOnDate = dateFilter(this.formData.withdrawnOnDate, scope.df);
}
} else if (scope.action == "reject") {
if (this.formData.rejectedOnDate) {
this.formData.rejectedOnDate = dateFilter(this.formData.rejectedOnDate, scope.df);
}
} else if (scope.action == "activate") {
if (this.formData.activatedOnDate) {
this.formData.activatedOnDate = dateFilter(this.formData.activatedOnDate, scope.df);
}
/*} else if (scope.action == "applyAnnualFees" || scope.action == "paycharge" || scope.action == "waivecharge") {
params = {accountId : routeParams.id, resourceType : 'charges', chargeId : routeParams.chargeId, command : 'paycharge'};
if (this.formData.dueDate) {
this.formData.dueDate = dateFilter(this.formData.dueDate,scope.df);
}*/
} else if (scope.action === "close") {
if (this.formData.closedOnDate) {
this.formData.closedOnDate = dateFilter(this.formData.closedOnDate, scope.df);
}
} else if (scope.action === "prematureClose") {
if (this.formData.closedOnDate) {
this.formData.closedOnDate = dateFilter(this.formData.closedOnDate, scope.df);
}
if (scope.retrievePreMatureAmount) {
params = {accountId: routeParams.id, command: 'calculatePrematureAmount'};
resourceFactory.fixedDepositAccountResource.save(params, this.formData, function (data) {
scope.maturityAmount = data.maturityAmount;
scope.onAccountClosureOptions = data.onAccountClosureOptions;
scope.savingsAccounts = data.savingsAccounts;
scope.paymentTypes = data.paymentTypeOptions;
scope.currency = data.currency;
});
scope.isAccountClose = true;
scope.showNoteField = true;
scope.retrievePreMatureAmount = false;
return;
}
}
resourceFactory.fixedDepositAccountResource.save(params, this.formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
}
};
}
});
mifosX.ng.application.controller('FixedDepositAccountActionsController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.FixedDepositAccountActionsController]).run(function ($log) {
$log.info("FixedDepositAccountActionsController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,228 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewFixedDepositAccountDetailsController: function (scope, routeParams, resourceFactory, location, route, dateFilter) {
scope.isDebit = function (savingsTransactionType) {
return savingsTransactionType.withdrawal == true || savingsTransactionType.feeDeduction == true;
};
scope.clickEvent = function (eventName, accountId) {
eventName = eventName || "";
switch (eventName) {
case "modifyapplication":
location.path('/editfixeddepositaccount/' + accountId);
break;
case "approve":
location.path('/fixeddepositaccount/' + accountId + '/approve');
break;
case "reject":
location.path('/fixeddepositaccount/' + accountId + '/reject');
break;
case "withdrawnbyclient":
location.path('/fixeddepositaccount/' + accountId + '/withdrawnByApplicant');
break;
case "delete":
resourceFactory.fixedDepositAccountResource.delete({accountId: accountId}, {}, function (data) {
var destination = '/viewgroup/' + data.groupId;
if (data.clientId) destination = '/viewclient/' + data.clientId;
location.path(destination);
});
break;
case "undoapproval":
location.path('/fixeddepositaccount/' + accountId + '/undoapproval');
break;
case "activate":
location.path('/fixeddepositaccount/' + accountId + '/activate');
break;
case "addcharge":
location.path('/fixeddepositaccount/' + accountId + '/charges');
break;
case "calculateInterest":
resourceFactory.fixedDepositAccountResource.save({accountId: accountId, command: 'calculateInterest'}, {}, function (data) {
route.reload();
});
break;
case "postInterest":
resourceFactory.fixedDepositAccountResource.save({accountId: accountId, command: 'postInterest'}, {}, function (data) {
route.reload();
});
break;
/* case "applyAnnualFees":
location.path('/savingaccountcharge/' + accountId + '/applyAnnualFees/' + scope.annualChargeId);
break;
case "transferFunds":
if (scope.savingaccountdetails.clientId) {
location.path('/accounttransfers/fromsavings/'+accountId);
}
break;*/
case "close":
location.path('/fixeddepositaccount/' + accountId + '/close');
break;
case "prematureClose":
location.path('/fixeddepositaccount/' + accountId + '/prematureClose');
break;
}
};
resourceFactory.fixedDepositAccountResource.get({accountId: routeParams.id, associations: 'all'}, function (data) {
scope.savingaccountdetails = data;
scope.status = data.status.value;
if (scope.status == "Submitted and pending approval" || scope.status == "Active" || scope.status == "Approved") {
scope.choice = true;
}
scope.chargeAction = data.status.value == "Submitted and pending approval" ? true : false;
if (scope.savingaccountdetails.charges) {
scope.charges = scope.savingaccountdetails.charges;
scope.chargeTableShow = true;
} else {
scope.chargeTableShow = false;
}
if (data.status.value == "Submitted and pending approval") {
scope.buttons = { singlebuttons: [
{
name: "button.modifyapplication",
icon: "icon-pencil "
},
{
name: "button.approve",
icon: "icon-ok-sign"
}
],
options: [
{
name: "button.reject"
},
{
name: "button.withdrawnbyclient"
},
{
name: "button.addcharge"
},
{
name: "button.delete"
}
]
};
}
if (data.status.value == "Approved") {
scope.buttons = { singlebuttons: [
{
name: "button.undoapproval",
icon: "icon-undo"
},
{
name: "button.activate",
icon: "icon-ok-sign"
}
]
};
}
if (data.status.value == "Active") {
scope.buttons = { singlebuttons: [
{
name: "button.prematureClose",
icon: "icon-arrow-left"
},
{
name: "button.calculateInterest",
icon: "icon-table"
}
],
options: [
{
name: "button.postInterest"
},
{
name: "button.addcharge"
}
]
};
/*if (data.clientId) {
scope.buttons.options.push({
name:"button.transferFunds"
});
}*/
}else if (data.status.value == "Matured") {
scope.buttons = { singlebuttons: [
{
name: "button.close",
icon: "icon-arrow-right"
},
{
name: "button.calculateInterest",
icon: "icon-table"
}
],
options: [
{
name: "button.postInterest"
},
{
name: "button.addcharge"
}
]
};
/*if (data.clientId) {
scope.buttons.options.push({
name:"button.transferFunds"
});
}*/
}
});
resourceFactory.DataTablesResource.getAllDataTables({apptable: 'm_savings_account'}, function (data) {
scope.savingdatatables = data;
});
scope.dataTableChange = function (datatable) {
resourceFactory.DataTablesResource.getTableDetails({datatablename: datatable.registeredTableName,
entityId: routeParams.id, genericResultSet: 'true'}, function (data) {
scope.datatabledetails = data;
scope.datatabledetails.isData = data.data.length > 0 ? true : false;
scope.datatabledetails.isMultirow = data.columnHeaders[0].columnName == "id" ? true : false;
scope.singleRow = [];
for (var i in data.columnHeaders) {
if (scope.datatabledetails.columnHeaders[i].columnCode) {
for (var j in scope.datatabledetails.columnHeaders[i].columnValues) {
for (var k in data.data) {
if (data.data[k].row[i] == scope.datatabledetails.columnHeaders[i].columnValues[j].id) {
data.data[k].row[i] = scope.datatabledetails.columnHeaders[i].columnValues[j].value;
}
}
}
}
}
if (scope.datatabledetails.isData) {
for (var i in data.columnHeaders) {
if (!scope.datatabledetails.isMultirow) {
var row = {};
row.key = data.columnHeaders[i].columnName;
row.value = data.data[0].row[i];
scope.singleRow.push(row);
}
}
}
});
};
scope.deleteAll = function (apptableName, entityId) {
resourceFactory.DataTablesResource.delete({datatablename: apptableName, entityId: entityId, genericResultSet: 'true'}, {}, function (data) {
route.reload();
});
};
scope.modifyTransaction = function (accountId, transactionId) {
location.path('/fixeddepositaccount/' + accountId + '/modifytransaction?transactionId=' + transactionId);
};
}
});
mifosX.ng.application.controller('ViewFixedDepositAccountDetailsController', ['$scope', '$routeParams', 'ResourceFactory', '$location', '$route', 'dateFilter', mifosX.controllers.ViewFixedDepositAccountDetailsController]).run(function ($log) {
$log.info("ViewFixedDepositAccountDetailsController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,25 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewFixedDepositTransactionController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.flag = false;
resourceFactory.fixedDepositTrxnsResource.get({savingsId: routeParams.accountId, transactionId: routeParams.transactionId}, function (data) {
scope.transaction = data;
if (scope.transaction.transactionType.value == 'Transfer' || scope.transaction.reversed == 'true') {
scope.flag = true;
}
});
scope.undoTransaction = function (accountId, transactionId) {
var params = {savingsId: accountId, transactionId: transactionId, command: 'undo'};
var formData = {dateFormat: scope.df, locale: scope.optlang.code, transactionAmount: 0};
formData.transactionDate = dateFilter(new Date(), scope.df);
resourceFactory.fixedDepositTrxnsResource.save(params, formData, function (data) {
location.path('/viewfixeddepositaccount/' + data.savingsId);
});
};
}
});
mifosX.ng.application.controller('ViewFixedDepositTransactionController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.ViewFixedDepositTransactionController]).run(function ($log) {
$log.info("ViewFixedDepositTransactionController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,54 @@
(function (module) {
mifosX.controllers = _.extend(module, {
AddNewRecurringDepositChargeController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.offices = [];
scope.cancelRoute = routeParams.id;
scope.date = {};
resourceFactory.savingsChargeResource.get({accountId: routeParams.id, resourceType: 'template'}, function (data) {
scope.chargeOptions = data.chargeOptions;
});
scope.chargeSelected = function (id) {
resourceFactory.chargeResource.get({chargeId: id, template: 'true'}, function (data) {
scope.chargeCalculationType = data.chargeCalculationType.id;
scope.chargeTimeType = data.chargeTimeType.id;
scope.chargeDetails = data;
scope.formData.amount = data.amount;
scope.withDrawCharge = data.chargeTimeType.value === "Withdrawal Fee" ? true : false;
scope.formData.feeInterval = data.feeInterval;
if (data.chargeTimeType.value === "Annual Fee" || data.chargeTimeType.value === "Monthly Fee") {
scope.chargeTimeTypeAnnualOrMonth = true;
}
});
};
scope.submit = function () {
this.formData.locale = "en";
if (scope.withDrawCharge !== true) {
if (scope.chargeTimeTypeAnnualOrMonth === true) {
this.formData.monthDayFormat = "dd MMMM";
if (scope.date.due) {
this.formData.feeOnMonthDay = dateFilter(scope.date.due, 'dd MMMM');
} else {
this.formData.feeOnMonthDay = "";
}
} else {
this.formData.dateFormat = "dd MMMM yyyy";
if (scope.date.specificduedate) {
this.formData.dueDate = dateFilter(scope.date.specificduedate, scope.df);
} else {
this.formData.dueDate = "";
}
}
}
resourceFactory.savingsChargeResource.save({accountId: routeParams.id}, this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + routeParams.id);
});
};
}
});
mifosX.ng.application.controller('AddNewRecurringDepositChargeController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.AddNewRecurringDepositChargeController]).run(function ($log) {
$log.info("AddNewRecurringDepositChargeController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,309 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateRecurringDepositAccountController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.products = [];
scope.fieldOfficers = [];
scope.formData = {};
scope.restrictDate = new Date();
scope.clientId = routeParams.clientId;
scope.groupId = routeParams.groupId;
if (routeParams.centerEntity) {
scope.centerEntity = true;
}
//interest rate chart details
scope.chart = {};
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
scope.charges = [];
scope.inparams = {};
if (scope.clientId) {
scope.inparams.clientId = scope.clientId
}
;
if (scope.groupId) {
scope.inparams.groupId = scope.groupId
}
;
if (scope.centerId) {
scope.inparams.centerId = scope.centerId
}
;
resourceFactory.recurringDepositAccountTemplateResource.get(scope.inparams, function (data) {
scope.products = data.productOptions;
scope.chargeOptions = data.chargeOptions;
scope.clientName = data.clientName;
scope.groupName = data.groupName;
});
scope.changeProduct = function () {
scope.inparams.productId = scope.formData.productId;
resourceFactory.recurringDepositAccountTemplateResource.get(scope.inparams, function (data) {
scope.data = data;
scope.charges = data.charges;
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value === "Annual Fee" && scope.charges[i].feeOnMonthDay) {
scope.charges[i].feeOnMonthDay.push('2013');
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
}
}
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
if (data.interestFreePeriodApplicable) scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
if (data.preClosurePenalApplicable) scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData.recurringDepositTypeId = scope.data.recurringDepositTypeOptions[0].id;
scope.formData.recurringDepositFrequencyTypeId = scope.data.recurringDepositFrequencyTypeOptions[0].id;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
scope.formData.recurringDepositFrequency = data.recurringDepositFrequency;
});
};
scope.addCharge = function (chargeId) {
scope.errorchargeevent = false;
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, function (data) {
data.chargeId = data.id;
if (data.chargeTimeType.value == "Annual Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
} else if (data.chargeTimeType.value == "Monthly Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
}
scope.charges.push(data);
scope.chargeId = undefined;
});
} else {
scope.errorchargeevent = true;
scope.labelchargeerror = "selectcharge";
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.submit = function () {
if (scope.date) {
this.formData.submittedOnDate = dateFilter(scope.date.submittedOnDate, scope.df);
}
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
this.formData.monthDayFormat = "dd MMM";
this.formData.charges = [];
if (scope.clientId) this.formData.clientId = scope.clientId;
if (scope.groupId) this.formData.groupId = scope.groupId;
if (scope.centerId) this.formData.centerId = scope.centerId;
if (scope.charges.length > 0) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM')});
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
dueDate: dateFilter(scope.charges[i].dueDate, scope.df)});
} else if (scope.charges[i].chargeTimeType.value == 'Monthly Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM'), feeInterval: scope.charges[i].feeInterval});
} else {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount});
}
}
}
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.recurringDepositAccountResource.save(this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
};
scope.cancel = function () {
if (scope.clientId) {
location.path('/viewclient/' + scope.clientId);
} else if (scope.centerEntity) {
location.path('/viewcenter/' + scope.groupId);
} else {
location.path('/viewgroup/' + scope.groupId);
}
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs)),
isActiveChart: 'true'
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('CreateRecurringDepositAccountController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.CreateRecurringDepositAccountController]).run(function ($log) {
$log.info("CreateRecurringDepositAccountController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,361 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditRecurringDepositAccountController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.products = [];
scope.fieldOfficers = [];
scope.formData = {};
scope.accountId = routeParams.id;
scope.charges = [];
scope.restrictDate = new Date();
//interest rate chart details
scope.chart = {};
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.recurringDepositAccountResource.get({accountId: scope.accountId, template: 'true', associations: 'charges'}, function (data) {
scope.data = data;
scope.charges = data.charges || [];
if (scope.charges) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
scope.charges[i].feeOnMonthDay.push(2013);
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
} else if (scope.charges[i].chargeTimeType.value == "Monthly Fee") {
scope.charges[i].feeOnMonthDay.push(2013);
scope.charges[i].feeOnMonthDay = new Date(dateFilter(scope.charges[i].feeOnMonthDay, scope.df));
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
scope.charges[i].dueDate = new Date(dateFilter(scope.charges[i].dueDate, scope.df));
}
}
}
if (data.clientId) {
scope.formData.clientId = data.clientId;
scope.clientName = data.clientName;
}
if (data.groupId) {
scope.formData.groupId = data.groupId;
scope.groupName = data.groupName;
}
scope.formData.productId = data.savingsProductId;
scope.products = data.productOptions;
if (data.fieldOfficerId != 0)scope.formData.fieldOfficerId = data.fieldOfficerId;
if (data.timeline) {
var submittedOnDate = dateFilter(data.timeline.submittedOnDate, scope.df);
scope.formData.submittedOnDate = new Date(submittedOnDate);
}
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.recurringDepositAmount = data.recurringDepositAmount;
scope.formData.depositPeriod = data.depositPeriod;
scope.formData.recurringDepositFrequency = data.recurringDepositFrequency;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
/* FIX-ME: uncomment annualFeeAmount when datepicker avialable, because it depends on the date field 'annualFeeOnMonthDay'*/
//scope.formData.annualFeeAmount = data.annualFeeAmount;
//scope.formData.withdrawalFeeAmount = data.withdrawalFeeAmount;
//scope.formData.withdrawalFeeForTransfers = data.withdrawalFeeForTransfers;
var depositPeriodFrequencyId = (_.isNull(data.depositPeriodFrequency) || _.isUndefined(data.depositPeriodFrequency)) ? '' : data.depositPeriodFrequency.id;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
//if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var depositPeriodFrequencyId = (_.isNull(data.depositPeriodFrequency) || _.isUndefined(data.depositPeriodFrequency)) ? '' : data.depositPeriodFrequency.id;
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
var recurringDepositTypeId = (_.isNull(data.recurringDepositType) || _.isUndefined(data.recurringDepositType)) ? '' : data.recurringDepositType.id;
var recurringDepositFrequencyTypeId = (_.isNull(data.recurringDepositFrequencyType) || _.isUndefined(data.recurringDepositFrequencyType)) ? '' : data.recurringDepositFrequencyType.id;
scope.formData.depositPeriodFrequencyId = depositPeriodFrequencyId;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
scope.formData.recurringDepositTypeId = recurringDepositTypeId;
scope.formData.recurringDepositFrequencyTypeId = recurringDepositFrequencyTypeId;
});
scope.changeProduct = function () {
var inparams = {productId: scope.formData.productId};
if (scope.formData.clientId) inparams.clientId = scope.formData.clientId;
if (scope.formData.groupId) inparams.groupId = scope.formData.groupId;
resourceFactory.recurringDepositAccountTemplateResource.get(inparams, function (data) {
scope.data = data;
scope.fieldOfficers = data.fieldOfficerOptions;
scope.formData.nominalAnnualInterestRate = data.nominalAnnualInterestRate;
scope.formData.recurringDepositAmount = data.recurringDepositAmount;
scope.formData.depositPeriod = data.depositPeriod;
scope.formData.recurringDepositFrequency = data.recurringDepositFrequency;
scope.formData.lockinPeriodFrequency = data.lockinPeriodFrequency;
/* FIX-ME: uncomment annualFeeAmount when datepicker avialable, because it depends on the date field 'annualFeeOnMonthDay'*/
//scope.formData.annualFeeAmount = data.annualFeeAmount;
//scope.formData.withdrawalFeeAmount = data.withdrawalFeeAmount;
//scope.formData.withdrawalFeeForTransfers = data.withdrawalFeeForTransfers;
if (data.interestCompoundingPeriodType) scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
if (data.interestPostingPeriodType) scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
if (data.interestCalculationType) scope.formData.interestCalculationType = data.interestCalculationType.id;
if (data.interestCalculationDaysInYearType) scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
if (data.lockinPeriodFrequencyType) scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
//if (data.withdrawalFeeType) scope.formData.withdrawalFeeType = data.withdrawalFeeType.id;
scope.chart = data.accountChart;
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
var depositPeriodFrequencyId = (_.isNull(data.depositPeriodFrequency) || _.isUndefined(data.depositPeriodFrequency)) ? '' : data.depositPeriodFrequency.id;
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
var recurringDepositTypeId = (_.isNull(data.recurringDepositType) || _.isUndefined(data.recurringDepositType)) ? '' : data.recurringDepositType.id;
var recurringDepositFrequencyTypeId = (_.isNull(data.recurringDepositFrequencyType) || _.isUndefined(data.recurringDepositFrequencyType)) ? '' : data.recurringDepositFrequencyType.id;
scope.formData.depositPeriodFrequencyId = depositPeriodFrequencyId;
scope.formData.interestFreePeriodApplicable = data.interestFreePeriodApplicable;
scope.formData.interestFreeFromPeriod = data.interestFreeFromPeriod;
scope.formData.interestFreeToPeriod = data.interestFreeToPeriod;
scope.formData.interestFreePeriodFrequencyTypeId = interestFreePeriodFrequencyTypeId;
scope.formData.preClosurePenalApplicable = data.preClosurePenalApplicable;
scope.formData.preClosurePenalInterest = data.preClosurePenalInterest;
scope.formData.preClosurePenalInterestOnTypeId = preClosurePenalInterestOnTypeId;
scope.formData.minDepositTerm = data.minDepositTerm;
scope.formData.maxDepositTerm = data.maxDepositTerm;
scope.formData.minDepositTermTypeId = minDepositTermTypeId;
scope.formData.maxDepositTermTypeId = maxDepositTermTypeId;
scope.formData.inMultiplesOfDepositTerm = data.inMultiplesOfDepositTerm;
scope.formData.inMultiplesOfDepositTermTypeId = inMultiplesOfDepositTermTypeId;
scope.formData.recurringDepositTypeId = recurringDepositTypeId;
scope.formData.recurringDepositFrequencyTypeId = recurringDepositFrequencyTypeId;
});
}
scope.addCharge = function (chargeId) {
scope.errorchargeevent = false;
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, function (data) {
data.chargeId = data.id;
if (data.chargeTimeType.value == "Annual Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
} else if (data.chargeTimeType.value == "Monthly Fee") {
if (data.feeOnMonthDay) {
data.feeOnMonthDay.push(2013);
data.feeOnMonthDay = new Date(dateFilter(data.feeOnMonthDay, scope.df));
}
}
delete data.id;
scope.charges.push(data);
scope.chargeId = undefined;
});
} else {
scope.errorchargeevent = true;
scope.labelchargeerror = "selectcharge";
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.cancel = function () {
location.path('/viewsavingaccount/' + scope.accountId);
}
scope.submit = function () {
if (this.formData.submittedOnDate) this.formData.submittedOnDate = dateFilter(this.formData.submittedOnDate, scope.df);
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
this.formData.monthDayFormat = "dd MMM";
scope.formData.charges = [];
if (scope.charges.length > 0) {
for (var i in scope.charges) {
if (scope.charges[i].chargeTimeType.value == 'Annual Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM')});
} else if (scope.charges[i].chargeTimeType.value == 'Specified due date') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
dueDate: dateFilter(scope.charges[i].dueDate, scope.df)});
} else if (scope.charges[i].chargeTimeType.value == 'Monthly Fee') {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount,
feeOnMonthDay: dateFilter(scope.charges[i].feeOnMonthDay, 'dd MMMM'), feeInterval: scope.charges[i].feeInterval});
} else {
this.formData.charges.push({ chargeId: scope.charges[i].chargeId, amount: scope.charges[i].amount});
}
}
}
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.recurringDepositAccountResource.update({'accountId': scope.accountId}, this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
};
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs)),
isActiveChart: 'true'
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('EditRecurringDepositAccountController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.EditRecurringDepositAccountController]).run(function ($log) {
$log.info("EditRecurringDepositAccountController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,308 @@
(function (module) {
mifosX.controllers = _.extend(module, {
RecurringDepositAccountActionsController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.action = routeParams.action || "";
scope.accountId = routeParams.id;
scope.savingAccountId = routeParams.id;
scope.formData = {};
scope.restrictDate = new Date();
// Transaction UI Related
scope.isAccountClose = false;
scope.showPaymentDetails = false;
scope.paymentTypes = [];
switch (scope.action) {
case "approve":
scope.title = 'label.heading.approverecurringdepositaccount';
scope.labelName = 'label.input.savingaccountapprovedOnDate';
scope.modelName = 'approvedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Approve application';
break;
case "reject":
scope.title = 'label.heading.rejectrecurringdepositaccount';
scope.labelName = 'label.input.rejectedon';
scope.modelName = 'rejectedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Reject application';
break;
case "withdrawnByApplicant":
scope.title = 'label.heading.withdrawnrecurringdepositaccount';
scope.labelName = 'label.input.withdrawnon';
scope.modelName = 'withdrawnOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.actionName = 'Withdrawn by applicant';
break;
case "undoapproval":
scope.title = 'label.heading.undoapproverecurringdepositaccount';
scope.showDateField = false;
scope.showNoteField = true;
scope.actionName = 'Undo Approve application';
break;
case "activate":
scope.title = 'label.heading.activaterecurringdepositaccount';
scope.labelName = 'label.input.activatedon';
scope.modelName = 'activatedOnDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.actionName = 'Approve application';
break;
case "deposit":
resourceFactory.recurringDepositTrxnsTemplateResource.get({savingsId: scope.accountId, command: 'deposit'}, function (data) {
scope.formData.transactionAmount = data.amount;
scope.paymentTypes = data.paymentTypeOptions;
scope.formData.transactionDate=new Date(dateFilter(data.date, scope.df));
});
scope.title = 'label.heading.depositmoneytorecurringaccount';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
scope.showPaymentType=true;
scope.showAmount=true;
break;
case "withdrawal":
resourceFactory.savingsTrxnsTemplateResource.get({savingsId: scope.accountId, command: 'withdrawal'}, function (data) {
scope.paymentTypes = data.paymentTypeOptions;
});
scope.title = 'label.heading.withdrawmoneyfromsavingaccount';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
scope.showPaymentType=true;
break;
case "applyAnnualFees":
resourceFactory.savingsResource.get({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId},
function (data) {
scope.formData.amount = data.amount;
if (data.dueDate) {
var dueDate = dateFilter(data.dueDate, scope.df);
scope.formData.dueDate = new Date(dueDate);
}
});
scope.title = 'label.heading.savingaccountapplyannualFee';
scope.labelName = 'label.input.annualfeetransactiondate';
scope.modelName = 'dueDate';
scope.showDateField = true;
scope.showAnnualAmountField = true;
scope.showAmountField = false;
scope.showNoteField = false;
break;
case "close":
resourceFactory.recurringDepositAccountResource.get({accountId: routeParams.id, resourceType: 'template', command: 'close'},
function (data) {
scope.maturityAmount = data.maturityAmount;
scope.onAccountClosureOptions = data.onAccountClosureOptions;
scope.savingsAccounts = data.savingsAccounts;
scope.paymentTypes = data.paymentTypeOptions;
scope.currency = data.currency;
});
scope.title = 'label.heading.closerecurringdepositaccount';
scope.labelName = 'label.input.closedon';
scope.modelName = 'closedOnDate';
scope.showDateField = true;
scope.showNoteField = true;
scope.isAccountClose = true;
scope.showPaymentType=true;
break;
case "prematureClose":
scope.title = 'label.heading.prematurecloserecurringdepositaccount';
scope.labelName = 'label.input.closedon';
scope.modelName = 'closedOnDate';
scope.showDateField = true;
scope.showNoteField = false;
scope.retrievePreMatureAmount = true;
scope.showPaymentType=false;
break;
case "modifytransaction":
resourceFactory.recurringDepositTrxnsResource.get({savingsId: scope.accountId, transactionId: routeParams.transactionId, template: 'true'},
function (data) {
scope.title = 'label.heading.editrecurringdepositaccounttransaction';
scope.labelName = 'label.input.transactiondate';
scope.modelName = 'transactionDate';
scope.formData[scope.modelName] = new Date(data.date) || new Date();
scope.paymentTypes = data.paymentTypeOptions;
scope.formData.transactionAmount = data.amount;
if (data.paymentDetailData) {
if (data.paymentDetailData.paymentType) {
scope.formData.paymentTypeId = data.paymentDetailData.paymentType.id;
}
scope.formData.accountNumber = data.paymentDetailData.accountNumber;
scope.formData.checkNumber = data.paymentDetailData.checkNumber;
scope.formData.routingCode = data.paymentDetailData.routingCode;
scope.formData.receiptNumber = data.paymentDetailData.receiptNumber;
scope.formData.bankNumber = data.paymentDetailData.bankNumber;
}
});
scope.showDateField = true;
scope.showNoteField = false;
scope.isTransaction = true;
scope.showPaymentDetails = false;
scope.showPaymentType=true;
scope.showAmount=true;
break;
case "editsavingcharge":
resourceFactory.savingsResource.get({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId},
function (data) {
scope.formData.amount = data.amount;
if (data.feeOnMonthDay) {
scope.dateArray = [];
scope.dateArray.push(2013)
for (var i in data.feeOnMonthDay) {
scope.dateArray.push(data.feeOnMonthDay[i]);
}
var feeOnMonthDay = dateFilter(scope.dateArray, scope.df);
scope.formData.feeOnMonthDayFullDate = new Date(feeOnMonthDay);
scope.labelName = 'label.heading.savingaccounttransactionDate';
scope.modelName = 'feeOnMonthDayFullDate';
scope.showDateField = true;
scope.showAnnualAmountField = true;
scope.showAmountField = false;
} else {
scope.labelName = 'label.amount';
scope.modelName = 'amount';
scope.showDateField = false;
scope.showAnnualAmountField = false;
scope.showAmountField = true;
}
});
break;
case "deletesavingcharge":
scope.showDelete = true;
break;
case "paycharge":
scope.formData.dueDate = new Date();
resourceFactory.savingsResource.get({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId,
command: 'paycharge'}, function (data) {
scope.formData.amount = data.amountOutstanding;
});
scope.labelName = 'label.amount';
scope.showAmountField = true;
scope.paymentDatefield = true;
scope.modelName = 'dueDate';
break;
case "waive":
scope.waiveCharge = true;
break;
}
scope.cancel = function () {
location.path('/viewrecurringdepositaccount/' + routeParams.id);
};
scope.submit = function () {
var params = {command: scope.action};
if (scope.action != "undoapproval") {
this.formData.locale = scope.optlang.code;
this.formData.dateFormat = scope.df;
}
if (scope.action == "deposit" || scope.action == "modifytransaction") {
if (scope.action == "deposit") {
if (this.formData.transactionDate) {
this.formData.transactionDate = dateFilter(this.formData.transactionDate, scope.df);
}
params.command = 'deposit';
}
if (scope.action == "modifytransaction") {
params.command = 'modify';
if (this.formData.transactionDate) {
this.formData.transactionDate = dateFilter(this.formData.transactionDate, scope.df);
}
params.transactionId = routeParams.transactionId;
}
params.savingsId = scope.accountId;
resourceFactory.recurringDepositTrxnsResource.save(params, this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
} else if (scope.action == "editsavingcharge") {
if (this.formData.feeOnMonthDayFullDate) {
this.formData.feeOnMonthDay = dateFilter(this.formData.feeOnMonthDayFullDate, scope.df);
this.formData.monthDayFormat = "dd MMM";
this.formData.feeOnMonthDay = this.formData.feeOnMonthDay.substring(0, this.formData.feeOnMonthDay.length - 5);
delete this.formData.feeOnMonthDayFullDate;
}
resourceFactory.savingsResource.update({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId}, this.formData,
function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
} else if (scope.action == "deletesavingcharge") {
resourceFactory.savingsResource.delete({accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId}, this.formData,
function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
} else if (scope.action == "paycharge" || scope.action == "waive") {
params = {accountId: routeParams.id, resourceType: 'charges', chargeId: routeParams.chargeId, command: scope.action};
if (this.formData.dueDate) {
this.formData.dueDate = dateFilter(this.formData.dueDate, scope.df);
}
resourceFactory.savingsResource.save(params, this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
} else {
params.accountId = scope.accountId;
if (scope.action == "approve") {
if (this.formData.approvedOnDate) {
this.formData.approvedOnDate = dateFilter(this.formData.approvedOnDate, scope.df);
}
} else if (scope.action == "withdrawnByApplicant") {
if (this.formData.withdrawnOnDate) {
this.formData.withdrawnOnDate = dateFilter(this.formData.withdrawnOnDate, scope.df);
}
} else if (scope.action == "reject") {
if (this.formData.rejectedOnDate) {
this.formData.rejectedOnDate = dateFilter(this.formData.rejectedOnDate, scope.df);
}
} else if (scope.action == "activate") {
if (this.formData.activatedOnDate) {
this.formData.activatedOnDate = dateFilter(this.formData.activatedOnDate, scope.df);
}
/*} else if (scope.action == "applyAnnualFees" || scope.action == "paycharge" || scope.action == "waivecharge") {
params = {accountId : routeParams.id, resourceType : 'charges', chargeId : routeParams.chargeId, command : 'paycharge'};
if (this.formData.dueDate) {
this.formData.dueDate = dateFilter(this.formData.dueDate,scope.df);
}*/
} else if (scope.action === "close") {
if (this.formData.closedOnDate) {
this.formData.closedOnDate = dateFilter(this.formData.closedOnDate, scope.df);
}
} else if (scope.action === "prematureClose") {
if (this.formData.closedOnDate) {
this.formData.closedOnDate = dateFilter(this.formData.closedOnDate, scope.df);
}
if (scope.retrievePreMatureAmount) {
params = {accountId: routeParams.id, command: 'calculatePrematureAmount'};
resourceFactory.recurringDepositAccountResource.save(params, this.formData, function (data) {
scope.maturityAmount = data.maturityAmount;
scope.onAccountClosureOptions = data.onAccountClosureOptions;
scope.savingsAccounts = data.savingsAccounts;
scope.paymentTypes = data.paymentTypeOptions;
scope.currency = data.currency;
});
scope.isAccountClose = true;
scope.showNoteField = true;
scope.retrievePreMatureAmount = false;
scope.showPaymentType=true;
return;
}
}
resourceFactory.recurringDepositAccountResource.save(params, this.formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
}
};
}
});
mifosX.ng.application.controller('RecurringDepositAccountActionsController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.RecurringDepositAccountActionsController]).run(function ($log) {
$log.info("RecurringDepositAccountActionsController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,262 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewRecurringDepositAccountDetailsController: function (scope, routeParams, resourceFactory, location, route, dateFilter) {
scope.isDebit = function (savingsTransactionType) {
return savingsTransactionType.withdrawal == true || savingsTransactionType.feeDeduction == true;
};
scope.clickEvent = function (eventName, accountId) {
eventName = eventName || "";
switch (eventName) {
case "modifyapplication":
location.path('/editrecurringdepositaccount/' + accountId);
break;
case "approve":
location.path('/recurringdepositaccount/' + accountId + '/approve');
break;
case "reject":
location.path('/recurringdepositaccount/' + accountId + '/reject');
break;
case "withdrawnbyclient":
location.path('/recurringdepositaccount/' + accountId + '/withdrawnByApplicant');
break;
case "delete":
resourceFactory.recurringDepositAccountResource.delete({accountId: accountId}, {}, function (data) {
var destination = '/viewgroup/' + data.groupId;
if (data.clientId) destination = '/viewclient/' + data.clientId;
location.path(destination);
});
break;
case "undoapproval":
location.path('/recurringdepositaccount/' + accountId + '/undoapproval');
break;
case "activate":
location.path('/recurringdepositaccount/' + accountId + '/activate');
break;
case "deposit":
location.path('/recurringdepositaccount/' + accountId + '/deposit');
break;
/*case "withdraw":
location.path('/recurringdepositaccount/' + accountId + '/withdrawal');
break;*/
case "addcharge":
location.path('/recurringdepositaccount/' + accountId + '/charges');
break;
case "calculateInterest":
resourceFactory.recurringDepositAccountResource.save({accountId: accountId, command: 'calculateInterest'}, {}, function (data) {
route.reload();
});
break;
case "postInterest":
resourceFactory.recurringDepositAccountResource.save({accountId: accountId, command: 'postInterest'}, {}, function (data) {
route.reload();
});
break;
/*case "applyAnnualFees":
location.path('/savingaccountcharge/' + accountId + '/applyAnnualFees/' + scope.annualChargeId);
break;
case "transferFunds":
if (scope.savingaccountdetails.clientId) {
location.path('/accounttransfers/fromsavings/' + accountId);
}
break;*/
case "close":
location.path('/recurringdepositaccount/' + accountId + '/close');
break;
case "prematureClose":
location.path('/recurringdepositaccount/' + accountId + '/prematureClose');
break;
}
};
resourceFactory.recurringDepositAccountResource.get({accountId: routeParams.id, associations: 'all'}, function (data) {
scope.savingaccountdetails = data;
scope.status = data.status.value;
if (scope.status == "Submitted and pending approval" || scope.status == "Active" || scope.status == "Approved") {
scope.choice = true;
}
scope.chargeAction = data.status.value == "Submitted and pending approval" ? true : false;
if (scope.savingaccountdetails.charges) {
scope.charges = scope.savingaccountdetails.charges;
scope.chargeTableShow = true;
} else {
scope.chargeTableShow = false;
}
if (data.status.value == "Submitted and pending approval") {
scope.buttons = { singlebuttons: [
{
name: "button.modifyapplication",
icon: "icon-pencil "
},
{
name: "button.approve",
icon: "icon-ok-sign"
}
],
options: [
{
name: "button.reject"
},
{
name: "button.withdrawnbyclient"
},
{
name: "button.addcharge"
},
{
name: "button.delete"
}
]
};
}
if (data.status.value == "Approved") {
scope.buttons = { singlebuttons: [
{
name: "button.undoapproval",
icon: "icon-undo"
},
{
name: "button.activate",
icon: "icon-ok-sign"
}
]
};
}
if (data.status.value == "Active") {
scope.buttons = { singlebuttons: [
{
name: "button.deposit",
icon: "icon-arrow-right"
},
{
name: "button.prematureClose",
icon: "icon-arrow-left"
},
{
name: "button.calculateInterest",
icon: "icon-table"
}
],
options: [
{
name: "button.postInterest"
},
{
name: "button.addcharge"
}
]
};
if (data.clientId) {
scope.buttons.options.push({
name: "button.transferFunds"
});
}
if (data.charges) {
for (var i in scope.charges) {
if (scope.charges[i].name == "Annual fee - INR") {
scope.buttons.options.push({
name: "button.applyAnnualFees"
});
scope.annualChargeId = scope.charges[i].id;
}
}
}
}
if (data.status.value == "Matured") {
scope.buttons = { singlebuttons: [
{
name: "button.close",
icon: "icon-arrow-right"
},
{
name: "button.calculateInterest",
icon: "icon-table"
},
{
name: "button.postInterest",
icon: "icon-table"
}
],
options: [
{
name: "button.addcharge"
}
]
};
if (data.clientId) {
scope.buttons.options.push({
name: "button.transferFunds"
});
}
if (data.charges) {
for (var i in scope.charges) {
if (scope.charges[i].name == "Annual fee - INR") {
scope.buttons.options.push({
name: "button.applyAnnualFees"
});
scope.annualChargeId = scope.charges[i].id;
}
}
}
}
/*var annualdueDate = [];
annualdueDate = data.annualFee.feeOnMonthDay;
annualdueDate.push(2013);
scope.annualdueDate = new Date(annualdueDate);*/
});
resourceFactory.DataTablesResource.getAllDataTables({apptable: 'm_savings_account'}, function (data) {
scope.savingdatatables = data;
});
scope.dataTableChange = function (datatable) {
resourceFactory.DataTablesResource.getTableDetails({datatablename: datatable.registeredTableName,
entityId: routeParams.id, genericResultSet: 'true'}, function (data) {
scope.datatabledetails = data;
scope.datatabledetails.isData = data.data.length > 0 ? true : false;
scope.datatabledetails.isMultirow = data.columnHeaders[0].columnName == "id" ? true : false;
scope.singleRow = [];
for (var i in data.columnHeaders) {
if (scope.datatabledetails.columnHeaders[i].columnCode) {
for (var j in scope.datatabledetails.columnHeaders[i].columnValues) {
for (var k in data.data) {
if (data.data[k].row[i] == scope.datatabledetails.columnHeaders[i].columnValues[j].id) {
data.data[k].row[i] = scope.datatabledetails.columnHeaders[i].columnValues[j].value;
}
}
}
}
}
if (scope.datatabledetails.isData) {
for (var i in data.columnHeaders) {
if (!scope.datatabledetails.isMultirow) {
var row = {};
row.key = data.columnHeaders[i].columnName;
row.value = data.data[0].row[i];
scope.singleRow.push(row);
}
}
}
});
};
scope.deleteAll = function (apptableName, entityId) {
resourceFactory.DataTablesResource.delete({datatablename: apptableName, entityId: entityId, genericResultSet: 'true'}, {}, function (data) {
route.reload();
});
};
scope.modifyTransaction = function (accountId, transactionId) {
location.path('/recurringdepositaccount/' + accountId + '/modifytransaction?transactionId=' + transactionId);
};
}
});
mifosX.ng.application.controller('ViewRecurringDepositAccountDetailsController', ['$scope', '$routeParams', 'ResourceFactory', '$location', '$route', 'dateFilter', mifosX.controllers.ViewRecurringDepositAccountDetailsController]).run(function ($log) {
$log.info("ViewRecurringDepositAccountDetailsController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,25 @@
(function (module) {
mifosX.controllers = _.extend(module, {
ViewRecurringDepositTransactionController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.flag = false;
resourceFactory.recurringDepositTrxnsResource.get({savingsId: routeParams.accountId, transactionId: routeParams.transactionId}, function (data) {
scope.transaction = data;
if (scope.transaction.transactionType.value == 'Transfer' || scope.transaction.reversed == 'true') {
scope.flag = true;
}
});
scope.undoTransaction = function (accountId, transactionId) {
var params = {savingsId: accountId, transactionId: transactionId, command: 'undo'};
var formData = {dateFormat: scope.df, locale: scope.optlang.code, transactionAmount: 0};
formData.transactionDate = dateFilter(new Date(), scope.df);
resourceFactory.recurringDepositTrxnsResource.save(params, formData, function (data) {
location.path('/viewrecurringdepositaccount/' + data.savingsId);
});
};
}
});
mifosX.ng.application.controller('ViewRecurringDepositTransactionController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.ViewRecurringDepositTransactionController]).run(function ($log) {
$log.info("ViewRecurringDepositTransactionController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,306 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateFixedDepositProductController: function (scope, resourceFactory, location, dateFilter) {
scope.formData = {};
scope.charges = [];
scope.showOrHideValue = "show";
scope.configureFundOptions = [];
scope.specificIncomeaccounts = [];
scope.penaltySpecificIncomeaccounts = [];
scope.configureFundOption = {};
//interest rate details
scope.chart = {};
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.fixedDepositProductResource.get({resourceType: 'template'}, function (data) {
scope.product = data;
scope.product.chargeOptions = scope.product.chargeOptions || [];
scope.assetAccountOptions = scope.product.accountingMappingOptions.assetAccountOptions || [];
scope.liabilityAccountOptions = scope.product.accountingMappingOptions.liabilityAccountOptions || [];
scope.incomeAccountOptions = scope.product.accountingMappingOptions.incomeAccountOptions || [];
scope.expenseAccountOptions = scope.product.accountingMappingOptions.expenseAccountOptions || [];
scope.formData.currencyCode = data.currencyOptions[0].code;
scope.formData.digitsAfterDecimal = data.currencyOptions[0].decimalPlaces;
scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
scope.formData.interestCalculationType = data.interestCalculationType.id;
scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
scope.formData.preClosurePenalInterestOnTypeId = scope.product.preClosurePenalInterestOnTypeOptions[0].id;
scope.formData.interestFreePeriodFrequencyTypeId = scope.product.interestFreePeriodTypeOptions[0].id;
//alert(scope.formData.interestFreePeriodFrequencyTypeId);
//set chart template
scope.chart = scope.product.chartTemplate;
scope.chart.chartSlabs = [];
if (scope.assetAccountOptions.length > 0) {
scope.formData.savingsReferenceAccountId = scope.assetAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 0) {
scope.formData.savingsControlAccountId = scope.liabilityAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 1) {
scope.formData.transfersInSuspenseAccountId = scope.liabilityAccountOptions[1].id;
}
if (scope.incomeAccountOptions.length > 0) {
scope.formData.incomeFromFeeAccountId = scope.incomeAccountOptions[0].id;
}
if (scope.incomeAccountOptions.length > 1) {
scope.formData.incomeFromPenaltyAccountId = scope.incomeAccountOptions[1].id;
}
if (scope.expenseAccountOptions.length > 0) {
scope.formData.interestOnSavingsAccountId = scope.expenseAccountOptions[0].id;
}
scope.formData.accountingRule = '1';
});
//advanced accounting rule
scope.showOrHide = function (showOrHideValue) {
if (showOrHideValue == "show") {
scope.showOrHideValue = 'hide';
}
if (showOrHideValue == "hide") {
scope.showOrHideValue = 'show';
}
}
scope.chargeSelected = function (chargeId) {
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, this.formData, function (data) {
data.chargeId = data.id;
scope.charges.push(data);
//to charge select box empty
scope.chargeId = '';
});
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.addConfigureFundSource = function () {
if (scope.product.paymentTypeOptions && scope.product.paymentTypeOptions.length > 0 &&
scope.assetAccountOptions && scope.assetAccountOptions.length > 0) {
scope.configureFundOptions.push({
paymentTypeId: scope.product.paymentTypeOptions[0].id,
fundSourceAccountId: scope.assetAccountOptions[0].id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
});
}
;
}
scope.mapFees = function () {
if (scope.product.chargeOptions && scope.product.chargeOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.specificIncomeaccounts.push({
chargeId: scope.product.chargeOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.product.accountingMappingOptions.incomeAccountOptions
});
}
}
scope.mapPenalty = function () {
if (scope.product.penaltyOptions && scope.product.penaltyOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: scope.product.penaltyOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
});
}
}
scope.deleteFund = function (index) {
scope.configureFundOptions.splice(index, 1);
}
scope.deleteFee = function (index) {
scope.specificIncomeaccounts.splice(index, 1);
}
scope.deletePenalty = function (index) {
scope.penaltySpecificIncomeaccounts.splice(index, 1);
}
scope.cancel = function () {
location.path('/fixeddepositproducts');
};
scope.submit = function () {
scope.paymentChannelToFundSourceMappings = [];
scope.feeToIncomeAccountMappings = [];
scope.penaltyToIncomeAccountMappings = [];
scope.chargesSelected = [];
var temp = '';
//configure fund sources for payment channels
for (var i in scope.configureFundOptions) {
temp = {
paymentTypeId: scope.configureFundOptions[i].paymentTypeId,
fundSourceAccountId: scope.configureFundOptions[i].fundSourceAccountId
}
scope.paymentChannelToFundSourceMappings.push(temp);
}
//map fees to specific income accounts
for (var i in scope.specificIncomeaccounts) {
temp = {
chargeId: scope.specificIncomeaccounts[i].chargeId,
incomeAccountId: scope.specificIncomeaccounts[i].incomeAccountId
}
scope.feeToIncomeAccountMappings.push(temp);
}
//map penalties to specific income accounts
for (var i in scope.penaltySpecificIncomeaccounts) {
temp = {
chargeId: scope.penaltySpecificIncomeaccounts[i].chargeId,
incomeAccountId: scope.penaltySpecificIncomeaccounts[i].incomeAccountId
}
scope.penaltyToIncomeAccountMappings.push(temp);
}
for (var i in scope.charges) {
temp = {
id: scope.charges[i].id
}
scope.chargesSelected.push(temp);
}
this.formData.paymentChannelToFundSourceMappings = scope.paymentChannelToFundSourceMappings;
this.formData.feeToIncomeAccountMappings = scope.feeToIncomeAccountMappings;
this.formData.penaltyToIncomeAccountMappings = scope.penaltyToIncomeAccountMappings;
this.formData.charges = scope.chargesSelected;
this.formData.locale = "en";
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
resourceFactory.fixedDepositProductResource.save(this.formData, function (data) {
location.path('/viewfixeddepositproduct/' + data.resourceId);
});
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if(scope.chart.chartSlabs.length > 0){
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* Remove chart details row
*/
scope.removeRow = function(index){
scope.chart.chartSlabs.splice(index,1);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//alert("Period type id" + chartSlab.periodType.id);
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0){
// alert('key:' + k + " and value:" + v);
delete newChartSlabData[k];
}
});
return newChartSlabData;
}
}
});
mifosX.ng.application.controller('CreateFixedDepositProductController', ['$scope', 'ResourceFactory', '$location', 'dateFilter', mifosX.controllers.CreateFixedDepositProductController]).run(function ($log) {
$log.info("CreateFixedDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,180 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateInterestRateChartController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.formData = {};//used for update/save form data
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
//deposit product details
scope.productName = routeParams.productName;
scope.productId = routeParams.productId;
scope.productsLink = '';
scope.viewProductLink = '';
scope.productType = routeParams.productType;
//alert(scope.productType);
if ( routeParams.productType === 'fixeddepositproduct'){
scope.productsLink = 'fixeddepositproducts';
scope.viewProductLink = 'viewfixeddepositproduct';
}else if ( routeParams.productType === 'recurringdepositproduct'){
scope.productsLink = 'recurringdepositproducts';
scope.viewProductLink = 'viewrecurringdepositproduct';
}
//get a interestrate chart
resourceFactory.interestRateChartResource.get({resourceType: "template"}, function (data) {
scope.chart = data;
scope.chart.chartSlabs = [];
//format date values
//if (scope.chart.fromDate) {
// var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date();
//}
//if (scope.chart.endDate) {
// var endDate = dateFilter(scope.chart.endDate, scope.df);
// scope.endDate.date = new Date(endDate);
//}
});
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if(scope.chart.chartSlabs.length > 0){
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if(!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))){
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
//back to deposit product view
scope.cancel = function () {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + routeParams.productType);
};
/**
* Update Interest rate chart details
*/
scope.submitInterestRateChartForm = function () {
//scope.chartData = {};
//scope.chartData = copyChartData(scope.chart);
var chartData = copyChartData(scope.chart);
scope.formData.charts = [];//declare charts array
scope.formData.charts.push(chartData);//add chart details
//update deposit product with new chart
if ( routeParams.productType === 'fixeddepositproduct'){
resourceFactory.fixedDepositProductResource.update({productId: routeParams.productId}, scope.formData, function (data) {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + scope.productType);
});
}else if ( routeParams.productType === 'recurringdepositproduct'){
resourceFactory.recurringDepositProductResource.update({productId: routeParams.productId}, scope.formData, function (data) {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + scope.productType);
});
}
//resourceFactory.interestRateChartResource.save(chartData, function (data) {
// location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName);
//});
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
}
});
mifosX.ng.application.controller('CreateInterestRateChartController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.CreateInterestRateChartController]).run(function ($log) {
$log.info("CreateInterestRateChartController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,305 @@
(function (module) {
mifosX.controllers = _.extend(module, {
CreateRecurringDepositProductController: function (scope, resourceFactory, location, dateFilter) {
scope.formData = {};
scope.charges = [];
scope.showOrHideValue = "show";
scope.configureFundOptions = [];
scope.specificIncomeaccounts = [];
scope.penaltySpecificIncomeaccounts = [];
scope.configureFundOption = {};
//interest rate details
scope.chart = {};
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.recurringDepositProductResource.get({resourceType: 'template'}, function (data) {
scope.product = data;
scope.product.chargeOptions = scope.product.chargeOptions || [];
scope.assetAccountOptions = scope.product.accountingMappingOptions.assetAccountOptions || [];
scope.liabilityAccountOptions = scope.product.accountingMappingOptions.liabilityAccountOptions || [];
scope.incomeAccountOptions = scope.product.accountingMappingOptions.incomeAccountOptions || [];
scope.expenseAccountOptions = scope.product.accountingMappingOptions.expenseAccountOptions || [];
scope.formData.currencyCode = data.currencyOptions[0].code;
scope.formData.digitsAfterDecimal = data.currencyOptions[0].decimalPlaces;
scope.formData.interestCompoundingPeriodType = data.interestCompoundingPeriodType.id;
scope.formData.interestPostingPeriodType = data.interestPostingPeriodType.id;
scope.formData.interestCalculationType = data.interestCalculationType.id;
scope.formData.interestCalculationDaysInYearType = data.interestCalculationDaysInYearType.id;
scope.formData.preClosurePenalInterestOnTypeId = scope.product.preClosurePenalInterestOnTypeOptions[0].id;
scope.formData.interestFreePeriodFrequencyTypeId = scope.product.interestFreePeriodTypeOptions[0].id;
scope.formData.recurringDepositTypeId = scope.product.recurringDepositTypeOptions[0].id;
scope.formData.recurringDepositFrequencyTypeId = scope.product.recurringDepositFrequencyTypeOptions[0].id;
//set chart template
scope.chart = scope.product.chartTemplate;
scope.chart.chartSlabs = [];
if (scope.assetAccountOptions.length > 0) {
scope.formData.savingsReferenceAccountId = scope.assetAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 0) {
scope.formData.savingsControlAccountId = scope.liabilityAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 1) {
scope.formData.transfersInSuspenseAccountId = scope.liabilityAccountOptions[1].id;
}
if (scope.incomeAccountOptions.length > 0) {
scope.formData.incomeFromFeeAccountId = scope.incomeAccountOptions[0].id;
}
if (scope.incomeAccountOptions.length > 1) {
scope.formData.incomeFromPenaltyAccountId = scope.incomeAccountOptions[1].id;
}
if (scope.expenseAccountOptions.length > 0) {
scope.formData.interestOnSavingsAccountId = scope.expenseAccountOptions[0].id;
}
scope.formData.accountingRule = '1';
});
//advanced accounting rule
scope.showOrHide = function (showOrHideValue) {
if (showOrHideValue == "show") {
scope.showOrHideValue = 'hide';
}
if (showOrHideValue == "hide") {
scope.showOrHideValue = 'show';
}
}
scope.chargeSelected = function (chargeId) {
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, this.formData, function (data) {
data.chargeId = data.id;
scope.charges.push(data);
//to charge select box empty
scope.chargeId = '';
});
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.addConfigureFundSource = function () {
if (scope.product.paymentTypeOptions && scope.product.paymentTypeOptions.length > 0 &&
scope.assetAccountOptions && scope.assetAccountOptions.length > 0) {
scope.configureFundOptions.push({
paymentTypeId: scope.product.paymentTypeOptions[0].id,
fundSourceAccountId: scope.assetAccountOptions[0].id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
});
}
;
}
scope.mapFees = function () {
if (scope.product.chargeOptions && scope.product.chargeOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.specificIncomeaccounts.push({
chargeId: scope.product.chargeOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.product.accountingMappingOptions.incomeAccountOptions
});
}
}
scope.mapPenalty = function () {
if (scope.product.penaltyOptions && scope.product.penaltyOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: scope.product.penaltyOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
});
}
}
scope.deleteFund = function (index) {
scope.configureFundOptions.splice(index, 1);
}
scope.deleteFee = function (index) {
scope.specificIncomeaccounts.splice(index, 1);
}
scope.deletePenalty = function (index) {
scope.penaltySpecificIncomeaccounts.splice(index, 1);
}
scope.cancel = function () {
location.path('/recurringdepositproducts');
};
scope.submit = function () {
scope.paymentChannelToFundSourceMappings = [];
scope.feeToIncomeAccountMappings = [];
scope.penaltyToIncomeAccountMappings = [];
scope.chargesSelected = [];
var temp = '';
//configure fund sources for payment channels
for (var i in scope.configureFundOptions) {
temp = {
paymentTypeId: scope.configureFundOptions[i].paymentTypeId,
fundSourceAccountId: scope.configureFundOptions[i].fundSourceAccountId
}
scope.paymentChannelToFundSourceMappings.push(temp);
}
//map fees to specific income accounts
for (var i in scope.specificIncomeaccounts) {
temp = {
chargeId: scope.specificIncomeaccounts[i].chargeId,
incomeAccountId: scope.specificIncomeaccounts[i].incomeAccountId
}
scope.feeToIncomeAccountMappings.push(temp);
}
//map penalties to specific income accounts
for (var i in scope.penaltySpecificIncomeaccounts) {
temp = {
chargeId: scope.penaltySpecificIncomeaccounts[i].chargeId,
incomeAccountId: scope.penaltySpecificIncomeaccounts[i].incomeAccountId
}
scope.penaltyToIncomeAccountMappings.push(temp);
}
for (var i in scope.charges) {
temp = {
id: scope.charges[i].id
}
scope.chargesSelected.push(temp);
}
this.formData.paymentChannelToFundSourceMappings = scope.paymentChannelToFundSourceMappings;
this.formData.feeToIncomeAccountMappings = scope.feeToIncomeAccountMappings;
this.formData.penaltyToIncomeAccountMappings = scope.penaltyToIncomeAccountMappings;
this.formData.charges = scope.chargesSelected;
this.formData.locale = "en";
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
resourceFactory.recurringDepositProductResource.save(this.formData, function (data) {
location.path('/viewrecurringdepositproduct/' + data.resourceId);
});
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if(scope.chart.chartSlabs.length > 0){
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* Remove chart details row
*/
scope.removeRow = function(index){
scope.chart.chartSlabs.splice(index,1);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
}
});
mifosX.ng.application.controller('CreateRecurringDepositProductController', ['$scope', 'ResourceFactory', '$location', 'dateFilter', mifosX.controllers.CreateRecurringDepositProductController]).run(function ($log) {
$log.info("CreateRecurringDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,392 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditFixedDepositProductController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.formData = {};
scope.charges = [];
scope.showOrHideValue = "show";
scope.configureFundOptions = [];
scope.specificIncomeaccounts = [];
scope.penaltySpecificIncomeaccounts = [];
scope.configureFundOption = {};
//interest rate chart details
scope.chart = {};
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.fixedDepositProductResource.get({productId: routeParams.productId, template: 'true'}, function (data) {
scope.product = data;
scope.charges = data.charges;
scope.assetAccountOptions = scope.product.accountingMappingOptions.assetAccountOptions || [];
scope.liabilityAccountOptions = scope.product.accountingMappingOptions.liabilityAccountOptions || [];
scope.incomeAccountOptions = scope.product.accountingMappingOptions.incomeAccountOptions || [];
scope.expenseAccountOptions = scope.product.accountingMappingOptions.expenseAccountOptions || [];
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData = {
name: data.name,
shortName: data.shortName,
description: data.description,
currencyCode: data.currency.code,
digitsAfterDecimal: data.currency.decimalPlaces,
inMultiplesOf: data.currency.inMultiplesOf,
nominalAnnualInterestRate: data.nominalAnnualInterestRate,
minRequiredOpeningBalance: data.minRequiredOpeningBalance,
lockinPeriodFrequency: data.lockinPeriodFrequency,
interestCompoundingPeriodType: data.interestCompoundingPeriodType.id,
interestPostingPeriodType: data.interestPostingPeriodType.id,
interestCalculationType: data.interestCalculationType.id,
interestCalculationDaysInYearType: data.interestCalculationDaysInYearType.id,
accountingRule: data.accountingRule.id,
interestFreePeriodApplicable: data.interestFreePeriodApplicable,
interestFreeFromPeriod: data.interestFreeFromPeriod,
interestFreeToPeriod: data.interestFreeToPeriod,
interestFreePeriodFrequencyTypeId: interestFreePeriodFrequencyTypeId,
preClosurePenalApplicable: data.preClosurePenalApplicable,
preClosurePenalInterest: data.preClosurePenalInterest,
preClosurePenalInterestOnTypeId: preClosurePenalInterestOnTypeId,
minDepositTerm: data.minDepositTerm,
maxDepositTerm: data.maxDepositTerm,
minDepositTermTypeId: minDepositTermTypeId,
maxDepositTermTypeId: maxDepositTermTypeId,
inMultiplesOfDepositTerm: data.inMultiplesOfDepositTerm,
inMultiplesOfDepositTermTypeId: inMultiplesOfDepositTermTypeId
}
scope.chart = scope.product.activeChart;
scope.chart.chartSlabs = _.sortBy(scope.chart.chartSlabs, function (obj) {
return obj.fromPeriod
});
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
if (data.lockinPeriodFrequencyType) {
scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
}
if (scope.formData.accountingRule == 1) {
if (scope.assetAccountOptions.length > 0) {
scope.formData.savingsReferenceAccountId = scope.assetAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 0) {
scope.formData.savingsControlAccountId = scope.liabilityAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 1) {
scope.formData.transfersInSuspenseAccountId = scope.liabilityAccountOptions[1].id;
}
if (scope.incomeAccountOptions.length > 0) {
scope.formData.incomeFromFeeAccountId = scope.incomeAccountOptions[0].id;
}
if (scope.incomeAccountOptions.length > 1) {
scope.formData.incomeFromPenaltyAccountId = scope.incomeAccountOptions[1].id;
}
if (scope.expenseAccountOptions.length > 0) {
scope.formData.interestOnSavingsAccountId = scope.expenseAccountOptions[0].id;
}
} else {
scope.formData.savingsReferenceAccountId = data.accountingMappings.savingsReferenceAccount.id;
scope.formData.savingsControlAccountId = data.accountingMappings.savingsControlAccount.id;
scope.formData.transfersInSuspenseAccountId = data.accountingMappings.transfersInSuspenseAccount.id;
scope.formData.incomeFromFeeAccountId = data.accountingMappings.incomeFromFeeAccount.id;
scope.formData.incomeFromPenaltyAccountId = data.accountingMappings.incomeFromPenaltyAccount.id;
scope.formData.interestOnSavingsAccountId = data.accountingMappings.interestOnSavingsAccount.id;
_.each(scope.product.paymentChannelToFundSourceMappings, function (fundSource) {
scope.configureFundOptions.push({
paymentTypeId: fundSource.paymentType.id,
fundSourceAccountId: fundSource.fundSourceAccount.id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
})
});
_.each(scope.product.feeToIncomeAccountMappings, function (fees) {
scope.specificIncomeaccounts.push({
chargeId: fees.charge.id,
incomeAccountId: fees.incomeAccount.id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.incomeAccountOptions
})
});
_.each(scope.product.penaltyToIncomeAccountMappings, function (penalty) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: penalty.charge.id,
incomeAccountId: penalty.incomeAccount.id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
})
});
}
});
//advanced accounting rule
scope.showOrHide = function (showOrHideValue) {
if (showOrHideValue == "show") {
scope.showOrHideValue = 'hide';
}
if (showOrHideValue == "hide") {
scope.showOrHideValue = 'show';
}
}
scope.chargeSelected = function (chargeId) {
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, this.formData, function (data) {
data.chargeId = data.id;
scope.charges.push(data);
//to charge select box empty
scope.chargeId = '';
});
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.addConfigureFundSource = function () {
if (scope.product.paymentTypeOptions && scope.product.paymentTypeOptions.length > 0 &&
scope.assetAccountOptions && scope.assetAccountOptions.length > 0) {
scope.configureFundOptions.push({
paymentTypeId: scope.product.paymentTypeOptions[0].id,
fundSourceAccountId: scope.assetAccountOptions[0].id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
});
}
}
scope.mapFees = function () {
if (scope.product.chargeOptions && scope.product.chargeOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.specificIncomeaccounts.push({
chargeId: scope.product.chargeOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.product.accountingMappingOptions.incomeAccountOptions
});
}
}
scope.mapPenalty = function () {
if (scope.product.penaltyOptions && scope.product.penaltyOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: scope.product.penaltyOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
});
}
}
scope.deleteFund = function (index) {
scope.configureFundOptions.splice(index, 1);
}
scope.deleteFee = function (index) {
scope.specificIncomeaccounts.splice(index, 1);
}
scope.deletePenalty = function (index) {
scope.penaltySpecificIncomeaccounts.splice(index, 1);
}
scope.cancel = function () {
location.path('/viewfixeddepositproduct/' + routeParams.id);
};
scope.submit = function () {
scope.paymentChannelToFundSourceMappings = [];
scope.feeToIncomeAccountMappings = [];
scope.penaltyToIncomeAccountMappings = [];
scope.chargesSelected = [];
var temp = '';
//configure fund sources for payment channels
for (var i in scope.configureFundOptions) {
temp = {
paymentTypeId: scope.configureFundOptions[i].paymentTypeId,
fundSourceAccountId: scope.configureFundOptions[i].fundSourceAccountId
}
scope.paymentChannelToFundSourceMappings.push(temp);
}
//map fees to specific income accounts
for (var i in scope.specificIncomeaccounts) {
temp = {
chargeId: scope.specificIncomeaccounts[i].chargeId,
incomeAccountId: scope.specificIncomeaccounts[i].incomeAccountId,
}
scope.feeToIncomeAccountMappings.push(temp);
}
//map penalties to specific income accounts
for (var i in scope.penaltySpecificIncomeaccounts) {
temp = {
chargeId: scope.penaltySpecificIncomeaccounts[i].chargeId,
incomeAccountId: scope.penaltySpecificIncomeaccounts[i].incomeAccountId,
}
scope.penaltyToIncomeAccountMappings.push(temp);
}
for (var i in scope.charges) {
temp = {
id: scope.charges[i].id
}
scope.chargesSelected.push(temp);
}
this.formData.paymentChannelToFundSourceMappings = scope.paymentChannelToFundSourceMappings;
this.formData.feeToIncomeAccountMappings = scope.feeToIncomeAccountMappings;
this.formData.penaltyToIncomeAccountMappings = scope.penaltyToIncomeAccountMappings;
this.formData.charges = scope.chargesSelected;
this.formData.locale = "en";
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.fixedDepositProductResource.update({productId: routeParams.productId}, this.formData, function (data) {
location.path('/viewfixeddepositproduct/' + data.resourceId);
});
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
name: scope.chart.name,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('EditFixedDepositProductController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.EditFixedDepositProductController]).run(function ($log) {
$log.info("EditFixedDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,161 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditInterestRateChartController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.formData = {};//used for update/save form data
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
//Fixed deposit product details
scope.productName = routeParams.productName;
scope.productId = routeParams.productId;
scope.productsLink = '';
scope.viewProductLink = '';
scope.productType = routeParams.productType;
//alert(scope.productType);
if ( routeParams.productType === 'fixeddepositproduct'){
scope.productsLink = 'fixeddepositproducts';
scope.viewProductLink = 'viewfixeddepositproduct';
}else if ( routeParams.productType === 'recurringdepositproduct'){
scope.productsLink = 'recurringdepositproducts';
scope.viewProductLink = 'viewrecurringdepositproduct';
}
//get a interestrate chart
resourceFactory.interestRateChartResource.get({chartId: routeParams.chartId, productId: routeParams.productId, template: true}, function (data) {
scope.chart = data;
scope.chart.chartSlabs = _.sortBy(scope.chart.chartSlabs, function(obj){ return obj.fromPeriod });
//format date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
});
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var lastChartSlab = {};
if(scope.chart.chartSlabs.length > 0){
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
var fromPeriod = parseInt(lastChartSlab.toPeriod) + 1;
var amountRangeFrom = parseFloat(lastChartSlab.amountRangeTo) + 1;
var chartSlab = {
"periodType": angular.copy(lastChartSlab.periodType),
"fromPeriod": fromPeriod,
"amountRangeFrom":amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* Remove chart details row
*/
scope.removeRow = function(index){
scope.chart.chartSlabs.splice(index,1);
}
//back to deposit product view
scope.cancel = function () {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + routeParams.productType);
};
/**
* Update Interest rate chart details
*/
scope.submitInterestRateChartForm = function () {
var chartData = copyChartData(scope.chart);
scope.formData.charts = [];//declare charts array
scope.formData.charts.push(chartData);//add chart details
if ( routeParams.productType === 'fixeddepositproduct'){
resourceFactory.fixedDepositProductResource.update({productId: routeParams.productId}, scope.formData, function (data) {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + scope.productType);
});
}else if ( routeParams.productType === 'recurringdepositproduct'){
resourceFactory.recurringDepositProductResource.update({productId: routeParams.productId}, scope.formData, function (data) {
location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName + '/' + scope.productType);
});
}
//resourceFactory.interestRateChartResource.update({chartId: routeParams.chartId}, chartData, function (data) {
// location.path('/interestratecharts/' + routeParams.productId + '/' + routeParams.productName);
//});
}
/**
* create new chart data object
*/
copyChartData = function() {
var chartData = {
name: scope.chart.name,
id: scope.chart.id,
description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.chart.savingsProductId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
return chartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function(v, k){
if (!v && v != 0)
delete newChartSlabData[k];
});
return newChartSlabData;
}
}
});
mifosX.ng.application.controller('EditInterestRateChartController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.EditInterestRateChartController]).run(function ($log) {
$log.info("EditInterestRateChartController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,400 @@
(function (module) {
mifosX.controllers = _.extend(module, {
EditRecurringDepositProductController: function (scope, resourceFactory, location, routeParams, dateFilter) {
scope.formData = {};
scope.charges = [];
scope.showOrHideValue = "show";
scope.configureFundOptions = [];
scope.specificIncomeaccounts = [];
scope.penaltySpecificIncomeaccounts = [];
scope.configureFundOption = {};
//interest rate chart details
scope.chart = {};
scope.restrictDate = new Date();
scope.fromDate = {}; //required for date formatting
scope.endDate = {};//required for date formatting
resourceFactory.recurringDepositProductResource.get({productId: routeParams.productId, template: 'true'}, function (data) {
scope.product = data;
scope.charges = data.charges;
scope.assetAccountOptions = scope.product.accountingMappingOptions.assetAccountOptions || [];
scope.liabilityAccountOptions = scope.product.accountingMappingOptions.liabilityAccountOptions || [];
scope.incomeAccountOptions = scope.product.accountingMappingOptions.incomeAccountOptions || [];
scope.expenseAccountOptions = scope.product.accountingMappingOptions.expenseAccountOptions || [];
var interestFreePeriodFrequencyTypeId = (_.isNull(data.interestFreePeriodFrequencyType) || _.isUndefined(data.interestFreePeriodFrequencyType)) ? '' : data.interestFreePeriodFrequencyType.id;
var preClosurePenalInterestOnTypeId = (_.isNull(data.preClosurePenalInterestOnType) || _.isUndefined(data.preClosurePenalInterestOnType)) ? '' : data.preClosurePenalInterestOnType.id;
var minDepositTermTypeId = (_.isNull(data.minDepositTermType) || _.isUndefined(data.minDepositTermType)) ? '' : data.minDepositTermType.id;
var maxDepositTermTypeId = (_.isNull(data.maxDepositTermType) || _.isUndefined(data.maxDepositTermType)) ? '' : data.maxDepositTermType.id;
var inMultiplesOfDepositTermTypeId = (_.isNull(data.inMultiplesOfDepositTermType) || _.isUndefined(data.inMultiplesOfDepositTermType)) ? '' : data.inMultiplesOfDepositTermType.id;
scope.formData = {
name: data.name,
shortName: data.shortName,
description: data.description,
currencyCode: data.currency.code,
digitsAfterDecimal: data.currency.decimalPlaces,
inMultiplesOf: data.currency.inMultiplesOf,
nominalAnnualInterestRate: data.nominalAnnualInterestRate,
minRequiredOpeningBalance: data.minRequiredOpeningBalance,
lockinPeriodFrequency: data.lockinPeriodFrequency,
interestCompoundingPeriodType: data.interestCompoundingPeriodType.id,
interestPostingPeriodType: data.interestPostingPeriodType.id,
interestCalculationType: data.interestCalculationType.id,
interestCalculationDaysInYearType: data.interestCalculationDaysInYearType.id,
accountingRule: data.accountingRule.id,
interestFreePeriodApplicable: data.interestFreePeriodApplicable,
interestFreeFromPeriod: data.interestFreeFromPeriod,
interestFreeToPeriod: data.interestFreeToPeriod,
interestFreePeriodFrequencyTypeId: interestFreePeriodFrequencyTypeId,
preClosurePenalApplicable: data.preClosurePenalApplicable,
preClosurePenalInterest: data.preClosurePenalInterest,
preClosurePenalInterestOnTypeId: preClosurePenalInterestOnTypeId,
recurringDepositTypeId: data.recurringDepositType.id,
recurringDepositFrequencyTypeId: data.recurringDepositFrequencyType.id,
recurringDepositFrequency: data.recurringDepositFrequency,
minDepositTerm: data.minDepositTerm,
maxDepositTerm: data.maxDepositTerm,
minDepositTermTypeId: minDepositTermTypeId,
maxDepositTermTypeId: maxDepositTermTypeId,
inMultiplesOfDepositTerm: data.inMultiplesOfDepositTerm,
inMultiplesOfDepositTermTypeId: inMultiplesOfDepositTermTypeId
}
scope.chart = scope.product.activeChart;
scope.chart.chartSlabs = _.sortBy(scope.chart.chartSlabs, function (obj) {
return obj.fromPeriod
});
//format chart date values
if (scope.chart.fromDate) {
var fromDate = dateFilter(scope.chart.fromDate, scope.df);
scope.fromDate.date = new Date(fromDate);
}
if (scope.chart.endDate) {
var endDate = dateFilter(scope.chart.endDate, scope.df);
scope.endDate.date = new Date(endDate);
}
if (data.lockinPeriodFrequencyType) {
scope.formData.lockinPeriodFrequencyType = data.lockinPeriodFrequencyType.id;
}
if (scope.formData.accountingRule == 1) {
if (scope.assetAccountOptions.length > 0) {
scope.formData.savingsReferenceAccountId = scope.assetAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 0) {
scope.formData.savingsControlAccountId = scope.liabilityAccountOptions[0].id;
}
if (scope.liabilityAccountOptions.length > 1) {
scope.formData.transfersInSuspenseAccountId = scope.liabilityAccountOptions[1].id;
}
if (scope.incomeAccountOptions.length > 0) {
scope.formData.incomeFromFeeAccountId = scope.incomeAccountOptions[0].id;
}
if (scope.incomeAccountOptions.length > 1) {
scope.formData.incomeFromPenaltyAccountId = scope.incomeAccountOptions[1].id;
}
if (scope.expenseAccountOptions.length > 0) {
scope.formData.interestOnSavingsAccountId = scope.expenseAccountOptions[0].id;
}
} else {
scope.formData.savingsReferenceAccountId = data.accountingMappings.savingsReferenceAccount.id;
scope.formData.savingsControlAccountId = data.accountingMappings.savingsControlAccount.id;
scope.formData.transfersInSuspenseAccountId = data.accountingMappings.transfersInSuspenseAccount.id;
scope.formData.incomeFromFeeAccountId = data.accountingMappings.incomeFromFeeAccount.id;
scope.formData.incomeFromPenaltyAccountId = data.accountingMappings.incomeFromPenaltyAccount.id;
scope.formData.interestOnSavingsAccountId = data.accountingMappings.interestOnSavingsAccount.id;
_.each(scope.product.paymentChannelToFundSourceMappings, function (fundSource) {
scope.configureFundOptions.push({
paymentTypeId: fundSource.paymentType.id,
fundSourceAccountId: fundSource.fundSourceAccount.id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
})
});
_.each(scope.product.feeToIncomeAccountMappings, function (fees) {
scope.specificIncomeaccounts.push({
chargeId: fees.charge.id,
incomeAccountId: fees.incomeAccount.id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.incomeAccountOptions
})
});
_.each(scope.product.penaltyToIncomeAccountMappings, function (penalty) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: penalty.charge.id,
incomeAccountId: penalty.incomeAccount.id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
})
});
}
});
//advanced accounting rule
scope.showOrHide = function (showOrHideValue) {
if (showOrHideValue == "show") {
scope.showOrHideValue = 'hide';
}
if (showOrHideValue == "hide") {
scope.showOrHideValue = 'show';
}
}
scope.chargeSelected = function (chargeId) {
if (chargeId) {
resourceFactory.chargeResource.get({chargeId: chargeId, template: 'true'}, this.formData, function (data) {
data.chargeId = data.id;
scope.charges.push(data);
//to charge select box empty
scope.chargeId = '';
});
}
}
scope.deleteCharge = function (index) {
scope.charges.splice(index, 1);
}
scope.addConfigureFundSource = function () {
if (scope.product.paymentTypeOptions && scope.product.paymentTypeOptions.length > 0 &&
scope.assetAccountOptions && scope.assetAccountOptions.length > 0) {
scope.configureFundOptions.push({
paymentTypeId: scope.product.paymentTypeOptions[0].id,
fundSourceAccountId: scope.assetAccountOptions[0].id,
paymentTypeOptions: scope.product.paymentTypeOptions,
assetAccountOptions: scope.assetAccountOptions
});
}
}
scope.mapFees = function () {
if (scope.product.chargeOptions && scope.product.chargeOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.specificIncomeaccounts.push({
chargeId: scope.product.chargeOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
chargeOptions: scope.product.chargeOptions,
incomeAccountOptions: scope.product.accountingMappingOptions.incomeAccountOptions
});
}
}
scope.mapPenalty = function () {
if (scope.product.penaltyOptions && scope.product.penaltyOptions.length > 0 && scope.incomeAccountOptions && scope.incomeAccountOptions.length > 0) {
scope.penaltySpecificIncomeaccounts.push({
chargeId: scope.product.penaltyOptions[0].id,
incomeAccountId: scope.incomeAccountOptions[0].id,
penaltyOptions: scope.product.penaltyOptions,
incomeAccountOptions: scope.incomeAccountOptions
});
}
}
scope.deleteFund = function (index) {
scope.configureFundOptions.splice(index, 1);
}
scope.deleteFee = function (index) {
scope.specificIncomeaccounts.splice(index, 1);
}
scope.deletePenalty = function (index) {
scope.penaltySpecificIncomeaccounts.splice(index, 1);
}
scope.cancel = function () {
location.path('/viewrecurringdepositproduct/' + routeParams.id);
};
scope.submit = function () {
scope.paymentChannelToFundSourceMappings = [];
scope.feeToIncomeAccountMappings = [];
scope.penaltyToIncomeAccountMappings = [];
scope.chargesSelected = [];
var temp = '';
//configure fund sources for payment channels
for (var i in scope.configureFundOptions) {
temp = {
paymentTypeId: scope.configureFundOptions[i].paymentTypeId,
fundSourceAccountId: scope.configureFundOptions[i].fundSourceAccountId
}
scope.paymentChannelToFundSourceMappings.push(temp);
}
//map fees to specific income accounts
for (var i in scope.specificIncomeaccounts) {
temp = {
chargeId: scope.specificIncomeaccounts[i].chargeId,
incomeAccountId: scope.specificIncomeaccounts[i].incomeAccountId,
}
scope.feeToIncomeAccountMappings.push(temp);
}
//map penalties to specific income accounts
for (var i in scope.penaltySpecificIncomeaccounts) {
temp = {
chargeId: scope.penaltySpecificIncomeaccounts[i].chargeId,
incomeAccountId: scope.penaltySpecificIncomeaccounts[i].incomeAccountId,
}
scope.penaltyToIncomeAccountMappings.push(temp);
}
for (var i in scope.charges) {
temp = {
id: scope.charges[i].id
}
scope.chargesSelected.push(temp);
}
this.formData.paymentChannelToFundSourceMappings = scope.paymentChannelToFundSourceMappings;
this.formData.feeToIncomeAccountMappings = scope.feeToIncomeAccountMappings;
this.formData.penaltyToIncomeAccountMappings = scope.penaltyToIncomeAccountMappings;
this.formData.charges = scope.chargesSelected;
this.formData.locale = "en";
this.formData.charts = [];//declare charts array
this.formData.charts.push(copyChartData(scope.chart));//add chart details
this.formData = removeEmptyValues(this.formData);
resourceFactory.recurringDepositProductResource.update({productId: routeParams.productId}, this.formData, function (data) {
location.path('/viewrecurringdepositproduct/' + data.resourceId);
});
}
/**
* Add a new row with default values for entering chart details
*/
scope.addNewRow = function () {
var fromPeriod = '';
var amountRangeFrom = '';
var periodType = '';
if (_.isNull(scope.chart.chartSlabs) || _.isUndefined(scope.chart.chartSlabs)) {
scope.chart.chartSlabs = [];
} else {
var lastChartSlab = {};
if (scope.chart.chartSlabs.length > 0) {
lastChartSlab = angular.copy(scope.chart.chartSlabs[scope.chart.chartSlabs.length - 1]);
}
if (!(_.isNull(lastChartSlab) || _.isUndefined(lastChartSlab))) {
fromPeriod = _.isNull(lastChartSlab) ? '' : parseInt(lastChartSlab.toPeriod) + 1;
amountRangeFrom = _.isNull(lastChartSlab) ? '' : parseFloat(lastChartSlab.amountRangeTo) + 1;
periodType = angular.copy(lastChartSlab.periodType);
}
}
var chartSlab = {
"periodType": periodType,
"fromPeriod": fromPeriod,
"amountRangeFrom": amountRangeFrom
};
scope.chart.chartSlabs.push(chartSlab);
}
/**
* create new chart data object
*/
copyChartData = function () {
var newChartData = {
id: scope.chart.id,
//name: scope.chart.name,
//description: scope.chart.description,
fromDate: dateFilter(scope.fromDate.date, scope.df),
endDate: dateFilter(scope.endDate.date, scope.df),
//savingsProductId: scope.productId,
dateFormat: scope.df,
locale: scope.optlang.code,
chartSlabs: angular.copy(copyChartSlabs(scope.chart.chartSlabs))
}
//remove empty values
_.each(newChartData, function (v, k) {
if (!v)
delete newChartData[k];
});
return newChartData;
}
/**
* copy all chart details to a new Array
* @param chartSlabs
* @returns {Array}
*/
copyChartSlabs = function (chartSlabs) {
var detailsArray = [];
_.each(chartSlabs, function (chartSlab) {
var chartSlabData = copyChartSlab(chartSlab);
detailsArray.push(chartSlabData);
});
return detailsArray;
}
/**
* create new chart detail object data from chartSlab
* @param chartSlab
*
*/
copyChartSlab = function (chartSlab) {
var newChartSlabData = {
id: chartSlab.id,
description: chartSlab.description,
periodType: chartSlab.periodType.id,
fromPeriod: chartSlab.fromPeriod,
toPeriod: chartSlab.toPeriod,
amountRangeFrom: chartSlab.amountRangeFrom,
amountRangeTo: chartSlab.amountRangeTo,
annualInterestRate: chartSlab.annualInterestRate,
locale: scope.optlang.code
}
//remove empty values
_.each(newChartSlabData, function (v, k) {
if (v === '') {
delete newChartSlabData[k];
}
if (!v && v != 0) {
delete newChartSlabData[k];
}
});
return newChartSlabData;
}
removeEmptyValues = function (objArray) {
_.each(objArray, function (v, k) {
//alert(k + ':' + v);
if (_.isNull(v) || _.isUndefined(v) || v === '') {
//alert('remove' + k + ':' + v);
delete objArray[k];
}
});
return objArray;
}
/**
* Remove chart details row
*/
scope.removeRow = function (index) {
scope.chart.chartSlabs.splice(index, 1);
}
}
});
mifosX.ng.application.controller('EditRecurringDepositProductController', ['$scope', 'ResourceFactory', '$location', '$routeParams', 'dateFilter', mifosX.controllers.EditRecurringDepositProductController]).run(function ($log) {
$log.info("EditRecurringDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,16 @@
(function(module) {
mifosX.controllers = _.extend(module, {
FixedDepositProductController: function(scope, resourceFactory,location) {
scope.routeTo = function(id){
location.path('/viewfixeddepositproduct/' + id);
};
resourceFactory.fixedDepositProductResource.getAllFixedDepositProducts(function(data) {
scope.depositproducts = data;
});
}
});
mifosX.ng.application.controller('FixedDepositProductController', ['$scope', 'ResourceFactory','$location', mifosX.controllers.FixedDepositProductController]).run(function($log) {
$log.info("FixedDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,29 @@
(function(module) {
mifosX.controllers = _.extend(module, {
InterestRateChartController: function(scope, routeParams, resourceFactory, location) {
scope.edit = function(id){
location.path('/editinterestratechart/' + id);
};
scope.productName = routeParams.productName;
scope.productId = routeParams.productId;
scope.productsLink = '';
scope.viewProductLink = '';
scope.productType = routeParams.productType;
if ( routeParams.productType === 'fixeddepositproduct'){
scope.productsLink = 'fixeddepositproducts';
scope.viewProductLink = 'viewfixeddepositproduct';
}else if ( routeParams.productType === 'recurringdepositproduct'){
scope.productsLink = 'recurringdepositproducts';
scope.viewProductLink = 'viewrecurringdepositproduct';
}
resourceFactory.interestRateChartResource.getAllInterestRateCharts({productId: routeParams.productId}, function(data) {
scope.charts = data;
});
}
});
mifosX.ng.application.controller('InterestRateChartController', ['$scope', '$routeParams', 'ResourceFactory','$location', mifosX.controllers.InterestRateChartController]).run(function($log) {
$log.info("InterestRateChartController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,16 @@
(function(module) {
mifosX.controllers = _.extend(module, {
RecurringDepositProductController: function(scope, resourceFactory,location) {
scope.routeTo = function(id){
location.path('/viewrecurringdepositproduct/' + id);
};
resourceFactory.recurringDepositProductResource.getAllRecurringDepositProducts(function(data) {
scope.depositproducts = data;
});
}
});
mifosX.ng.application.controller('RecurringDepositProductController', ['$scope', 'ResourceFactory','$location', mifosX.controllers.RecurringDepositProductController]).run(function($log) {
$log.info("RecurringDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,19 @@
(function(module) {
mifosX.controllers = _.extend(module, {
ViewFixedDepositProductController: function(scope, routeParams , location , anchorScroll , resourceFactory ) {
resourceFactory.fixedDepositProductResource.get({productId: routeParams.productId , template: 'true'} , function(data) {
scope.depositproduct = data;
scope.hasAccounting = data.accountingRule.id == 2 ? true : false;
});
scope.scrollto = function (link){
location.hash(link);
anchorScroll();
};
}
});
mifosX.ng.application.controller('ViewFixedDepositProductController', ['$scope', '$routeParams', '$location', '$anchorScroll' , 'ResourceFactory', mifosX.controllers.ViewFixedDepositProductController]).run(function($log) {
$log.info("ViewFixedDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -0,0 +1,19 @@
(function(module) {
mifosX.controllers = _.extend(module, {
ViewRecurringDepositProductController: function(scope, routeParams , location , anchorScroll , resourceFactory ) {
resourceFactory.recurringDepositProductResource.get({productId: routeParams.productId , template: 'true'} , function(data) {
scope.depositproduct = data;
scope.hasAccounting = data.accountingRule.id == 2 ? true : false;
});
scope.scrollto = function (link){
location.hash(link);
anchorScroll();
};
}
});
mifosX.ng.application.controller('ViewRecurringDepositProductController', ['$scope', '$routeParams', '$location', '$anchorScroll' , 'ResourceFactory', mifosX.controllers.ViewRecurringDepositProductController]).run(function($log) {
$log.info("ViewRecurringDepositProductController initialized");
});
}(mifosX.controllers || {}));

View File

@ -14,6 +14,7 @@
"savingsAccountStatusType.submitted.and.pending.approval": "statuspending",
"savingsAccountStatusType.approved": "statusApproved",
"savingsAccountStatusType.active": "statusactive",
"savingsAccountStatusType.matured": "statusmatured",
"loanProduct.active": "statusactive",
"clientStatusType.pending": "statuspending",
"clientStatusType.active": "statusactive",

View File

@ -1,3 +1,4 @@
(function (mifosX) {
var defineHeaders = function ($httpProvider, $translateProvider, ResourceFactoryProvider, HttpServiceProvider, $idleProvider, $keepaliveProvider, IDLE_DURATION, WARN_DURATION, KEEPALIVE_INTERVAL) {
var mainLink = getLocation(window.location.href);
@ -19,7 +20,6 @@
$httpProvider.defaults.headers.common['X-Mifos-Platform-TenantId'] = domains[0];
ResourceFactoryProvider.setTenantIdenetifier(domains[0]);
console.log("other than demo server", domains[0]);
}
host = "https://" + mainLink.hostname;
console.log('hostname from mainLink = ', host);

View File

@ -57,6 +57,17 @@ define(['Q', 'underscore', 'mifosX'], function (Q) {
'product/SavingProductController',
'product/ViewSavingProductController',
'product/ViewLoanProductController',
'product/FixedDepositProductController',
'product/ViewFixedDepositProductController',
'product/CreateFixedDepositProductController',
'product/EditFixedDepositProductController',
'product/RecurringDepositProductController',
'product/ViewRecurringDepositProductController',
'product/CreateRecurringDepositProductController',
'product/EditRecurringDepositProductController',
'product/InterestRateChartController',
'product/CreateInterestRateChartController',
'product/EditInterestRateChartController',
'user/UserController',
'user/UserFormController',
'user/UserSettingController',
@ -138,6 +149,18 @@ define(['Q', 'underscore', 'mifosX'], function (Q) {
'savings/ViewSavingsTransactionController',
'savings/AddNewSavingsChargeController',
'savings/ViewSavingChargeController',
'deposits/fixed/FixedDepositAccountActionsController',
'deposits/fixed/ViewFixedDepositAccountDetailsController',
'deposits/fixed/CreateFixedDepositAccountController',
'deposits/fixed/EditDepositAccountController',
'deposits/fixed/AddNewFixedDepositChargeController',
'deposits/fixed/ViewFixedDepositTransactionController',
'deposits/recurring/RecurringDepositAccountActionsController',
'deposits/recurring/ViewRecurringDepositAccountDetailsController',
'deposits/recurring/CreateRecurringDepositAccountController',
'deposits/recurring/EditRecurringDepositAccountController',
'deposits/recurring/AddNewRecurringDepositChargeController',
'deposits/recurring/ViewRecurringDepositTransactionController',
'groups/CreateGroupController',
'groups/AddMemberController',
'groups/EditGroupController',

View File

@ -178,6 +178,39 @@
.when('/viewsavingproduct/:id', {
templateUrl: 'views/products/viewsavingproduct.html'
})
.when('/fixeddepositproducts', {
templateUrl: 'views/products/fixeddepositproducts.html'
})
.when('/viewfixeddepositproduct/:productId', {
templateUrl: 'views/products/viewfixeddepositproduct.html'
})
.when('/createfixeddepositproduct', {
templateUrl: 'views/products/createfixeddepositproduct.html'
})
.when('/editfixeddepositproduct/:productId', {
templateUrl: 'views/products/editfixeddepositproduct.html'
})
.when('/recurringdepositproducts', {
templateUrl: 'views/products/recurringdepositproducts.html'
})
.when('/viewrecurringdepositproduct/:productId', {
templateUrl: 'views/products/viewrecurringdepositproduct.html'
})
.when('/createrecurringdepositproduct', {
templateUrl: 'views/products/createrecurringdepositproduct.html'
})
.when('/editrecurringdepositproduct/:productId', {
templateUrl: 'views/products/editrecurringdepositproduct.html'
})
.when('/createinterestratechart/:productId/:productName/:productType', {
templateUrl: 'views/products/createinterestratechart.html'
})
.when('/interestratecharts/:productId/:productName/:productType', {
templateUrl: 'views/products/interestratecharts.html'
})
.when('/editinterestratecharts/:chartId/:productId/:productName/:productType', {
templateUrl: 'views/products/editinterestratechart.html'
})
.when('/offices', {
templateUrl: 'views/organization/offices.html'
})
@ -409,6 +442,48 @@
.when('/viewsavingtrxn/:accountId/trxnId/:id', {
templateUrl: 'views/savings/view_saving_transaction.html'
})
.when('/newclientfixeddepositaccount/:clientId', {
templateUrl: 'views/deposits/fixed/newapplication.html'
})
.when('/viewfixeddepositaccount/:id', {
templateUrl: 'views/deposits/fixed/viewaccountdetails.html'
})
.when('/editfixeddepositaccount/:id', {
templateUrl: 'views/deposits/fixed/edit_account_application.html'
})
.when('/fixeddepositaccount/:id/charges', {
templateUrl: 'views/deposits/fixed/add_new_fixed_deposit_charge.html'
})
.when('/fixeddepositaccount/:id/:action', {
templateUrl: 'views/deposits/fixed/fixed_deposit_account_actions.html'
})
.when('/fixeddepositaccountcharge/:id/:action/:chargeId', {
templateUrl: 'views/deposits/fixed/fixed_deposit_account_actions.html'
})
.when('/viewfixeddepositaccounttrxn/:accountId/:transactionId', {
templateUrl: 'views/deposits/fixed/view_fixed_deposit_transaction.html'
})
.when('/newclientrecurringdepositaccount/:clientId', {
templateUrl: 'views/deposits/recurring/newapplication.html'
})
.when('/viewrecurringdepositaccount/:id', {
templateUrl: 'views/deposits/recurring/viewaccountdetails.html'
})
.when('/editrecurringdepositaccount/:id', {
templateUrl: 'views/deposits/recurring/edit_account_application.html'
})
.when('/recurringdepositaccount/:id/charges', {
templateUrl: 'views/deposits/recurring/add_new_recurring_deposit_charge.html'
})
.when('/recurringdepositaccount/:id/:action', {
templateUrl: 'views/deposits/recurring/recurring_deposit_account_actions.html'
})
.when('/recurringdepositaccountcharge/:id/:action/:chargeId', {
templateUrl: 'views/deposits/recurring/recurring_deposit_account_actions.html'
})
.when('/viewrecurringdepositaccounttrxn/:accountId/:transactionId', {
templateUrl: 'views/deposits/recurring/view_recurring_deposit_transaction.html'
})
.when('/viewgroup/:id', {
templateUrl: 'views/groups/viewgroup.html'
})

View File

@ -121,12 +121,25 @@
}),
chargeTemplateResource: defineResource(apiVer + "/charges/template", {
get: {method: 'GET', params: {}, isArray: true},
getChargeTemplates: {method: 'GET', params: {}},
getChargeTemplates: {method: 'GET', params: {}}
}),
savingProductResource: defineResource(apiVer + "/savingsproducts/:savingProductId/:resourceType", {savingProductId: '@savingProductId', resourceType: '@resourceType'}, {
getAllSavingProducts: {method: 'GET', params: {}, isArray: true},
update: {method: 'PUT', params: {}}
}),
fixedDepositProductResource: defineResource(apiVer + "/fixeddepositproducts/:productId/:resourceType", {productId:'@productId', resourceType:'@resourceType'}, {
getAllFixedDepositProducts: {method: 'GET', params: {}, isArray:true},
update: {method: 'PUT', params: {}}
}),
recurringDepositProductResource: defineResource(apiVer + "/recurringdepositproducts/:productId/:resourceType", {productId:'@productId', resourceType:'@resourceType'}, {
getAllRecurringDepositProducts: {method: 'GET', params: {}, isArray:true},
update: {method: 'PUT', params: {}}
}),
interestRateChartResource: defineResource(apiVer + "/interestratecharts/:chartId/:resourceType", {chartId:'@chartId', resourceType:'@resourceType'}, {
getInterestRateChart: {method: 'GET', params: {productId:'@productId', template:'@template'} , isArray:true},
update: {method: 'PUT', params: {}},
getAllInterestRateCharts: {method: 'GET', params: {productId:'@productId'}, isArray:true}
}),
loanResource: defineResource(apiVer + "/loans/:loanId/:resourceType/:resourceId", {resourceType: '@resourceType', loanId: '@loanId', resourceId: '@resourceId'}, {
getAllLoans: {method: 'GET', params: {}},
getAllNotes: {method: 'GET', params: {}, isArray: true},
@ -249,6 +262,32 @@
savingsTrxnsResource: defineResource(apiVer + "/savingsaccounts/:savingsId/transactions/:transactionId", {savingsId: '@savingsId', transactionId: '@transactionId'}, {
get: {method: 'GET', params: {savingsId: '@savingsId', transactionId: '@transactionId'}}
}),
fixedDepositAccountResource: defineResource(apiVer + "/fixeddepositaccounts/:accountId/:resourceType", {accountId:'@accountId', resourceType:'@resourceType'}, {
get: {method: 'GET', params: {}},
update: {method: 'PUT'}
}),
fixedDepositAccountTemplateResource: defineResource(apiVer + "/fixeddepositaccounts/template", {}, {
get: {method: 'GET', params: {}}
}),
fixedDepositTrxnsTemplateResource: defineResource(apiVer + "/fixeddepositaccounts/:savingsId/transactions/template", {savingsId:'@savingsId'}, {
get: {method: 'GET', params: {savingsId:'@savingsId'}}
}),
fixedDepositTrxnsResource: defineResource(apiVer + "/fixeddepositaccounts/:savingsId/transactions/:transactionId", {savingsId: '@savingsId', transactionId: '@transactionId'}, {
get: {method: 'GET', params: {savingsId: '@savingsId', transactionId: '@transactionId'}}
}),
recurringDepositAccountResource: defineResource(apiVer + "/recurringdepositaccounts/:accountId/:resourceType", {accountId:'@accountId', resourceType:'@resourceType'}, {
get: {method: 'GET', params: {}},
update: {method: 'PUT'}
}),
recurringDepositAccountTemplateResource: defineResource(apiVer + "/recurringdepositaccounts/template", {}, {
get: {method: 'GET', params: {}}
}),
recurringDepositTrxnsTemplateResource: defineResource(apiVer + "/recurringdepositaccounts/:savingsId/transactions/template", {savingsId: '@savingsId'}, {
get: {method: 'GET', params: {savingsId: '@savingsId'}}
}),
recurringDepositTrxnsResource: defineResource(apiVer + "/recurringdepositaccounts/:savingsId/transactions/:transactionId", {savingsId: '@savingsId', transactionId: '@transactionId'}, {
get: {method: 'GET', params: {savingsId: '@savingsId', transactionId: '@transactionId'}}
}),
accountTransferResource: defineResource(apiVer + "/accounttransfers/:transferId", {transferId: '@transferId'}, {
get: {method: 'GET', params: {transferId: '@transferId'}}
}),
@ -285,7 +324,7 @@
get: {method: 'GET', params: {}, isArray: true},
getJobDetails: {method: 'GET', params: {}},
getJobHistory: {method: 'GET', params: {}},
update: {method: 'PUT', params: {}},
update: {method: 'PUT', params: {}}
}),
schedulerResource: defineResource(apiVer + "/scheduler", {}, {
get: {method: 'GET', params: {}}
@ -304,7 +343,7 @@
templateResource: defineResource(apiVer + "/templates/:templateId/:resourceType", {templateId: '@templateId', resourceType: '@resourceType'}, {
get: {method: 'GET', params: {}, isArray: true},
getTemplateDetails: {method: 'GET', params: {}},
update: {method: 'PUT', params: {}},
update: {method: 'PUT', params: {}}
}),
loanProductTemplateResource: defineResource(apiVer + "/loanproducts/template", {}, {
get: {method: 'GET', params: {}}
@ -324,7 +363,6 @@
get: {method: 'GET', params: {}},
search: {method: 'GET', params: {}, isArray: true}
})
};
}];
}

View File

@ -145,6 +145,10 @@ div > div > ul > li a:focus {
color: #008000;
}
.statusmatured {
color: #FF4000;
}
.statusdeleted {
color: #000000;
}
@ -410,6 +414,10 @@ tr.pointer-main:hover {
width: 20px;
}
.input-mini-medium {
width: 30px;
}
.input-smaller {
width: 65px;
}
@ -1115,6 +1123,7 @@ input#search:-ms-input-placeholder {
.margintopminustenpx{
margin-top: -10px;
}
.modalwidth600{
width: 600px;
}
@ -1182,6 +1191,7 @@ hr.terms:after {
background: white;
border-width: 1px 0 0;
}*/
.clear{
clear:both;
}
}

View File

@ -62,6 +62,24 @@
</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{{'label.input.dateofbirth' | translate}}</label>
<div class="col-sm-3">
<input id="dateofbirth" type="text" name="dateofbirth" datepicker-pop="dd MMMM yyyy"
ng-model="first.dateofbirth" is-open="opened1" max="restrictDate" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{{'label.input.gender' | translate}}</label>
<div class="col-sm-3">
<select id="genderId" ng-model="formData.genderId" class="form-control"
ng-options="gender.id as gender.name for gender in genderOptions" value="{{gender.id}}">
<option value="">--{{'label.menu.gender' | translate}}--</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="externalId">{{'label.input.externalid' | translate}}</label>

View File

@ -66,6 +66,12 @@
<a data-ng-click="createstandinginstruction()" has-permission='READ_STANDINGINSTRUCTION'>{{'label.button.createstandinginstruction'
| translate}}</a>
</li>
<li class="{{button.icon}}" data-ng-show="client.status.value=='Active'">
<a href="#/newclientfixeddepositaccount/{{client.id}}">{{'label.newfixeddepositaccount' | translate}}</a>
</li>
<li class="{{button.icon}}" data-ng-show="client.status.value=='Active'">
<a href="#/newclientrecurringdepositaccount/{{client.id}}">{{'label.newrecurringdepositaccount' | translate}}</a>
</li>
</ul>
</span>
</div>
@ -290,11 +296,11 @@
</tr>
<tr class="pointer-main"
ng-repeat="savingaccount in clientAccounts.savingsAccounts | orderBy:'id':true | filter:isSavingNotClosed">
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">{{savingaccount.productName}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">{{savingaccount.accountNo}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">{{savingaccount.accountBalance}}
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">{{savingaccount.productName}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">{{savingaccount.accountNo}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">{{savingaccount.accountBalance}}
</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)"><i
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)"><i
class="icon-stop {{savingaccount.status.code | StatusLookup}}"></i>&nbsp;&nbsp;{{savingaccount.status.value}}
</td>
</tr>
@ -308,12 +314,12 @@
</tr>
<tr class="pointer-main"
ng-repeat="savingaccount in clientAccounts.savingsAccounts | orderBy:'id':true | filter:isSavingClosed">
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">{{savingaccount.productName}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">{{savingaccount.accountNo}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">{{savingaccount.productName}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">{{savingaccount.accountNo}}</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">
<i class="icon-stop {{savingaccount.status.code | StatusLookup}}"></i>&nbsp;&nbsp;{{savingaccount.status.value}}
</td>
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id)">
<td class="pointer" data-ng-click="routeToSaving(savingaccount.id, savingaccount.depositType.code)">
<span data-ng-show="savingaccount.timeline.closedOnDate">{{savingaccount.timeline.closedOnDate | DateFormat}}</span>
</td>
</tr>

View File

@ -0,0 +1,90 @@
<div class="paddedbottom10">
<ul class="breadcrumb">
<li class="active">{{ 'label.anchor.add.fixed.deposit.charges' | translate }}</li>
</ul>
</div>
<form name="savingccountchargeform" novalidate="" class="form-horizontal" ng-controller="AddNewFixedDepositChargeController"
rc-submit="submit()">
<api-validate></api-validate>
<fieldset>
<div class="control-group">
<label class="control-label">{{ 'label.input.charges' | translate }}<span class="required">*</span></label>
<div class="controls">
<select ng-model="formData.chargeId" id="chargeId" name="charge"
ng-options="charge.id as (charge.name+&nbsp;+'('+charge.currency.name+')') for charge in chargeOptions"
value="{{formData.chargeId}}"
ng-change="chargeSelected(formData.chargeId)" required>
<option style="display:none" value="">{{ 'label.selectcharge' | translate }}</option>
</select>
<form-validate valattributeform="savingccountchargeform" valattribute="charge"/>
</div>
</div>
<div ng-show="chargeDetails">
<div class="control-group">
<label class="control-label">{{ 'label.input.amount' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="amount" type="text" name="amount" ng-model="formData.amount" required ng-late-Validate/>
<form-validate valattributeform="savingccountchargeform" valattribute="amount"/>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.chargecalculation' | translate }}</label>
<div class="controls">
<select id="chargeCalculationType" ng-model="chargeCalculationType"
ng-options="chargeCalculation.id as chargeCalculation.value for chargeCalculation in chargeDetails.chargeCalculationTypeOptions"
value="{{chargeCalculation.id}}" disabled="disabled">
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.chargetimetype' | translate }}</label>
<div class="controls">
<select id="chargeTimeType" ng-model="chargeTimeType"
ng-options="chargeTime.id as chargeTime.value for chargeTime in chargeDetails.chargeTimeTypeOptions"
value="{{chargeTime.id}}" disabled="disabled">
</select>
</div>
</div>
<div class="control-group" ng-show="!withDrawCharge && !chargeTimeTypeAnnualOrMonth">
<label class="control-label">{{ 'label.input.dueforcollectedon' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="feeOnAnnualMonthDay" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="date.specificduedate" is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="!withDrawCharge && chargeTimeTypeAnnualOrMonth">
<label class="control-label">{{ 'label.input.dueon' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="feeOnMonthDay" sort type="text" datepicker-pop="dd MMMM" ng-model="date.due"
is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="chargeTimeType.value == 'Monthly Fee' ">
<label class="control-label">{{ 'label.repeatsevery' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input type="text" class="input-small" ng-model="formData.feeInterval"/>
</div>
</div>
</div>
<div class="offset3">
<a id="cancel" href="#/viewfixeddepositaccount/{{cancelRoute}}" class="btn">{{'label.button.cancel' |
translate}}</a>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</fieldset>
</form>

View File

@ -0,0 +1,454 @@
<div ng-controller="EditDepositAccountController">
<div>
<ul class="breadcrumb">
<li><a href="#/viewfixeddepositaccount/{{accountId}}">{{'label.anchor.viewfixeddepositaccount' | translate}}</a>
<span class="divider">/</span></li>
<li class="active">{{'label.anchor.editfixeddepositapplication' | translate}}</li>
</ul>
</div>
<api-validate></api-validate>
<form name="editfixeddepositaccountform" novalidate="" class="well" rc-submit="submit()">
<fieldset>
<legend>{{ 'label.heading.editfixeddepositapplication' | translate }}</legend>
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label ng-show="clientName" class="control-label">{{ 'label.input.applicant' | translate }}&nbsp;</label>
<input ng-show="clientName" type="text" value="{{clientName}}" readonly>
<label ng-show="groupName" class="control-label">{{ 'label.input.applicantgroup' | translate
}}&nbsp;</label>
<input ng-show="groupName" type="text" value="{{groupName}}" readonly>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.product' | translate }}&nbsp;</label>
<select id="productId" ng-model="formData.productId"
ng-options="product.id as product.name for product in products" ng-change="changeProduct()"
value="{{product.id}}"></select>
</td>
</tr>
</table>
<div ng-show="data">
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label class="control-label">{{ 'label.input.fieldofficer' | translate }}&nbsp;</label>
<select id="fieldOfficerId" ng-model="formData.fieldOfficerId"
ng-options="fieldOfficer.id as fieldOfficer.displayName for fieldOfficer in fieldOfficers"
value="{{fieldOfficer.id}}">
<option style="display:none" value="">{{'label.selectloanofficer' | translate}}</option>
</select>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.submittedon' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="submittedOnDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="formData.submittedOnDate" is-open="opened" min="minDate" max="restrictDate"/>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%">
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<b>{{data.currency.name}}({{data.currency.displaySymbol}})</b></label>
</td>
<td width="50%">
<label class="control-label">{{ 'label.heading.decimalplaces' | translate }}&nbsp;<b>{{data.currency.decimalPlaces}}</b></label>
</td>
</tr>
<tr>
<!--<td width="50%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" type="text" name="nominalannualinterestrate"
ng-model="formData.nominalAnnualInterestRate" required ng-late-Validate/>
<form-validate valattributeform="editfixeddepositaccountform"
valattribute="nominalannualinterestrate"/>
</td>-->
<td width="50%">
<label class="control-label">{{ 'label.input.currencyinmultiplesof' | translate }}&nbsp;</label>
<input type="text" value="{{data.currency.inMultiplesOf}}" readonly>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in data.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in data.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in data.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in data.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.depositamount' | translate }}&nbsp;</label>
<input id="depositAmount" type="text" ng-model="formData.depositAmount">
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.depositperiod' | translate }}&nbsp;</label>
<input id="depositPeriod" type="text" ng-model="formData.depositPeriod">
<select id="depositPeriodFrequencyId" ng-model="formData.depositPeriodFrequencyId"
class="input-small"
ng-options="type.id as type.value for type in data.depositPeriodFrequencyOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<!-- <td width="50%">
<label class="control-label">{{ 'label.input.minimumopeningbalance' | translate }}&nbsp;</label>
<input id="minRequiredOpeningBalance" type="text" ng-model="formData.minRequiredOpeningBalance">
</td>-->
<td width="50%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in data.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option value="">{{ 'label.selectone' | translate }}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm" readonly>&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm" readonly>&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm" readonly>&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod" readonly/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod" readonly/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest" readonly/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in data.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"
readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<!--
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row' | translate}}</a>
</div>
</td>
-->
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}" readonly>
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" readonly/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod" readonly/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom" readonly/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo" readonly/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate" readonly/></td>
<td><input id="description" name="description" type="text" ng-model="chartSlab.description"
readonly/></td>
<!--<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row' | translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row' | translate}}</a>
</div></td>-->
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in data.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a ng-click="addCharge(chargeId)"><i class="icon-plus icon-white"></i></a>
<span ng-show="errorchargeevent">
<small class="error">
{{'label.'+labelchargeerror | translate}}
</small>
</span>
</td>
<td width="50%">
</td>
</tr>
</table>
<table class="table" width="100%" ng-show="charges.length>0">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.amount' | translate}}</th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th>{{'label.heading.date' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td><input id="charges[{{$index}}].amount" class="input-small" type="text" ng-model="charge.amount"
placeholder="{{'label.placeholder.amount' | translate}}"></td>
<td>{{charge.chargeTimeType.value}}</td>
<td ng-show="charge.chargeTimeType.value=='Annual Fee'">
<input id="charges[{{$index}}].feeOnMonthDay" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
{{charge.feeOnMonthDay}}
<td ng-show="charge.chargeTimeType.value=='Specified due date'">
<input id="charges[{{$index}}].dueDate" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM yyyy" ng-model="charge.dueDate" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input readonly class="date-disable" type="text" datepicker-pop="dd MMMM"
ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input id="charges[{{$index}}].amount" class="input-small" type="text"
ng-model="charge.feeInterval"/>
</td>
<td ng-hide="charge.chargeTimeType.value=='Monthly Fee'"></td>
<td ng-hide="charge.chargeTimeType.value=='Annual Fee' || charge.chargeTimeType.value=='Specified due date' || charge.chargeTimeType.value=='Monthly Fee'"></td>
<td><a ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset4">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary" ng-show="data">{{ 'label.button.save' | translate }}
</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,185 @@
<div ng-controller="FixedDepositAccountActionsController">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/viewfixeddepositaccount/{{accountId}}">{{'label.anchor.viewfixeddepositaccount' |
translate}}</a> <span class="divider">/</span></li>
<li class="active">{{action}}</li>
</ul>
</div>
<form name="savingccountactionform" novalidate="" class="form-horizontal" ng-submit="submit()">
<api-validate></api-validate>
<fieldset>
<legend>{{ title | translate}}</legend>
<div class="control-group" ng-show="showDateField">
<label class="control-label" for="modelName">{{labelName | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="{{modelName}}" type="text" sort datepicker-pop="dd MMMM yyyy"
ng-model="formData[modelName]" is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
<div class="control-group" ng-show="showAmount">
<label class="control-label">{{ 'label.input.amount' | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="transactionAmount" type="text" name="transactionAmount"
ng-model="formData.transactionAmount"/>
</div>
</div>
<div ng-show="isAccountClose">
<div class="control-group">
<label class="control-label" for="maturityAmount">{{ 'label.maturityAmount' |
translate}}<span class="required">*</span></label>
<span class="padded-td">{{currency.displaySymbol}}&nbsp;{{maturityAmount}}</span>
</tr>
</div>
<div class="control-group">
<label class="control-label" for="onAccountClosureId">{{ 'label.input.onAccountClosure' |
translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="onAccountClosureId" ng-model="formData.onAccountClosureId"
ng-options="onAccountClosure.id as onAccountClosure.value for onAccountClosure in onAccountClosureOptions"
value="{{onAccountClosure.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group" ng-show="formData.onAccountClosureId == '200'">
<label class="control-label" for="toSavingsAccountId">{{ 'label.input.transfer.to.savings' |
translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="toSavingsAccountId" ng-model="formData.toSavingsAccountId"
ng-options="savingsAccount.id as savingsAccount.accountNo for savingsAccount in savingsAccounts"
value="{{savingsAccounts.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group" ng-show="formData.onAccountClosureId == '200'">
<label class="control-label" for="transferDescription">{{ 'label.input.transfer.description' |
translate}}</label>
<div class="controls">
<input id="transferDescription" type="text" ng-model="formData.transferDescription">
</div>
</div>
</div>
<div ng-show="showPaymentType">
<div class="control-group">
<label class="control-label" for="paymentTypeId">{{ 'label.input.paymentypeid' | translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="paymentTypeId" ng-model="formData.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in paymentTypes"
value="{{paymentType.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.showpaymentdetails' | translate}}</label>
<div class="controls">
<a class="btn btn-primary" ng-click="showPaymentDetails=!showPaymentDetails">
<i ng-show="showPaymentDetails" class="icon-minus icon-white"></i>
<i ng-show="!showPaymentDetails" class="icon-plus icon-white"></i>
</a>
</div>
</div>
<div collapse="!showPaymentDetails">
<div class="control-group">
<label class="control-label" for="accountNumber">{{ 'label.input.accnum' | translate}}</label>
<div class="controls">
<input id="accountNumber" type="text" ng-model="formData.accountNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="checkNumber">{{ 'label.input.checknumber' |
translate}}</label>
<div class="controls">
<input id="checkNumber" type="text" ng-model="formData.checkNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="routingCode">{{ 'label.input.routingcode' |
translate}}</label>
<div class="controls">
<input id="routingCode" type="text" ng-model="formData.routingCode">
</div>
</div>
<div class="control-group">
<label class="control-label" for="receiptNumber">{{ 'label.input.receiptnumber' |
translate}}</label>
<div class="controls">
<input id="receiptNumber" type="text" ng-model="formData.receiptNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="bankNumber">{{ 'label.input.banknumber' | translate}}</label>
<div class="controls">
<input id="bankNumber" type="text" ng-model="formData.bankNumber">
</div>
</div>
</div>
</div>
<div class="control-group" ng-show="showNoteField">
<label class="control-label" for="note">{{ 'label.input.note' | translate}}</label>
<div class="controls">
<textarea rows="2" id="note" ng-model="formData.note"></textarea>
</div>
</div>
<div class="control-group" ng-show="showAmountField">
<label class="control-label">{{ labelName | translate}}<span class="required">*</span></label>
<div class="controls">
<input type="text" id="amount" ng-model="formData.amount">
</div>
</div>
<div class="control-group" ng-show="paymentDatefield">
<label class="control-label" for="modelName">{{'label.input.paymentdate' | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="{{modelName}}" type="text" sort datepicker-pop="dd MMMM yyyy"
ng-model="formData[modelName]" is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="showDelete || waiveCharge">
<label class="control-label">{{ 'label.areyousure' | translate }}</label>
</div>
<div class="offset3" ng-show="showDelete">
<button type="reset" ng-click="submit()" class="btn">{{ 'label.button.confirm' | translate }}</button>
<button type="submit" ng-click="cancel()" class="btn btn-primary">{{ 'label.button.cancel' | translate
}}
</button>
</div>
<div class="offset3" ng-hide="showDelete">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary">{{ 'label.button.save' | translate }}</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,447 @@
<div ng-controller="CreateFixedDepositAccountController">
<div>
<ul class="breadcrumb">
<li ng-show="centerEntity"><a href="#/viewcenter/{{groupId}}">{{groupName}}</a> <span class="divider">/</span>
</li>
<li ng-show="groupName&&!centerEntity"><a href="#/viewgroup/{{groupId}}">{{groupName}}</a> <span
class="divider">/</span></li>
<li ng-show="clientName"><a href="#/viewclient/{{clientId}}">{{clientName}}</a> <span class="divider">/</span>
</li>
<li class="active">{{'label.anchor.fixeddepositapplication' | translate}}</li>
</ul>
</div>
<api-validate></api-validate>
<form name="newsavingccountform" novalidate="" class="well" rc-submit="submit()">
<fieldset>
<legend>{{ 'label.heading.fixeddepositapplication' | translate }}</legend>
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label ng-show="clientName" class="control-label">{{ 'label.input.applicant' | translate }}&nbsp;</label>
<input ng-show="clientName" type="text" value="{{clientName}}" readonly>
<label ng-show="groupName" class="control-label">{{ 'label.input.applicantgroup' | translate
}}&nbsp;</label>
<input ng-show="groupName" type="text" value="{{groupName}}" readonly>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.product' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="productId" ng-model="formData.productId"
ng-options="product.id as product.name for product in products" value="{{product.id}}"
ng-change="changeProduct()" required="required">
<option style="display:none" value="">{{'label.selectfixeddepositproduct' | translate}}</option>
</select>
</td>
</tr>
</table>
<div ng-show="data">
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label class="control-label">{{ 'label.input.fieldofficer' | translate }}&nbsp;</label>
<select id="fieldOfficerId" ng-model="formData.fieldOfficerId"
ng-options="fieldOfficer.id as fieldOfficer.displayName for fieldOfficer in fieldOfficers"
value="{{fieldOfficer.id}}">
<option value="">{{'label.selectfieldofficer' | translate}}</option>
</select>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.submittedon' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="submittedOnDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="date.submittedOnDate"
is-open="opened" min="minDate" max="restrictDate"/>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%">
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.heading.currency' | translate }}&nbsp;<b>{{data.currency.name}}({{data.currency.displaySymbol}})</b></label>
</td>
<td width="50%">
<label class="control-label">{{ 'label.heading.decimalplaces' | translate }}&nbsp;<b>{{data.currency.decimalPlaces}}</b></label>
</td>
</tr>
<!--<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" type="text" name="nominalannualinterestrate"
ng-model="formData.nominalAnnualInterestRate" required late-Validate/>
<form-validate valattributeform="newsavingccountform" valattribute="nominalannualinterestrate"/>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.currencyinmultiplesof' | translate }}&nbsp;</label>
<input type="text" value="{{data.currency.inMultiplesOf}}" readonly>
</td>
</tr>-->
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in data.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in data.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in data.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in data.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.depositamount' | translate }}&nbsp;</label>
<input id="depositAmount" type="text" ng-model="formData.depositAmount">
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.depositperiod' | translate }}&nbsp;</label>
<input id="depositPeriod" type="text" ng-model="formData.depositPeriod">
<select id="depositPeriodFrequencyId" ng-model="formData.depositPeriodFrequencyId"
class="input-small"
ng-options="type.id as type.value for type in data.depositPeriodFrequencyOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in data.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm" readonly>&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm" readonly>&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm" readonly>&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod" readonly/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod" readonly/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest" readonly/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in data.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"
readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}" readonly>
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" readonly/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod" readonly/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom" readonly/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo" readonly/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate" readonly/></td>
<td><input id="description" name="description" type="text" ng-model="chartSlab.description"
readonly/></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in chargeOptions"
value="{{charge.id}}">
<option value="">{{'label.selectcharge' | translate}}</option>
</select>
<a ng-click="addCharge(chargeId)"><i class="icon-plus icon-white"></i></a>
<span ng-show="errorchargeevent">
<small class="error">
{{'label.'+labelchargeerror | translate}}
</small>
</span>
</td>
<td width="50%">
</td>
</tr>
</table>
<table class="table" width="100%" ng-show="charges.length>0">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.amount' | translate}}</th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th>{{'label.heading.date' | translate}}</th>
<th>{{'label.heading.repaymentsevery' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td><input id="charges[{{$index}}].amount" class="input-small" type="text" ng-model="charge.amount"
placeholder="{{'label.placeholder.amount' | translate}}"/></td>
<td>{{charge.chargeTimeType.value}}</td>
<td ng-show="charge.chargeTimeType.value=='Annual Fee'">
<input id="charges[{{$index}}].feeOnMonthDay" class="input-medium" readonly class="date-disable"
type="text" datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Specified due date'">
<input id="charges[{{$index}}].dueDate" class="input-medium" readonly class="date-disable"
type="text" datepicker-pop="dd MMMM yyyy" ng-model="charge.dueDate" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input readonly class="date-disable" class="input-medium" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input id="charges[{{$index}}].amount" class="input-small" type="text"
ng-model="charge.feeInterval"/>
</td>
<td ng-hide="charge.chargeTimeType.value=='Monthly Fee'"></td>
<td ng-hide="charge.chargeTimeType.value=='Annual Fee' || charge.chargeTimeType.value=='Specified due date' || charge.chargeTimeType.value=='Monthly Fee'"></td>
<td><a ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary" ng-show="data">{{ 'label.button.save' | translate }}
</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,76 @@
<div ng-controller="ViewFixedDepositTransactionController">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/viewfixeddepositaccount/{{transaction.accountId}}">{{'label.anchor.viewfixeddepositaccount' |
translate}}</a></li>
<li class="active">{{ 'label.anchor.viewtransaction' | translate}}</li>
</ul>
</div>
<h3>{{ 'label.heading.transactiondetails' | translate}}</h3>
<!--<div ng-hide="transaction.reversed" class="pull-right">
<div class="btn-group">
<a data-ng-hide="flag" has-permission='ADJUSTTRANSACTION_SAVINGSACCOUNT'
href="#/fixeddepositaccount/{{transaction.accountId}}/modifytransaction?transactionId={{transaction.id}}"
class="btn btn-primary"><i class="icon-pencil icon-white"></i>{{ 'label.button.edit' | translate}}</a>
<a ng-click="undoTransaction(transaction.accountId, transaction.id)" class="btn btn-danger" has-permission='UNDOTRANSACTION_SAVINGSACCOUNT'><i
class="icon-trash icon-white"></i>{{ 'label.button.undo' | translate}}</a>
</div>
</div>-->
<div class="row">
<table width="100%">
<tr>
<td width="20%">{{ 'label.heading.transactionid' | translate}}</td>
<td width="80%">{{transaction.id}}</td>
</tr>
<tr>
<td>{{ 'label.heading.type' | translate}}</td>
<td>{{transaction.transactionType.value}}</td>
</tr>
<tr>
<td>{{ 'label.heading.transactiondate' | translate}}</td>
<td>{{transaction.date | DateFormat}}</td>
</tr>
<tr>
<td>{{ 'label.heading.currency' | translate}}</td>
<td>{{transaction.currency.name}}</td>
</tr>
<tr>
<td>{{ 'label.heading.amount' | translate}}</td>
<td>{{transaction.amount}}</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%" ng-show="transaction.paymentDetailData">
<tr>
<td width="20%"><strong>{{ 'label.heading.paymentdetails' | translate}}</strong></td>
<td width="80%"></td>
</tr>
<tr ng-show="transaction.paymentDetailData.paymentType">
<td>{{ 'label.heading.type' | translate}}</td>
<td>{{transaction.paymentDetailData.paymentType.name}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.accountNumber">
<td>{{ 'label.heading.accnum' | translate}}</td>
<td>{{transaction.paymentDetailData.accountNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.checkNumber">
<td>{{ 'label.heading.checknumber' | translate}}</td>
<td>{{transaction.paymentDetailData.checkNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.routingCode">
<td>{{ 'label.heading.routingcode' | translate}}</td>
<td>{{transaction.paymentDetailData.routingCode}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.receiptNumber">
<td>{{ 'label.heading.receiptnumber' | translate}}</td>
<td>{{transaction.paymentDetailData.receiptNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.bankNumber">
<td>{{ 'label.heading.banknumber' | translate}}</td>
<td>{{transaction.paymentDetailData.bankNumber}}</td>
</tr>
</table>
</div>
</div>

View File

@ -0,0 +1,327 @@
<div ng-controller="ViewFixedDepositAccountDetailsController">
<div>
<ul class="breadcrumb">
<li ng-show="savingaccountdetails.groupName"><a href="#/viewgroup/{{savingaccountdetails.groupId}}">{{savingaccountdetails.groupName}}</a>
<span class="divider">/</span></li>
<li ng-show="savingaccountdetails.clientName"><a href="#/viewclient/{{savingaccountdetails.clientId}}">{{savingaccountdetails.clientName}}</a>
<span class="divider">/</span></li>
<li class="active">{{savingaccountdetails.savingsProductName}}({{savingaccountdetails.accountNo}})</li>
</ul>
</div>
<div>
<div class="span gray-head" style="margin-left:0%;">
<span style="margin-left: 10px;font-size:20px">
<strong><i class="icon-stop {{savingaccountdetails.status.code | StatusLookup}}"></i>&nbsp;{{savingaccountdetails.savingsProductName}}(#{{savingaccountdetails.accountNo}})</strong>
</span>
</div>
<div class="row-fluid primarydiv">
<div class="pull-right">
<div class="btn-group">
<span ng-repeat="button in buttons.singlebuttons">
<a ng-show="button.name"
ng-click="clickEvent(button.name.replace('button.',''), savingaccountdetails.id)"
class="btn btn-primary"><i class="{{button.icon}} icon-white"></i>{{'label.'+button.name |
translate}}</a>
</span>
<span ng-show="buttons.options" class="btn-group">
<a class="btn btn-primary dropdown-toggle">
{{'label.button.more' | translate}}
<span class="caret"></span>
</a>
<ul class="dropdown dropdown-menu">
<li class="{{button.icon}}" ng-repeat="button in buttons.options">
<a ng-click="clickEvent(button.name.replace('button.',''), savingaccountdetails.id)">{{'label.'+button.name
| translate}}</a>
</li>
</ul>
</span>
</div>
</div>
</div>
</div>
<br/>
<hr/>
<div class="row-fluid span" style="margin-left:-1px;margin-top: -20px">
<div class="span6">
<table class="table table-striped table-bordered">
<tr>
<td>{{'label.heading.activatedon' | translate}}</td>
<td>{{savingaccountdetails.timeline.activatedOnDate | DateFormat}}<span
data-ng-hide="savingaccountdetails.timeline.activatedOnDate">{{ 'label.notactivated' | translate }}</span>
</td>
</tr>
<tr>
<td>{{'label.heading.currency' | translate}}</td>
<td>{{savingaccountdetails.currency.name}}</td>
</tr>
</table>
</div>
<div class="span6">
<table class="table table-bordered table-striped">
<tr>
<td>{{'label.heading.fieldofficer' | translate}}</td>
<td>{{savingaccountdetails.fieldOfficerName}}<span data-ng-hide="savingaccountdetails.fieldOfficerName">{{'label.unassigned' | translate}}</span>
</td>
</tr>
<tr>
<td>{{'label.heading.balance' | translate}}</td>
<td>{{savingaccountdetails.summary.accountBalance}}</td>
</tr>
</table>
</div>
</div>
<div class="row paddedleft">
<hr class="marginbottom"/>
<tabset>
<tab heading="{{'label.heading.summary' | translate}}">
<div class="span8" style="margin-left: 10px;margin-top: 30px;">
<table class="table table-bordered view-table">
<tr ng-show="savingaccountdetails.depositAmount">
<td style="font-weight: normal" class="table-bold-acc">{{'label.depositAmount' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.depositAmount}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.maturityAmount">
<td style="font-weight: normal" class="table-bold-acc">{{'label.maturityAmount' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.maturityAmount}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.depositPeriod">
<td style="font-weight: normal" class="table-bold-acc">{{'label.depositPeriod' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.depositPeriod}} &nbsp; {{savingaccountdetails.depositPeriodFrequency.value}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.maturityDate">
<td style="font-weight: normal" class="table-bold-acc">{{ 'label.maturityDate' | translate }}</td>
<td><span class="padded-td">{{savingaccountdetails.maturityDate | DateFormat}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalWithdrawals">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalwithdarawals' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalWithdrawals}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalInterestEarned">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalinterestearned' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalInterestEarned}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalInterestPosted">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalinterestposted' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalInterestPosted}}</span>
</td>
</tr>
<!--<tr ng-show="savingaccountdetails.nominalAnnualInterestRate">
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestrate' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.nominalAnnualInterestRate}}%</span></td>
</tr>-->
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestcompoundingperiod' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestCompoundingPeriodType.value}}</span>
</td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestpostingperiod' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestPostingPeriodType.value}}</span></td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestcalculatedusing' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestCalculationType.value}}</span></td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.noofdaysinyear' | translate}}
</td>
<td><span
class="padded-td">{{savingaccountdetails.interestCalculationDaysInYearType.value}}</span>
</td>
</tr>
<!--<tr>
<td style="font-weight: normal" class="table-bold-acc">
{{'label.minimumdepositterm.and.inmultiplesof' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.minDepositTerm}} - {{savingaccountdetails.depositTermType.value}}.
And there after, in multiples of {{savingaccountdetails.inMultiplesOfDepositTerm}} - {{savingaccountdetails.inMultiplesOfDepositTermType.value}}</span>
</td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.maximumdepositterm' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.maxDepositTerm}} - {{savingaccountdetails.depositTermType.value}}</span>
</td>
</tr>-->
<tr>
<td ng-show="savingaccountdetails.interestFreePeriodApplicable" style="font-weight: normal"
class="table-bold-acc">{{'label.interestfreetoperiod' | translate}}
</td>
<td ng-show="savingaccountdetails.interestFreePeriodApplicable"><span class="padded-td">{{savingaccountdetails.interestFreeFromPeriod}} to {{savingaccountdetails.interestFreeToPeriod}} - {{savingaccountdetails.interestFreePeriodFrequencyType.value}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.preClosurePenalApplicable">
<td style="font-weight: normal" class="table-bold-acc">{{'label.preclosurepenal' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.preClosurePenalInterest}} on {{savingaccountdetails.preClosurePenalInterestOnType.value}}</span>
</td>
</tr>
</table>
</div>
</tab>
<tab heading="{{'label.heading.transactions' | translate}}" ng-show="savingaccountdetails.transactions">
<table class="table table-bordered">
<colgroup span="4"></colgroup>
<thead>
<tr>
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.transactiondate' | translate}}</th>
<th>{{'label.heading.transactiontype' | translate}}</th>
<th>{{'label.heading.debit' | translate}}</th>
<th>{{'label.heading.credit' | translate}}</th>
<th>{{'label.heading.balance' | translate}}</th>
</tr>
</thead>
<tbody>
<tr ng-class="{strikeoff : transaction.reversed==true}"
ng-repeat="transaction in savingaccountdetails.transactions">
<td style="width: 50px;">
<a ng-hide="transaction.transfer"
href="#/viewfixeddepositaccounttrxn/{{transaction.accountId}}/{{transaction.id}}">{{transaction.id}}</a>
<a ng-show="transaction.transfer" href="#/viewaccounttransfers/{{transaction.transfer.id}}">{{transaction.id}}</a>
</td>
<td style="width: 130px;">{{transaction.date | DateFormat}}</td>
<td style="width: 130px;">{{transaction.transactionType.value}}</td>
<td>
<div ng-show="isDebit(transaction.transactionType)">
{{transaction.amount}}
</div>
</td>
<td>
<div ng-show="!isDebit(transaction.transactionType)">
{{transaction.amount}}
</div>
</td>
<td>{{transaction.runningBalance}}</td>
</tbody>
</table>
</tab>
<tab heading="{{savingdatatable.registeredTableName}}" ng-repeat="savingdatatable in savingdatatables"
select="dataTableChange(savingdatatable)">
<span data-ng-show="choice">
<a ng-show="datatabledetails.isData" class="btn btn-danger pull-right"
ng-click="deleteAll(savingdatatable.registeredTableName, savingaccountdetails.id)"><i
class="icon-trash icon-white"></i>{{'label.button.deleteall' | translate}}</a>
<span ng-show="!datatabledetails.isData || datatabledetails.isMultirow" class="pull-right ">
<a href="#/makedatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}"
class="btn btn-primary"><i class="icon-plus icon-white"></i>{{'label.button.add' | translate}}</a>
</span></br>
</span>
<div data-ng-show="datatabledetails.isData">
<table ng-show="datatabledetails.isMultirow" class="table">
<thead>
<th ng-repeat="column in datatabledetails.columnHeaders">{{column.columnName}}</th>
</thead>
<tbody>
<tr ng-repeat="data in datatabledetails.data">
<td ng-repeat="row in data.row">
<span ng-show="$index == 0">
<a href="#/viewdatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}/{{data.row[0]}}"
ng-show="datatabledetails.isMultirow">{{row}}</a>
<a href="#/viewdatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}/"
ng-hide="datatabledetails.isMultirow">{{row}}</a>
</span>
<span ng-hide="$index == 0">{{row}}</span>
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered" data-ng-show="!datatabledetails.isMultirow" style="width: 450px">
<tr ng-repeat="value in singleRow">
<td class="graybg" style="font-weight: bold">{{value.key}}</td>
<td><span class="padded-td">{{value.value}}</span></td>
</tr>
</table>
</div>
</tab>
<tab ng-show="chargeTableShow" heading="{{'label.heading.charges' | translate}}">
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.feeorpenalty' | translate}}</th>
<th></th>
<th>{{'label.heading.paymentdueat' | translate}}</th>
<th></th>
<th>{{'label.heading.dueasof' | translate}}</th>
<th>{{'label.heading.repeatson' | translate}}</th>
<th>{{'label.heading.calculationtype' | translate}}</th>
<th></th>
<th>{{'label.heading.due' | translate}}</th>
<th>{{'label.heading.paid' | translate}}</th>
<th>{{'label.heading.waived' | translate}}</th>
<th>{{'label.heading.outstanding' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
<th></th>
</tr>
<tr ng-repeat="charge in charges">
<td>
<a href="#">{{charge.name}}</a>
</td>
<td ng-show="'charge.penalty'==true">{{"penalty"}}</td>
<td ng-hide="'charge.penalty'==true">{{"fee"}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td>{{charge.dueDate | DateFormat}}</td>
<td>{{charge.feeOnMonthDay | DayMonthFormat}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.currency.displaySymbol}}{{charge.amount}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountPaid}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountWaived}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountOutstanding}}</td>
<td></td>
<td>
<span ng-show="chargeAction">
<a title="{{'label.edit' | translate}}"
href="#/fixeddepositaccountcharge/{{savingaccountdetails.id}}/editsavingcharge/{{charge.id}}"><i
class="icon-pencil icon-white"></i></a>
<a title="{{'label.delete' | translate}}"
href="#/fixeddepositaccountcharge/{{savingaccountdetails.id}}/deletesavingcharge/{{charge.id}}"><i
class="icon-remove icon-white"></i></a>
</span>
<span ng-hide="chargeAction">
<span ng-hide="charge.amountOutstanding == 0"
ng-show="charge.chargeTimeType.value == 'Monthly Fee' || charge.chargeTimeType.value == 'Annual Fee'|| charge.chargeTimeType.value == 'Specified due date'">
<a title="{{'label.button.paycharge' | translate}}"
href="#/fixeddepositaccountcharge/{{savingaccountdetails.id}}/paycharge/{{charge.id}}"><i
class="icon-check icon-white"></i></a>
<a title="{{'label.button.waivecharge' | translate}}"
href="#/fixeddepositaccountcharge/{{savingaccountdetails.id}}/waive/{{charge.id}}"><i
class="icon-flag icon-white"></i></a>
</span>
</span>
</td>
<td></td>
</tr>
</table>
</tab>
</tabset>
</div>
</div>
</div>

View File

@ -0,0 +1,90 @@
<div class="paddedbottom10">
<ul class="breadcrumb">
<li class="active">{{ 'label.anchor.add.recurring.deposit.charges' | translate }}</li>
</ul>
</div>
<form name="savingccountchargeform" novalidate="" class="form-horizontal" ng-controller="AddNewRecurringDepositChargeController"
rc-submit="submit()">
<api-validate></api-validate>
<fieldset>
<div class="control-group">
<label class="control-label">{{ 'label.input.charges' | translate }}<span class="required">*</span></label>
<div class="controls">
<select ng-model="formData.chargeId" id="chargeId" name="charge"
ng-options="charge.id as (charge.name+&nbsp;+'('+charge.currency.name+')') for charge in chargeOptions"
value="{{formData.chargeId}}"
ng-change="chargeSelected(formData.chargeId)" required>
<option style="display:none" value="">{{ 'label.selectcharge' | translate }}</option>
</select>
<form-validate valattributeform="savingccountchargeform" valattribute="charge"/>
</div>
</div>
<div ng-show="chargeDetails">
<div class="control-group">
<label class="control-label">{{ 'label.input.amount' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="amount" type="text" name="amount" ng-model="formData.amount" required ng-late-Validate/>
<form-validate valattributeform="savingccountchargeform" valattribute="amount"/>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.chargecalculation' | translate }}</label>
<div class="controls">
<select id="chargeCalculationType" ng-model="chargeCalculationType"
ng-options="chargeCalculation.id as chargeCalculation.value for chargeCalculation in chargeDetails.chargeCalculationTypeOptions"
value="{{chargeCalculation.id}}" disabled="disabled">
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.chargetimetype' | translate }}</label>
<div class="controls">
<select id="chargeTimeType" ng-model="chargeTimeType"
ng-options="chargeTime.id as chargeTime.value for chargeTime in chargeDetails.chargeTimeTypeOptions"
value="{{chargeTime.id}}" disabled="disabled">
</select>
</div>
</div>
<div class="control-group" ng-show="!withDrawCharge && !chargeTimeTypeAnnualOrMonth">
<label class="control-label">{{ 'label.input.dueforcollectedon' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="feeOnAnnualMonthDay" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="date.specificduedate" is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="!withDrawCharge && chargeTimeTypeAnnualOrMonth">
<label class="control-label">{{ 'label.input.dueon' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="feeOnMonthDay" sort type="text" datepicker-pop="dd MMMM" ng-model="date.due"
is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="chargeTimeType.value == 'Monthly Fee' ">
<label class="control-label">{{ 'label.repeatsevery' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input type="text" class="input-small" ng-model="formData.feeInterval"/>
</div>
</div>
</div>
<div class="offset3">
<a id="cancel" href="#/viewrecurringdepositaccount/{{cancelRoute}}" class="btn">{{'label.button.cancel' |
translate}}</a>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</fieldset>
</form>

View File

@ -0,0 +1,460 @@
<div ng-controller="EditRecurringDepositAccountController">
<div>
<ul class="breadcrumb">
<li><a href="#/viewrecurringdepositaccount/{{accountId}}">{{'label.anchor.viewrecurringdepositaccount' |
translate}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.editrecurringdepositapplication' | translate}}</li>
</ul>
</div>
<api-validate></api-validate>
<form name="editrecurringdepositaccountform" novalidate="" class="well" rc-submit="submit()">
<fieldset>
<legend>{{ 'label.heading.editrecurringdepositapplication' | translate }}</legend>
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label ng-show="clientName" class="control-label">{{ 'label.input.applicant' | translate }}&nbsp;</label>
<input ng-show="clientName" type="text" value="{{clientName}}" readonly>
<label ng-show="groupName" class="control-label">{{ 'label.input.applicantgroup' | translate
}}&nbsp;</label>
<input ng-show="groupName" type="text" value="{{groupName}}" readonly>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.product' | translate }}&nbsp;</label>
<select id="productId" ng-model="formData.productId"
ng-options="product.id as product.name for product in products" ng-change="changeProduct()"
value="{{product.id}}"></select>
</td>
</tr>
</table>
<div ng-show="data">
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label class="control-label">{{ 'label.input.fieldofficer' | translate }}&nbsp;</label>
<select id="fieldOfficerId" ng-model="formData.fieldOfficerId"
ng-options="fieldOfficer.id as fieldOfficer.displayName for fieldOfficer in fieldOfficers"
value="{{fieldOfficer.id}}">
<option style="display:none" value="">{{'label.selectloanofficer' | translate}}</option>
</select>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.submittedon' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="submittedOnDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="formData.submittedOnDate" is-open="opened" min="minDate" max="restrictDate"/>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%">
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<b>{{data.currency.name}}({{data.currency.displaySymbol}})</b></label>
</td>
<td width="50%">
<label class="control-label">{{ 'label.heading.decimalplaces' | translate }}&nbsp;<b>{{data.currency.decimalPlaces}}</b></label>
</td>
</tr>
<tr>
<!--<td width="50%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span class="required">*</span></label>
<input id="nominalAnnualInterestRate" type="text" name="nominalannualinterestrate" ng-model="formData.nominalAnnualInterestRate" required ng-late-Validate/>
<form-validate valattributeform="editrecurringdepositaccountform" valattribute="nominalannualinterestrate"/>
</td>-->
<td width="50%">
<label class="control-label">{{ 'label.input.currencyinmultiplesof' | translate }}&nbsp;</label>
<input type="text" value="{{data.currency.inMultiplesOf}}" readonly>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in data.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in data.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in data.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in data.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.recurring.deposit.amount' | translate }}&nbsp;</label>
<input id="recurringDepositAmount" type="text" ng-model="formData.recurringDepositAmount">
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.depositperiod' | translate }}&nbsp;</label>
<input id="depositPeriod" type="text" ng-model="formData.depositPeriod">
<select id="depositPeriodFrequencyId" ng-model="formData.depositPeriodFrequencyId"
class="input-small"
ng-options="type.id as type.value for type in data.depositPeriodFrequencyOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.select.recurringdeposittype' | translate }}&nbsp;</label>
<select id="recurringDepositTypeId" ng-model="formData.recurringDepositTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.recurringDepositTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td colspan="2">
<label class="control-label">{{ 'label.input.recurringdepositfrequency' | translate }}&nbsp;</label>
<input id="recurringDepositFrequency" type="text" ng-model="formData.recurringDepositFrequency">
&nbsp;&nbsp;
<select id="recurringDepositFrequencyTypeId" ng-model="formData.recurringDepositFrequencyTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.recurringDepositFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in data.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option value="">{{ 'label.selectone' | translate }}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm" readonly>&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm" readonly>&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm" readonly>&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox" ng-model="formData.interestFreePeriodApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' | translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text" class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod" readonly/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text" class="input-mini-medium"
ng-model="formData.interestFreeToPeriod" readonly/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId" ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest" readonly/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in data.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name" readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' | translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription" ng-model="chart.description" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<!--
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row' | translate}}</a>
</div>
</td>
-->
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}" readonly>
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" readonly/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod" readonly/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom" readonly/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo" readonly/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate" readonly/></td>
<td><input id="description" name="description" type="text" ng-model="chartSlab.description"
readonly/></td>
<!--<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row' | translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row' | translate}}</a>
</div></td>-->
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in data.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a ng-click="addCharge(chargeId)"><i class="icon-plus icon-white"></i></a>
<span ng-show="errorchargeevent">
<small class="error">
{{'label.'+labelchargeerror | translate}}
</small>
</span>
</td>
<td width="50%">
</td>
</tr>
</table>
<table class="table" width="100%" ng-show="charges.length>0">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.amount' | translate}}</th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th>{{'label.heading.date' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td><input id="charges[{{$index}}].amount" class="input-small" type="text" ng-model="charge.amount"
placeholder="{{'label.placeholder.amount' | translate}}"></td>
<td>{{charge.chargeTimeType.value}}</td>
<td ng-show="charge.chargeTimeType.value=='Annual Fee'">
<input id="charges[{{$index}}].feeOnMonthDay" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
{{charge.feeOnMonthDay}}
<td ng-show="charge.chargeTimeType.value=='Specified due date'">
<input id="charges[{{$index}}].dueDate" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM yyyy" ng-model="charge.dueDate" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input readonly class="date-disable" type="text" datepicker-pop="dd MMMM"
ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input id="charges[{{$index}}].amount" class="input-small" type="text"
ng-model="charge.feeInterval"/>
</td>
<td ng-hide="charge.chargeTimeType.value=='Monthly Fee'"></td>
<td ng-hide="charge.chargeTimeType.value=='Annual Fee' || charge.chargeTimeType.value=='Specified due date' || charge.chargeTimeType.value=='Monthly Fee'"></td>
<td><a ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset4">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary" ng-show="data">{{ 'label.button.save' | translate }}
</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,467 @@
<div ng-controller="CreateRecurringDepositAccountController">
<div>
<ul class="breadcrumb">
<li ng-show="centerEntity"><a href="#/viewcenter/{{groupId}}">{{groupName}}</a> <span class="divider">/</span>
</li>
<li ng-show="groupName&&!centerEntity"><a href="#/viewgroup/{{groupId}}">{{groupName}}</a> <span
class="divider">/</span></li>
<li ng-show="clientName"><a href="#/viewclient/{{clientId}}">{{clientName}}</a> <span class="divider">/</span>
</li>
<li class="active">{{'label.anchor.recurringdepositapplication' | translate}}</li>
</ul>
</div>
<api-validate></api-validate>
<form name="newsavingccountform" novalidate="" class="well" rc-submit="submit()">
<fieldset>
<legend>{{ 'label.heading.recurringdepositapplication' | translate }}</legend>
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label ng-show="clientName" class="control-label">{{ 'label.input.applicant' | translate }}&nbsp;</label>
<input ng-show="clientName" type="text" value="{{clientName}}" readonly>
<label ng-show="groupName" class="control-label">{{ 'label.input.applicantgroup' | translate
}}&nbsp;</label>
<input ng-show="groupName" type="text" value="{{groupName}}" readonly>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.product' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="productId" ng-model="formData.productId"
ng-options="product.id as product.name for product in products" value="{{product.id}}"
ng-change="changeProduct()" required="required">
<option style="display:none" value="">{{'label.selectrecurringdepositproduct' | translate}}</option>
</select>
</td>
</tr>
</table>
<div ng-show="data">
<table width="100%">
<tr class="control-group">
<td width="14%" align="center"></td>
<td width="40%">
<label class="control-label">{{ 'label.input.fieldofficer' | translate }}&nbsp;</label>
<select id="fieldOfficerId" ng-model="formData.fieldOfficerId"
ng-options="fieldOfficer.id as fieldOfficer.displayName for fieldOfficer in fieldOfficers"
value="{{fieldOfficer.id}}">
<option value="">{{'label.selectfieldofficer' | translate}}</option>
</select>
</td>
<td width="44%">
<label class="control-label">{{ 'label.input.submittedon' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="submittedOnDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="date.submittedOnDate"
is-open="opened" min="minDate" max="restrictDate"/>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%">
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.heading.currency' | translate }}&nbsp;<b>{{data.currency.name}}({{data.currency.displaySymbol}})</b></label>
</td>
<td width="50%">
<label class="control-label">{{ 'label.heading.decimalplaces' | translate }}&nbsp;<b>{{data.currency.decimalPlaces}}</b></label>
</td>
</tr>
<!--<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" type="text" name="nominalannualinterestrate"
ng-model="formData.nominalAnnualInterestRate" required late-Validate/>
<form-validate valattributeform="newsavingccountform" valattribute="nominalannualinterestrate"/>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.currencyinmultiplesof' | translate }}&nbsp;</label>
<input type="text" value="{{data.currency.inMultiplesOf}}" readonly>
</td>
</tr>-->
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in data.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in data.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in data.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in data.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.recurring.deposit.amount' | translate }}&nbsp;</label>
<input id="recurringDepositAmount" type="text" ng-model="formData.recurringDepositAmount">
</td>
<td width="50%">
<label class="control-label">{{ 'label.input.depositperiod' | translate }}&nbsp;</label>
<input id="depositPeriod" type="text" ng-model="formData.depositPeriod">
<select id="depositPeriodFrequencyId" ng-model="formData.depositPeriodFrequencyId"
class="input-small"
ng-options="type.id as type.value for type in data.depositPeriodFrequencyOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.select.recurringdeposittype' | translate }}&nbsp;</label>
<select id="recurringDepositTypeId" ng-model="formData.recurringDepositTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.recurringDepositTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td colspan="2">
<label class="control-label">{{ 'label.input.recurringdepositfrequency' | translate }}&nbsp;</label>
<input id="recurringDepositFrequency" type="text" ng-model="formData.recurringDepositFrequency">
&nbsp;&nbsp;
<select id="recurringDepositFrequencyTypeId" ng-model="formData.recurringDepositFrequencyTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.recurringDepositFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="50%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in data.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm" readonly>&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm" readonly>&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm" readonly>&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in data.depositTermTypeOptions"
value="{{type.id}}" readonly>
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable" readonly>
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod" readonly/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod" readonly/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest" readonly/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in data.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}" readonly>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"
readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate" readonly/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}" readonly>
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" readonly/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod" readonly/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom" readonly/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo" readonly/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate" readonly/></td>
<td><input id="description" name="description" type="text" ng-model="chartSlab.description"
readonly/></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="10%" align="center">
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="90%">
<table width="100%">
<tr>
<td width="50%">
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in chargeOptions"
value="{{charge.id}}">
<option value="">{{'label.selectcharge' | translate}}</option>
</select>
<a ng-click="addCharge(chargeId)"><i class="icon-plus icon-white"></i></a>
<span ng-show="errorchargeevent">
<small class="error">
{{'label.'+labelchargeerror | translate}}
</small>
</span>
</td>
<td width="50%">
</td>
</tr>
</table>
<table class="table" width="100%" ng-show="charges.length>0">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th>{{'label.heading.amount' | translate}}</th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th>{{'label.heading.date' | translate}}</th>
<th>{{'label.heading.repaymentsevery' | translate}}</th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td><input id="charges[{{$index}}].amount" class="input-small" type="text" ng-model="charge.amount"
placeholder="{{'label.placeholder.amount' | translate}}"/></td>
<td>{{charge.chargeTimeType.value}}</td>
<td ng-show="charge.chargeTimeType.value=='Annual Fee'">
<input id="charges[{{$index}}].feeOnMonthDay" class="input-medium" readonly class="date-disable"
type="text" datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Specified due date'">
<input id="charges[{{$index}}].dueDate" class="input-medium" readonly class="date-disable"
type="text" datepicker-pop="dd MMMM yyyy" ng-model="charge.dueDate" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input readonly class="date-disable" class="input-medium" readonly class="date-disable" type="text"
datepicker-pop="dd MMMM" ng-model="charge.feeOnMonthDay" is-open="opened"/>
</td>
<td ng-show="charge.chargeTimeType.value=='Monthly Fee'">
<input id="charges[{{$index}}].amount" class="input-small" type="text"
ng-model="charge.feeInterval"/>
</td>
<td ng-hide="charge.chargeTimeType.value=='Monthly Fee'"></td>
<td ng-hide="charge.chargeTimeType.value=='Annual Fee' || charge.chargeTimeType.value=='Specified due date' || charge.chargeTimeType.value=='Monthly Fee'"></td>
<td><a ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary" ng-show="data">{{ 'label.button.save' | translate }}
</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,183 @@
<div ng-controller="RecurringDepositAccountActionsController">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/viewrecurringdepositaccount/{{accountId}}">{{'label.anchor.viewrecurringdepositaccount' |
translate}}</a> <span class="divider">/</span></li>
<li class="active">{{action}}</li>
</ul>
</div>
<form name="savingccountactionform" novalidate="" class="form-horizontal" ng-submit="submit()">
<api-validate></api-validate>
<fieldset>
<legend>{{ title | translate}}</legend>
<div class="control-group" ng-show="showDateField">
<label class="control-label" for="modelName">{{labelName | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="{{modelName}}" type="text" sort datepicker-pop="dd MMMM yyyy"
ng-model="formData[modelName]" is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
<div class="control-group" ng-show="showAmount">
<label class="control-label">{{ 'label.input.amount' | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="transactionAmount" type="text" name="transactionAmount" ng-model="formData.transactionAmount" />
</div>
</div>
<div ng-show="isAccountClose">
<div class="control-group">
<label class="control-label" for="maturityAmount">{{ 'label.maturityAmount' |
translate}}<span class="required">*</span></label>
<span class="padded-td">{{currency.displaySymbol}}&nbsp;{{maturityAmount}}</span>
</tr>
</div>
<div class="control-group">
<label class="control-label" for="onAccountClosureId">{{ 'label.input.onAccountClosure' |
translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="onAccountClosureId" ng-model="formData.onAccountClosureId"
ng-options="onAccountClosure.id as onAccountClosure.value for onAccountClosure in onAccountClosureOptions"
value="{{onAccountClosure.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group" ng-show="formData.onAccountClosureId == '200'">
<label class="control-label" for="toSavingsAccountId">{{ 'label.input.transfer.to.savings' |
translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="toSavingsAccountId" ng-model="formData.toSavingsAccountId"
ng-options="savingsAccount.id as savingsAccount.accountNo for savingsAccount in savingsAccounts"
value="{{savingsAccounts.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group" ng-show="formData.onAccountClosureId == '200'">
<label class="control-label" for="transferDescription">{{ 'label.input.transfer.description' |
translate}}</label>
<div class="controls">
<input id="transferDescription" type="text" ng-model="formData.transferDescription">
</div>
</div>
</div>
<div ng-show="showPaymentType">
<div class="control-group">
<label class="control-label" for="paymentTypeId">{{ 'label.input.paymentypeid' | translate}}<span
class="required">*</span></label>
<div class="controls">
<select id="paymentTypeId" ng-model="formData.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in paymentTypes"
value="{{paymentType.id}}">
<option value="">{{'label.selectone' | translate}}</option>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ 'label.input.showpaymentdetails' | translate}}</label>
<div class="controls">
<a class="btn btn-primary" ng-click="showPaymentDetails=!showPaymentDetails">
<i ng-show="showPaymentDetails" class="icon-minus icon-white"></i>
<i ng-show="!showPaymentDetails" class="icon-plus icon-white"></i>
</a>
</div>
</div>
<div collapse="!showPaymentDetails">
<div class="control-group">
<label class="control-label" for="accountNumber">{{ 'label.input.accnum' | translate}}</label>
<div class="controls">
<input id="accountNumber" type="text" ng-model="formData.accountNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="checkNumber">{{ 'label.input.checknumber' |
translate}}</label>
<div class="controls">
<input id="checkNumber" type="text" ng-model="formData.checkNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="routingCode">{{ 'label.input.routingcode' |
translate}}</label>
<div class="controls">
<input id="routingCode" type="text" ng-model="formData.routingCode">
</div>
</div>
<div class="control-group">
<label class="control-label" for="receiptNumber">{{ 'label.input.receiptnumber' |
translate}}</label>
<div class="controls">
<input id="receiptNumber" type="text" ng-model="formData.receiptNumber">
</div>
</div>
<div class="control-group">
<label class="control-label" for="bankNumber">{{ 'label.input.banknumber' | translate}}</label>
<div class="controls">
<input id="bankNumber" type="text" ng-model="formData.bankNumber">
</div>
</div>
</div>
</div>
<div class="control-group" ng-show="showNoteField">
<label class="control-label" for="note">{{ 'label.input.note' | translate}}</label>
<div class="controls">
<textarea rows="2" id="note" ng-model="formData.note"></textarea>
</div>
</div>
<div class="control-group" ng-show="showAmountField">
<label class="control-label">{{ labelName | translate}}<span class="required">*</span></label>
<div class="controls">
<input type="text" id="amount" ng-model="formData.amount">
</div>
</div>
<div class="control-group" ng-show="paymentDatefield">
<label class="control-label" for="modelName">{{'label.input.paymentdate' | translate}}<span
class="required">*</span></label>
<div class="controls">
<input id="{{modelName}}" type="text" sort datepicker-pop="dd MMMM yyyy"
ng-model="formData[modelName]" is-open="opened"/>
</div>
</div>
<div class="control-group" ng-show="showDelete || waiveCharge">
<label class="control-label">{{ 'label.areyousure' | translate }}</label>
</div>
<div class="offset3" ng-show="showDelete">
<button type="reset" ng-click="submit()" class="btn">{{ 'label.button.confirm' | translate }}</button>
<button type="submit" ng-click="cancel()" class="btn btn-primary">{{ 'label.button.cancel' | translate
}}
</button>
</div>
<div class="offset3" ng-hide="showDelete">
<button id="cancel" ng-click="cancel()" class="btn">{{ 'label.button.cancel' | translate }}</button>
<button id="save" type="submit" class="btn btn-primary">{{ 'label.button.save' | translate }}</button>
</div>
</fieldset>
</form>
</div>

View File

@ -0,0 +1,76 @@
<div ng-controller="ViewRecurringDepositTransactionController">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/viewrecurringdepositaccount/{{transaction.accountId}}">{{'label.anchor.viewrecurringdepositaccount' |
translate}}</a></li>
<li class="active">{{ 'label.anchor.viewtransaction' | translate}}</li>
</ul>
</div>
<h3>{{ 'label.heading.transactiondetails' | translate}}</h3>
<div ng-hide="transaction.reversed" class="pull-right">
<div class="btn-group">
<a data-ng-hide="flag" has-permission='ADJUSTTRANSACTION_SAVINGSACCOUNT'
href="#/recurringdepositaccount/{{transaction.accountId}}/modifytransaction?transactionId={{transaction.id}}"
class="btn btn-primary"><i class="icon-pencil icon-white"></i>{{ 'label.button.edit' | translate}}</a>
<a ng-click="undoTransaction(transaction.accountId, transaction.id)" class="btn btn-danger" has-permission='UNDOTRANSACTION_SAVINGSACCOUNT'><i
class="icon-trash icon-white"></i>{{ 'label.button.undo' | translate}}</a>
</div>
</div>
<div class="row">
<table width="100%">
<tr>
<td width="20%">{{ 'label.heading.transactionid' | translate}}</td>
<td width="80%">{{transaction.id}}</td>
</tr>
<tr>
<td>{{ 'label.heading.type' | translate}}</td>
<td>{{transaction.transactionType.value}}</td>
</tr>
<tr>
<td>{{ 'label.heading.transactiondate' | translate}}</td>
<td>{{transaction.date | DateFormat}}</td>
</tr>
<tr>
<td>{{ 'label.heading.currency' | translate}}</td>
<td>{{transaction.currency.name}}</td>
</tr>
<tr>
<td>{{ 'label.heading.amount' | translate}}</td>
<td>{{transaction.amount}}</td>
</tr>
<tr class="span2"></tr>
</table>
<table width="100%" ng-show="transaction.paymentDetailData">
<tr>
<td width="20%"><strong>{{ 'label.heading.paymentdetails' | translate}}</strong></td>
<td width="80%"></td>
</tr>
<tr ng-show="transaction.paymentDetailData.paymentType">
<td>{{ 'label.heading.type' | translate}}</td>
<td>{{transaction.paymentDetailData.paymentType.name}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.accountNumber">
<td>{{ 'label.heading.accnum' | translate}}</td>
<td>{{transaction.paymentDetailData.accountNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.checkNumber">
<td>{{ 'label.heading.checknumber' | translate}}</td>
<td>{{transaction.paymentDetailData.checkNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.routingCode">
<td>{{ 'label.heading.routingcode' | translate}}</td>
<td>{{transaction.paymentDetailData.routingCode}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.receiptNumber">
<td>{{ 'label.heading.receiptnumber' | translate}}</td>
<td>{{transaction.paymentDetailData.receiptNumber}}</td>
</tr>
<tr ng-show="transaction.paymentDetailData.bankNumber">
<td>{{ 'label.heading.banknumber' | translate}}</td>
<td>{{transaction.paymentDetailData.bankNumber}}</td>
</tr>
</table>
</div>
</div>

View File

@ -0,0 +1,330 @@
<div ng-controller="ViewRecurringDepositAccountDetailsController">
<div>
<ul class="breadcrumb">
<li ng-show="savingaccountdetails.groupName"><a href="#/viewgroup/{{savingaccountdetails.groupId}}">{{savingaccountdetails.groupName}}</a>
<span class="divider">/</span></li>
<li ng-show="savingaccountdetails.clientName"><a href="#/viewclient/{{savingaccountdetails.clientId}}">{{savingaccountdetails.clientName}}</a>
<span class="divider">/</span></li>
<li class="active">{{savingaccountdetails.savingsProductName}}({{savingaccountdetails.accountNo}})</li>
</ul>
</div>
<div>
<div class="span gray-head" style="margin-left:0%;">
<span style="margin-left: 10px;font-size:20px">
<strong><i class="icon-stop {{savingaccountdetails.status.code | StatusLookup}}"></i>&nbsp;{{savingaccountdetails.savingsProductName}}(#{{savingaccountdetails.accountNo}})</strong>
</span>
</div>
<div class="row-fluid primarydiv">
<div class="pull-right">
<div class="btn-group">
<span ng-repeat="button in buttons.singlebuttons">
<a ng-show="button.name"
ng-click="clickEvent(button.name.replace('button.',''), savingaccountdetails.id)"
class="btn btn-primary"><i class="{{button.icon}} icon-white"></i>{{'label.'+button.name |
translate}}</a>
</span>
<span ng-show="buttons.options" class="btn-group">
<a class="btn btn-primary dropdown-toggle">
{{'label.button.more' | translate}}
<span class="caret"></span>
</a>
<ul class="dropdown dropdown-menu">
<li class="{{button.icon}}" ng-repeat="button in buttons.options">
<a ng-click="clickEvent(button.name.replace('button.',''), savingaccountdetails.id)">{{'label.'+button.name
| translate}}</a>
</li>
</ul>
</span>
</div>
</div>
</div>
</div>
<br/>
<hr/>
<div class="row-fluid span" style="margin-left:-1px;margin-top: -20px">
<div class="span6">
<table class="table table-striped table-bordered">
<tr>
<td>{{'label.heading.activatedon' | translate}}</td>
<td>{{savingaccountdetails.timeline.activatedOnDate | DateFormat}}<span
data-ng-hide="savingaccountdetails.timeline.activatedOnDate">{{ 'label.notactivated' | translate }}</span>
</td>
</tr>
<tr>
<td>{{'label.heading.currency' | translate}}</td>
<td>{{savingaccountdetails.currency.name}}</td>
</tr>
</table>
</div>
<div class="span6">
<table class="table table-bordered table-striped">
<tr>
<td>{{'label.heading.fieldofficer' | translate}}</td>
<td>{{savingaccountdetails.fieldOfficerName}}<span data-ng-hide="savingaccountdetails.fieldOfficerName">{{'label.unassigned' | translate}}</span>
</td>
</tr>
<tr>
<td>{{'label.heading.balance' | translate}}</td>
<td>{{savingaccountdetails.summary.accountBalance}}</td>
</tr>
</table>
</div>
</div>
<div class="row paddedleft">
<hr class="marginbottom"/>
<tabset>
<tab heading="{{'label.heading.summary' | translate}}">
<div class="span8" style="margin-left: 10px;margin-top: 30px;">
<table class="table table-bordered view-table">
<tr ng-show="savingaccountdetails.maturityAmount">
<td style="font-weight: normal" class="table-bold-acc">{{'label.maturityAmount' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.maturityAmount}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.maturityDate">
<td style="font-weight: normal" class="table-bold-acc">{{'label.maturityDate' | translate}}</td>
<td>{{savingaccountdetails.maturityDate | DateFormat}}<span
data-ng-hide="savingaccountdetails.maturityDate"></span></td>
</tr>
<tr ng-show="savingaccountdetails.depositPeriod">
<td style="font-weight: normal" class="table-bold-acc">{{'label.depositPeriod' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.depositPeriod}} &nbsp; {{savingaccountdetails.depositPeriodFrequency.value}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalDeposits">
<td style="font-weight: normal" class="table-bold-acc">{{'label.actual.totalDeposits' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalDeposits}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalWithdrawals">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalwithdarawals' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalWithdrawals}}</span>
</td>
</tr>
<!--<tr ng-show="savingaccountdetails.summary.totalWithdrawalFees">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalwithdrawalsfees' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalWithdrawalFees}}</span></td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalAnnualFees">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalannualfees' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalAnnualFees}}</span></td>
</tr>-->
<tr ng-show="savingaccountdetails.summary.totalInterestEarned">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalinterestearned' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalInterestEarned}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.summary.totalInterestPosted">
<td style="font-weight: normal" class="table-bold-acc">{{'label.totalinterestposted' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.currency.displaySymbol}}&nbsp;{{savingaccountdetails.summary.totalInterestPosted}}</span>
</td>
</tr>
<!--<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestrate' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.nominalAnnualInterestRate}}%</span></td>
</tr>-->
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestcompoundingperiod' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestCompoundingPeriodType.value}}</span></td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestpostingperiod' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestPostingPeriodType.value}}</span></td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.interestcalculatedusing' | translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.interestCalculationType.value}}</span></td>
</tr>
<!--<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.noofdaysinyear' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.interestCalculationDaysInYearType.value}}</span></td>
</tr>-->
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.recurring.deposit.amount' |
translate}}
</td>
<td><span class="padded-td">{{savingaccountdetails.recurringDepositAmount}}</td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.recurringdeposittype' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.recurringDepositType.value}}</td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.recurring.deposit.every' | translate}}
</td>
<td><span class="padded-td">Every {{savingaccountdetails.recurringDepositFrequency}} {{savingaccountdetails.recurringDepositFrequencyType.value}}
</td>
</tr>
<!--<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.minimumdepositterm.and.inmultiplesof' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.minDepositTerm}} - {{savingaccountdetails.depositTermType.value}}.
And there after, in multiples of {{savingaccountdetails.inMultiplesOfDepositTerm}} - {{savingaccountdetails.inMultiplesOfDepositTermType.value}}</span></td>
</tr>
<tr>
<td style="font-weight: normal" class="table-bold-acc">{{'label.maximumdepositterm' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.maxDepositTerm}} - {{savingaccountdetails.depositTermType.value}}</span></td>
</tr>-->
<tr>
<td ng-show="savingaccountdetails.interestFreePeriodApplicable" style="font-weight: normal"
class="table-bold-acc">{{'label.interestfreetoperiod' | translate}}
</td>
<td ng-show="savingaccountdetails.interestFreePeriodApplicable"><span class="padded-td">{{savingaccountdetails.interestFreeFromPeriod}} to {{savingaccountdetails.interestFreeToPeriod}} - {{savingaccountdetails.interestFreePeriodFrequencyType.value}}</span>
</td>
</tr>
<tr ng-show="savingaccountdetails.preClosurePenalApplicable">
<td style="font-weight: normal" class="table-bold-acc">{{'label.preclosurepenal' | translate}}</td>
<td><span class="padded-td">{{savingaccountdetails.preClosurePenalInterest}} on {{savingaccountdetails.preClosurePenalInterestOnType.value}}</span>
</td>
</tr>
</table>
</div>
</tab>
<tab heading="{{'label.heading.transactions' | translate}}">
<table class="table table-bordered">
<colgroup span="4"></colgroup>
<thead>
<tr>
<th>{{'label.heading.id' | translate}}</th>
<th>{{'label.heading.transactiondate' | translate}}</th>
<th>{{'label.heading.transactiontype' | translate}}</th>
<th>{{'label.heading.debit' | translate}}</th>
<th>{{'label.heading.credit' | translate}}</th>
<th>{{'label.heading.balance' | translate}}</th>
</tr>
</thead>
<tbody>
<tr ng-class="{strikeoff : transaction.reversed==true}"
ng-repeat="transaction in savingaccountdetails.transactions">
<td style="width: 50px;">
<a ng-hide="transaction.transfer"
href="#/viewrecurringdepositaccounttrxn/{{transaction.accountId}}/{{transaction.id}}">{{transaction.id}}</a>
<a ng-show="transaction.transfer" href="#/viewaccounttransfers/{{transaction.transfer.id}}">{{transaction.id}}</a>
</td>
<td style="width: 130px;">{{transaction.date | DateFormat}}</td>
<td style="width: 130px;">{{transaction.transactionType.value}}</td>
<td>
<div ng-show="isDebit(transaction.transactionType)">
{{transaction.amount}}
</div>
</td>
<td>
<div ng-show="!isDebit(transaction.transactionType)">
{{transaction.amount}}
</div>
</td>
<td>{{transaction.runningBalance}}</td>
</tbody>
</table>
</tab>
<tab heading="{{savingdatatable.registeredTableName}}" ng-repeat="savingdatatable in savingdatatables"
select="dataTableChange(savingdatatable)">
<span data-ng-show="choice">
<a ng-show="datatabledetails.isData" class="btn btn-danger pull-right"
ng-click="deleteAll(savingdatatable.registeredTableName, savingaccountdetails.id)"><i
class="icon-trash icon-white"></i>{{'label.button.deleteall' | translate}}</a>
<span ng-show="!datatabledetails.isData || datatabledetails.isMultirow" class="pull-right ">
<a href="#/makedatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}"
class="btn btn-primary"><i class="icon-plus icon-white"></i>{{'label.button.add' | translate}}</a>
</span></br>
</span>
<div data-ng-show="datatabledetails.isData">
<table ng-show="datatabledetails.isMultirow" class="table">
<thead>
<th ng-repeat="column in datatabledetails.columnHeaders">{{column.columnName}}</th>
</thead>
<tbody>
<tr ng-repeat="data in datatabledetails.data">
<td ng-repeat="row in data.row">
<span ng-show="$index == 0">
<a href="#/viewdatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}/{{data.row[0]}}"
ng-show="datatabledetails.isMultirow">{{row}}</a>
<a href="#/viewdatatableentry/{{savingdatatable.registeredTableName}}/{{savingaccountdetails.id}}/"
ng-hide="datatabledetails.isMultirow">{{row}}</a>
</span>
<span ng-hide="$index == 0">{{row}}</span>
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered" data-ng-show="!datatabledetails.isMultirow" style="width: 450px">
<tr ng-repeat="value in singleRow">
<td class="graybg" style="font-weight: bold">{{value.key}}</td>
<td><span class="padded-td">{{value.value}}</span></td>
</tr>
</table>
</div>
</tab>
<tab ng-show="chargeTableShow" heading="{{'label.heading.charges' | translate}}">
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.feeorpenalty' | translate}}</th>
<th></th>
<th>{{'label.heading.paymentdueat' | translate}}</th>
<th></th>
<th>{{'label.heading.dueasof' | translate}}</th>
<th>{{'label.heading.repeatson' | translate}}</th>
<th>{{'label.heading.calculationtype' | translate}}</th>
<th></th>
<th>{{'label.heading.due' | translate}}</th>
<th>{{'label.heading.paid' | translate}}</th>
<th>{{'label.heading.waived' | translate}}</th>
<th>{{'label.heading.outstanding' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
<th></th>
</tr>
<tr ng-repeat="charge in charges">
<td>
<a href="#">{{charge.name}}</a>
</td>
<td ng-show="'charge.penalty'==true">{{"penalty"}}</td>
<td ng-hide="'charge.penalty'==true">{{"fee"}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td>{{charge.dueDate | DateFormat}}</td>
<td>{{charge.feeOnMonthDay | DayMonthFormat}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.currency.displaySymbol}}{{charge.amount}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountPaid}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountWaived}}</td>
<td>{{charge.currency.displaySymbol}}{{charge.amountOutstanding}}</td>
<td></td>
<td>
<span ng-show="chargeAction">
<a title="{{'label.edit' | translate}}"
href="#/recurringdepositaccountcharge/{{savingaccountdetails.id}}/editsavingcharge/{{charge.id}}"><i
class="icon-pencil icon-white"></i></a>
<a title="{{'label.delete' | translate}}"
href="#/recurringdepositaccountcharge/{{savingaccountdetails.id}}/deletesavingcharge/{{charge.id}}"><i
class="icon-remove icon-white"></i></a>
</span>
<span ng-hide="chargeAction">
<span ng-hide="charge.amountOutstanding == 0"
ng-show="charge.chargeTimeType.value == 'Monthly Fee' || charge.chargeTimeType.value == 'Annual Fee'|| charge.chargeTimeType.value == 'Specified due date'">
<a title="{{'label.button.paycharge' | translate}}"
href="#/recurringdepositaccountcharge/{{savingaccountdetails.id}}/paycharge/{{charge.id}}"><i
class="icon-check icon-white"></i></a>
<a title="{{'label.button.waivecharge' | translate}}"
href="#/recurringdepositaccountcharge/{{savingaccountdetails.id}}/waive/{{charge.id}}"><i
class="icon-flag icon-white"></i></a>
</span>
</span>
</td>
<td></td>
</tr>
</table>
</tab>
</tabset>
</div>
</div>
</div>

View File

@ -0,0 +1,709 @@
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/fixeddepositproducts">{{'label.anchor.fixeddepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li class="active">{{'label.anchor.createfixeddepositproduct' | translate}}</li>
</ul>
</div>
<form name="createfixeddepositproductform" novalidate="" class="well"
ng-controller="CreateFixedDepositProductController" rc-submit="submit()">
<api-validate></api-validate>
<div class="control-group">
<table width="100%">
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.details' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.productname' | translate }}&nbsp;<span
class="required">*</span></label>
<input ng-autofocus="true" id="name" name="name" type="text" ng-model="formData.name"
required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="name"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.product.shortname' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="shortName" name="shortName" ng-model="formData.shortName"
maxlength="4" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="shortName"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.description' | translate }}<span
class="required">*</span></label>
<textarea rows="2" id="description" name="description" ng-model="formData.description"
required late-validate/></textarea>
<form-validate valattributeform="createfixeddepositproductform" valattribute="description"/>
</td>
<td width="40%">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="control-group">
<table width="100%">
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="currencyCode" ng-model="formData.currencyCode"
ng-options="currency.code as currency.name for currency in product.currencyOptions"
value="{{currency.code}}"/>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.decimalplaces' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="digitsAfterDecimal" name="decimalplace" class="input-small"
ng-model="formData.digitsAfterDecimal" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="decimalplace"/>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.multiplesof' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="inMultiplesOf" name="multiplesof" ng-model="formData.inMultiplesOf" required
late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="multiplesof"/>
</td>
<!--<td width="40%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" name="nominalAnnualInterestRate" type="text"
class="input-small" ng-model="formData.nominalAnnualInterestRate" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform"
valattribute="nominalAnnualInterestRate"/>
</td>-->
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodTypeOptions" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in product.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodTypeOptions" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in product.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in product.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in product.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!-- <tr>
<td width="40%">
<label class="control-label">{{ 'label.input.minimumopeningbalance' | translate }}&nbsp;</label>
<input id="minRequiredOpeningBalance" type="text" ng-model="formData.minRequiredOpeningBalance">
</td>
<td width="40%">
</td>
</tr>-->
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in product.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm">&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm">&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm">&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod"/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod"/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest"/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in product.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod"/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<form>
<select ng-model="chargeId"
ng-options="charge.id as ((charge.name+' '+'('+charge.currency.name+')')) for charge in product.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a class="btn btn-primary" ng-click="chargeSelected(chargeId)">{{ 'label.button.add' | translate }}</a>
</form>
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th></th>
<th>{{'label.heading.amount' | translate}}</th>
<th></th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.amount}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td><a href="" ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%"></td>
<td width="80%">
<table>
<tr class="span2"></tr>
<tr>
<td width="30%"></td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="1">{{'label.input.none' |
translate}}<br/>
<td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="2">{{'label.input.cash' |
translate}}<br/>
</td>
</tr>
</table>
</td>
</tr>
<tr ng-show="formData.accountingRule==2" class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.accounting' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.assets" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingreference' | translate }}&nbsp;</label>
<select id="savingsReferenceAccountId" ng-model="formData.savingsReferenceAccountId"
chosen="assetAccountOptions"
ng-options="assetAccount.id as assetAccount.name for assetAccount in assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
</tr>
</table>
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.liabilities" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingcontrol' | translate }}&nbsp;</label>
<select id="savingsControlAccountId" ng-model="formData.savingsControlAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingstransfersinsuspenpense' | translate }}&nbsp;</label>
<select id="transfersInSuspenseAccountId" ng-model="formData.transfersInSuspenseAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.expenses" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.interestonsavings' | translate }}&nbsp;</label>
<select id="interestOnSavingsAccountId" ng-model="formData.interestOnSavingsAccountId"
chosen="expenseAccountOptions"
ng-options="expenseAccount.id as expenseAccount.name for expenseAccount in expenseAccountOptions"
value="{{expenseAccount.id}}">
</select>
</td>
<td></td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.income" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefromfees' | translate }}&nbsp;</label>
<select id="incomeFromFeeAccountId" ng-model="formData.incomeFromFeeAccountId" chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefrompenalties' | translate }}&nbsp;</label>
<select id="incomeFromPenaltyAccountId" ng-model="formData.incomeFromPenaltyAccountId"
chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table>
<tr class="control-group">
<td>
<h4>{{'label.heading.advancedaccountingrules' | translate}}[<a ng-click="showOrHide(showOrHideValue)">{{showOrHideValue}}</a>]
</h4></br>
</td>
</tr>
<tr class="control-group">
<td>
<table ng-show="showOrHideValue == 'hide'">
<tr>
<td>{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="addConfigureFundSource()">{{ 'label.button.add' | translate
}}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.paymenttype' | translate}}</th>
<th></th>
<th>{{'label.heading.fundsource' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="configureFundOption in configureFundOptions">
<td>
<select id="configureFundOptions[{{$index}}].paymentTypeId"
ng-model="configureFundOption.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in configureFundOption.paymentTypeOptions"
value="{{paymentType.id}}">
</select>
</td>
<td></td>
<td>
<select id="configureFundOptions[{{$index}}].fundSourceAccountId"
ng-model="configureFundOption.fundSourceAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in configureFundOption.assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFund($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mapfeestoincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapFees()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.fees' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="specificIncomeaccount in specificIncomeaccounts">
<td>
<select id="specificIncomeaccounts[{{$index}}].chargeId"
ng-model="specificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in specificIncomeaccount.chargeOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="specificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="specificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in specificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFee($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mappenaltiestospecificincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapPenalty()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.penalty' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="penaltySpecificIncomeaccount in penaltySpecificIncomeaccounts">
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].chargeId"
ng-model="penaltySpecificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in penaltySpecificIncomeaccount.penaltyOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="penaltySpecificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in penaltySpecificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deletePenalty($index)"></i></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6 paddedtop">
<a id="cancel" type="reset" class="btn" ng-click="cancel()">{{'label.button.cancel' | translate}}</a>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</form>

View File

@ -0,0 +1,141 @@
<div ng-controller="CreateInterestRateChartController">
<div id="viewlptop">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="{{'#/' + productsLink }}">{{'label.anchor.' + productsLink | translate}}</a> <span
class="divider">/</span></li>
<li><a href="#/{{viewProductLink}}/{{productId}}">{{productName}}</a> <span class="divider">/</span>
</li>
<li><a href="#/interestratecharts/{{productId}}/{{productName}}/{{productType}}">{{'label.anchor.interestratecharts'
| translate}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.createinterestratechart' | translate}}</li>
</ul>
</div>
</div>
<form name="createinterestratechartform" novalidate="" class="" rc-submit="submitInterestRateChartForm()">
<api-validate></api-validate>
<div class="row-fluid">
<legend>{{'label.heading.createinterestratechart' | translate}}</legend>
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' |
translate }}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" /> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset4 paddedtop">
<button id="cancel" type="reset" class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' |
translate}}
</button>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</form>
</div>

View File

@ -0,0 +1,732 @@
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/recurringdepositproducts">{{'label.anchor.recurringdepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li class="active">{{'label.anchor.createrecurringdepositproduct' | translate}}</li>
</ul>
</div>
<form name="createrecurringdepositproductform" novalidate="" class="well"
ng-controller="CreateRecurringDepositProductController" rc-submit="submit()">
<api-validate></api-validate>
<div class="control-group">
<table width="100%">
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.details' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.productname' | translate }}&nbsp;<span
class="required">*</span></label>
<input ng-autofocus="true" id="name" name="name" type="text" ng-model="formData.name"
required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="name"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.product.shortname' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="shortName" name="shortName" ng-model="formData.shortName"
maxlength="4" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="shortName"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.description' | translate }}<span
class="required">*</span></label>
<textarea rows="2" id="description" name="description" ng-model="formData.description"
required late-validate/></textarea>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="description"/>
</td>
<td width="40%">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="control-group">
<table width="100%">
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="currencyCode" ng-model="formData.currencyCode"
ng-options="currency.code as currency.name for currency in product.currencyOptions"
value="{{currency.code}}"/>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.decimalplaces' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="digitsAfterDecimal" name="decimalplace" class="input-small"
ng-model="formData.digitsAfterDecimal" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="decimalplace"/>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.multiplesof' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="inMultiplesOf" name="multiplesof" ng-model="formData.inMultiplesOf" required
late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="multiplesof"/>
</td>
<!--<td width="40%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" name="nominalAnnualInterestRate" type="text"
class="input-small" ng-model="formData.nominalAnnualInterestRate" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="nominalAnnualInterestRate"/>
</td>-->
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodTypeOptions" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in product.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodTypeOptions" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in product.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in product.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in product.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.select.recurringdeposittype' | translate }}&nbsp;</label>
<select id="recurringDepositTypeId" ng-model="formData.recurringDepositTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.recurringDepositTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td width="40%">
<!--<label class="control-label">{{ 'label.input.recurringdepositamount' | translate }}&nbsp;</label>
<input id="minRequiredOpeningBalance" class="input-small" input-small type="text"
ng-model="formData.minRequiredOpeningBalance">-->
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.input.recurringdepositfrequency' | translate }}&nbsp;</label>
<input id="recurringDepositFrequency" type="text" ng-model="formData.recurringDepositFrequency">
&nbsp;&nbsp;
<select id="recurringDepositFrequencyTypeId" ng-model="formData.recurringDepositFrequencyTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.recurringDepositFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in product.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm">&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm">&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm">&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod"/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod"/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest"/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in product.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod"/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<form>
<select ng-model="chargeId"
ng-options="charge.id as ((charge.name+' '+'('+charge.currency.name+')')) for charge in product.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a class="btn btn-primary" ng-click="chargeSelected(chargeId)">{{ 'label.button.add' | translate }}</a>
</form>
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th></th>
<th>{{'label.heading.amount' | translate}}</th>
<th></th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.amount}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td><a href="" ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%"></td>
<td width="80%">
<table>
<tr class="span2"></tr>
<tr>
<td width="30%"></td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="1">{{'label.input.none' |
translate}}<br/>
<td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="2">{{'label.input.cash' |
translate}}<br/>
</td>
</tr>
</table>
</td>
</tr>
<tr ng-show="formData.accountingRule==2" class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.accounting' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.assets" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingreference' | translate }}&nbsp;</label>
<select id="savingsReferenceAccountId" ng-model="formData.savingsReferenceAccountId"
chosen="assetAccountOptions"
ng-options="assetAccount.id as assetAccount.name for assetAccount in assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
</tr>
</table>
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.liabilities" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingcontrol' | translate }}&nbsp;</label>
<select id="savingsControlAccountId" ng-model="formData.savingsControlAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingstransfersinsuspenpense' | translate }}&nbsp;</label>
<select id="transfersInSuspenseAccountId" ng-model="formData.transfersInSuspenseAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.expenses" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.interestonsavings' | translate }}&nbsp;</label>
<select id="interestOnSavingsAccountId" ng-model="formData.interestOnSavingsAccountId"
chosen="expenseAccountOptions"
ng-options="expenseAccount.id as expenseAccount.name for expenseAccount in expenseAccountOptions"
value="{{expenseAccount.id}}">
</select>
</td>
<td></td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.income" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefromfees' | translate }}&nbsp;</label>
<select id="incomeFromFeeAccountId" ng-model="formData.incomeFromFeeAccountId" chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefrompenalties' | translate }}&nbsp;</label>
<select id="incomeFromPenaltyAccountId" ng-model="formData.incomeFromPenaltyAccountId"
chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table>
<tr class="control-group">
<td>
<h4>{{'label.heading.advancedaccountingrules' | translate}}[<a ng-click="showOrHide(showOrHideValue)">{{showOrHideValue}}</a>]
</h4></br>
</td>
</tr>
<tr class="control-group">
<td>
<table ng-show="showOrHideValue == 'hide'">
<tr>
<td>{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="addConfigureFundSource()">{{ 'label.button.add' | translate
}}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.paymenttype' | translate}}</th>
<th></th>
<th>{{'label.heading.fundsource' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="configureFundOption in configureFundOptions">
<td>
<select id="configureFundOptions[{{$index}}].paymentTypeId"
ng-model="configureFundOption.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in configureFundOption.paymentTypeOptions"
value="{{paymentType.id}}">
</select>
</td>
<td></td>
<td>
<select id="configureFundOptions[{{$index}}].fundSourceAccountId"
ng-model="configureFundOption.fundSourceAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in configureFundOption.assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFund($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mapfeestoincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapFees()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.fees' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="specificIncomeaccount in specificIncomeaccounts">
<td>
<select id="specificIncomeaccounts[{{$index}}].chargeId"
ng-model="specificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in specificIncomeaccount.chargeOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="specificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="specificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in specificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFee($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mappenaltiestospecificincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapPenalty()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.penalty' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="penaltySpecificIncomeaccount in penaltySpecificIncomeaccounts">
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].chargeId"
ng-model="penaltySpecificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in penaltySpecificIncomeaccount.penaltyOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="penaltySpecificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in penaltySpecificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deletePenalty($index)"></i></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6 paddedtop">
<a id="cancel" type="reset" class="btn" ng-click="cancel()">{{'label.button.cancel' | translate}}</a>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</form>

View File

@ -0,0 +1,714 @@
<div ng-controller="EditFixedDepositProductController">
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/fixeddepositproducts">{{'label.anchor.fixeddepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li><a href="#/viewfixeddepositproduct/{{product.id}}">{{product.name}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.editfixeddepositproduct' | translate}}</li>
</ul>
</div>
<form name="createfixeddepositproductform" novalidate="" class="well" rc-submit="submit()">
<api-validate></api-validate>
<div class="control-group">
<table width="100%">
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.details' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.productname' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="name" ng-autofocus="true" name="name" type="text" ng-model="formData.name"
required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="name"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.product.shortname' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="shortName" name="shortName" ng-model="formData.shortName"
maxlength="4" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="shortName"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.description' | translate }}<span
class="required">*</span></label>
<textarea rows="2" id="description" name="description" ng-model="formData.description"
required late-validate/></textarea>
<form-validate valattributeform="createfixeddepositproductform" valattribute="description"/>
</td>
<td width="40%">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="control-group">
<table width="100%">
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="currencyCode" ng-model="formData.currencyCode"
ng-options="currency.code as currency.name for currency in product.currencyOptions"
value="{{currency.code}}">
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.decimalplaces' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="digitsAfterDecimal" type="text" name="decimalplace" class="input-small"
ng-model="formData.digitsAfterDecimal" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="decimalplace"/>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.multiplesof' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="inMultiplesOf" type="text" name="multiplesof" ng-model="formData.inMultiplesOf" required
late-validate/>
<form-validate valattributeform="createfixeddepositproductform" valattribute="multiplesof"/>
</td>
<!--<td width="40%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" name="nominalAnnualInterestRate" type="text"
class="input-small" ng-model="formData.nominalAnnualInterestRate" required late-validate/>
<form-validate valattributeform="createfixeddepositproductform"
valattribute="nominalAnnualInterestRate"/>
</td>-->
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in product.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in product.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in product.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in product.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.minimumopeningbalance' | translate }}&nbsp;</label>
<input id="minRequiredOpeningBalance" type="text" ng-model="formData.minRequiredOpeningBalance">
</td>
<td width="40%">
</td>
</tr>-->
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in product.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm">&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm">&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm">&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod"/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod"/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest"/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in product.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod"/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<form>
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in product.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a class="btn btn-primary" ng-click="chargeSelected(chargeId)">{{ 'label.button.add' | translate }}</a>
</form>
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th></th>
<th>{{'label.heading.amount' | translate}}</th>
<th></th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.amount}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td><a href="" ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%"></td>
<td width="80%">
<table>
<tr class="span2"></tr>
<tr>
<td width="30%"></td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="1">{{'label.input.none' |
translate}}<br/>
<td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="2">{{'label.input.cash' |
translate}}<br/>
</td>
</tr>
</table>
</td>
</tr>
<tr ng-show="formData.accountingRule==2" class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.accounting' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.assets" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingreference' | translate }}&nbsp;</label>
<select id="savingsReferenceAccountId" ng-model="formData.savingsReferenceAccountId"
chosen="assetAccountOptions"
ng-options="assetAccount.id as assetAccount.name for assetAccount in assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
</tr>
</table>
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.liabilities" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingcontrol' | translate }}&nbsp;</label>
<select id="savingsControlAccountId" ng-model="formData.savingsControlAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingstransfersinsuspenpense' | translate }}&nbsp;</label>
<select id="transfersInSuspenseAccountId" ng-model="formData.transfersInSuspenseAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.expenses" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.interestonsavings' | translate }}&nbsp;</label>
<select id="interestOnSavingsAccountId" ng-model="formData.interestOnSavingsAccountId"
chosen="expenseAccountOptions"
ng-options="expenseAccount.id as expenseAccount.name for expenseAccount in expenseAccountOptions"
value="{{expenseAccount.id}}">
</select>
</td>
<td></td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.income" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefromfees' | translate }}&nbsp;</label>
<select id="incomeFromFeeAccountId" ng-model="formData.incomeFromFeeAccountId" chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefrompenalties' | translate }}&nbsp;</label>
<select id="incomeFromPenaltyAccountId" ng-model="formData.incomeFromPenaltyAccountId"
chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table>
<tr class="control-group">
<td>
<h4>{{'label.heading.advancedaccountingrules' | translate}}[<a ng-click="showOrHide(showOrHideValue)">{{showOrHideValue}}</a>]
</h4></br>
</td>
</tr>
<tr class="control-group">
<td>
<table ng-show="showOrHideValue == 'hide'">
<tr>
<td>{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="addConfigureFundSource()">{{ 'label.button.add' | translate
}}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.paymenttype' | translate}}</th>
<th></th>
<th>{{'label.heading.fundsource' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="configureFundOption in configureFundOptions">
<td>
<select id="configureFundOptions[{{$index}}].paymentTypeId"
ng-model="configureFundOption.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in configureFundOption.paymentTypeOptions"
value="{{paymentType.id}}">
</select>
</td>
<td></td>
<td>
<select id="configureFundOptions[{{$index}}].fundSourceAccountId"
ng-model="configureFundOption.fundSourceAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in configureFundOption.assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFund($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mapfeestoincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapFees()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.fees' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="specificIncomeaccount in specificIncomeaccounts">
<td>
<select id="specificIncomeaccounts[{{$index}}].chargeId"
ng-model="specificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in specificIncomeaccount.chargeOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="specificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="specificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in specificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFee($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mappenaltiestospecificincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapPenalty()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.penalty' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="penaltySpecificIncomeaccount in penaltySpecificIncomeaccounts">
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].chargeId"
ng-model="penaltySpecificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in penaltySpecificIncomeaccount.penaltyOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="penaltySpecificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in penaltySpecificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deletePenalty($index)"></i></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6 paddedtop">
<button id="cancel" type="reset" class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' | translate}}
</button>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
<p>{{formData.interestFreePeriodFrequencyTypeId | json}}</p>
</form>
</div>

View File

@ -0,0 +1,141 @@
<div ng-controller="EditInterestRateChartController">
<div id="viewlptop">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="{{'#/' + productsLink }}">{{'label.anchor.' + productsLink | translate}}</a> <span
class="divider">/</span></li>
<li><a href="#/{{viewProductLink}}/{{productId}}">{{productName}}</a> <span class="divider">/</span>
</li>
<li><a href="#/interestratecharts/{{productId}}/{{productName}}/{{productType}}">{{'label.anchor.interestratecharts'
| translate}}</a> <span class="divider">/</span></li>
<li class="active">{{chart.name}}</li>
</ul>
</div>
</div>
<form name="createinterestratechartform" novalidate="" class="" rc-submit="submitInterestRateChartForm()">
<api-validate></api-validate>
<div class="row-fluid">
<legend>{{'label.heading.editinterestratechart' | translate}}</legend>
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' |
translate }}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy"
ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod" /> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset4 paddedtop">
<button id="cancel" type="reset" class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' |
translate}}
</button>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</form>
</div>

View File

@ -0,0 +1,737 @@
<div ng-controller="EditRecurringDepositProductController">
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/recurringdepositproducts">{{'label.anchor.recurringdepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li><a href="#/viewrecurringdepositproduct/{{product.id}}">{{product.name}}</a> <span class="divider">/</span>
</li>
<li class="active">{{'label.anchor.editrecurringdepositproduct' | translate}}</li>
</ul>
</div>
<form name="createrecurringdepositproductform" novalidate="" class="well" rc-submit="submit()">
<api-validate></api-validate>
<div class="control-group">
<table width="100%">
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.details' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.productname' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="name" ng-autofocus="true" name="name" type="text" ng-model="formData.name"
required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="name"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.product.shortname' | translate }}&nbsp;<span
class="required">*</span></label>
<input type="text" id="shortName" name="shortName" ng-model="formData.shortName"
maxlength="4" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="shortName"/>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.description' | translate }}<span
class="required">*</span></label>
<textarea rows="2" id="description" name="description" ng-model="formData.description"
required late-validate/></textarea>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="description"/>
</td>
<td width="40%">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="control-group">
<table width="100%">
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.terms' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.currency' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="currencyCode" ng-model="formData.currencyCode"
ng-options="currency.code as currency.name for currency in product.currencyOptions"
value="{{currency.code}}">
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.decimalplaces' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="digitsAfterDecimal" type="text" name="decimalplace" class="input-small"
ng-model="formData.digitsAfterDecimal" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="decimalplace"/>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.multiplesof' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="inMultiplesOf" type="text" name="multiplesof" ng-model="formData.inMultiplesOf" required
late-validate/>
<form-validate valattributeform="createrecurringdepositproductform" valattribute="multiplesof"/>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.nominalannualinterestrate' | translate }}&nbsp;<span
class="required">*</span></label>
<input id="nominalAnnualInterestRate" name="nominalAnnualInterestRate" type="text"
class="input-small" ng-model="formData.nominalAnnualInterestRate" required late-validate/>
<form-validate valattributeform="createrecurringdepositproductform"
valattribute="nominalAnnualInterestRate"/>
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcompoundingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCompoundingPeriodType" ng-model="formData.interestCompoundingPeriodType"
ng-options="type.id as type.value for type in product.interestCompoundingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestpostingperiod' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestPostingPeriodType" ng-model="formData.interestPostingPeriodType"
ng-options="type.id as type.value for type in product.interestPostingPeriodTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%"></td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.interestcalculatedusing' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationType" ng-model="formData.interestCalculationType"
ng-options="type.id as type.value for type in product.interestCalculationTypeOptions"
value="{{type.id}}">
</select>
</td>
<td width="40%">
<label class="control-label">{{ 'label.input.daysinyears' | translate }}&nbsp;<span
class="required">*</span></label>
<select id="interestCalculationDaysInYearType" ng-model="formData.interestCalculationDaysInYearType"
ng-options="type.id as type.value for type in product.interestCalculationDaysInYearTypeOptions"
value="{{type.id}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.settings' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.select.recurringdeposittype' | translate }}&nbsp;</label>
<select id="recurringDepositTypeId" ng-model="formData.recurringDepositTypeId"
class="input-medium"
ng-options="type.id as type.value for type in product.recurringDepositTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td width="40%">
</td>
</tr>
<tr>
<td width="40%">
<label class="control-label">{{ 'label.input.recurringdepositfrequency' | translate }}&nbsp;</label>
<input id="recurringDepositFrequency" class="input-small" type="text"
ng-model="formData.recurringDepositFrequency">
&nbsp;&nbsp;
<select id="recurringDepositFrequencyTypeId" ng-model="formData.recurringDepositFrequencyTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.recurringDepositFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.lockinPeriodFrequency' | translate }}&nbsp;</label>
<input id="lockinPeriodFrequency" type="text" class="input-small"
ng-model="formData.lockinPeriodFrequency">&nbsp;
<select id="lockinPeriodFrequencyType" ng-model="formData.lockinPeriodFrequencyType"
class="input-small"
ng-options="type.id as type.value for type in product.lockinPeriodFrequencyTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="control-label">{{ 'label.input.minimumdepositterm' | translate }}&nbsp;</label>
<input id="minimumDepositTerm" type="text" class="input-small"
ng-model="formData.minDepositTerm">&nbsp;
<select id="minDepositTermTypeId" ng-model="formData.minDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
<td>
<label class="control-label">{{ 'label.input.inmultiplesof' | translate }}&nbsp;</label>
<input id="inMultiplesOfDepositTerm" type="text" class="input-small"
ng-model="formData.inMultiplesOfDepositTerm">&nbsp;
<select id="inMultiplesOfDepositTermTypeId" ng-model="formData.inMultiplesOfDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.inMultiplesOfDepositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td width="80%">
<label class="control-label">{{ 'label.input.maximumdepositterm' | translate }}&nbsp;</label>
<input id="maximumDepositTerm" type="text" class="input-small"
ng-model="formData.maxDepositTerm">&nbsp;
<select id="maxDepositTermTypeId" ng-model="formData.maxDepositTermTypeId"
class="input-small"
ng-options="type.id as type.value for type in product.depositTermTypeOptions"
value="{{type.id}}">
<option style="display:none" value="">{{'label.selectone' | translate}}</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">{{ 'label.prematureclosure' | translate }}&nbsp;</label>
</td>
</tr>
<!--<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="interestFreePeriodApplicable" type="checkbox"
ng-model="formData.interestFreePeriodApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.interestfreeperiodapplicable' |
translate }}&nbsp;</label>
</td>
<td>
<input id="interestFreeFromPeriod" name="interestFreeFromPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeFromPeriod"/> -
<input id="interestFreeToPeriod" name="interestFreeToPeriod" type="text"
class="input-mini-medium"
ng-model="formData.interestFreeToPeriod"/>
</td>
<td>
<select class="input-small" id="interestFreePeriodFrequencyTypeId"
ng-model="formData.interestFreePeriodFrequencyTypeId"
ng-options="type.id as type.value for type in product.interestFreePeriodTypeOptions"
value="{{formData.interestFreePeriodFrequencyTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>-->
<tr>
<td colspan="2">
<table>
<tr>
<td>
<input id="preClosurePenalApplicable" type="checkbox"
ng-model="formData.preClosurePenalApplicable">
</td>
<td>
<label class="control-label">{{ 'label.checkbox.applypreclosurepenalinterest' |
translate }}&nbsp;</label>
</td>
<td>
<input id="preClosurePenalInterest" name="preClosurePenalInterest" type="text"
class="input-mini-medium"
ng-model="formData.preClosurePenalInterest"/> -
&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;&nbsp;
</td>
<td>
<select class="input-medium" id="preClosurePenalInterestOnTypeId"
ng-model="formData.preClosurePenalInterestOnTypeId"
ng-options="type.id as type.value for type in product.preClosurePenalInterestOnTypeOptions"
value="{{formData.preClosurePenalInterestOnTypeId}}">
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%">
<label class="control-label"><h4>{{ 'label.heading.interestchart' | translate }}</h4></label>
</td>
<td class="blockquoteresult" width="80%">
<table>
<!--<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.name' | translate
}}<span
class="required">*</span></label>
<div class="controls">
<input id="name" ng-autofocus="true" type="text" name="name" ng-model="chart.name"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.description' |
translate
}}</label>
<div class="controls">
<input id="chdescription" ng-autofocus="true" type="text" name="chdescription"
ng-model="chart.description"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>-->
<tr>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.from' |
translate }}<span
class="required">*</span></label>
<div class="controls">
<input id="fromDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="fromDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>
<div class="control-group">
<label class="control-label" for="name">{{ 'label.input.interestratechart.valid.to' | translate
}}</label>
<div class="controls">
<input id="endDate" sort type="text" datepicker-pop="dd MMMM yyyy" ng-model="endDate.date"
is-open="opened" min="minDate" max="restrictDate"/>
</div>
</div>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table class="table table-bordered" width="100%">
<tr class="graybg">
<td>{{'label.heading.interestratedetails.period.type' | translate}}</td>
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
<td>&nbsp;
<div class="controls" ng-show="chart.chartSlabs.length < 1">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>
<select class="input-small" id="periodType" ng-model="chartSlab.periodType.id"
ng-options="type.id as type.value for type in chart.periodTypes"
value="{{chartSlab.periodType.id}}">
</select>
</td>
<td>
<input id="fromPeriod" name="fromPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.fromPeriod"/> -
<input id="toPeriod" name="toPeriod" type="text" class="input-mini-medium"
ng-model="chartSlab.toPeriod"/>
</td>
<!--<td>
<input id="amountRangeFrom" name="amountRangeFrom" type="text" class="input-mini"
ng-model="chartSlab.amountRangeFrom"/> -
<input id="amountRangeTo" name="amountRangeTo" type="text" class="input-mini"
ng-model="chartSlab.amountRangeTo"/>
</td>-->
<td><input id="annualInterestRate" name="annualInterestRate" type="text"
class="input-mini-medium"
ng-model="chartSlab.annualInterestRate"/></td>
<td><input id="description" name="description" type="text"
ng-model="chartSlab.description"/></td>
<td>
<a ng-click="removeRow($index)"><i class="icon-minus-sign icon-white"></i>{{'label.remove.row'
| translate}}</a>
<div class="controls" ng-show="$last">
<a ng-click="addNewRow()"><i class="icon-plus-sign icon-white"></i>{{'label.add.row'
| translate}}</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.charges' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<form>
<select ng-model="chargeId" ng-options="charge.id as charge.name for charge in product.chargeOptions"
value="{{charge.id}}">
<option style="display:none" value="">{{'label.selectcharge' | translate}}</option>
</select>
<a class="btn btn-primary" ng-click="chargeSelected(chargeId)">{{ 'label.button.add' | translate }}</a>
</form>
<table class="table" width="100%">
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.type' | translate}}</th>
<th></th>
<th>{{'label.heading.amount' | translate}}</th>
<th></th>
<th>{{'label.heading.collectedon' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="charge in charges">
<td>{{charge.name}},{{charge.currency.displaySymbol}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td></td>
<td>{{charge.amount}}</td>
<td></td>
<td>{{charge.chargeTimeType.value}}</td>
<td></td>
<td><a href="" ng-click="deleteCharge($index)"><i class="icon-remove icon-white"></i></a></td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr class="span2"></tr>
<tr class="control-group">
<td width="11%"></td>
<td width="80%">
<table>
<tr class="span2"></tr>
<tr>
<td width="30%"></td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="1">{{'label.input.none' |
translate}}<br/>
<td>
<td>
<input type="radio" ng-model="formData.accountingRule" value="2">{{'label.input.cash' |
translate}}<br/>
</td>
</tr>
</table>
</td>
</tr>
<tr ng-show="formData.accountingRule==2" class="control-group">
<td>
<label class="control-label"><h4>{{ 'label.heading.accounting' | translate }}</h4></label>
</td>
<td class="blockquoteresult">
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.assets" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingreference' | translate }}&nbsp;</label>
<select id="savingsReferenceAccountId" ng-model="formData.savingsReferenceAccountId"
chosen="assetAccountOptions"
ng-options="assetAccount.id as assetAccount.name for assetAccount in assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
</tr>
</table>
<table width="50%">
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.liabilities" | translate}}</h4></td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingcontrol' | translate }}&nbsp;</label>
<select id="savingsControlAccountId" ng-model="formData.savingsControlAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.savingstransfersinsuspenpense' | translate }}&nbsp;</label>
<select id="transfersInSuspenseAccountId" ng-model="formData.transfersInSuspenseAccountId"
chosen="liabilityAccountOptions"
ng-options="liabilityAccount.id as liabilityAccount.name for liabilityAccount in liabilityAccountOptions"
value="{{liabilityAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.expenses" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.interestonsavings' | translate }}&nbsp;</label>
<select id="interestOnSavingsAccountId" ng-model="formData.interestOnSavingsAccountId"
chosen="expenseAccountOptions"
ng-options="expenseAccount.id as expenseAccount.name for expenseAccount in expenseAccountOptions"
value="{{expenseAccount.id}}">
</select>
</td>
<td></td>
</tr>
<tr>
<td>
<hr class="marginbottom">
</td>
</tr>
<tr>
<td><h4>{{"label.heading.income" | translate}}</h4></td>
</tr>
</table>
<table width="50%">
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefromfees' | translate }}&nbsp;</label>
<select id="incomeFromFeeAccountId" ng-model="formData.incomeFromFeeAccountId" chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="control-group">
<td>
<label class="control-label">{{ 'label.input.incomefrompenalties' | translate }}&nbsp;</label>
<select id="incomeFromPenaltyAccountId" ng-model="formData.incomeFromPenaltyAccountId"
chosen="incomeAccountOptions"
ng-options="incomeAccount.id as incomeAccount.name for incomeAccount in incomeAccountOptions"
value="{{incomeAccount.id}}">
</select>
</td>
<td>
</td>
</tr>
<tr class="span2"></tr>
</table>
<table>
<tr class="control-group">
<td>
<h4>{{'label.heading.advancedaccountingrules' | translate}}[<a ng-click="showOrHide(showOrHideValue)">{{showOrHideValue}}</a>]
</h4></br>
</td>
</tr>
<tr class="control-group">
<td>
<table ng-show="showOrHideValue == 'hide'">
<tr>
<td>{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="addConfigureFundSource()">{{ 'label.button.add' | translate
}}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.paymenttype' | translate}}</th>
<th></th>
<th>{{'label.heading.fundsource' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="configureFundOption in configureFundOptions">
<td>
<select id="configureFundOptions[{{$index}}].paymentTypeId"
ng-model="configureFundOption.paymentTypeId"
ng-options="paymentType.id as paymentType.name for paymentType in configureFundOption.paymentTypeOptions"
value="{{paymentType.id}}">
</select>
</td>
<td></td>
<td>
<select id="configureFundOptions[{{$index}}].fundSourceAccountId"
ng-model="configureFundOption.fundSourceAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in configureFundOption.assetAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFund($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mapfeestoincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapFees()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.fees' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="specificIncomeaccount in specificIncomeaccounts">
<td>
<select id="specificIncomeaccounts[{{$index}}].chargeId"
ng-model="specificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in specificIncomeaccount.chargeOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="specificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="specificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in specificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deleteFee($index)"></i></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>{{'label.heading.mappenaltiestospecificincomeaccounts' | translate}}</td>
<td></td>
</tr>
<tr>
<td><a class="btn btn-primary" ng-click="mapPenalty()">{{ 'label.button.add' | translate }}</a></td>
</tr>
<tr>
<td>
<table class="table">
<tr class="graybg">
<th>{{'label.heading.penalty' | translate}}</th>
<th></th>
<th>{{'label.heading.incomeaccount' | translate}}</th>
<th></th>
<th>{{'label.heading.actions' | translate}}</th>
</tr>
<tr ng-repeat="penaltySpecificIncomeaccount in penaltySpecificIncomeaccounts">
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].chargeId"
ng-model="penaltySpecificIncomeaccount.chargeId"
ng-options="charge.id as charge.name for charge in penaltySpecificIncomeaccount.penaltyOptions"
value="{{charge.id}}">
</select>
</td>
<td></td>
<td>
<select id="penaltySpecificIncomeaccounts[{{$index}}].incomeAccountId"
ng-model="penaltySpecificIncomeaccount.incomeAccountId"
ng-options="assetAccount.id as assetAccount.name for assetAccount in penaltySpecificIncomeaccount.incomeAccountOptions"
value="{{assetAccount.id}}">
</select>
</td>
<td></td>
<td><i class="icon-remove" ng-click="deletePenalty($index)"></i></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="offset6 paddedtop">
<button id="cancel" type="reset" class="btn btn-warning" ng-click="cancel()">{{'label.button.cancel' | translate}}
</button>
<button id="save" type="submit" class="btn btn-primary">{{'label.button.save' | translate}}</button>
</div>
</form>
</div>

View File

@ -0,0 +1,29 @@
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.fixeddepositproducts' | translate}}</li>
</ul>
<div class="pull-right">
<a href="#/createfixeddepositproduct" class="btn btn-primary"><i class="icon-plus icon-white"></i>{{'label.button.createfixeddepositproduct'
| translate}}</a>
</div>
</div>
<div class="row-fluid" ng-controller="FixedDepositProductController">
<input ng-autofocus="true" ng-model="filterText" type="text" class="span marginbottom0px"
placeholder="{{'label.input.filterbynameshortname' | translate}}">
<table class="table">
<thead>
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.shortname' | translate}}</th>
</tr>
</thead>
<tbody>
<tr class="pointer-main" ng-repeat="product in depositproducts | orderBy:'name':reverse | filter:filterText">
<td class="pointer" data-ng-click="routeTo(product.id)">{{product.name}}</td>
<td class="pointer" data-ng-click="routeTo(product.id)">{{product.shortName}}</td>
</tr>
</tbody>
</table>
</div>

View File

@ -0,0 +1,49 @@
<div ng-controller="InterestRateChartController">
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="{{'#/' + productsLink }}">{{'label.anchor.' + productsLink | translate}}</a> <span
class="divider">/</span></li>
<li><a href="#/{{viewProductLink}}/{{productId}}">{{productName}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.interestratecharts' | translate}}</li>
</ul>
<div class="pull-right">
<a href="#/createinterestratechart/{{productId}}/{{productName}}/{{productType}}" class="btn btn-primary"><i
class="icon-plus icon-white"></i>{{'label.button.createinterestratechart'
| translate}}</a>
</div>
</div>
<div class="row-fluid">
<legend>{{'label.heading.interestratecharts' | translate}}</legend>
<div ng-repeat="chart in charts | orderBy:'fromDate':!reverse">
<span>{{'label.heading.interestratechart.valid.from' | translate}} : {{chart.fromDate | DateFormat}}</span>
&nbsp;&nbsp;<span>{{'label.heading.interestratechart.valid.to' | translate}} : {{chart.endDate | DateFormat}}
</span>
<div class="pull-right">
<div class="btn-group">
<a href="#/editinterestratecharts/{{chart.id}}/{{productId}}/{{productName}}/{{productType}}"
class="btn btn-primary"><i class="icon-edit icon-white"></i>{{'label.button.edit' |
translate}}</a>
</div>
</div>
<table width="98%" class="table table-bordered">
<tr class="bottomborder graybg">
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
</tr>
<tr ng-repeat="chartSlab in chart.chartSlabs">
<td>{{chartSlab.fromPeriod}} - {{chartSlab.toPeriod}} {{chartSlab.periodType.value}}</td>
<!--<td>{{chartSlab.amountRangeFrom}} - {{chartSlab.amountRangeTo}}</td>-->
<td>{{chartSlab.annualInterestRate}}</td>
<td>{{chartSlab.description}}</td>
</tr>
</table>
<hr/>
</div>
</div>
</div>

View File

@ -7,6 +7,12 @@
<p class="list-group-item-text">{{'label.addnewloanproductor' | translate}}</p>
</a>
<a class="list-group-item" href="#/savingproducts" has-permission='READ_SAVINGSPRODUCT'>
<h4 class="list-group-item-heading"><i class="icon-large icon-briefcase"></i>&nbsp;&nbsp;{{
'label.anchor.savingproducts' | translate }}</h4>
<p class="list-group-item-text">{{'label.addnewsavingproductor' | translate}}</p>
</a>
<a class="list-group-item" href="#/charges" has-permission='READ_CHARGE'>
<h4 class="list-group-item-heading"><i class="icon-calendar icon-puzzle-piece"></i>&nbsp;&nbsp;{{
'label.anchor.charges' | translate }}</h4>
@ -17,18 +23,24 @@
</div>
<div class="col-sm-6 col-md-6">
<div class="list-group">
<a class="list-group-item" href="#/savingproducts" has-permission='READ_SAVINGSPRODUCT'>
<h4 class="list-group-item-heading"><i class="icon-large icon-briefcase"></i>&nbsp;&nbsp;{{
'label.anchor.savingproducts' | translate }}</h4>
<p class="list-group-item-text">{{'label.addnewsavingproductor' | translate}}</p>
</a>
<a class="list-group-item" href="#/productmix" has-permission='READ_PRODUCTMIX'>
<h4 class="list-group-item-heading"><i class="icon-large icon-random"></i>&nbsp;&nbsp;{{
'label.anchor.productsmix' | translate }}</h4>
<p class="list-group-item-text">{{'label.definesrulesfortakingmul' | translate}}</p>
</a>
<a class="list-group-item" href="#/fixeddepositproducts" has-permission='READ_SAVINGSPRODUCT'>
<h4 class="list-group-item-heading"><i class="icon-calendar icon-puzzle-piece"></i>&nbsp;&nbsp;{{
'label.anchor.fixeddepositproducts' | translate }}</h4>
<p class="list-group-item-text">{{'label.fixeddepositproduct.def' | translate}}</p>
</a>
<a class="list-group-item" href="#/recurringdepositproducts" has-permission='READ_SAVINGSPRODUCT'>
<h4 class="list-group-item-heading"><i class="icon-calendar icon-puzzle-piece"></i>&nbsp;&nbsp;{{
'label.anchor.recurringdepositproducts' | translate }}</h4>
<p class="list-group-item-text">{{'label.recurringdepositproduct.def' | translate}}</p>
</a>
</div>
</div>
</div>

View File

@ -0,0 +1,29 @@
<div>
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li class="active">{{'label.anchor.recurringdepositproducts' | translate}}</li>
</ul>
<div class="pull-right">
<a href="#/createrecurringdepositproduct" class="btn btn-primary"><i class="icon-plus icon-white"></i>{{'label.button.createrecurringdepositproduct'
| translate}}</a>
</div>
</div>
<div class="row-fluid" ng-controller="RecurringDepositProductController">
<input ng-autofocus="true" ng-model="filterText" type="text" class="span marginbottom0px"
placeholder="{{'label.input.filterbynameshortname' | translate}}">
<table class="table">
<thead>
<tr class="graybg">
<th>{{'label.heading.name' | translate}}</th>
<th>{{'label.heading.shortname' | translate}}</th>
</tr>
</thead>
<tbody>
<tr class="pointer-main" ng-repeat="product in depositproducts | orderBy:'name':reverse | filter:filterText">
<td class="pointer" data-ng-click="routeTo(product.id)">{{product.name}}</td>
<td class="pointer" data-ng-click="routeTo(product.id)">{{product.shortName}}</td>
</tr>
</tbody>
</table>
</div>

View File

@ -0,0 +1,264 @@
<div class="row paddedleft" ng-controller="ViewFixedDepositProductController">
<div id="viewlptop">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/fixeddepositproducts">{{'label.anchor.fixeddepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li class="active">{{depositproduct.name}}</li>
</ul>
</div>
</div>
<div class="pull-right">
<div class="btn-group">
<a href="#/editfixeddepositproduct/{{depositproduct.id}}" class="btn btn-primary"><i
class="icon-edit icon-white"></i>{{'label.button.edit' | translate}}</a>
</div>
</div>
<div>
<legend>{{depositproduct.name}}</legend>
<table width="100%">
<tr>
<td>
<a name="test" class="old-syle-anchor">&nbsp;</a>
</td>
</tr>
<tr class="bottomborder">
<td colspan="4">
<strong>{{'label.heading.details' | translate}}</strong>
</td>
</tr>
<tr class="toppadding">
<td>{{'label.heading.description' | translate}}</td>
<td colspan="3">{{depositproduct.description}}</td>
</tr>
<tr>
<td>{{'label.heading.shortname' | translate}} :</td>
<td colspan="3">{{depositproduct.shortName}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.items' | translate}}</strong></td>
</tr>
<tr class="toppadding">
<td>{{'label.heading.currency' | translate}}</td>
<td colspan="3">{{depositproduct.currency.name}}</td>
</tr>
<tr>
<td>{{'label.heading.decimalplaces' | translate}}</td>
<td colspan="3">{{depositproduct.currency.decimalPlaces}}</td>
</tr>
<tr>
<td>{{'label.heading.currencyinmultiplesof' | translate}}</td>
<td colspan="3">{{depositproduct.currency.inMultiplesOf}}</td>
</tr>
<!--<tr>
<td>{{'label.heading.nominalannualinterestrate' | translate}}</td>
<td colspan="3">{{depositproduct.nominalAnnualInterestRate}}</td>
</tr>-->
<tr>
<td>{{'label.heading.interestcompoundingperiod' | translate}}</td>
<td colspan="3">{{depositproduct.interestCompoundingPeriodType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.interestpostingperiod' | translate}}</td>
<td colspan="3">{{depositproduct.interestPostingPeriodType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.interestcalculatedusing' | translate}}</td>
<td colspan="3">{{depositproduct.interestCalculationType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.daysinyears' | translate}}</td>
<td colspan="3">{{depositproduct.interestCalculationDaysInYearType.value}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.settings' | translate}}</strong></td>
</tr>
<tr>
<td>{{'label.heading.lockinPeriodFrequency' | translate}}</td>
<td>{{depositproduct.lockinPeriodFrequency}} {{depositproduct.lockinPeriodFrequencyType.value}}</td>
&nbsp;
</tr>
<tr>
<td>{{'label.heading.minimumdepositterm' | translate}}</td>
<td>{{depositproduct.minDepositTerm}} &nbsp; {{depositproduct.minDepositTermType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.maximumdepositterm' | translate}}</td>
<td>{{depositproduct.maxDepositTerm}} &nbsp; {{depositproduct.maxDepositTermType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.inmultiplesofdeposit' | translate}}</td>
<td>{{depositproduct.inMultiplesOfDepositTerm}} - {{depositproduct.inMultiplesOfDepositTermType.value}}</td>
</tr>
<!--<tr>
<td>{{'label.heading.interestfreeperiodapplicable' | translate}}</td>
<td>from &nbsp; {{depositproduct.interestFreeFromPeriod}} &nbsp;&nbsp; - {{depositproduct.interestFreeToPeriod}}
&nbsp; &nbsp; {{depositproduct.interestFreePeriodFrequencyType.value}}
</td>
</tr>-->
<tr ng-show="depositproduct.preClosurePenalInterest">
<td>{{'label.heading.preclosurepenalapplicable' | translate}}</td>
<td>{{depositproduct.preClosurePenalInterest}} &nbsp; &nbsp; % &nbsp; &nbsp; On &nbsp;&nbsp;
{{depositproduct.preClosurePenalInterestOnType.value}}
</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.interestchart' | translate}}</strong></td>
</tr>
<tr>
<td colspan="4">
<div class="pull-right">
<a href="#/interestratecharts/{{depositproduct.id}}/{{depositproduct.name}}/fixeddepositproduct">{{'label.anchor.interestratechartviewedit'
| translate}}</a>
</div>
</td>
</tr>
<tr>
<td>{{'label.heading.interestratechart.valid.from' | translate}} : {{depositproduct.activeChart.fromDate |
DateFormat}}
</td>
<td>{{'label.heading.interestratechart.valid.to' | translate}} : {{depositproduct.activeChart.endDate |
DateFormat}}
</td>
&nbsp;
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
</tr>
<tr ng-repeat="chartSlabs in depositproduct.activeChart.chartSlabs | orderBy:'fromPeriod':reverse">
<td>{{chartSlabs.fromPeriod}} - {{chartSlabs.toPeriod}} {{chartSlabs.periodType.value}}</td>
<!--<td>{{chartSlabs.amountRangeFrom}} - {{chartSlabs.amountRangeTo}}</td>-->
<td>{{chartSlabs.annualInterestRate}}</td>
<td>{{chartSlabs.description}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.charges' | translate}}</strong></td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.name' | translate}}</td>
<td>{{'label.heading.type' | translate}}</td>
<td>{{'label.heading.amount' | translate}}</td>
<td>{{'label.heading.collectedon' | translate}}</td>
</tr>
<tr ng-repeat="charge in depositproduct.charges">
<td>{{charge.name}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td>{{charge.amount}}</td>
<td>{{charge.chargeTimeType.value}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td><strong>{{'label.heading.accounting' | translate}}</strong></td>
<td colspan="3"><span ng-hide="hasAccounting">{{'label.none' | translate}}</span></td>
</tr>
<tr>
<td colspan="4">
<table width="100%" ng-show="hasAccounting">
<tr class="toppadding">
<td>{{'label.heading.savingsreference' | translate}}({{'label.heading.assets' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.savingsReferenceAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.savingscontrol' | translate}}({{'label.heading.liabilities' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.savingsControlAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.transfersinsuspenpense' | translate}}({{'label.heading.liabilities' |
translate}})
</td>
<td colspan="3">{{depositproduct.accountingMappings.transfersInSuspenseAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.interestonsavings' | translate}}({{'label.heading.expenses' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.interestOnSavingsAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.incomefromfee' | translate}}({{'label.heading.income' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.incomeFromFeeAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.incomefrompenalties' | translate}}({{'label.heading.income' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.incomeFromPenaltyAccount.name}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr>
<td>
<strong>{{'label.heading.advancedaccountingrules' | translate}}</strong>
</td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.paymenttype' | translate}}</td>
<td colspan="3">{{'label.heading.fundsource' | translate}}</td>
</tr>
<tr ng-repeat="paymentChannel in depositproduct.paymentChannelToFundSourceMappings">
<td>{{paymentChannel.paymentType.name}}</td>
<td colspan="3">{{paymentChannel.fundSourceAccount.name}}</td>
</tr>
<tr>
<td colspan="4"></td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.feestospecificincome' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.fees' | translate}}</td>
<td colspan="3">{{'label.heading.incomeaccount' | translate}}</td>
</tr>
<tr ng-repeat="feeToIncomeAccount in depositproduct.feeToIncomeAccountMappings">
<td>{{feeToIncomeAccount.charge.name}}</td>
<td colspan="3">{{feeToIncomeAccount.incomeAccount.name}}</td>
</tr>
<tr>
<td colspan="4"></td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.penaltiesspecifictoincomeacc' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.penalty' | translate}}</td>
<td colspan="3">{{'label.heading.incomeaccount' | translate}}</td>
</tr>
<tr ng-repeat="penaltyToIncomeAccount in depositproduct.penaltyToIncomeAccountMappings">
<td>{{penaltyToIncomeAccount.charge.name}}</td>
<td colspan="3">{{penaltyToIncomeAccount.incomeAccount.name}}</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
</td>
<td class="pull-right">
<a ng-click="scrollto('viewlptop')"><i class="icon-upload"></i>{{'label.button.top' | translate}}</a>
</td>
</tr>
</table>
</div>
</div>

View File

@ -0,0 +1,278 @@
<div class="row paddedleft" ng-controller="ViewRecurringDepositProductController">
<div id="viewlptop">
<div class="paddedbottom10">
<ul class="breadcrumb">
<li><a href="#/products">{{'label.anchor.products' | translate}}</a> <span class="divider">/</span></li>
<li><a href="#/recurringdepositproducts">{{'label.anchor.recurringdepositproducts' | translate}}</a> <span
class="divider">/</span></li>
<li class="active">{{depositproduct.name}}</li>
</ul>
</div>
</div>
<div class="pull-right">
<div class="btn-group">
<a href="#/editrecurringdepositproduct/{{depositproduct.id}}" class="btn btn-primary"><i
class="icon-edit icon-white"></i>{{'label.button.edit' | translate}}</a>
</div>
</div>
<div>
<legend>{{depositproduct.name}}</legend>
<table width="100%">
<tr>
<td>
<a name="test" class="old-syle-anchor">&nbsp;</a>
</td>
</tr>
<tr class="bottomborder">
<td colspan="4">
<strong>{{'label.heading.details' | translate}}</strong>
</td>
</tr>
<tr class="toppadding">
<td>{{'label.heading.description' | translate}}</td>
<td colspan="3">{{depositproduct.description}}</td>
</tr>
<tr>
<td>{{'label.heading.shortname' | translate}} :</td>
<td colspan="3">{{depositproduct.shortName}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.items' | translate}}</strong></td>
</tr>
<tr class="toppadding">
<td>{{'label.heading.currency' | translate}}</td>
<td colspan="3">{{depositproduct.currency.name}}</td>
</tr>
<tr>
<td>{{'label.heading.decimalplaces' | translate}}</td>
<td colspan="3">{{depositproduct.currency.decimalPlaces}}</td>
</tr>
<tr>
<td>{{'label.heading.currencyinmultiplesof' | translate}}</td>
<td colspan="3">{{depositproduct.currency.inMultiplesOf}}</td>
</tr>
<!--<tr>
<td>{{'label.heading.nominalannualinterestrate' | translate}}</td>
<td colspan="3">{{depositproduct.nominalAnnualInterestRate}}</td>
</tr>-->
<tr>
<td>{{'label.heading.interestcompoundingperiod' | translate}}</td>
<td colspan="3">{{depositproduct.interestCompoundingPeriodType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.interestpostingperiod' | translate}}</td>
<td colspan="3">{{depositproduct.interestPostingPeriodType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.interestcalculatedusing' | translate}}</td>
<td colspan="3">{{depositproduct.interestCalculationType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.daysinyears' | translate}}</td>
<td colspan="3">{{depositproduct.interestCalculationDaysInYearType.value}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.settings' | translate}}</strong></td>
</tr>
<!--<tr class="toppadding">
<td>{{'label.heading.minimumopeningbalance' | translate}}</td>
<td colspan="3">{{depositproduct.minRequiredOpeningBalance}}</td>
</tr>-->
<tr>
<td>{{'label.heading.lockinPeriodFrequency' | translate}}</td>
<td>{{depositproduct.lockinPeriodFrequency}} {{depositproduct.lockinPeriodFrequencyType.value}}</td>
&nbsp;
</tr>
<tr>
<td>{{'label.heading.minimumdepositterm' | translate}}</td>
<td>{{depositproduct.minDepositTerm}} &nbsp; {{depositproduct.minDepositTermType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.maximumdepositterm' | translate}}</td>
<td>{{depositproduct.maxDepositTerm}} &nbsp; {{depositproduct.maxDepositTermType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.inmultiplesofdeposit' | translate}}</td>
<td>{{depositproduct.inMultiplesOfDepositTerm}} - {{depositproduct.inMultiplesOfDepositTermType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.recurringdeposittype' | translate}}</td>
<td>{{depositproduct.recurringDepositType.value}}</td>
</tr>
<tr>
<td>{{'label.heading.recurringdepositfrequency' | translate}}</td>
<td>Every &nbsp; &nbsp; &nbsp; {{depositproduct.recurringDepositFrequency}} &nbsp; &nbsp;
{{depositproduct.recurringDepositFrequencyType.value}}
</td>
</tr>
<!--<tr>
<td>{{'label.heading.interestfreeperiodapplicable' | translate}}</td>
<td>from &nbsp; {{depositproduct.interestFreeFromPeriod}} &nbsp;&nbsp; - {{depositproduct.interestFreeToPeriod}}
&nbsp; &nbsp; {{depositproduct.interestFreePeriodFrequencyType.value}}
</td>
</tr>-->
<tr ng-show="depositproduct.preClosurePenalInterest">
<td>{{'label.heading.preclosurepenalapplicable' | translate}}</td>
<td>{{depositproduct.preClosurePenalInterest}} &nbsp; &nbsp; % &nbsp; &nbsp; On &nbsp;&nbsp;
{{depositproduct.preClosurePenalInterestOnType.value}}
</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.interestchart' | translate}}</strong></td>
</tr>
<tr>
<td colspan="4">
<div class="pull-right">
<a href="#/interestratecharts/{{depositproduct.id}}/{{depositproduct.name}}/recurringdepositproduct">{{'label.anchor.interestratechartviewedit'
| translate}}</a>
</div>
</td>
</tr>
<tr>
<td>{{'label.heading.interestratechart.valid.from' | translate}} : {{depositproduct.activeChart.fromDate |
DateFormat}}
</td>
<td>{{'label.heading.interestratechart.valid.to' | translate}} : {{depositproduct.activeChart.endDate |
DateFormat}}
</td>
&nbsp;
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.interestratedetails.period.from.to' | translate}}</td>
<!--<td>{{'label.heading.interestratedetails.amount.range' | translate}}</td>-->
<td>{{'label.heading.interestratedetails.interest' | translate}}</td>
<td>{{'label.heading.interestratedetails.description' | translate}}</td>
</tr>
<tr ng-repeat="chartSlabs in depositproduct.activeChart.chartSlabs | orderBy:'fromPeriod':reverse">
<td>{{chartSlabs.fromPeriod}} - {{chartSlabs.toPeriod}} {{chartSlabs.periodType.value}}</td>
<!--<td>{{chartSlabs.amountRangeFrom}} - {{chartSlabs.amountRangeTo}}</td>-->
<td>{{chartSlabs.annualInterestRate}}</td>
<td>{{chartSlabs.description}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td colspan="4"><strong>{{'label.heading.charges' | translate}}</strong></td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.name' | translate}}</td>
<td>{{'label.heading.type' | translate}}</td>
<td>{{'label.heading.amount' | translate}}</td>
<td>{{'label.heading.collectedon' | translate}}</td>
</tr>
<tr ng-repeat="charge in depositproduct.charges">
<td>{{charge.name}}</td>
<td>{{charge.chargeCalculationType.value}}</td>
<td>{{charge.amount}}</td>
<td>{{charge.chargeTimeType.value}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr class="bottomborder">
<td><strong>{{'label.heading.accounting' | translate}}</strong></td>
<td colspan="3"><span ng-hide="hasAccounting">{{'label.none' | translate}}</span></td>
</tr>
<tr>
<td colspan="4">
<table width="100%" ng-show="hasAccounting">
<tr class="toppadding">
<td>{{'label.heading.savingsreference' | translate}}({{'label.heading.assets' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.savingsReferenceAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.savingscontrol' | translate}}({{'label.heading.liabilities' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.savingsControlAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.transfersinsuspenpense' | translate}}({{'label.heading.liabilities' |
translate}})
</td>
<td colspan="3">{{depositproduct.accountingMappings.transfersInSuspenseAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.interestonsavings' | translate}}({{'label.heading.expenses' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.interestOnSavingsAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.incomefromfee' | translate}}({{'label.heading.income' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.incomeFromFeeAccount.name}}</td>
</tr>
<tr>
<td>{{'label.heading.incomefrompenalties' | translate}}({{'label.heading.income' | translate}})</td>
<td colspan="3">{{depositproduct.accountingMappings.incomeFromPenaltyAccount.name}}</td>
</tr>
<tr>
<td colspan="4"><br/></td>
</tr>
<tr>
<td>
<strong>{{'label.heading.advancedaccountingrules' | translate}}</strong>
</td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.configurefundsourcesforpaymentchannels' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.paymenttype' | translate}}</td>
<td colspan="3">{{'label.heading.fundsource' | translate}}</td>
</tr>
<tr ng-repeat="paymentChannel in depositproduct.paymentChannelToFundSourceMappings">
<td>{{paymentChannel.paymentType.name}}</td>
<td colspan="3">{{paymentChannel.fundSourceAccount.name}}</td>
</tr>
<tr>
<td colspan="4"></td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.feestospecificincome' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.fees' | translate}}</td>
<td colspan="3">{{'label.heading.incomeaccount' | translate}}</td>
</tr>
<tr ng-repeat="feeToIncomeAccount in depositproduct.feeToIncomeAccountMappings">
<td>{{feeToIncomeAccount.charge.name}}</td>
<td colspan="3">{{feeToIncomeAccount.incomeAccount.name}}</td>
</tr>
<tr>
<td colspan="4"></td>
</tr>
<tr class="toppadding bottomborder">
<td colspan="4">{{'label.heading.penaltiesspecifictoincomeacc' | translate}}</td>
</tr>
<tr class="bottomborder graybg">
<td>{{'label.heading.penalty' | translate}}</td>
<td colspan="3">{{'label.heading.incomeaccount' | translate}}</td>
</tr>
<tr ng-repeat="penaltyToIncomeAccount in depositproduct.penaltyToIncomeAccountMappings">
<td>{{penaltyToIncomeAccount.charge.name}}</td>
<td colspan="3">{{penaltyToIncomeAccount.incomeAccount.name}}</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
</td>
<td class="pull-right">
<a ng-click="scrollto('viewlptop')"><i class="icon-upload"></i>{{'label.button.top' | translate}}</a>
</td>
</tr>
</table>
</div>
</div>