From 26ce041855b84f505ae48552c76d0e0e5e69e4b6 Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Sun, 2 Aug 2020 11:03:09 +0530 Subject: [PATCH] feat: add create dividend component (#807) Fixes: #770 --- src/app/products/products-routing.module.ts | 22 +++++- src/app/products/products.module.ts | 4 +- src/app/products/products.service.ts | 10 +++ .../create-dividend.component.html | 52 ++++++++++++ .../create-dividend.component.scss | 3 + .../create-dividend.component.spec.ts | 25 ++++++ .../create-dividend.component.ts | 79 +++++++++++++++++++ .../dividends.component.html | 2 +- 8 files changed, 191 insertions(+), 6 deletions(-) create mode 100644 src/app/products/share-products/create-dividend/create-dividend.component.html create mode 100644 src/app/products/share-products/create-dividend/create-dividend.component.scss create mode 100644 src/app/products/share-products/create-dividend/create-dividend.component.spec.ts create mode 100644 src/app/products/share-products/create-dividend/create-dividend.component.ts diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 20ca67320..870f85c35 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -43,6 +43,7 @@ import { EditTaxComponentComponent } from './manage-tax-components/edit-tax-comp import { ViewTaxGroupComponent } from './manage-tax-groups/view-tax-group/view-tax-group.component'; import { ShareProductsDividendsComponent } from './share-products/dividends-share-product/dividends.components'; import { CreateRecurringDepositProductComponent } from './recurring-deposit-products/create-recurring-deposit-product/create-recurring-deposit-product.component'; +import { CreateDividendComponent } from './share-products/create-dividend/create-dividend.component'; /** Custom Resolvers */ import { LoanProductsResolver } from './loan-products/loan-products.resolver'; @@ -215,10 +216,23 @@ const routes: Routes = [ { path: 'dividends', data: { title: extract('Share Products Dividends'), breadcrumb: 'Dividends', routeParamBreadcrumb: false}, - component: ShareProductsDividendsComponent, - resolve: { - dividends: DividendsResolver - } + children: [ + { + path: '', + component: ShareProductsDividendsComponent, + resolve: { + dividends: DividendsResolver + } + }, + { + path: 'create', + component: CreateDividendComponent, + data: { title: extract('Create Dividend'), breadcrumb: 'Create', routeParamBreadcrumb: false }, + resolve: { + shareProduct: ShareProductResolver + } + } + ] } ] } diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index efe765d9c..78298652a 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -87,6 +87,7 @@ import { RecurringDepositProductPreviewStepComponent } from './recurring-deposit 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'; +import { CreateDividendComponent } from './share-products/create-dividend/create-dividend.component'; /** * Products Module @@ -177,7 +178,8 @@ import { EditRecurringDepositProductComponent } from './recurring-deposit-produc RecurringDepositProductPreviewStepComponent, RecurringDepositProductSettingsStepComponent, RecurringDepositProductTermsStepComponent, - EditRecurringDepositProductComponent + EditRecurringDepositProductComponent, + CreateDividendComponent ], entryComponents: [ DepositProductIncentiveFormDialogComponent, diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index 9a1d6637b..3aa9dd4ab 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -94,6 +94,16 @@ export class ProductsService { return this.http.get(`/shareproduct/${shareProductId}/dividend`); } + /** + * Create Dividend. + * @param shareProductId Share Product Id. + * @param dividendData Dividend Data. + * @returns {Observable} + */ + createDividend(shareProductId: string, dividendData: any): Observable { + return this.http.post(`/shareproduct/${shareProductId}/dividend`, dividendData); + } + /** * @returns {Observable} Recurring deposit products data */ diff --git a/src/app/products/share-products/create-dividend/create-dividend.component.html b/src/app/products/share-products/create-dividend/create-dividend.component.html new file mode 100644 index 000000000..05debe2d6 --- /dev/null +++ b/src/app/products/share-products/create-dividend/create-dividend.component.html @@ -0,0 +1,52 @@ +
+ + + +
+ + + +
+ + + Dividend Period Start Date + + + + + Starting date is required + + + + + Dividend Period End Date + + + + + End date is required + + + + + Dividend Amount + + + Amount is required + + + +
+ +
+ + + + + + +
+ +
+ +
diff --git a/src/app/products/share-products/create-dividend/create-dividend.component.scss b/src/app/products/share-products/create-dividend/create-dividend.component.scss new file mode 100644 index 000000000..1915ad6d3 --- /dev/null +++ b/src/app/products/share-products/create-dividend/create-dividend.component.scss @@ -0,0 +1,3 @@ +.container { + max-width: 37rem; +} diff --git a/src/app/products/share-products/create-dividend/create-dividend.component.spec.ts b/src/app/products/share-products/create-dividend/create-dividend.component.spec.ts new file mode 100644 index 000000000..b181c7cb6 --- /dev/null +++ b/src/app/products/share-products/create-dividend/create-dividend.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CreateDividendComponent } from './create-dividend.component'; + +describe('CreateDividendComponent', () => { + let component: CreateDividendComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CreateDividendComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CreateDividendComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/share-products/create-dividend/create-dividend.component.ts b/src/app/products/share-products/create-dividend/create-dividend.component.ts new file mode 100644 index 000000000..62f0670ce --- /dev/null +++ b/src/app/products/share-products/create-dividend/create-dividend.component.ts @@ -0,0 +1,79 @@ +/** Angular Imports. */ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DatePipe } from '@angular/common'; + +/** Custom Services. */ +import { ProductsService } from 'app/products/products.service'; + +/** + * Create Dividend component. + */ +@Component({ + selector: 'mifosx-create-dividend', + templateUrl: './create-dividend.component.html', + styleUrls: ['./create-dividend.component.scss'] +}) +export class CreateDividendComponent implements OnInit { + + /** Create Dividend Form. */ + createDividendForm: FormGroup; + /** Share Product data. */ + shareProductData: any; + /** Minimum Date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum Date allowed. */ + maxDate = new Date(); + + /** + * Get Share Product data from `Resolver`. + * @param {FormBuilder} formBuilder Form Builder. + * @param {ActivatedRoute} route Activated Route. + * @param {Router} router Router. + */ + constructor(private formBuilder: FormBuilder, + private route: ActivatedRoute, + private datePipe: DatePipe, + private productService: ProductsService, + private router: Router) { + this.route.data.subscribe((data: { shareProduct: any }) => { + this.shareProductData = data.shareProduct; + }); + } + + ngOnInit() { + this.setDividendForm(); + } + + /** + * Sets Create Dividend from. + */ + setDividendForm() { + this.createDividendForm = this.formBuilder.group({ + 'dividendPeriodStartDate': ['', Validators.required], + 'dividendPeriodEndDate': ['', Validators.required], + 'dividendAmount': ['', Validators.required] + }); + } + + /** + * Submits Create Dividend form. + */ + submit() { + const dateFormat = 'yyyy-MM-dd'; + const startDate = this.createDividendForm.value.dividendPeriodStartDate; + const endDate = this.createDividendForm.value.dividendPeriodEndDate; + this.createDividendForm.patchValue({ + 'dividendPeriodStartDate': this.datePipe.transform(startDate, dateFormat), + 'dividendPeriodEndDate': this.datePipe.transform(endDate, dateFormat) + }); + const dividendForm = this.createDividendForm.value; + dividendForm.locale = 'en'; + dividendForm.dateFormat = dateFormat; + this.productService.createDividend(this.shareProductData.id, dividendForm).subscribe((response: any) => { + this.router.navigate(['../'], { relativeTo: this.route }); + }); + } + +} diff --git a/src/app/products/share-products/dividends-share-product/dividends.component.html b/src/app/products/share-products/dividends-share-product/dividends.component.html index c7316b90a..0187eb83e 100644 --- a/src/app/products/share-products/dividends-share-product/dividends.component.html +++ b/src/app/products/share-products/dividends-share-product/dividends.component.html @@ -1,5 +1,5 @@
-