| Status |
diff --git a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.scss b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.scss
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.scss
rename to src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.scss
diff --git a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.spec.ts b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.spec.ts
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.spec.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.spec.ts
diff --git a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts
similarity index 96%
rename from src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts
index 9738773fd..ba355502c 100644
--- a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts
+++ b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component.ts
@@ -17,7 +17,7 @@ export class ViewHistorySchedulerJobComponent implements OnInit {
/** Job History data. */
jobHistoryData: any;
/** Columns to be displayed in Scheduler Job History. */
- displayedColumns: string[] = ['version', 'run_start_time', 'status', 'run_type', 'error_log'];
+ displayedColumns: string[] = ['version', 'run_start_time', 'run_end_time', 'status', 'run_type', 'error_log'];
/** Data source for Scheduler Job History table. */
dataSource: MatTableDataSource;
diff --git a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts
similarity index 92%
rename from src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts
index e9be23685..7d2baa8c4 100644
--- a/src/app/system/manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts
+++ b/src/app/system/manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver.ts
@@ -6,7 +6,7 @@ import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { Observable, forkJoin } from 'rxjs';
/** Custom Services */
-import { SystemService } from '../../system.service';
+import { SystemService } from '../../../system.service';
/**
* View History Scheduler Jobs data resolver.
diff --git a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.html b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.html
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.html
rename to src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.html
diff --git a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.scss b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.scss
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.scss
rename to src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.scss
diff --git a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.spec.ts b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.spec.ts
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.spec.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.spec.ts
diff --git a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.ts b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.ts
similarity index 100%
rename from src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component.ts
diff --git a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts
similarity index 87%
rename from src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts
rename to src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts
index 288d7105c..abccf8b8a 100644
--- a/src/app/system/manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts
+++ b/src/app/system/manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver.ts
@@ -3,10 +3,10 @@ import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
-import { Observable, forkJoin } from 'rxjs';
+import { Observable } from 'rxjs';
/** Custom Services */
-import { SystemService } from '../../system.service';
+import { SystemService } from '../../../system.service';
/**
* Selected Scheduler Jobs data resolver.
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.html b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.html
new file mode 100644
index 000000000..6a426d57e
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ link.label }}
+
+
+
+
+
+ {{ link.data.linkText }}
+
+
+
+
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.scss b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.scss
new file mode 100644
index 000000000..225b6ed13
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.scss
@@ -0,0 +1,40 @@
+:host ::ng-deep {
+ display: block;
+ height: inherit;
+ width: inherit;
+
+ .card-container {
+ height: 100;
+ min-width: 150;
+ display: block;
+ fill: #d7dada;
+ border: #000;
+
+ .name {
+ font-size: 12px;
+ }
+
+ label {
+ display: block;
+ text-align: center;
+ font-size: 20px;
+ margin-top: 4px;
+ margin-bottom: 8px;
+ }
+ }
+
+ .link-midpoint {
+ ellipse {
+ fill: white;
+ stroke: black;
+ stroke-width: 1;
+ }
+
+ text {
+ stroke: transparent;
+ fill: black;
+ text-anchor: middle;
+ font-size: 8px;
+ }
+ }
+}
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.spec.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.spec.ts
new file mode 100644
index 000000000..6a513551f
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { WorkflowDiagramComponent } from './workflow-diagram.component';
+
+describe('WorkflowDiagramComponent', () => {
+ let component: WorkflowDiagramComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ WorkflowDiagramComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(WorkflowDiagramComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.ts
new file mode 100644
index 000000000..74d7d4278
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component.ts
@@ -0,0 +1,74 @@
+import { Component, Input, OnInit } from '@angular/core';
+import { DagreNodesOnlyLayout, Edge, Layout, Node } from '@swimlane/ngx-graph';
+import * as shape from 'd3-shape';
+import { Subject } from 'rxjs';
+
+
+export class JobStep {
+ id: number;
+ stepName: string;
+ order: number;
+}
+
+@Component({
+ selector: 'mifosx-workflow-diagram',
+ templateUrl: './workflow-diagram.component.html',
+ styleUrls: ['./workflow-diagram.component.scss']
+})
+export class WorkflowDiagramComponent implements OnInit {
+ @Input() jobStepsData: JobStep[] = [];
+
+ diagramSize: [number, number] = [1024, 300];
+ public nodes: Node[] = [];
+ public links: Edge[] = [];
+ public layoutSettings = {
+ orientation: 'LR'
+ };
+ public curve: any = shape.curveLinear;
+ public layout: Layout = new DagreNodesOnlyLayout();
+ colorScheme = {
+ domain: ['#5AA454', '#A10A28', '#C7B42C']
+ };
+ center$ = new Subject();
+
+ constructor() { }
+
+ ngOnInit(): void {
+ let nodeCounter = 0;
+ for (const jobStep of this.jobStepsData) {
+ const currentNode = `node_${jobStep.order}`;
+ const node: Node = {
+ id: currentNode,
+ label: jobStep.stepName,
+ data: {
+ name: jobStep.stepName,
+ order: jobStep.order
+ }
+ };
+ this.nodes.push(node);
+
+ if (nodeCounter > 0) {
+ const edge: Edge = {
+ id: `link_${(jobStep.id)}`,
+ source: `node_${(jobStep.order - 1)}`,
+ target: currentNode,
+ label: '',
+ data: {
+ linkText: 'Precedes of'
+ }
+ };
+
+ this.links.push(edge);
+ }
+
+ nodeCounter++;
+ }
+ // trigger center
+ this.center$.next();
+ }
+
+ public getStyles(node: Node): any {
+ return 'node_odd';
+ }
+
+}
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.html b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.html
new file mode 100644
index 000000000..1cef23d26
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.html
@@ -0,0 +1,62 @@
+
+
+
+ Job Name
+
+
+ {{ job }}
+
+
+
+
+ 0">
+
+
+
+ 0">
+
+
+
+
+ | Step Name |
+ {{ jobStep.stepName }} |
+
+
+
+ Order |
+ {{ jobStep.order }} |
+
+
+
+ Actions |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+ 0 && !stepOrderHasChanged">
+
+
+
+
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.scss b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.scss
new file mode 100644
index 000000000..764f8780a
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.scss
@@ -0,0 +1,35 @@
+.container {
+ margin: auto !important;
+}
+
+.workflow-graph {
+ min-height: 400px;
+}
+
+.space-top {
+ margin-top: 20px !important;
+}
+
+.space-bottom {
+ margin-bottom: 20px !important;
+}
+
+.cdk-drag-preview {
+ box-sizing: border-box;
+ border-radius: 4px;
+ box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
+ 0 8px 10px 1px rgba(0, 0, 0, 0.14),
+ 0 3px 14px 2px rgba(0, 0, 0, 0.12);
+}
+
+.cdk-drag-placeholder {
+ opacity: 0;
+}
+
+.cdk-drag-animating {
+ transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
+ transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
+}
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.spec.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.spec.ts
new file mode 100644
index 000000000..0d313a02e
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { WorkflowJobsComponent } from './workflow-job.component';
+
+describe('WorkflowJobsComponent', () => {
+ let component: WorkflowJobsComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ WorkflowJobsComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(WorkflowJobsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.ts
new file mode 100644
index 000000000..3e2c13412
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.component.ts
@@ -0,0 +1,97 @@
+import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { MatDialog } from '@angular/material/dialog';
+import { MatTable } from '@angular/material/table';
+import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
+import { SystemService } from 'app/system/system.service';
+import { JobStep } from './workflow-diagram/workflow-diagram.component';
+
+@Component({
+ selector: 'mifosx-workflow-jobs',
+ templateUrl: './workflow-jobs.component.html',
+ styleUrls: ['./workflow-jobs.component.scss']
+})
+export class WorkflowJobsComponent implements OnInit {
+ stepOrderHasChanged = false;
+
+ jobNameOptions: any = [];
+ jobStepsData: any = [];
+ jobStepsDataBase: any = [];
+ jobStepName: String = null;
+
+ jobName = new FormControl('', Validators.required);
+
+ @ViewChild('table') table: MatTable;
+
+ /** Columns to be displayed in the table. */
+ displayedColumns: string[] = ['stepName', 'stepOrder', 'actions'];
+
+ constructor(private systemService: SystemService,
+ public dialog: MatDialog) {}
+
+ ngOnInit(): void {
+ this.systemService.getWorkflowJobNames().toPromise()
+ .then(jobNames => {
+ this.jobNameOptions = jobNames;
+ });
+ }
+
+ /**
+ * Get the Workflow Job steps data
+ * @param {string} jobName Value to Workflow Job name.
+ */
+ getWorkflowJobSteps(jobName: string) {
+ this.systemService.getWorkflowJobSteps(jobName).toPromise()
+ .then(data => {
+ this.jobStepName = jobName;
+ this.jobStepsData = data.businessSteps.sort(function (a: JobStep, b: JobStep) {
+ return a.order - b.order;
+ });
+ this.jobStepsDataBase = this.jobStepsData;
+ });
+ }
+
+ dropTable(event: CdkDragDrop) {
+ const prevIndex = this.jobStepsData.findIndex((d: JobStep) => d === event.item.data);
+ moveItemInArray(this.jobStepsData, prevIndex, event.currentIndex);
+ this.jobStepsData = [...this.jobStepsData];
+ this.table.renderRows();
+ this.stepOrderHasChanged = true;
+ }
+
+ /**
+ * Delete particular Job Step from Workflow Job
+ */
+ removeJobStep(index: number) {
+ const dialogRef = this.dialog.open(DeleteDialogComponent, {
+ data: { deleteContext: `this` }
+ });
+ dialogRef.afterClosed().subscribe((response: any) => {
+ if (response.delete) {
+ this.jobStepsData.splice(index, 1);
+ this.jobStepsData = this.jobStepsData.concat([]);
+ this.jobStepsData = [...this.jobStepsData];
+ this.stepOrderHasChanged = true;
+ }
+ });
+ }
+
+ saveChanges() {
+ // Set the new Order
+ let stepOrder = 1;
+ this.jobStepsData.forEach((jobStep: JobStep) => {
+ jobStep.order = stepOrder++;
+ });
+
+ const payload = {
+ 'businessSteps': this.jobStepsData
+ };
+
+ this.systemService.putWorkflowJobSteps(this.jobStepName, payload).toPromise()
+ .then(data => {
+ this.stepOrderHasChanged = false;
+ });
+ }
+
+}
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.spec.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.spec.ts
new file mode 100644
index 000000000..38999fa1f
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { WorkflowJobResolver } from './workflow-jobs.resolver';
+
+describe('WorkflowJobResolver', () => {
+ let resolver: WorkflowJobResolver;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ resolver = TestBed.inject(WorkflowJobResolver);
+ });
+
+ it('should be created', () => {
+ expect(resolver).toBeTruthy();
+ });
+});
diff --git a/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.ts b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.ts
new file mode 100644
index 000000000..bc4320d9f
--- /dev/null
+++ b/src/app/system/manage-jobs/workflow-jobs/workflow-jobs.resolver.ts
@@ -0,0 +1,24 @@
+import { Injectable } from '@angular/core';
+import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
+import { SystemService } from 'app/system/system.service';
+import { Observable } from 'rxjs';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class WorkflowJobResolver implements Resolve {
+
+ /**
+ * @param {SystemService} systemService System service.
+ */
+ constructor(private systemService: SystemService) {}
+
+ /**
+ * Returns the Configuration data.
+ * @returns {Observable}
+ */
+ resolve(route: ActivatedRouteSnapshot): Observable {
+ return this.systemService.getWorkflowJobNames();
+ }
+
+}
diff --git a/src/app/system/system-routing.module.ts b/src/app/system/system-routing.module.ts
index 3f3257af2..56571f8a2 100644
--- a/src/app/system/system-routing.module.ts
+++ b/src/app/system/system-routing.module.ts
@@ -26,7 +26,6 @@ import { ManageSurveysComponent } from './manage-surveys/manage-surveys.componen
import { CreateSurveyComponent } from './manage-surveys/create-survey/create-survey.component';
import { ViewSurveyComponent } from './manage-surveys/view-survey/view-survey.component';
import { EditSurveyComponent } from './manage-surveys/edit-survey/edit-survey.component';
-import { ManageSchedulerJobsComponent } from './manage-scheduler-jobs/manage-scheduler-jobs.component';
import { AmazonS3Component } from './external-services/amazon-s3/amazon-s3.component';
import { EmailComponent } from './external-services/email/email.component';
import { SMSComponent } from './external-services/sms/sms.component';
@@ -60,7 +59,6 @@ import { HookResolver } from './manage-hooks/view-hook/hook.resolver';
import { HooksTemplateResolver } from './manage-hooks/hooks-template.resolver';
import { RolesAndPermissionsResolver } from './roles-and-permissions/roles-and-permissions.resolver';
import { ManageSurveysResolver } from './manage-surveys/manage-surveys.resolver';
-import { ManageSchedulerJobsResolver } from './manage-scheduler-jobs/manage-scheduler-jobs.resolver';
import { GlobalConfigurationsResolver } from './configurations/global-configurations-tab/global-configurations.resolver';
import { AmazonS3ConfigurationResolver } from './external-services/amazon-s3/amazon-s3.resolver';
import { EmailConfigurationResolver } from './external-services/email/email.resolver';
@@ -75,19 +73,20 @@ import { ReportsResolver } from './manage-reports/reports.resolver';
import { ReportResolver } from './manage-reports/report.resolver';
import { SurveyResolver } from './manage-surveys/survey.resolver';
import { ReportTemplateResolver } from './manage-reports/report-template.resolver';
-import { ViewSchedulerJobComponent } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component';
-import { ViewSchedulerJobResolver } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver';
-import { EditSchedulerJobComponent } from './manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component';
-import { ManageSchedulerJobResolver } from './manage-scheduler-jobs/manage-scheduler-job.resolver';
+import { ViewSchedulerJobComponent } from './manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component';
+import { ViewSchedulerJobResolver } from './manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.resolver';
+import { EditSchedulerJobComponent } from './manage-jobs/scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component';
+import { ManageSchedulerJobResolver } from './manage-jobs/scheduler-jobs/manage-scheduler-job.resolver';
import { ViewRoleResolver } from './roles-and-permissions/view-role/view-role.resolver';
import { EntityToEntityMappingResolver } from './entity-to-entity-mapping/entity-to-entity-mapping.resolver';
import { ConfigureMakerCheckerTasksComponent } from './configure-maker-checker-tasks/configure-maker-checker-tasks.component';
import { MakerCheckerTasksResolver } from './configure-maker-checker-tasks/configure-maker-checker-tasks.resolver';
-import { ViewHistorySchedulerJobComponent } from './manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component';
-import { ViewHistorySchedulerJobsResolver } from './manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver';
+import { ViewHistorySchedulerJobComponent } from './manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component';
+import { ViewHistorySchedulerJobsResolver } from './manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.resolver';
import { ConfigurationsComponent } from './configurations/configurations.component';
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';
const routes: Routes = [
Route.withShell([
@@ -416,12 +415,12 @@ const routes: Routes = [
]
},
{
- path: 'scheduler-jobs',
- data: { title: extract('Manage Scheduler Jobs'), breadcrumb: 'Manage Scheduler Jobs' },
+ path: 'manage-jobs',
+ data: { title: extract('Manage Scheduler and COB Jobs'), breadcrumb: 'Manage Scheduler and COB Jobs' },
children: [
{
path: '',
- component: ManageSchedulerJobsComponent,
+ component: ManageJobsComponent,
resolve: {},
},
{
@@ -601,7 +600,6 @@ const routes: Routes = [
RolesAndPermissionsResolver,
ManageSurveysResolver,
SurveyResolver,
- ManageSchedulerJobsResolver,
GlobalConfigurationsResolver,
GlobalConfigurationResolver,
AmazonS3ConfigurationResolver,
diff --git a/src/app/system/system.component.html b/src/app/system/system.component.html
index 4a3e04595..e2da772fc 100644
--- a/src/app/system/system.component.html
+++ b/src/app/system/system.component.html
@@ -88,27 +88,22 @@
Audit logs of all the activities, such as create client, disburse loans etc
-
-
-
-
-
- Manage Reports
- Add new report and classify reports
-
-
+
+
+
+
+ Manage Reports
+ Add new report and classify reports
+
-
-
-
-
-
- Scheduler Jobs
- Schedule a job, modify or delete jobs
-
-
+
+
+
+
+ Manage Jobs
+ Manage Schedule and Workflow jobs, modify jobs or view history and logs
+
-
@@ -116,8 +111,6 @@
Configurations
Global configurations, Cache and Business Date settings
-
-
diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts
index 0fd35f842..a61e0de8b 100644
--- a/src/app/system/system.module.ts
+++ b/src/app/system/system.module.ts
@@ -22,7 +22,6 @@ import { AddRoleComponent } from './roles-and-permissions/add-role/add-role.comp
import { ManageSurveysComponent } from './manage-surveys/manage-surveys.component';
import { ViewSurveyComponent } from './manage-surveys/view-survey/view-survey.component';
import { CreateSurveyComponent } from './manage-surveys/create-survey/create-survey.component';
-import { ManageSchedulerJobsComponent } from './manage-scheduler-jobs/manage-scheduler-jobs.component';
import { EditConfigurationComponent } from './configurations/global-configurations-tab/edit-configuration/edit-configuration.component';
import { AmazonS3Component } from './external-services/amazon-s3/amazon-s3.component';
import { EmailComponent } from './external-services/email/email.component';
@@ -45,7 +44,7 @@ import { EditReportComponent } from './manage-reports/edit-report/edit-report.co
import { AuditTrailsComponent } from './audit-trails/audit-trails.component';
import { ViewAuditComponent } from './audit-trails/view-audit/view-audit.component';
import { ColumnDialogComponent } from './manage-data-tables/column-dialog/column-dialog.component';
-import { ViewHistorySchedulerJobComponent } from './manage-scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component';
+import { ViewHistorySchedulerJobComponent } from './manage-jobs/scheduler-jobs/view-history-scheduler-job/view-history-scheduler-job.component';
import { EditHookComponent } from './manage-hooks/edit-hook/edit-hook.component';
import { ViewHookComponent } from './manage-hooks/view-hook/view-hook.component';
import { CreateHookComponent } from './manage-hooks/create-hook/create-hook.component';
@@ -56,19 +55,29 @@ import { EntityToEntityMappingComponent } from './entity-to-entity-mapping/entit
/** Dialog Component Imports */
import { ReportParameterDialogComponent } from './manage-reports/report-parameter-dialog/report-parameter-dialog.component';
import { AddEventDialogComponent } from './manage-hooks/add-event-dialog/add-event-dialog.component';
-import { ViewSchedulerJobComponent } from './manage-scheduler-jobs/view-scheduler-job/view-scheduler-job.component';
-import { EditSchedulerJobComponent } from './manage-scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component';
+import { ViewSchedulerJobComponent } from './manage-jobs/scheduler-jobs/view-scheduler-job/view-scheduler-job.component';
+import { EditSchedulerJobComponent } from './manage-jobs/scheduler-jobs/edit-scheduler-job/edit-scheduler-job.component';
import { ConfigureMakerCheckerTasksComponent } from './configure-maker-checker-tasks/configure-maker-checker-tasks.component';
import { EditSurveyComponent } from './manage-surveys/edit-survey/edit-survey.component';
import { BusinessDateTabComponent } from './configurations/business-date-tab/business-date-tab.component';
import { ConfigurationsComponent } from './configurations/configurations.component';
import { GlobalConfigurationsTabComponent } from './configurations/global-configurations-tab/global-configurations-tab.component';
+import { ManageJobsComponent } from './manage-jobs/manage-jobs.component';
+import { ManageSchedulerJobsComponent } from './manage-jobs/scheduler-jobs/manage-scheduler-jobs.component';
+import { WorkflowDiagramComponent } from './manage-jobs/workflow-jobs/workflow-diagram/workflow-diagram.component';
+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';
@NgModule({
imports: [
SystemRoutingModule,
SharedModule,
PipesModule,
+ NgxGraphModule,
+ BrowserAnimationsModule,
+ DragDropModule,
DirectivesModule
],
declarations: [
@@ -85,7 +94,6 @@ import { GlobalConfigurationsTabComponent } from './configurations/global-config
ManageHooksComponent,
RolesAndPermissionsComponent,
ManageSurveysComponent,
- ManageSchedulerJobsComponent,
EditConfigurationComponent,
AmazonS3Component,
EmailComponent,
@@ -125,7 +133,11 @@ import { GlobalConfigurationsTabComponent } from './configurations/global-config
EditSurveyComponent,
BusinessDateTabComponent,
ConfigurationsComponent,
- GlobalConfigurationsTabComponent
+ GlobalConfigurationsTabComponent,
+ ManageJobsComponent,
+ ManageSchedulerJobsComponent,
+ WorkflowJobsComponent,
+ WorkflowDiagramComponent
],
})
export class SystemModule { }
diff --git a/src/app/system/system.service.ts b/src/app/system/system.service.ts
index dff1f1734..4282f9852 100644
--- a/src/app/system/system.service.ts
+++ b/src/app/system/system.service.ts
@@ -247,6 +247,27 @@ export class SystemService {
return this.http.get('/jobs');
}
+ /**
+ * @returns {Observable} Fetches Jobs.
+ */
+ getWorkflowJobNames(): Observable {
+ return this.http.get('/jobs/names');
+ }
+
+ /**
+ * @returns {Observable} Fetches Jobs.
+ */
+ getWorkflowJobSteps(jobName: String): Observable {
+ return this.http.get(`/jobs/${jobName}/steps`);
+ }
+
+ /**
+ * @returns {Observable} Fetches Jobs.
+ */
+ putWorkflowJobSteps(jobName: String, payload: any): Observable {
+ return this.http.put(`/jobs/${jobName}/steps`, payload);
+ }
+
/**
* @returns {Observable} Fetches Scheduler.
*/
|