Installment level delinquency setting at loan account level

This commit is contained in:
Jose Alberto Hernandez
2024-05-09 07:10:56 -06:00
committed by Jose Alberto Hernandez
parent 8fdf8fb10c
commit 7e607d63c0
33 changed files with 120 additions and 75 deletions
@@ -114,7 +114,7 @@ export class FixedDepositAccountViewComponent implements OnInit {
case 'Undo Approval':
case 'Undo Activation':
case 'Add Charge':
case 'Withdraw By Client':
case 'Withdrawn by Client':
case 'Premature Close':
this.router.navigate([`actions/${name}`], { relativeTo: this.route });
break;
@@ -101,7 +101,7 @@ export class FixedDepositsButtonsConfiguration {
name: 'Reject'
},
{
name: 'Withdraw By Client'
name: 'Withdrawn by Client'
},
{
name: 'Add Charge'
@@ -2,7 +2,7 @@
<mifosx-reject-fixed-deposits-account *ngIf="actions['Reject']"></mifosx-reject-fixed-deposits-account>
<mifosx-activate-fixed-deposits-account *ngIf="actions['Activate']"></mifosx-activate-fixed-deposits-account>
<mifosx-undo-approval-fixed-deposits-account *ngIf="actions['Undo Approval'] || actions['Undo Activation']"></mifosx-undo-approval-fixed-deposits-account>
<mifosx-withdraw-by-client-fixed-deposits-account *ngIf="actions['Withdraw By Client']"></mifosx-withdraw-by-client-fixed-deposits-account>
<mifosx-withdraw-by-client-fixed-deposits-account *ngIf="actions['Withdrawn by Client']"></mifosx-withdraw-by-client-fixed-deposits-account>
<mifosx-add-charge-fixed-deposits-account *ngIf="actions['Add Charge']"></mifosx-add-charge-fixed-deposits-account>
<mifosx-premature-close-fixed-deposits-account *ngIf="actions['Premature Close']"></mifosx-premature-close-fixed-deposits-account>
<mifosx-close-fixed-deposits-account *ngIf="actions['Close']"></mifosx-close-fixed-deposits-account>
@@ -22,7 +22,7 @@ export class FixedDepositsAccountActionsComponent {
'Undo Activation': boolean
'Add Charge': boolean
'Premature Close': boolean
'Withdraw By Client': boolean
'Withdrawn by Client': boolean
} = {
'Approve': false,
'Reject': false,
@@ -32,7 +32,7 @@ export class FixedDepositsAccountActionsComponent {
'Undo Activation': false,
'Add Charge': false,
'Premature Close': false,
'Withdraw By Client': false
'Withdrawn by Client': false
};
/**
@@ -9,7 +9,7 @@ import { FixedDepositsService } from 'app/deposits/fixed-deposits/fixed-deposits
import { SettingsService } from 'app/settings/settings.service';
/**
* Withdraw By Client Fixed Deposits Account Component
* Withdrawn by Client Fixed Deposits Account Component
*/
@Component({
selector: 'mifosx-withdraw-by-client-fixed-deposits-account',
@@ -2,7 +2,7 @@
<mifosx-undo-approval-recurring-deposits-account *ngIf="actions['Undo Approval'] || actions['Undo Activation']"></mifosx-undo-approval-recurring-deposits-account>
<mifosx-approve-recurring-deposits-account *ngIf="actions['Approve']"></mifosx-approve-recurring-deposits-account>
<mifosx-reject-recurring-deposits-account *ngIf="actions['Reject']"></mifosx-reject-recurring-deposits-account>
<mifosx-withdraw-by-client-recurring-deposits-account *ngIf="actions['Withdrawn by client']"></mifosx-withdraw-by-client-recurring-deposits-account>
<mifosx-withdraw-by-client-recurring-deposits-account *ngIf="actions['Withdrawn by Client']"></mifosx-withdraw-by-client-recurring-deposits-account>
<mifosx-add-charge-recurring-deposits-account *ngIf="actions['Add Charge']"></mifosx-add-charge-recurring-deposits-account>
<mifosx-premature-close-recurring-deposit-account *ngIf="actions['Premature Close']"></mifosx-premature-close-recurring-deposit-account>
<mifosx-close-recurring-deposits-account *ngIf="actions['Close']"></mifosx-close-recurring-deposits-account>
@@ -16,7 +16,7 @@ export class RecurringDepositsAccountActionsComponent {
'Undo Approval': boolean
'Approve': boolean
'Reject': boolean
'Withdrawn by client': boolean
'Withdrawn by Client': boolean
'Add Charge': boolean
'Premature Close': boolean
'Close': boolean
@@ -28,7 +28,7 @@ export class RecurringDepositsAccountActionsComponent {
'Undo Approval': false,
'Approve': false,
'Reject': false,
'Withdrawn by client': false,
'Withdrawn by Client': false,
'Add Charge': false,
'Premature Close': false,
'Close': false,
@@ -8,7 +8,7 @@ import { Dates } from 'app/core/utils/dates';
import { RecurringDepositsService } from 'app/deposits/recurring-deposits/recurring-deposits.service';
import { SettingsService } from 'app/settings/settings.service';
/**
* Withdraw By Client Recurring Deposits Account Component
* Withdrawn by Client Recurring Deposits Account Component
*/
@Component({
selector: 'mifosx-withdraw-by-client-recurring-deposits-account',
@@ -164,7 +164,7 @@ export class RecurringDepositsAccountViewComponent implements OnInit {
case 'Reject':
case 'Undo Approval':
case 'Add Charge':
case 'Withdrawn by client':
case 'Withdrawn by Client':
case 'Premature Close':
case 'Close':
case 'Deposit':
@@ -128,7 +128,7 @@ export class RecurringDepositsButtonsConfiguration {
taskPermissionName: 'REJECT_RECURRINGDEPOSITACCOUNT'
},
{
name: 'Withdrawn by client',
name: 'Withdrawn by Client',
icon: 'arrow-down',
taskPermissionName: 'WITHDRAW_RECURRINGDEPOSITACCOUNT'
},
@@ -247,6 +247,12 @@
<input type="number" matInput formControlName="fixedEmiAmount">
</mat-form-field>
<ng-container *ngIf="isDelinquencyEnabled()">
<mat-checkbox fxFlex="48%" formControlName="enableInstallmentLevelDelinquency">
<p>{{'labels.inputs.Enable installment level Delinquency' | translate}}</p>
</mat-checkbox>
</ng-container>
<ng-container *ngIf="loansAccountTermsData?.isTopup">
<mat-checkbox fxFlex="20%" formControlName="isTopup">
@@ -5,6 +5,7 @@ import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute } from '@angular/router';
import { LoansAccountAddCollateralDialogComponent } from 'app/loans/custom-dialog/loans-account-add-collateral-dialog/loans-account-add-collateral-dialog.component';
import { LoanProducts } from 'app/products/loan-products/loan-products';
import { LoanProduct } from 'app/products/loan-products/models/loan-product.model';
import { SettingsService } from 'app/settings/settings.service';
import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component';
@@ -86,6 +87,7 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges {
loanId: any = null;
loanScheduleType: OptionData | null = null;
loanProduct: LoanProduct | null = null;
/**
* Create Loans Account Terms Form
@@ -110,6 +112,10 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges {
this.loansAccountTermsData = this.loansAccountTemplate;
}
if (this.loansAccountTermsData.product) {
this.loanProduct = this.loansAccountTermsData.product;
}
this.loansAccountTermsForm.patchValue({
'principalAmount': this.loansAccountTermsData.principal,
'loanTermFrequency': this.loansAccountTermsData.termFrequency,
@@ -149,7 +155,9 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges {
this.totalMultiDisbursed += item.principal;
});
}
if (this.isDelinquencyEnabled()) {
this.loansAccountTermsForm.addControl('enableInstallmentLevelDelinquency', new UntypedFormControl(this.loanProduct.enableInstallmentLevelDelinquency));
}
this.collateralDataSource = this.loansAccountTermsData.collateral || [];
const allowAttributeOverrides = this.loansAccountTermsData.product.allowAttributeOverrides;
@@ -502,6 +510,13 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges {
}
}
isDelinquencyEnabled(): boolean {
if (!this.loanProduct || !this.loanProduct.delinquencyBucket) {
return false;
}
return true;
}
/**
* Returns loans account terms form value.
*/
@@ -213,7 +213,7 @@ export class LoansAccountButtonConfiguration {
case 'Submitted and pending approval':
this.optionArray = [
{
name: 'Withdrawn by client',
name: 'Withdrawn by Client',
taskPermissionName: 'WITHDRAW_LOAN',
},
{
@@ -340,7 +340,7 @@
<div fxFlexFill>
<span fxFlex="47%">{{ 'labels.inputs.Repayment Strategy' | translate}}:</span>
<span fxFlex="53%" class="repayment-strategy">{{ loanProduct.transactionProcessingStrategyName }}</span>
<span fxFlex="53%" class="repayment-strategy">{{ loanProduct.transactionProcessingStrategyName | translateCatalog }}</span>
</div>
<div fxFlexFill *ngIf="isAdvancedPaymentAllocation">
@@ -404,7 +404,7 @@
<span fxFlex="53%">{{ 'labels.inputs.Unassigned' | translate }}</span>
</div>
<div fxFlexFill>
<div fxFlexFill *ngIf="loanProduct.delinquencyBucket">
<span fxFlex="47%">{{ 'labels.inputs.Enable installment level Delinquency' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.enableInstallmentLevelDelinquency | yesNo }}</span>
</div>
@@ -167,7 +167,7 @@
</button>
</mat-form-field>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="enableInstallmentLevelDelinquency" class="margin-v">
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="enableInstallmentLevelDelinquency" class="margin-v" *ngIf="loanProductSettingsForm.value.delinquencyBucketId">
{{'labels.inputs.Enable installment level Delinquency' | translate}}
</mat-checkbox>
@@ -52,7 +52,7 @@
<mat-label>{{'labels.inputs.Installment day calculation from' | translate}} <i class="fas fa-question" matTooltip="Repayment schedule will start the installment dates from the submitted date or the disbursement date"></i></mat-label>
<mat-select formControlName="repaymentStartDateType" required>
<mat-option *ngFor="let repaymentStartDateType of repaymentStartDateTypeOptions" [value]="repaymentStartDateType.id">
{{ repaymentStartDateType.value | translate}}
{{ repaymentStartDateType.value | translateCatalog}}
</mat-option>
</mat-select>
</mat-form-field>
@@ -5,7 +5,7 @@
<mifosx-post-interest-as-on-savings-account *ngIf="actions['Post Interest As On']"></mifosx-post-interest-as-on-savings-account>
<mifosx-savings-account-assign-staff *ngIf="actions['Assign Staff']"></mifosx-savings-account-assign-staff>
<mifosx-savings-account-unassign-staff *ngIf="actions['Unassign Staff']"></mifosx-savings-account-unassign-staff>
<mifosx-withdraw-by-client-savings-account *ngIf="actions['Withdraw By Client']"></mifosx-withdraw-by-client-savings-account>
<mifosx-withdraw-by-client-savings-account *ngIf="actions['Withdrawn by Client']"></mifosx-withdraw-by-client-savings-account>
<mifosx-add-charge-savings-account *ngIf="actions['Add Charge']"></mifosx-add-charge-savings-account>
<mifosx-savings-transactions [currencyCode]="currencyCode" *ngIf="actions['Withdrawal'] || actions['Deposit']"></mifosx-savings-transactions>
<mifosx-close-savings-account *ngIf="actions['Close']"></mifosx-close-savings-account>
@@ -25,7 +25,7 @@ export class SavingAccountActionsComponent {
'Assign Staff': boolean
'Add Charge': boolean
'Unassign Staff': boolean
'Withdraw By Client': boolean
'Withdrawn by Client': boolean
'Apply Annual Fees': boolean
'Hold Amount': boolean
'Block Account': boolean
@@ -46,7 +46,7 @@ export class SavingAccountActionsComponent {
'Assign Staff': false,
'Add Charge': false,
'Unassign Staff': false,
'Withdraw By Client': false,
'Withdrawn by Client': false,
'Apply Annual Fees': false,
'Hold Amount': false,
'Block Account': false,
@@ -9,7 +9,7 @@ import { SavingsService } from 'app/savings/savings.service';
import { SettingsService } from 'app/settings/settings.service';
/**
* Withdraw By Client Savings Account Component
* Withdrawn by Client Savings Account Component
*/
@Component({
selector: 'mifosx-withdraw-by-client-savings-account',
@@ -149,7 +149,7 @@ export class SavingsAccountViewComponent implements OnInit {
case 'Block Deposit':
case 'Block Withdrawal':
case 'Unassign Staff':
case 'Withdraw By Client':
case 'Withdrawn by Client':
case 'Apply Annual Fees':
this.router.navigate([`actions/${name}`], { relativeTo: this.route });
break;
@@ -169,7 +169,7 @@ export class SavingsButtonsConfiguration {
taskPermissionName: 'REJECT_SAVINGSACCOUNT'
},
{
name: 'Withdraw By Client',
name: 'Withdrawn by Client',
taskPermissionName: 'WITHDRAW_SAVINGSACCOUNT'
},
{