diff --git a/src/app/system/manage-external-events/manage-external-events.component.html b/src/app/system/manage-external-events/manage-external-events.component.html
new file mode 100644
index 000000000..b0646c7fc
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.component.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Filter
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Event Type |
+ {{ event.type }} |
+
+
+
+ Status |
+
+
+
+ Enabled
+ Disabled
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/system/manage-external-events/manage-external-events.component.scss b/src/app/system/manage-external-events/manage-external-events.component.scss
new file mode 100644
index 000000000..2c57da3ec
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.component.scss
@@ -0,0 +1,5 @@
+.container {
+ .action-button {
+ margin-left: auto;
+ }
+}
diff --git a/src/app/system/manage-external-events/manage-external-events.component.spec.ts b/src/app/system/manage-external-events/manage-external-events.component.spec.ts
new file mode 100644
index 000000000..1d0be4cf5
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ManageExternalEventsComponent } from './manage-external-events.component';
+
+describe('ManageExternalEventsComponent', () => {
+ let component: ManageExternalEventsComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ManageExternalEventsComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ManageExternalEventsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/system/manage-external-events/manage-external-events.component.ts b/src/app/system/manage-external-events/manage-external-events.component.ts
new file mode 100644
index 000000000..afc8bdd43
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.component.ts
@@ -0,0 +1,78 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { MatPaginator } from '@angular/material/paginator';
+import { MatSort } from '@angular/material/sort';
+import { MatTableDataSource } from '@angular/material/table';
+import { ActivatedRoute } from '@angular/router';
+import { SystemService } from '../system.service';
+
+@Component({
+ selector: 'mifosx-manage-external-events',
+ templateUrl: './manage-external-events.component.html',
+ styleUrls: ['./manage-external-events.component.scss']
+})
+export class ManageExternalEventsComponent implements OnInit {
+
+ /** Events Data. */
+ eventsData: any;
+ externalEventConfigurations: any = {};
+
+ existAnyUpdate = false;
+
+ /** Columns to be displayed in events table. */
+ displayedColumns: string[] = ['eventType', 'status'];
+ /** Data source for reports table. */
+ dataSource: MatTableDataSource;
+
+ /** Paginator for reports table. */
+ @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
+ /** Sorter for reports table. */
+ @ViewChild(MatSort, { static: true }) sort: MatSort;
+
+ constructor(private route: ActivatedRoute,
+ private systemService: SystemService) {
+ this.route.data.subscribe((data: { events: any }) => {
+ this.eventsData = data.events.externalEventConfiguration;
+ });
+ }
+
+ ngOnInit() {
+ this.setEventDatasource();
+ }
+
+ /**
+ * Initializes the data source, paginator and sorter for events table.
+ */
+ setEventDatasource() {
+ this.dataSource = new MatTableDataSource(this.eventsData);
+ this.dataSource.paginator = this.paginator;
+ this.dataSource.sort = this.sort;
+ }
+
+ /**
+ * Enables/Disables respective event
+ */
+ toggleStatus(event: any) {
+ this.externalEventConfigurations[event.type] = !event.enabled;
+ this.existAnyUpdate = true;
+ }
+
+ /**
+ * Filter using the event type value
+ */
+ applyFilter(filterValue: string) {
+ this.dataSource.filter = filterValue.trim().toLowerCase();
+ }
+
+ /**
+ * send the changes to the backend
+ */
+ applyChanges() {
+ const payload = {
+ externalEventConfigurations: this.externalEventConfigurations
+ };
+
+ this.systemService.putExternalEventConfiguration(payload).subscribe(() => {
+ this.existAnyUpdate = false;
+ });
+ }
+}
diff --git a/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts b/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts
new file mode 100644
index 000000000..0fef18fef
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.resolver.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ManageExternalEventsResolver } from './manage-external-events.resolver';
+
+describe('ManageExternalEventsResolver', () => {
+ let resolver: ManageExternalEventsResolver;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ resolver = TestBed.inject(ManageExternalEventsResolver);
+ });
+
+ it('should be created', () => {
+ expect(resolver).toBeTruthy();
+ });
+});
diff --git a/src/app/system/manage-external-events/manage-external-events.resolver.ts b/src/app/system/manage-external-events/manage-external-events.resolver.ts
new file mode 100644
index 000000000..89add373d
--- /dev/null
+++ b/src/app/system/manage-external-events/manage-external-events.resolver.ts
@@ -0,0 +1,27 @@
+import { Injectable } from '@angular/core';
+import {
+ Router, Resolve,
+ RouterStateSnapshot,
+ ActivatedRouteSnapshot
+} from '@angular/router';
+import { Observable, of } from 'rxjs';
+import { SystemService } from '../system.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ManageExternalEventsResolver implements Resolve {
+
+ /**
+ * @param {SystemService} systemService System service.
+ */
+ constructor(private systemService: SystemService) {}
+
+ /**
+ * Returns the Configuration data.
+ * @returns {Observable}
+ */
+ resolve(route: ActivatedRouteSnapshot): Observable {
+ return this.systemService.getExternalEventConfiguration();
+ }
+}
diff --git a/src/app/system/system-routing.module.ts b/src/app/system/system-routing.module.ts
index 56571f8a2..1ca1197db 100644
--- a/src/app/system/system-routing.module.ts
+++ b/src/app/system/system-routing.module.ts
@@ -87,6 +87,8 @@ import { ConfigurationsComponent } from './configurations/configurations.compone
import { GlobalConfigurationResolver } from './configurations/global-configurations-tab/global-configuration.resolver';
import { EditConfigurationComponent } from './configurations/global-configurations-tab/edit-configuration/edit-configuration.component';
import { ManageJobsComponent } from './manage-jobs/manage-jobs.component';
+import { ManageExternalEventsComponent } from './manage-external-events/manage-external-events.component';
+import { ManageExternalEventsResolver } from './manage-external-events/manage-external-events.resolver';
const routes: Routes = [
Route.withShell([
@@ -137,7 +139,19 @@ const routes: Routes = [
]
}
],
-
+ },
+ {
+ path: 'external-events',
+ data: { title: extract('Manage External Events'), breadcrumb: 'Manage External Events' },
+ children: [
+ {
+ path: '',
+ component: ManageExternalEventsComponent,
+ resolve: {
+ events: ManageExternalEventsResolver
+ }
+ },
+ ]
},
{
path: 'entity-to-entity-mapping',
diff --git a/src/app/system/system.component.html b/src/app/system/system.component.html
index e2da772fc..c7c104cf2 100644
--- a/src/app/system/system.component.html
+++ b/src/app/system/system.component.html
@@ -72,6 +72,14 @@
Manage your Services
+
+
+
+
+ Manage External Events
+ External Events configuration, to enable or disable the event publication
+
+
diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts
index a61e0de8b..43fc22d34 100644
--- a/src/app/system/system.module.ts
+++ b/src/app/system/system.module.ts
@@ -69,6 +69,7 @@ import { NgxGraphModule } from '@swimlane/ngx-graph';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { WorkflowJobsComponent } from './manage-jobs/workflow-jobs/workflow-jobs.component';
import { DragDropModule } from '@angular/cdk/drag-drop';
+import { ManageExternalEventsComponent } from './manage-external-events/manage-external-events.component';
@NgModule({
imports: [
@@ -137,7 +138,8 @@ import { DragDropModule } from '@angular/cdk/drag-drop';
ManageJobsComponent,
ManageSchedulerJobsComponent,
WorkflowJobsComponent,
- WorkflowDiagramComponent
+ WorkflowDiagramComponent,
+ ManageExternalEventsComponent
],
})
export class SystemModule { }
diff --git a/src/app/system/system.service.ts b/src/app/system/system.service.ts
index cf0e5f58f..775ed0e41 100644
--- a/src/app/system/system.service.ts
+++ b/src/app/system/system.service.ts
@@ -670,5 +670,18 @@ export class SystemService {
return this.http.put('/permissions', data, { params: httpParams });
}
+ /**
+ * @returns {Observable}
+ */
+ getExternalEventConfiguration(): Observable {
+ return this.http.get('/externalevents/configuration');
+ }
+
+ /**
+ * @returns {Observable}
+ */
+ putExternalEventConfiguration(payload: any): Observable {
+ return this.http.put('/externalevents/configuration', payload);
+ }
}