diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 2e005efbe..6e3010c5e 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -63,7 +63,7 @@ export class HomeComponent implements OnInit, AfterViewInit { private router: Router, private dialog: MatDialog, private configurationWizardService: ConfigurationWizardService, - private popoverService: PopoverService,) { } + private popoverService: PopoverService) { } /** * Sets the username of the authenticated user. diff --git a/src/app/home/home.module.ts b/src/app/home/home.module.ts index fc565db21..2546fcd05 100644 --- a/src/app/home/home.module.ts +++ b/src/app/home/home.module.ts @@ -14,7 +14,7 @@ import { AmountCollectedPieComponent } from './dashboard/amount-collected-pie/am import { AmountDisbursedPieComponent } from './dashboard/amount-disbursed-pie/amount-disbursed-pie.component'; import { ClientTrendsBarComponent } from './dashboard/client-trends-bar/client-trends-bar.component'; import { TranslateModule } from '@ngx-translate/core'; -import { WarningDialogComponent } from './warning-dialog/warning-dialog.component' +import { WarningDialogComponent } from './warning-dialog/warning-dialog.component'; /** * Home Component diff --git a/src/app/home/warning-dialog/warning-dialog.component.ts b/src/app/home/warning-dialog/warning-dialog.component.ts index 49bea60ed..110855bb9 100644 --- a/src/app/home/warning-dialog/warning-dialog.component.ts +++ b/src/app/home/warning-dialog/warning-dialog.component.ts @@ -3,7 +3,7 @@ import { MatDialogRef } from '@angular/material/dialog'; import { environment } from '../../../environments/environment'; @Component({ - selector: 'mifos-warning-dialog', + selector: 'mifosx-warning-dialog', templateUrl: './warning-dialog.component.html', styleUrls: ['./warning-dialog.component.scss'] }) @@ -22,4 +22,4 @@ export class WarningDialogComponent implements OnInit { ngOnInit() { } -} \ No newline at end of file +} diff --git a/src/app/products/loan-products/create-loan-product/create-loan-product.component.ts b/src/app/products/loan-products/create-loan-product/create-loan-product.component.ts index 5d771b63a..077178124 100644 --- a/src/app/products/loan-products/create-loan-product/create-loan-product.component.ts +++ b/src/app/products/loan-products/create-loan-product/create-loan-product.component.ts @@ -125,6 +125,11 @@ export class CreateLoanProductComponent implements OnInit { submit() { const loanProduct = this.loanProducts.buildPayload(this.loanProduct, this.itemsByDefault); + if (loanProduct['useDueForRepaymentsConfigurations'] === true) { + loanProduct['dueDaysForRepaymentEvent'] = null; + loanProduct['overDueDaysForRepaymentEvent'] = null; + } + delete loanProduct['useDueForRepaymentsConfigurations']; this.productsService.createLoanProduct(loanProduct) .subscribe((response: any) => { diff --git a/src/app/products/loan-products/edit-loan-product/edit-loan-product.component.ts b/src/app/products/loan-products/edit-loan-product/edit-loan-product.component.ts index b0b776403..efe889096 100644 --- a/src/app/products/loan-products/edit-loan-product/edit-loan-product.component.ts +++ b/src/app/products/loan-products/edit-loan-product/edit-loan-product.component.ts @@ -142,6 +142,11 @@ export class EditLoanProductComponent implements OnInit { submit() { const loanProduct = this.loanProducts.buildPayload(this.loanProduct, this.itemsByDefault); + if (loanProduct['useDueForRepaymentsConfigurations'] === true) { + loanProduct['dueDaysForRepaymentEvent'] = null; + loanProduct['overDueDaysForRepaymentEvent'] = null; + } + delete loanProduct['useDueForRepaymentsConfigurations']; this.productsService.updateLoanProduct(this.loanProductAndTemplate.id, loanProduct) .subscribe((response: any) => { diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.ts index 386c55108..a74bbdfa2 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.ts @@ -4,18 +4,6 @@ import { LoanProducts } from '../../loan-products'; import { rangeValidator } from 'app/shared/validators/percentage.validator'; import { GlobalConfiguration } from 'app/system/configurations/global-configurations-tab/configuration.model'; -interface DaysData { - days: number; - label: string; - style: string; -} - -interface DaysForRepayment { - days: DaysData[]; - code: string; - config: GlobalConfiguration; - style: string; -} @Component({ selector: 'mifosx-loan-product-settings-step', @@ -51,7 +39,6 @@ export class LoanProductSettingsStepComponent implements OnInit { /** Values to Days for Repayments */ defaultConfigValues: GlobalConfiguration[] = []; - daysForRepayments: DaysForRepayment[] = []; constructor(private formBuilder: UntypedFormBuilder) { this.createLoanProductSettingsForm(); @@ -60,26 +47,6 @@ export class LoanProductSettingsStepComponent implements OnInit { ngOnInit() { this.defaultConfigValues = this.loanProductsTemplate['itemsByDefault']; - this.defaultConfigValues.forEach((config: GlobalConfiguration) => { - const days: DaysData[] = []; - [...Array(10).keys()].forEach((day: number) => { - let label: string = day.toString(); - let style = ''; - if (day === config.value) { - label = day + ' *'; - style = 'by-default'; - } - days.push({days: day, label: label, style: style}); - }); - - this.daysForRepayments.push({ - days: days, - code: config.name, - config: config, - style: '' - }); - }); - this.isLinkedToFloatingInterestRates.valueChanges .subscribe((isLinkedToFloatingInterestRates: any) => { if (isLinkedToFloatingInterestRates) { @@ -133,10 +100,24 @@ export class LoanProductSettingsStepComponent implements OnInit { 'maxTrancheCount': this.loanProductsTemplate.maxTrancheCount, 'outstandingLoanBalance': this.loanProductsTemplate.outstandingLoanBalance, 'enableDownPayment': this.loanProductsTemplate.enableDownPayment, - 'enableInstallmentLevelDelinquency': this.loanProductsTemplate.enableInstallmentLevelDelinquency, - 'useDueForRepaymentsConfigurations': this.loanProductsTemplate.useDueForRepaymentsConfigurations + 'enableInstallmentLevelDelinquency': this.loanProductsTemplate.enableInstallmentLevelDelinquency }); + if (this.loanProductsTemplate.dueDaysForRepaymentEvent != null && + this.loanProductsTemplate.overDueDaysForRepaymentEvent != null) { + this.loanProductSettingsForm.patchValue({ + 'useDueForRepaymentsConfigurations': false, + 'dueDaysForRepaymentEvent': this.loanProductsTemplate.dueDaysForRepaymentEvent, + 'overDueDaysForRepaymentEvent': this.loanProductsTemplate.overDueDaysForRepaymentEvent + }); + } else { + this.loanProductSettingsForm.patchValue({ + 'useDueForRepaymentsConfigurations': true, + 'dueDaysForRepaymentEvent': null, + 'overDueDaysForRepaymentEvent': null + }); + } + if (this.loanProductsTemplate.delinquencyBucket) { this.loanProductSettingsForm.patchValue({ 'delinquencyBucketId': this.loanProductsTemplate.delinquencyBucket.id @@ -240,7 +221,9 @@ export class LoanProductSettingsStepComponent implements OnInit { 'delinquencyBucketId': ['', Validators.required], 'enableDownPayment': [false], 'enableInstallmentLevelDelinquency': [false], - 'useDueForRepaymentsConfigurations': [false] + 'useDueForRepaymentsConfigurations': [false], + 'dueDaysForRepaymentEvent': [''], + 'overDueDaysForRepaymentEvent': [''], }); } @@ -433,49 +416,27 @@ export class LoanProductSettingsStepComponent implements OnInit { this.loanProductSettingsForm.get('useDueForRepaymentsConfigurations').valueChanges .subscribe((useDueForRepaymentsConfigurations: boolean) => { if (useDueForRepaymentsConfigurations) { - this.loanProductSettingsForm.removeControl('dueDaysForRepaymentEvent'); - this.loanProductSettingsForm.removeControl('overDueDaysForRepaymentEvent'); + this.loanProductSettingsForm.patchValue({ + 'dueDaysForRepaymentEvent': null, + 'overDueDaysForRepaymentEvent': null + }); } else { - this.loanProductSettingsForm.addControl('dueDaysForRepaymentEvent', - new UntypedFormControl(this.loanProductsTemplate.dueDaysForRepaymentEvent, [Validators.required, rangeValidator(1, 100) ])); - this.loanProductSettingsForm.addControl('overDueDaysForRepaymentEvent', - new UntypedFormControl(this.loanProductsTemplate.overDueDaysForRepaymentEvent, [Validators.required, rangeValidator(1, 100) ])); - } - }); - } - - setStyleDaysForRepayment(attribute: string, currentValue: number): void { - const currentValues: DaysForRepayment[] = this.daysForRepayments; - this.daysForRepayments = []; - currentValues.forEach((dfr: DaysForRepayment) => { - if (dfr.code === attribute) { - dfr.days.forEach((days: DaysData) => { - if (days.days === currentValue) { - dfr.style = days.style; - } + this.loanProductSettingsForm.patchValue({ + 'dueDaysForRepaymentEvent': this.getGlobalConfigValue(LoanProducts.DAYS_BEFORE_REPAYMENT_IS_DUE), + 'overDueDaysForRepaymentEvent': this.getGlobalConfigValue(LoanProducts.DAYS_AFTER_REPAYMENT_IS_OVERDUE) }); } - this.daysForRepayments.push(dfr); }); } - styleDaysForRepayment(attribute: string): string { - this.daysForRepayments.forEach((item: DaysForRepayment) => { - if (item.code === attribute) { - return item.style; + private getGlobalConfigValue(configName: string): number { + let value: number | null = null; + this.defaultConfigValues.forEach((config: GlobalConfiguration) => { + if (config.name === configName) { + value = config.value; } }); - return ''; - } - - getDaysForRepayments(attribute: string): DaysData[] { - let days: DaysData[] = []; - this.daysForRepayments.forEach((item: DaysForRepayment) => { - if (item.code === attribute) { - days = item.days; - } - }); - return days; + return value; } get loanProductSettings() { @@ -484,8 +445,8 @@ export class LoanProductSettingsStepComponent implements OnInit { delete productSettings['disableScheduleExtensionForDownPayment']; } if (this.loanProductSettingsForm.value.useDueForRepaymentsConfigurations) { - delete productSettings['dueDaysForRepaymentEvent']; - delete productSettings['overDueDaysForRepaymentEvent']; + productSettings['dueDaysForRepaymentEvent'] = null; + productSettings['overDueDaysForRepaymentEvent'] = null; } return productSettings; } diff --git a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html index ac3381523..e9a773aa7 100644 --- a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html +++ b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html @@ -563,15 +563,15 @@
Use the Global Configurations values to the Repayment Event (notifications): - {{ loanProduct.useDueForRepaymentsConfigurations | yesNo }} + {{ useDueForRepaymentsConfigurations | yesNo }}
-
+
Due days for repayment event: {{ loanProduct.dueDaysForRepaymentEvent | number }}
-
+
OverDue days for repayment event: {{ loanProduct.overDueDaysForRepaymentEvent | number }}
diff --git a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts index a8f624afd..26aac9320 100644 --- a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts +++ b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts @@ -18,9 +18,12 @@ export class GeneralTabComponent implements OnInit { advancePaymentAllocationData: AdvancePaymentAllocationData; + useDueForRepaymentsConfigurations = false; + constructor(private route: ActivatedRoute) { this.route.data.subscribe((data: { loanProduct: any }) => { this.loanProduct = data.loanProduct; + this.useDueForRepaymentsConfigurations = (!this.loanProduct.dueDaysForRepaymentEvent && !this.loanProduct.overDueDaysForRepaymentEvent); this.advancePaymentAllocationData = { transactionTypes: this.loanProduct.advancedPaymentAllocationTransactionTypes, allocationTypes: this.loanProduct.advancedPaymentAllocationTypes,