diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 7ce3e1808..20ca67320 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -76,6 +76,8 @@ import { ChargesTemplateResolver } from './charges/charges-template.resolver'; import { TaxGroupResolver } from './manage-tax-groups/tax-group.resolver'; import { DividendsResolver } from './share-products/dividends-share-product/dividends.resolver'; import { RecurringDepositProductsTemplateResolver } from './recurring-deposit-products/recurring-deposit-products-template.resolver'; +import { EditRecurringDepositProductComponent } from './recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component'; +import { RecurringDepositProductAndTemplateResolver } from './recurring-deposit-products/edit-recurring-deposit-product/recurring-deposit-product-and-template.resolver'; /** Products Routes */ const routes: Routes = [ @@ -304,6 +306,14 @@ const routes: Routes = [ path: 'recurring-deposit-products', data: { title: extract('Recurring Deposit Products'), breadcrumb: 'Recurring Deposit Products' }, children: [ + { + path: 'create', + component: CreateRecurringDepositProductComponent, + data: { title: extract('Create Recurring Deposit Product'), breadcrumb: 'Create' }, + resolve: { + recurringDepositProductsTemplate: RecurringDepositProductsTemplateResolver + } + }, { path: '', component: RecurringDepositProductsComponent, @@ -322,16 +332,16 @@ const routes: Routes = [ recurringDepositProduct: RecurringDepositProductResolver, recurringDepositProductsTemplate: RecurringDepositProductsTemplateResolver } + }, + { + path: 'edit', + data: { title: extract('Edit Recurring Deposit Product'), breadcrumb: 'edit', routeParamBreadcrumb: false }, + component: EditRecurringDepositProductComponent, + resolve: { + recurringDepositProductAndTemplate: RecurringDepositProductAndTemplateResolver + } } ] - }, - { - path: 'create', - component: CreateRecurringDepositProductComponent, - data: { title: extract('Create Recurring Deposit Product'), breadcrumb: 'Create' }, - resolve: { - recurringDepositProductsTemplate: RecurringDepositProductsTemplateResolver - } } ] }, @@ -496,7 +506,8 @@ const routes: Routes = [ EditTaxComponentComponent, TaxGroupResolver, DividendsResolver, - RecurringDepositProductsTemplateResolver + RecurringDepositProductsTemplateResolver, + RecurringDepositProductAndTemplateResolver ] }) export class ProductsRoutingModule { } diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index d52a1b682..efe765d9c 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -86,6 +86,7 @@ import { RecurringDepositProductInterestRateChartStepComponent } from './recurri import { RecurringDepositProductPreviewStepComponent } from './recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-preview-step/recurring-deposit-product-preview-step.component'; import { RecurringDepositProductSettingsStepComponent } from './recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component'; import { RecurringDepositProductTermsStepComponent } from './recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component'; +import { EditRecurringDepositProductComponent } from './recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component'; /** * Products Module @@ -175,7 +176,8 @@ import { RecurringDepositProductTermsStepComponent } from './recurring-deposit-p RecurringDepositProductInterestRateChartStepComponent, RecurringDepositProductPreviewStepComponent, RecurringDepositProductSettingsStepComponent, - RecurringDepositProductTermsStepComponent + RecurringDepositProductTermsStepComponent, + EditRecurringDepositProductComponent ], entryComponents: [ DepositProductIncentiveFormDialogComponent, diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index 0e783c773..9a1d6637b 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -277,8 +277,17 @@ export class ProductsService { return this.http.get(`/interestratecharts`, {params: httpParams}); } - createRecurringDepositProduct(recurringDepositProduct: string): Observable { + createRecurringDepositProduct(recurringDepositProduct: any): Observable { return this.http.post('/recurringdepositproducts', recurringDepositProduct); } + getRecurringDepositProductAndTemplate(recurringDepositProductId: any) { + const httpParams = new HttpParams().set('template', 'true'); + return this.http.get(`/recurringdepositproducts/${recurringDepositProductId}`, { params: httpParams }); + } + + updateRecurringDepositProduct(recurringDepositProductId: any, recurringDepositProduct: any): Observable { + return this.http.put(`/recurringdepositproducts/${recurringDepositProductId}`, recurringDepositProduct); + } + } diff --git a/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.html b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.html new file mode 100644 index 000000000..2f4824830 --- /dev/null +++ b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.html @@ -0,0 +1,112 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + DETAILS + + + + + + + + + CURRENCY + + + + + + + + + TERMS + + + + + + + + + SETTINGS + + + + + + + + + INTEREST RATE CHART + + + + + + + + + CHARGES + + + + + + + + + ACCOUNTING + + + + + + + + + PREVIEW + + + + + + + + +
diff --git a/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.scss b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.spec.ts b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.spec.ts new file mode 100644 index 000000000..013928547 --- /dev/null +++ b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditRecurringDepositProductComponent } from './edit-recurring-deposit-product.component'; + +describe('EditRecurringDepositProductComponent', () => { + let component: EditRecurringDepositProductComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditRecurringDepositProductComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditRecurringDepositProductComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.ts b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.ts new file mode 100644 index 000000000..5c2a472ef --- /dev/null +++ b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/edit-recurring-deposit-product.component.ts @@ -0,0 +1,115 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { RecurringDepositProductDetailsStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component'; +import { RecurringDepositProductCurrencyStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-currency-step/recurring-deposit-product-currency-step.component'; +import { RecurringDepositProductTermsStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component'; +import { RecurringDepositProductSettingsStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component'; +import { RecurringDepositProductInterestRateChartStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-interest-rate-chart-step/recurring-deposit-product-interest-rate-chart-step.component'; +import { RecurringDepositProductChargesStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-charges-step/recurring-deposit-product-charges-step.component'; +import { RecurringDepositProductAccountingStepComponent } from '../recurring-deposit-product-stepper/recurring-deposit-product-accounting-step/recurring-deposit-product-accounting-step.component'; + +import { ProductsService } from 'app/products/products.service'; + +@Component({ + selector: 'mifosx-edit-recurring-deposit-product', + templateUrl: './edit-recurring-deposit-product.component.html', + styleUrls: ['./edit-recurring-deposit-product.component.scss'] +}) +export class EditRecurringDepositProductComponent implements OnInit { + + @ViewChild(RecurringDepositProductDetailsStepComponent) recurringDepositProductDetailsStep: RecurringDepositProductDetailsStepComponent; + @ViewChild(RecurringDepositProductCurrencyStepComponent) recurringDepositProductCurrencyStep: RecurringDepositProductCurrencyStepComponent; + @ViewChild(RecurringDepositProductTermsStepComponent) recurringDepositProductTermsStep: RecurringDepositProductTermsStepComponent; + @ViewChild(RecurringDepositProductSettingsStepComponent) recurringDepositProductSettingsStep: RecurringDepositProductSettingsStepComponent; + @ViewChild(RecurringDepositProductInterestRateChartStepComponent) recurringDepositProductInterestRateChartStep: RecurringDepositProductInterestRateChartStepComponent; + @ViewChild(RecurringDepositProductChargesStepComponent) recurringDepositProductChargesStep: RecurringDepositProductChargesStepComponent; + @ViewChild(RecurringDepositProductAccountingStepComponent) recurringDepositProductAccountingStep: RecurringDepositProductAccountingStepComponent; + + recurringDepositProductsTemplate: any; + accountingRuleData = ['None', 'Cash']; + + constructor(private route: ActivatedRoute, + private productsService: ProductsService, + private router: Router) { + this.route.data.subscribe((data: { recurringDepositProductAndTemplate: any }) => { + this.recurringDepositProductsTemplate = data.recurringDepositProductAndTemplate; + }); + } + + ngOnInit() { + } + + get recurringDepositProductDetailsForm() { + return this.recurringDepositProductDetailsStep.recurringDepositProductDetailsForm; + } + + get recurringDepositProductCurrencyForm() { + return this.recurringDepositProductCurrencyStep.recurringDepositProductCurrencyForm; + } + + get recurringDepositProductTermsForm() { + return this.recurringDepositProductTermsStep.recurringDepositProductTermsForm; + } + + get recurringDepositProductSettingsForm() { + return this.recurringDepositProductSettingsStep.recurringDepositProductSettingsForm; + } + + get recurringDepositProductInterestRateChartForm() { + return this.recurringDepositProductInterestRateChartStep.recurringDepositProductInterestRateChartForm; + } + + get recurringDepositProductAccountingForm() { + return this.recurringDepositProductAccountingStep.recurringDepositProductAccountingForm; + } + + get recurringDepositProductFormValidAndNotPrinstine() { + return ( + this.recurringDepositProductDetailsForm.valid && + this.recurringDepositProductCurrencyForm.valid && + this.recurringDepositProductTermsForm.valid && + this.recurringDepositProductSettingsForm.valid && + this.recurringDepositProductInterestRateChartForm.valid && + this.recurringDepositProductAccountingForm.valid && + ( + this.recurringDepositProductDetailsForm.pristine || + this.recurringDepositProductCurrencyForm.pristine || + this.recurringDepositProductTermsForm.pristine || + this.recurringDepositProductSettingsForm.pristine || + this.recurringDepositProductInterestRateChartForm.pristine || + this.recurringDepositProductAccountingForm.pristine + ) + ); + } + + get recurringDepositProduct() { + return { + ...this.recurringDepositProductDetailsStep.recurringDepositProductDetails, + ...this.recurringDepositProductCurrencyStep.recurringDepositProductCurrency, + ...this.recurringDepositProductTermsStep.recurringDepositProductTerms, + ...this.recurringDepositProductSettingsStep.recurringDepositProductSettings, + ...this.recurringDepositProductInterestRateChartStep.recurringDepositProductInterestRateChart, + ...this.recurringDepositProductChargesStep.recurringDepositProductCharges, + ...this.recurringDepositProductAccountingStep.recurringDepositProductAccounting + }; + } + + submit() { + // TODO: Update once language and date settings are setup + const recurringDepositProduct = { + ...this.recurringDepositProduct, + charges: this.recurringDepositProduct.charges.map((charge: any) => ({ id: charge.id })), + locale: 'en' // locale required for depositAmount + }; + if (!recurringDepositProduct.description) { + recurringDepositProduct.description = ''; + } + delete recurringDepositProduct.advancedAccountingRules; + this.productsService.updateRecurringDepositProduct(this.recurringDepositProductsTemplate.id, recurringDepositProduct) + .subscribe((response: any) => { + this.router.navigate(['../'], { relativeTo: this.route }); + }); + } + +} diff --git a/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/recurring-deposit-product-and-template.resolver.ts b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/recurring-deposit-product-and-template.resolver.ts new file mode 100644 index 000000000..5c71a52f6 --- /dev/null +++ b/src/app/products/recurring-deposit-products/edit-recurring-deposit-product/recurring-deposit-product-and-template.resolver.ts @@ -0,0 +1,32 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { ProductsService } from '../../products.service'; + +/** + * Recurring Deposits Account Template resolver. + */ +@Injectable() +export class RecurringDepositProductAndTemplateResolver implements Resolve { + + /** + * @param {ProductsService} productsService Products service. + */ + constructor(private productsService: ProductsService) { } + + /** + * Returns the Recurring Deposits Product and Template. + * @param {ActivatedRouteSnapshot} route Route Snapshot + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const recurringDepositProductId = route.paramMap.get('id'); + return this.productsService.getRecurringDepositProductAndTemplate(recurringDepositProductId); + } + +} diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-accounting-step/recurring-deposit-product-accounting-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-accounting-step/recurring-deposit-product-accounting-step.component.ts index e012b5e03..0e098f5a7 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-accounting-step/recurring-deposit-product-accounting-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-accounting-step/recurring-deposit-product-accounting-step.component.ts @@ -46,6 +46,60 @@ export class RecurringDepositProductAccountingStepComponent implements OnInit { this.incomeAccountData = this.recurringDepositProductsTemplate.accountingMappingOptions.incomeAccountOptions || []; this.expenseAccountData = this.recurringDepositProductsTemplate.accountingMappingOptions.expenseAccountOptions || []; this.liabilityAccountData = this.recurringDepositProductsTemplate.accountingMappingOptions.liabilityAccountOptions || []; + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.assignAccountingStepData(); + } + } + + assignAccountingStepData() { + if (this.recurringDepositProductsTemplate.accountingRule.id === 2) { + this.recurringDepositProductAccountingForm.patchValue({ + 'accountingRule': this.recurringDepositProductsTemplate.accountingRule.id + }); + this.recurringDepositProductAccountingForm.patchValue({ + 'savingsReferenceAccountId': this.recurringDepositProductsTemplate.accountingMappings.savingsReferenceAccount.id, + 'savingsControlAccountId': this.recurringDepositProductsTemplate.accountingMappings.savingsControlAccount.id, + 'transfersInSuspenseAccountId': this.recurringDepositProductsTemplate.accountingMappings.transfersInSuspenseAccount.id, + 'incomeFromFeeAccountId': this.recurringDepositProductsTemplate.accountingMappings.incomeFromFeeAccount.id, + 'incomeFromPenaltyAccountId': this.recurringDepositProductsTemplate.accountingMappings.incomeFromPenaltyAccount.id, + 'interestOnSavingsAccountId': this.recurringDepositProductsTemplate.accountingMappings.interestOnSavingsAccount.id + }); + if (this.recurringDepositProductsTemplate.paymentChannelToFundSourceMappings || this.recurringDepositProductsTemplate.feeToIncomeAccountMappings || this.recurringDepositProductsTemplate.penaltyToIncomeAccountMappings) { + this.recurringDepositProductAccountingForm.patchValue({ + 'advancedAccountingRules': true + }); + } + if (this.recurringDepositProductsTemplate.paymentChannelToFundSourceMappings) { + this.recurringDepositProductsTemplate.paymentChannelToFundSourceMappings.forEach((paymentChannelToFundSourceMapping: any) => { + const paymentChannelToFundSourceMappingData = this.formBuilder.group({ + paymentTypeId: [paymentChannelToFundSourceMapping.paymentType.id, Validators.required], + fundSourceAccountId: [paymentChannelToFundSourceMapping.fundSourceAccount.id, Validators.required] + }); + const formArray = this.recurringDepositProductAccountingForm.controls['paymentChannelToFundSourceMappings'] as FormArray; + formArray.push(paymentChannelToFundSourceMappingData); + }); + } + if (this.recurringDepositProductsTemplate.feeToIncomeAccountMappings) { + this.recurringDepositProductsTemplate.feeToIncomeAccountMappings.forEach((feeToIncomeAccountMapping: any) => { + const feeToIncomeAccountMappingData = this.formBuilder.group({ + chargeId: [feeToIncomeAccountMapping.charge.id, Validators.required], + incomeAccountId: [feeToIncomeAccountMapping.incomeAccount.id, Validators.required] + }); + const formArray = this.recurringDepositProductAccountingForm.controls['feeToIncomeAccountMappings'] as FormArray; + formArray.push(feeToIncomeAccountMappingData); + }); + } + if (this.recurringDepositProductsTemplate.penaltyToIncomeAccountMappings) { + this.recurringDepositProductsTemplate.penaltyToIncomeAccountMappings.forEach((penaltyToIncomeAccountMapping: any) => { + const penaltyToIncomeAccountMappingData = this.formBuilder.group({ + chargeId: [penaltyToIncomeAccountMapping.charge.id, Validators.required], + incomeAccountId: [penaltyToIncomeAccountMapping.incomeAccount.id, Validators.required] + }); + const formArray = this.recurringDepositProductAccountingForm.controls['penaltyToIncomeAccountMappings'] as FormArray; + formArray.push(penaltyToIncomeAccountMappingData); + }); + } + } } createrecurringDepositProductAccountingForm() { diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-charges-step/recurring-deposit-product-charges-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-charges-step/recurring-deposit-product-charges-step.component.ts index a5cbb2f9c..b71c5630d 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-charges-step/recurring-deposit-product-charges-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-charges-step/recurring-deposit-product-charges-step.component.ts @@ -24,9 +24,11 @@ export class RecurringDepositProductChargesStepComponent implements OnInit { ngOnInit() { this.chargeData = this.recurringDepositProductsTemplate.chargeOptions; - - this.chargesDataSource = []; - + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.chargesDataSource = this.recurringDepositProductsTemplate.charges; + } else { + this.chargesDataSource = []; + } this.currencyCode.valueChanges.subscribe(() => this.chargesDataSource = []); } diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-currency-step/recurring-deposit-product-currency-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-currency-step/recurring-deposit-product-currency-step.component.ts index 5b5467729..b16852872 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-currency-step/recurring-deposit-product-currency-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-currency-step/recurring-deposit-product-currency-step.component.ts @@ -20,11 +20,19 @@ export class RecurringDepositProductCurrencyStepComponent implements OnInit { ngOnInit() { this.currencyData = this.recurringDepositProductsTemplate.currencyOptions; + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.recurringDepositProductCurrencyForm.patchValue({ + 'currencyCode': this.recurringDepositProductsTemplate.currency.code, + 'digitsAfterDecimal': this.recurringDepositProductsTemplate.currency.decimalPlaces, + 'inMultiplesOf': this.recurringDepositProductsTemplate.currency.inMultiplesOf + }); + } else { + this.recurringDepositProductCurrencyForm.patchValue({ + 'currencyCode': this.currencyData[0].code, + 'digitsAfterDecimal': 2 + }); + } - this.recurringDepositProductCurrencyForm.patchValue({ - 'currencyCode': this.currencyData[0].code, - 'digitsAfterDecimal': 2 - }); } createrecurringDepositProductCurrencyForm() { diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.html b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.html index e7579391f..4dda46860 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.html +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.html @@ -5,7 +5,7 @@ Product Name - + Product Name is required @@ -13,7 +13,7 @@ Short Name - + Short Name is required @@ -21,6 +21,9 @@ Description + + Description is required + diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.ts index 3f097906b..97f9bd902 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-details-step/recurring-deposit-product-details-step.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; @Component({ @@ -8,6 +8,8 @@ import { FormGroup, FormBuilder, Validators } from '@angular/forms'; }) export class RecurringDepositProductDetailsStepComponent implements OnInit { + @Input() recurringDepositProductsTemplate: any; + recurringDepositProductDetailsForm: FormGroup; constructor(private formBuilder: FormBuilder) { @@ -15,13 +17,20 @@ export class RecurringDepositProductDetailsStepComponent implements OnInit { } ngOnInit() { + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.recurringDepositProductDetailsForm.patchValue({ + 'name': this.recurringDepositProductsTemplate.name, + 'shortName': this.recurringDepositProductsTemplate.shortName, + 'description': this.recurringDepositProductsTemplate.description, + }); + } } createrecurringDepositProductDetailsForm() { this.recurringDepositProductDetailsForm = this.formBuilder.group({ 'name': ['', Validators.required], 'shortName': ['', Validators.required], - 'description': [''] + 'description': ['', Validators.required] }); } diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-interest-rate-chart-step/recurring-deposit-product-interest-rate-chart-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-interest-rate-chart-step/recurring-deposit-product-interest-rate-chart-step.component.ts index 86a89d362..cdb85fa94 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-interest-rate-chart-step/recurring-deposit-product-interest-rate-chart-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-interest-rate-chart-step/recurring-deposit-product-interest-rate-chart-step.component.ts @@ -47,6 +47,8 @@ export class RecurringDepositProductInterestRateChartStepComponent implements On maxDate = new Date(new Date().setFullYear(new Date().getFullYear() + 10)); expandChartSlabIndex: number[] = []; + chartDetailData: any = []; + chartsDetail: any[] = []; constructor(private formBuilder: FormBuilder, public dialog: MatDialog, @@ -63,6 +65,131 @@ export class RecurringDepositProductInterestRateChartStepComponent implements On this.clientTypeData = this.recurringDepositProductsTemplate.chartTemplate.clientTypeOptions; this.clientClassificationData = this.recurringDepositProductsTemplate.chartTemplate.clientClassificationOptions; this.incentiveTypeData = this.recurringDepositProductsTemplate.chartTemplate.incentiveTypeOptions; + + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.assignFormData(); + } + } + + // Assign form the values for edit recurring Depoosit + assignFormData() { + this.addChart(); + const isChartArray = Array.isArray(this.recurringDepositProductsTemplate.activeChart); + if (!isChartArray) { + this.chartDetailData.push(this.recurringDepositProductsTemplate.activeChart); + } else { + this.chartDetailData = this.recurringDepositProductsTemplate.activeChart; + } + + // Build the array of Objects from the retrived value + this.getChartsDetailsData(); + + // Iterates for every chart in charts + this.charts.controls.forEach((chartDetailControl: FormGroup, i: number) => { + + // Iterate for every chartSlab in chart + this.chartsDetail[i].chartSlabs.forEach((chartSlabDetail: any, j: number) => { + + const chartSlabInfo = this.formBuilder.group({ + amountRangeFrom: [chartSlabDetail.amountRangeFrom], + amountRangeTo: [chartSlabDetail.amountRangeTo], + annualInterestRate: [chartSlabDetail.annualInterestRate, Validators.required], + description: [chartSlabDetail.description, Validators.required], + fromPeriod: [chartSlabDetail.fromPeriod, Validators.required], + toPeriod: [chartSlabDetail.toPeriod], + periodType: [chartSlabDetail.periodType, Validators.required], + incentives: this.formBuilder.array([]) + }); + const formArray = chartDetailControl.controls['chartSlabs'] as FormArray; + formArray.push(chartSlabInfo); + + // Iterate for every slab in chartSlab + const chartIncentiveControl = chartDetailControl.controls['chartSlabs']['controls'][j]; + + // Iterate to input all the incentive for particular chart slab + this.chartsDetail[i].chartSlabs[j].incentives.forEach((chartIncentiveDetail: any) => { + const incentiveInfo = this.formBuilder.group({ + amount: [chartIncentiveDetail.amount, Validators.required], + attributeName: [chartIncentiveDetail.attributeName, Validators.required], + attribureValue: [chartIncentiveDetail.attribureValue, Validators.required], + conditionType: [chartIncentiveDetail.conditionType, Validators.required], + entityType: [chartIncentiveDetail.entityType, Validators.required], + incentiveType: [chartIncentiveDetail.incentiveType, Validators.required] + }); + const newFormArray = chartIncentiveControl['controls']['incentives'] as FormArray; + newFormArray.push(incentiveInfo); + }); + + }); + + }); + } + + getChartsDetailsData() { + this.chartDetailData.forEach((chartData: any) => { + const chart = { + endDate: chartData.endDate ? new Date(chartData.endDate) : '', + fromDate: chartData.fromDate ? new Date(chartData.fromDate) : '', + isPrimaryGroupingByAmount: chartData.isPrimaryGroupingByAmount, + name: chartData.name, + chartSlabs: this.getChartSlabsData(chartData) + }; + this.chartsDetail.push(chart); + }); + this.recurringDepositProductInterestRateChartForm.patchValue({ + 'charts': this.chartsDetail + }); + } + + getChartSlabsData(chartData: any) { + const chartSlabs: any[] = []; + let chartSlabData: any[] = []; + const isChartSlabArray = Array.isArray(chartData.chartSlabs); + if (!isChartSlabArray) { + chartSlabData.push(chartData.chartSlabs); + } else { + chartSlabData = chartData.chartSlabs; + } + + chartSlabData.forEach((eachChartSlabData: any) => { + const chartSlab = { + periodType: eachChartSlabData.periodType.id, + amountRangeFrom: eachChartSlabData.amountRangeFrom, + amountRangeTo: eachChartSlabData.amountRangeTo, + annualInterestRate: eachChartSlabData.annualInterestRate, + description: eachChartSlabData.description ? eachChartSlabData.description : '', + fromPeriod: eachChartSlabData.fromPeriod, + toPeriod: eachChartSlabData.toPeriod, + incentives: this.getIncentivesData(chartSlabData) + }; + chartSlabs.push(chartSlab); + }); + return chartSlabs; + } + + getIncentivesData(chartSlabData: any) { + const incentives: any[] = []; + let incentiveDatas: any[] = []; + if (chartSlabData.incentives) { + const isChartIncentiveArray = Array.isArray(chartSlabData.incentives); + if (!isChartIncentiveArray) { + incentiveDatas.push(chartSlabData.incentives); + } else { + incentiveDatas = chartSlabData.incentives; + } + incentiveDatas.forEach((incentiveData: any) => { + const incentive = { + amount: incentiveData.amount, + attributeName: incentiveData.attributeName, + attributeValue: incentiveData.attributeValue, + conditionType: incentiveData.conditionType, + entityType: incentiveData.entityType, + incentiveType: incentiveData.incentiveType, + }; + incentives.push(incentive); + }); + } + return incentives; } createrecurringDepositProductInterestRateChartForm() { diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component.ts index acad1dfcd..ea946fe5c 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-settings-step/recurring-deposit-product-settings-step.component.ts @@ -27,6 +27,26 @@ export class RecurringDepositProductSettingsStepComponent implements OnInit { this.periodFrequencyTypeData = this.recurringDepositProductsTemplate.periodFrequencyTypeOptions.slice(0, -1); this.preClosurePenalInterestOnTypeData = this.recurringDepositProductsTemplate.preClosurePenalInterestOnTypeOptions; this.taxGroupData = this.recurringDepositProductsTemplate.taxGroupOptions; + + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.recurringDepositProductSettingsForm.patchValue({ + 'isMandatoryDeposit': this.recurringDepositProductsTemplate.isMandatoryDeposit, + 'adjustAdvanceTowardsFuturePayments': this.recurringDepositProductsTemplate.adjustAdvanceTowardsFuturePayments, + 'allowWithdrawal': this.recurringDepositProductsTemplate.allowWithdrawal, + 'lockinPeriodFrequency': this.recurringDepositProductsTemplate.lockinPeriodFrequency, + 'lockinPeriodFrequencyType': this.recurringDepositProductsTemplate.lockinPeriodFrequencyType ? this.recurringDepositProductsTemplate.lockinPeriodFrequencyType.id : '', + 'minDepositTerm': this.recurringDepositProductsTemplate.minDepositTerm, + 'minDepositTermTypeId': this.recurringDepositProductsTemplate.minDepositTermType ? this.recurringDepositProductsTemplate.minDepositTermType.id : '', + 'inMultiplesOfDepositTerm': this.recurringDepositProductsTemplate.inMultiplesOfDepositTerm, + 'inMultiplesOfDepositTermTypeId': this.recurringDepositProductsTemplate.inMultiplesOfDepositTermType ? this.recurringDepositProductsTemplate.inMultiplesOfDepositTerm.id : '', + 'maxDepositTerm': this.recurringDepositProductsTemplate.maxDepositTerm, + 'maxDepositTermTypeId': this.recurringDepositProductsTemplate.maxDepositTermType ? this.recurringDepositProductsTemplate.minDepositTermType.id : '', + 'preClosurePenalApplicable': this.recurringDepositProductsTemplate.preClosurePenalApplicable, + 'preClosurePenalInterest': this.recurringDepositProductsTemplate.preClosurePenalInterest, + 'preClosurePenalInterestOnTypeId': this.recurringDepositProductsTemplate.preClosurePenalInterestOnType ? this.recurringDepositProductsTemplate.preClosurePenalInterestOnType.id : '', + 'withHoldTax': this.recurringDepositProductsTemplate.withHoldTax + }); + } } createrecurringDepositProductSettingsForm() { diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component.ts index b1d4eb80f..27a53823f 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component.ts +++ b/src/app/products/recurring-deposit-products/recurring-deposit-product-stepper/recurring-deposit-product-terms-step/recurring-deposit-product-terms-step.component.ts @@ -26,7 +26,13 @@ export class RecurringDepositProductTermsStepComponent implements OnInit { this.interestPostingPeriodTypeData = this.recurringDepositProductsTemplate.interestPostingPeriodTypeOptions; this.interestCalculationTypeData = this.recurringDepositProductsTemplate.interestCalculationTypeOptions; this.interestCalculationDaysInYearTypeData = this.recurringDepositProductsTemplate.interestCalculationDaysInYearTypeOptions; - + if (!(this.recurringDepositProductsTemplate === undefined) && this.recurringDepositProductsTemplate.id) { + this.recurringDepositProductTermsForm.patchValue({ + 'minDepositAmount': this.recurringDepositProductsTemplate.minDepositAmount, + 'depositAmount': this.recurringDepositProductsTemplate.depositAmount, + 'maxDepositAmount': this.recurringDepositProductsTemplate.maxDepositAmount, + }); + } this.recurringDepositProductTermsForm.patchValue({ 'interestCompoundingPeriodType': this.recurringDepositProductsTemplate.interestCompoundingPeriodType.id, 'interestPostingPeriodType': this.recurringDepositProductsTemplate.interestPostingPeriodType.id, diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html index 636ce243d..a12975f4e 100644 --- a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/recurring-deposit-products/view-recurring-deposit-product/view-recurring-deposit-product.component.html b/src/app/products/recurring-deposit-products/view-recurring-deposit-product/view-recurring-deposit-product.component.html index d68de02db..8c3adb1e3 100644 --- a/src/app/products/recurring-deposit-products/view-recurring-deposit-product/view-recurring-deposit-product.component.html +++ b/src/app/products/recurring-deposit-products/view-recurring-deposit-product/view-recurring-deposit-product.component.html @@ -1,5 +1,5 @@
- @@ -137,7 +137,7 @@ {{ recurringDepositProduct.taxGroup.name }}
-
+

Interest Rate Charts

@@ -298,8 +298,6 @@ - -
@@ -380,8 +378,6 @@
Interest on savings: {{ recurringDepositProduct.accountingMappings.interestOnSavingsAccount.name }} - Write-off: - {{ recurringDepositProduct.accountingMappings.writeOffAccount.name }}

Income