From ffea1b5eaf081b703924b7d33b6b533c5715a1a0 Mon Sep 17 00:00:00 2001 From: Muskan Khedia <36980003+muskankhedia@users.noreply.github.com> Date: Tue, 14 Jul 2020 16:15:48 +0530 Subject: [PATCH] feat: add center actions (close and delete) (#1093) Fixes: #1092 --- .../center-actions.component.html | 1 + .../center-actions.component.ts | 6 +- .../close-center/close-center.component.html | 46 ++++++++++ .../close-center/close-center.component.scss | 3 + .../close-center.component.spec.ts | 25 ++++++ .../close-center/close-center.component.ts | 84 +++++++++++++++++++ .../centers-view/centers-view.component.html | 4 +- .../centers-view/centers-view.component.ts | 20 +++++ src/app/centers/centers.module.ts | 4 +- src/app/centers/centers.service.ts | 4 + 10 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 src/app/centers/centers-view/center-actions/close-center/close-center.component.html create mode 100644 src/app/centers/centers-view/center-actions/close-center/close-center.component.scss create mode 100644 src/app/centers/centers-view/center-actions/close-center/close-center.component.spec.ts create mode 100644 src/app/centers/centers-view/center-actions/close-center/close-center.component.ts diff --git a/src/app/centers/centers-view/center-actions/center-actions.component.html b/src/app/centers/centers-view/center-actions/center-actions.component.html index 862d48e2f..ad701cd89 100644 --- a/src/app/centers/centers-view/center-actions/center-actions.component.html +++ b/src/app/centers/centers-view/center-actions/center-actions.component.html @@ -1,2 +1,3 @@ + \ No newline at end of file diff --git a/src/app/centers/centers-view/center-actions/center-actions.component.ts b/src/app/centers/centers-view/center-actions/center-actions.component.ts index 58cfdbd46..1b3f478e0 100644 --- a/src/app/centers/centers-view/center-actions/center-actions.component.ts +++ b/src/app/centers/centers-view/center-actions/center-actions.component.ts @@ -15,10 +15,12 @@ export class CenterActionsComponent { /** Flag object to store possible actions and render appropriate UI to the user */ actions: { 'Activate': boolean, - 'Assign Staff': boolean + 'Assign Staff': boolean, + 'Close': boolean } = { 'Activate': false, - 'Assign Staff': false + 'Assign Staff': false, + 'Close': false }; /** diff --git a/src/app/centers/centers-view/center-actions/close-center/close-center.component.html b/src/app/centers/centers-view/center-actions/close-center/close-center.component.html new file mode 100644 index 000000000..fb714d2e3 --- /dev/null +++ b/src/app/centers/centers-view/center-actions/close-center/close-center.component.html @@ -0,0 +1,46 @@ +
+ + + +
+ + + +
+ + + Closed On Date + + + + + Closed On Date is required + + + + + Closure Reason + + + {{ reason.name }} + + + + CLosure Reason is required + + + +
+ +
+ + + + + + +
+ +
+ +
diff --git a/src/app/centers/centers-view/center-actions/close-center/close-center.component.scss b/src/app/centers/centers-view/center-actions/close-center/close-center.component.scss new file mode 100644 index 000000000..f6edc1a09 --- /dev/null +++ b/src/app/centers/centers-view/center-actions/close-center/close-center.component.scss @@ -0,0 +1,3 @@ +.container { + max-width: 37rem; +} diff --git a/src/app/centers/centers-view/center-actions/close-center/close-center.component.spec.ts b/src/app/centers/centers-view/center-actions/close-center/close-center.component.spec.ts new file mode 100644 index 000000000..5ed013b77 --- /dev/null +++ b/src/app/centers/centers-view/center-actions/close-center/close-center.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CloseCenterComponent } from './close-center.component'; + +describe('CloseCenterComponent', () => { + let component: CloseCenterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CloseCenterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CloseCenterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/centers/centers-view/center-actions/close-center/close-center.component.ts b/src/app/centers/centers-view/center-actions/close-center/close-center.component.ts new file mode 100644 index 000000000..d12a2a940 --- /dev/null +++ b/src/app/centers/centers-view/center-actions/close-center/close-center.component.ts @@ -0,0 +1,84 @@ +/** Angular Imports */ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { DatePipe } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; + +/** Custom Services */ +import { CentersService } from 'app/centers/centers.service'; + +/** + * Close Center Component + */ +@Component({ + selector: 'mifosx-close-center', + templateUrl: './close-center.component.html', + styleUrls: ['./close-center.component.scss'] +}) +export class CloseCenterComponent implements OnInit { + + /** Minimum date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum date allowed. */ + maxDate = new Date(); + /** Close Share Account form. */ + closeCenterForm: FormGroup; + /** Center Data */ + closureData: any; + /** Center Id */ + centerId: any; + + /** + * @param {FormBuilder} formBuilder Form Builder + * @param {CentersService} centersService Shares Service + * @param {DatePipe} datePipe Date Pipe + * @param {ActivatedRoute} route Activated Route + * @param {Router} router Router + */ + constructor(private formBuilder: FormBuilder, + private centersService: CentersService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private router: Router) { + this.route.data.subscribe((data: { centeractionData: any }) => { + this.closureData = data.centeractionData.closureReasons; + }); + this.centerId = this.route.parent.snapshot.params['centerId']; + } + + ngOnInit() { + this.createCloseCenterForm(); + } + + /** + * Creates the close centers form. + */ + createCloseCenterForm() { + this.closeCenterForm = this.formBuilder.group({ + 'closureDate': ['', Validators.required], + 'closureReasonId': ['', Validators.required] + }); + } + + /** + * Submits the form and closes the center. + */ + submit() { + // TODO: Update once language and date settings are setup + const locale = 'en'; + const dateFormat = 'dd MMMM yyyy'; + const prevClosedDate: Date = this.closeCenterForm.value.closureDate; + this.closeCenterForm.patchValue({ + closureDate: this.datePipe.transform(prevClosedDate, dateFormat), + }); + const data = { + ...this.closeCenterForm.value, + dateFormat, + locale + }; + this.centersService.executeCenterActionCommand(this.centerId, 'close', data).subscribe(() => { + this.router.navigate(['../../'], { relativeTo: this.route }); + }); + } + +} diff --git a/src/app/centers/centers-view/centers-view.component.html b/src/app/centers/centers-view/centers-view.component.html index ac2b67c45..97b704306 100644 --- a/src/app/centers/centers-view/centers-view.component.html +++ b/src/app/centers/centers-view/centers-view.component.html @@ -71,9 +71,9 @@ - + - + diff --git a/src/app/centers/centers-view/centers-view.component.ts b/src/app/centers/centers-view/centers-view.component.ts index 3d5e5f0a7..f90d66ea3 100644 --- a/src/app/centers/centers-view/centers-view.component.ts +++ b/src/app/centers/centers-view/centers-view.component.ts @@ -8,6 +8,7 @@ import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/conf /** Custom Services */ import { CentersService } from '../centers.service'; +import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; /** * Create Center View @@ -57,11 +58,14 @@ export class CentersViewComponent implements OnInit { switch (name) { case 'Activate': case 'Assign Staff': + case 'Close': this.router.navigate([`actions/${name}`], { relativeTo: this.route }); break; case 'Unassign Staff': this.centersUnassignStaff(); break; + case 'Delete': + this.deleteCenter(); } } @@ -82,6 +86,22 @@ export class CentersViewComponent implements OnInit { }); } + /** + * Deletes the center + */ + private deleteCenter() { + const deleteGroupDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `center with id: ${this.centerViewData.id}` } + }); + deleteGroupDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.centersService.deleteCenter(this.centerViewData.id).subscribe(() => { + this.router.navigate(['/centers'], { relativeTo: this.route }); + }); + } + }); + } + /** * Refetches data for the component * TODO: Replace by a custom reload component instead of hard-coded back-routing. diff --git a/src/app/centers/centers.module.ts b/src/app/centers/centers.module.ts index 17595fdc2..889e781c7 100644 --- a/src/app/centers/centers.module.ts +++ b/src/app/centers/centers.module.ts @@ -19,6 +19,7 @@ import { SingleRowComponent } from './centers-view/datatable-tab/single-row/sing import { CenterActionsComponent } from './centers-view/center-actions/center-actions.component'; import { ActivateCenterComponent } from './centers-view/center-actions/activate-center/activate-center.component'; import { CenterAssignStaffComponent } from './centers-view/center-actions/center-assign-staff/center-assign-staff.component'; +import { CloseCenterComponent } from './centers-view/center-actions/close-center/close-center.component'; /** * Centers Module @@ -43,7 +44,8 @@ import { CenterAssignStaffComponent } from './centers-view/center-actions/center SingleRowComponent, CenterActionsComponent, ActivateCenterComponent, - CenterAssignStaffComponent + CenterAssignStaffComponent, + CloseCenterComponent ] }) export class CentersModule { } diff --git a/src/app/centers/centers.service.ts b/src/app/centers/centers.service.ts index 74ced0628..1119516fc 100644 --- a/src/app/centers/centers.service.ts +++ b/src/app/centers/centers.service.ts @@ -209,4 +209,8 @@ export class CentersService { return this.http.get(`/groups/${centerId}`, { params: httpParams }); } + deleteCenter(centerId: any): Observable { + return this.http.delete(`/centers/${centerId}`); + } + }