From b94857c39c765abc4b7b38f4e6efff40d4c3429a Mon Sep 17 00:00:00 2001
From: Muskan Khedia <36980003+muskankhedia@users.noreply.github.com>
Date: Tue, 4 Aug 2020 17:50:02 +0530
Subject: [PATCH] feat: add create, edit tax groups (#1173)
Fixes: #589
Fixes: #600
---
.../create-tax-group.component.html | 75 ++++++
.../create-tax-group.component.scss | 7 +
.../create-tax-group.component.spec.ts | 25 ++
.../create-tax-group.component.ts | 190 +++++++++++++++
.../manage-tax-group-template.resolver.ts | 30 +++
.../edit-tax-group.component.html | 81 +++++++
.../edit-tax-group.component.scss | 3 +
.../edit-tax-group.component.spec.ts | 25 ++
.../edit-tax-group.component.ts | 217 ++++++++++++++++++
.../edit-tax-group/edit-tax-group.resolver.ts | 30 +++
.../manage-tax-groups.component.html | 2 +-
.../manage-tax-groups/tax-group.resolver.ts | 2 +-
.../view-tax-group.component.html | 2 +-
src/app/products/products-routing.module.ts | 28 ++-
src/app/products/products.module.ts | 6 +-
src/app/products/products.service.ts | 30 ++-
16 files changed, 744 insertions(+), 9 deletions(-)
create mode 100644 src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html
create mode 100644 src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.scss
create mode 100644 src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.spec.ts
create mode 100644 src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.ts
create mode 100644 src/app/products/manage-tax-groups/create-tax-group/manage-tax-group-template.resolver.ts
create mode 100644 src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.html
create mode 100644 src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.scss
create mode 100644 src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.spec.ts
create mode 100644 src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.ts
create mode 100644 src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.resolver.ts
diff --git a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html
new file mode 100644
index 000000000..98386d920
--- /dev/null
+++ b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html
@@ -0,0 +1,75 @@
+
diff --git a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.scss b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.scss
new file mode 100644
index 000000000..2968558fe
--- /dev/null
+++ b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.scss
@@ -0,0 +1,7 @@
+.container {
+ max-width: 37rem;
+}
+
+table {
+ width: 100%;
+}
diff --git a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.spec.ts b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.spec.ts
new file mode 100644
index 000000000..b0c6fd56b
--- /dev/null
+++ b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CreateTaxGroupComponent } from './create-tax-group.component';
+
+describe('CreateTaxGroupComponent', () => {
+ let component: CreateTaxGroupComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ CreateTaxGroupComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CreateTaxGroupComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.ts b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.ts
new file mode 100644
index 000000000..b93ae6b9c
--- /dev/null
+++ b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.ts
@@ -0,0 +1,190 @@
+/** Angular Imports */
+import { Component, OnInit } from '@angular/core';
+import { FormGroup, FormBuilder, Validators, FormControl, FormArray } from '@angular/forms';
+import { Router, ActivatedRoute } from '@angular/router';
+import { DatePipe } from '@angular/common';
+import { MatDialog } from '@angular/material';
+
+/** Custom Services */
+import { ProductsService } from '../../products.service';
+
+/** Dialog Components */
+import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base';
+import { SelectBase } from 'app/shared/form-dialog/formfield/model/select-base';
+import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicker-base';
+import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component';
+import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
+
+/**
+ * Create Tax Group component.
+ */
+@Component({
+ selector: 'mifosx-create-tax-group',
+ templateUrl: './create-tax-group.component.html',
+ styleUrls: ['./create-tax-group.component.scss']
+})
+export class CreateTaxGroupComponent implements OnInit {
+
+ /** Minimum start date allowed. */
+ minDate = new Date(2000, 0, 1);
+ /** Maximum start date allowed. */
+ maxDate = new Date(2100, 0, 1);
+ /** Tax Group form. */
+ taxGroupForm: FormGroup;
+ /** Tax Group template data. */
+ taxGroupTemplateData: any;
+ /** Tax Component Data Source */
+ taxComponentsDataSource: {}[];
+ /** Tax Component Options */
+ taxComponentOptions: any;
+
+ /** Tax Component Displayed Columns */
+ displayedColumns: string[] = ['name', 'startDate', 'actions'];
+
+ /**
+ * Retrieves the tax Group template data from `resolve`.
+ * @param {FormBuilder} formBuilder Form Builder.
+ * @param {ProductsService} productsService Products Service.
+ * @param {ActivatedRoute} route Activated Route.
+ * @param {Router} router Router for navigation.
+ * @param {DatePipe} datePipe Date Pipe to format date.
+ */
+ constructor(private formBuilder: FormBuilder,
+ private productsService: ProductsService,
+ private route: ActivatedRoute,
+ private router: Router,
+ private datePipe: DatePipe,
+ public dialog: MatDialog) {
+ this.route.data.subscribe((data: { taxGroupTemplate: any }) => {
+ this.taxGroupTemplateData = data.taxGroupTemplate;
+ this.taxComponentOptions = this.taxGroupTemplateData.taxComponents;
+ });
+ }
+
+ ngOnInit() {
+ this.createTaxGroupForm();
+ this.taxComponentsDataSource = [];
+ }
+
+ /**
+ * Creates the tax Group form
+ */
+ createTaxGroupForm() {
+ this.taxGroupForm = this.formBuilder.group({
+ 'name': ['', Validators.required]
+ });
+ }
+
+ /**
+ * Add Tax Component in Tax Group
+ */
+ addTaxGroup() {
+ const formfields: FormfieldBase[] = [
+ new SelectBase({
+ controlName: 'taxComponentId',
+ label: 'Tax Component',
+ options: { label: 'name', value: 'id', data: this.taxComponentOptions },
+ order: 1
+ }),
+ new DatepickerBase({
+ controlName: 'startDate',
+ label: 'Start Date',
+ minDate: this.minDate,
+ maxDate: this.maxDate,
+ order: 2
+ })
+ ];
+ const data = {
+ title: 'Add Tax Component',
+ layout: { addButtonText: 'Add' },
+ formfields: formfields
+ };
+ const memberAttendanceDialogRef = this.dialog.open(FormDialogComponent, { data });
+ memberAttendanceDialogRef.afterClosed().subscribe((response: any) => {
+ if (response.data) {
+ // this.taxComponents.push(response.data.value);
+ this.taxComponentsDataSource = this.taxComponentsDataSource.concat(response.data.value);
+
+ console.log('tjos.taxComponents: ', this.taxComponentsDataSource);
+ }
+ });
+ }
+
+ /**
+ * Edit Tax Component in Tax Group
+ */
+ editTaxGroup(taxComponent: any, index: any) {
+ const formfields: FormfieldBase[] = [
+ new SelectBase({
+ controlName: 'taxComponentId',
+ value: taxComponent.taxComponentId ? taxComponent.taxComponentId : '',
+ label: 'Tax Component',
+ options: { label: 'name', value: 'id', data: this.taxComponentOptions },
+ order: 1
+ }),
+ new DatepickerBase({
+ controlName: 'startDate',
+ value: taxComponent.startDate ? new Date(taxComponent.startDate) : new Date(),
+ label: 'Start Date',
+ minDate: this.minDate,
+ maxDate: this.maxDate,
+ order: 2
+ })
+ ];
+ const data = {
+ title: 'Edit Tax Component',
+ layout: { addButtonText: 'Submit' },
+ formfields: formfields
+ };
+ const memberAttendanceDialogRef = this.dialog.open(FormDialogComponent, { data });
+ memberAttendanceDialogRef.afterClosed().subscribe((response: any) => {
+ if (response.data) {
+ // this.taxComponents.push(response.data.value);
+ // this.taxComponentsDataSource = this.taxComponentsDataSource.concat(response.data.value);
+ const updatedMemeber = { ...taxComponent, ...response.data.value };
+ this.taxComponentsDataSource.splice(this.taxComponentsDataSource.indexOf(taxComponent), 1, updatedMemeber);
+ this.taxComponentsDataSource = this.taxComponentsDataSource.concat([]);
+ console.log('tjos.taxComponents: ', this.taxComponentsDataSource);
+ }
+ });
+ }
+
+ /**
+ * Delete particular Tax Component in Tax Group
+ */
+ delete(index: number) {
+ const dialogRef = this.dialog.open(DeleteDialogComponent, {
+ data: { deleteContext: `this` }
+ });
+ dialogRef.afterClosed().subscribe((response: any) => {
+ if (response.delete) {
+ this.taxComponentsDataSource.splice(index, 1);
+ this.taxComponentsDataSource = this.taxComponentsDataSource.concat([]);
+ }
+ });
+ }
+
+ /**
+ * Submits the tax Group form and creates the tax Group,
+ * if successful redirects to Tax Groups.
+ */
+ submit() {
+ const dateFormat = 'yyyy-MM-dd';
+ const locale = 'en';
+ const taxGroup = {
+ ...this.taxGroupForm.value,
+ taxComponents: this.taxComponentsDataSource,
+ dateFormat,
+ locale
+ };
+ console.log(taxGroup);
+
+ for (const taxComponent of taxGroup.taxComponents) {
+ taxComponent.startDate = this.datePipe.transform(taxComponent.startDate, dateFormat) || '';
+ }
+ this.productsService.createTaxGroup(taxGroup).subscribe((response: any) => {
+ this.router.navigate(['../', response.resourceId], { relativeTo: this.route });
+ });
+ }
+
+}
diff --git a/src/app/products/manage-tax-groups/create-tax-group/manage-tax-group-template.resolver.ts b/src/app/products/manage-tax-groups/create-tax-group/manage-tax-group-template.resolver.ts
new file mode 100644
index 000000000..e36396f2d
--- /dev/null
+++ b/src/app/products/manage-tax-groups/create-tax-group/manage-tax-group-template.resolver.ts
@@ -0,0 +1,30 @@
+/** Angular Imports */
+import { Injectable } from '@angular/core';
+import { Resolve } from '@angular/router';
+
+/** rxjs Imports */
+import { Observable } from 'rxjs';
+
+/** Custom Services */
+import { ProductsService } from '../../products.service';
+
+/**
+ * Tax Group template data resolver.
+ */
+@Injectable()
+export class ManageTaxGroupTemplateResolver implements Resolve