Commit 7d463ed7 by GD-A-150752

edit-workflow-template 85%

parent 5121545b
...@@ -4,7 +4,7 @@ import { Select2Module } from 'ng2-select2'; ...@@ -4,7 +4,7 @@ import { Select2Module } from 'ng2-select2';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { ModalModule } from 'ngx-bootstrap/modal'; import { ModalModule } from 'ngx-bootstrap/modal';
import { DeviceDetectorModule } from 'ngx-device-detector'; import { DeviceDetectorModule } from 'ngx-device-detector';
import { ConfirmationService } from 'primeng/primeng'; import { ConfirmationService, DragDropModule, InputMaskModule, OrderListModule } from 'primeng/primeng';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { AppRoutingModule } from './app.routing'; import { AppRoutingModule } from './app.routing';
import { AppService } from './app.service'; import { AppService } from './app.service';
...@@ -31,7 +31,10 @@ import { OneITModule } from './oneit/oneit.module'; ...@@ -31,7 +31,10 @@ import { OneITModule } from './oneit/oneit.module';
DeviceDetectorModule.forRoot(), DeviceDetectorModule.forRoot(),
Select2Module, Select2Module,
ModalModule.forRoot(), ModalModule.forRoot(),
BsDropdownModule.forRoot() BsDropdownModule.forRoot(),
InputMaskModule,
DragDropModule,
OrderListModule
], ],
declarations: [ declarations: [
AppComponent, AppComponent,
......
...@@ -26,8 +26,9 @@ export class AppService { ...@@ -26,8 +26,9 @@ export class AppService {
return this.enumService.getEnumsWithNULLOptionLabel('PlaceholderOptions', 'Select variable'); return this.enumService.getEnumsWithNULLOptionLabel('PlaceholderOptions', 'Select variable');
} }
getTypes(serviceName: string): Observable<Array<any>> { getTypes(serviceName: string, includeNull = false, blankLabel = null): Observable<Array<any>> {
return this.enumService.getEnums(serviceName, true); return includeNull ? this.enumService.getEnumsWithNULLOptionLabel(serviceName, blankLabel) :
this.enumService.getEnums(serviceName, true);
} }
getSearchListing(serviceName: string, queryType: string, queryParams, assocs, searchName): Observable<Array<any>> { getSearchListing(serviceName: string, queryType: string, queryParams, assocs, searchName): Observable<Array<any>> {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<app-error-message></app-error-message> <app-error-message></app-error-message>
<form #form="ngForm"> <form #form="ngForm">
<div class="ui-g ui-fluid"> <div class="ui-g ui-fluid">
<div class="ui-g-10 listing-title pt-0 pb-0">{{editMode ? "Edit" : "Add"}} Message Template</div> <div class="ui-g-10 listing-title pt-0 pb-0">{{editMode ? "Edit" : "Add"}} Workflow Template</div>
</div> </div>
<div class="ui-g form-group"> <div class="ui-g form-group">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
...@@ -100,21 +100,19 @@ ...@@ -100,21 +100,19 @@
</div> </div>
<div class="ui-g form-group"> <div class="ui-g form-group">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="ui-g form-group"> <div class="text-center form-group">
<div class="ui-g-12 ui-md-3 ui-fluid"> <button type="button" value="Cancel" class="btn btn-primary largeBtn greyBtn"
<p-button label="Cancel" [disabled]="showLoader" routerLink="/admin/list-message-templates">Cancel
routerLink="/admin/list-message-templates"></p-button> </button>
</div> <button *ngIf="showSaveBtn()" type="button" value="Save" class="btn btn-primary largeBtn"
<div class="ui-g-12 ui-md-3 ui-fluid"> (click)="saveMessageTemplate()" [disabled]="showLoader">
<p-button *ngIf="showSaveBtn()" label="Save" [disabled]="showLoader" Save
(onClick)="saveMessageTemplate()"> </button>
</p-button> <button *ngIf="showSaveCopyBtn()" type="button" value="Save As a Copy"
</div> class="btn btn-primary largeBtn"
<div class="ui-g-12 ui-md-3 ui-fluid"> (click)="saveMessageTemplate(true)" [disabled]="showLoader">
<p-button *ngIf="showSaveCopyBtn()" label="Save As a Copy" [disabled]="showLoader" Save As a Copy
(onClick)="saveMessageTemplate(true)"> </button>
</p-button>
</div>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -400,4 +400,6 @@ export class EditMessageTemplateComponent extends BaseComponent implements OnIni ...@@ -400,4 +400,6 @@ export class EditMessageTemplateComponent extends BaseComponent implements OnIni
createdExists(): boolean { createdExists(): boolean {
return Object.keys(this.createdObjs).length > 0; return Object.keys(this.createdObjs).length > 0;
} }
// tslint:disable-next-line:max-file-line-count
} }
p-dropdown {
::ng-deep {
.ui-dropdown {
width: 100% !important;
}
.dropdown-text {
top: 0;
font-size: 14px;
margin-top: 4px;
position: absolute;
left: 30px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
width: 180px;
}
}
}
p-inputMask {
::ng-deep {
input {
width: 100%;
height: 100%;
}
}
}
::ng-deep {
.ui-orderlist-controls {
display: none !important;
}
.ui-orderlist-list-container {
width: 100%;
border: 0;
.ui-orderlist-caption {
border: 0;
}
.ui-orderlist-list {
border: 0;
height: auto;
.ui-orderlist-item {
cursor: auto;
min-height: 50px;
&:hover {
background-color: transparent !important;
}
}
}
}
}
.drag-block {
cursor: pointer;
}
export class WorkflowTemplate {
ObjectID: string;
ButtonText: string;
HeaderText: string;
CaptureCV: boolean;
MandatoryCV: boolean;
CaptureCoverLetter: boolean;
Mandatorycoverletter: boolean;
HeaderTextforThankYoupage: string;
SecondaryText: string;
Automaticallyprogresstonextstage: boolean;
Hrs1: string;
BusinessHrsOnly: boolean;
Messagetemplate: any;
Hrswithdraw: string;
Variationwithdraw: string;
Messagetemplate_withdraw: any;
Usemessaging: boolean;
Dummy457: string;
messagetemplate_withdraw: string;
messagetemplate: string;
Dummy461: string;
}
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { SERVICES } from "../../constants";
import { MessageTemplateModel } from "../../models/messageTemplate.model";
import { SearchService } from '../../oneit/services/search.service'; import { SearchService } from '../../oneit/services/search.service';
import { UtilsService } from '../../oneit/services/utils.service'; import { UtilsService } from '../../oneit/services/utils.service';
...@@ -12,11 +14,10 @@ export class EditWorkflowTemplateService { ...@@ -12,11 +14,10 @@ export class EditWorkflowTemplateService {
) { ) {
} }
getDummy456s(assocs): Observable<any> { getMessageTemplates(assocs, queryParam): Observable<Array<MessageTemplateModel>> {
return this.searchService.getObjects('MessageTemplates', 'All', {}, assocs, null, null, null, null) return this.searchService.getObjects(SERVICES.MESSAGE_TEMPLATES, 'All', queryParam, assocs, 'Autocomplete', null, null, null)
.map( .map(
data => data => this.utilsService.convertResponseToObjects(data, assocs)
this.utilsService.convertResponseToObjects(data, assocs)
); );
} }
......
...@@ -24,7 +24,7 @@ export class ErrorMessageComponent implements OnInit { ...@@ -24,7 +24,7 @@ export class ErrorMessageComponent implements OnInit {
this.subscriptions.push( this.subscriptions.push(
this.msgsService.errorMsgsUpdated.subscribe( this.msgsService.errorMsgsUpdated.subscribe(
data => { data => {
console.log(data); // console.log(data);
this.errorMsgs = data; this.errorMsgs = data;
} }
) )
......
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { combineLatest } from 'rxjs/observable/combineLatest';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
import { AppService } from '../../app.service'; import { AppService } from '../../app.service';
import { SEARCH, SERVICES } from '../../constants'; import { SEARCH, SERVICES } from '../../constants';
...@@ -7,6 +8,7 @@ import { MessageTemplateModel } from '../../models/messageTemplate.model'; ...@@ -7,6 +8,7 @@ import { MessageTemplateModel } from '../../models/messageTemplate.model';
import { SorterModel } from '../../models/sorterModel'; import { SorterModel } from '../../models/sorterModel';
import { SearchService } from '../../oneit/services/search.service'; import { SearchService } from '../../oneit/services/search.service';
import { UtilsService } from '../../oneit/services/utils.service'; import { UtilsService } from '../../oneit/services/utils.service';
import { AdminPortalLayoutService } from '../admin-portal/admin-portal-layout/admin-portal-layout.service';
import { BaseComponent } from '../base/base.component'; import { BaseComponent } from '../base/base.component';
@Component({ @Component({
...@@ -20,13 +22,15 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni ...@@ -20,13 +22,15 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
sharedTemplates: Array<MessageTemplateModel> = []; sharedTemplates: Array<MessageTemplateModel> = [];
sortOptions: Array<SorterModel>; sortOptions: Array<SorterModel>;
showLoader = false; showLoader = false;
processing = false;
constructor( constructor(
private router: Router, private router: Router,
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private utilsService: UtilsService, private utilsService: UtilsService,
private searchService: SearchService, private searchService: SearchService,
private appService: AppService private appService: AppService,
private adminPortalLayoutService: AdminPortalLayoutService
) { ) {
super(utilsService); super(utilsService);
} }
...@@ -37,6 +41,24 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni ...@@ -37,6 +41,24 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
new SorterModel('Alphabetical (Z-A)', false) new SorterModel('Alphabetical (Z-A)', false)
]; ];
this.showLoader = true; this.showLoader = true;
this.processing = true;
this.startComponent();
this.subscriptions.push(this.adminPortalLayoutService.userDataUpdated
.subscribe(
() => {
this.startComponent();
}
));
}
startComponent(): void {
if (!this.processing) {
return;
}
this.processing = false;
const sharedMsgParams = { const sharedMsgParams = {
OnlyGlobalTemplate: true OnlyGlobalTemplate: true
}; };
...@@ -45,33 +67,21 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni ...@@ -45,33 +67,21 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
}; };
this.subscriptions.push( this.subscriptions.push(
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', myMsgParams, [], SEARCH.MESSAGE_TEMPLATE) combineLatest(
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', myMsgParams, [], SEARCH.MESSAGE_TEMPLATE),
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', sharedMsgParams, [], SEARCH.MESSAGE_TEMPLATE)
)
.subscribe( .subscribe(
messages => { (response: [Array<MessageTemplateModel>, Array<MessageTemplateModel>]) => {
this.myTemplates = messages; this.myTemplates = response[0].filter(message => message.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.sharedTemplates = response[1];
this.sortSpecificTemplate('myTemplates'); this.sortSpecificTemplate('myTemplates');
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
);
this.subscriptions.push(
this.appService
.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', sharedMsgParams, [], SEARCH.MESSAGE_TEMPLATE)
.subscribe(
messages => {
this.sharedTemplates = messages;
this.sortSpecificTemplate('sharedTemplates'); this.sortSpecificTemplate('sharedTemplates');
},
error => {
this.showLoader = false; this.showLoader = false;
this.utilsService.handleError(error);
} }
) )
); );
setTimeout(() => (this.showLoader = false), 0);
} }
sortSpecificTemplate(arrayName: string): void { sortSpecificTemplate(arrayName: string): void {
......
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { combineLatest } from 'rxjs/observable/combineLatest';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
import { AppService } from '../../app.service'; import { AppService } from '../../app.service';
import { SEARCH, SERVICES } from '../../constants'; import { SEARCH, SERVICES } from '../../constants';
import { SorterModel } from '../../models/sorterModel'; import { SorterModel } from '../../models/sorterModel';
import { WorkflowTemplateModel } from '../../models/workflowTemplate.model'; import { WorkflowTemplateModel } from '../../models/workflowTemplate.model';
import { UtilsService } from '../../oneit/services/utils.service'; import { UtilsService } from '../../oneit/services/utils.service';
import { AdminPortalLayoutService } from '../admin-portal/admin-portal-layout/admin-portal-layout.service';
import { BaseComponent } from '../base/base.component'; import { BaseComponent } from '../base/base.component';
@Component({ @Component({
...@@ -19,11 +21,13 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit { ...@@ -19,11 +21,13 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
sharedTemplates: Array<WorkflowTemplateModel> = []; sharedTemplates: Array<WorkflowTemplateModel> = [];
sortOptions: Array<SorterModel>; sortOptions: Array<SorterModel>;
showLoader = false; showLoader = false;
processing = false;
constructor( constructor(
private router: Router, private router: Router,
private utilsService: UtilsService, private utilsService: UtilsService,
private appService: AppService private appService: AppService,
private adminPortalLayoutService: AdminPortalLayoutService
) { ) {
super(utilsService); super(utilsService);
} }
...@@ -33,31 +37,48 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit { ...@@ -33,31 +37,48 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
new SorterModel('Alphabetical (A-Z)', true), new SorterModel('Alphabetical (A-Z)', true),
new SorterModel('Alphabetical (Z-A)', false) new SorterModel('Alphabetical (Z-A)', false)
]; ];
this.showLoader = true;
this.processing = true;
this.startComponent();
this.subscriptions.push(this.adminPortalLayoutService.userDataUpdated
.subscribe(
() => {
this.startComponent();
}
));
}
startComponent(): void {
if (!this.processing) {
return;
}
this.processing = false;
const sharedParams = { const sharedParams = {
OnlyGlobalTemplates: true OnlyGlobalTemplates: true
}; };
const myParams = { const myParams = {
OnlyGlobalTemplates: false OnlyGlobalTemplates: false
}; };
this.subscriptions.push( this.subscriptions.push(
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', myParams, [], SEARCH.WORKFLOW_TEMPLATE) combineLatest(
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', myParams, [], SEARCH.WORKFLOW_TEMPLATE),
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', sharedParams, [], SEARCH.WORKFLOW_TEMPLATE)
)
.subscribe( .subscribe(
messages => { (response: [Array<WorkflowTemplateModel>, Array<WorkflowTemplateModel>]) => {
this.myTemplates = messages; this.myTemplates = response[0].filter(wf => wf.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.sortSpecificTemplate('myTemplates'); this.sortSpecificTemplate('myTemplates');
}, this.sharedTemplates = response[1];
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
);
this.subscriptions.push(
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', sharedParams, [], SEARCH.WORKFLOW_TEMPLATE)
.subscribe(
messages => {
this.sharedTemplates = messages;
this.sortSpecificTemplate('sharedTemplates'); this.sortSpecificTemplate('sharedTemplates');
const val = this.myTemplates.map(m => m.ObjectID)
.join(',');
console.log(val);
this.showLoader = false;
}, },
error => { error => {
this.showLoader = false; this.showLoader = false;
...@@ -65,7 +86,6 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit { ...@@ -65,7 +86,6 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
} }
) )
); );
setTimeout(() => (this.showLoader = false), 0);
} }
sortSpecificTemplate(arrayName: string): void { sortSpecificTemplate(arrayName: string): void {
......
...@@ -4,7 +4,10 @@ export const CLASSES = { ...@@ -4,7 +4,10 @@ export const CLASSES = {
APPLICATION_STATUS: 'performa.orm.types.ApplicationStatus', APPLICATION_STATUS: 'performa.orm.types.ApplicationStatus',
HIRING_TEAM: 'performa.orm.HiringTeam', HIRING_TEAM: 'performa.orm.HiringTeam',
PLACEHOLDER_OPTIONS: 'performa.orm.types.PlaceholderOptions', PLACEHOLDER_OPTIONS: 'performa.orm.types.PlaceholderOptions',
WORKFLOW_TEMPLATE: 'performa.orm.WorkFlowTemplate' WORKFLOW_TEMPLATE: 'performa.orm.WorkFlowTemplate',
WORKFLOW_MESSAGE: 'performa.orm.WorkFlowMessage',
WORKFLOW_STAGE: 'performa.orm.WorkFlowStage',
WORKFLOW_STEP: 'performa.orm.WorkFlowStep'
}; };
export const SERVICES = { export const SERVICES = {
......
import { CLASSES } from '../constants';
import { MessageTemplateModel } from './messageTemplate.model';
export class WorkflowMessageModel {
ObjectID: string;
ObjectClass = CLASSES.WORKFLOW_MESSAGE;
Delay: string;
Variance: string;
BusinessHoursOnly: boolean;
IsWithdrawalMessage: boolean;
ApplicantSources: any;
MessageTemplate: MessageTemplateModel | string;
WorkFlowStage: string;
constructor(wfStageID: string) {
this.WorkFlowStage = wfStageID;
}
}
import { CLASSES } from '../constants';
import { StageTypeEnum } from './stageType.enum';
import { WorkflowMessageModel } from './workflowMessage.model';
import { WorkflowStepModel } from './workflowStep.model';
export class WorkflowStageModel {
ObjectID: string;
ObjectClass = CLASSES.WORKFLOW_STAGE;
Name: string;
UseMessaging: boolean;
StageType: StageTypeEnum;
SortOrder: number;
AutoProgress: boolean;
WorkFlowTemplate: string; // ID of WorkflowTemplateModel
WorkFlowMessages: Array<WorkflowMessageModel>;
Steps: Array<WorkflowStepModel>;
constructor(name: string, useMsg: boolean, stage: StageTypeEnum, order: number, autoProgress: boolean,
templateID: string) {
this.Name = name;
this.UseMessaging = useMsg;
this.StageType = stage;
this.SortOrder = order;
this.AutoProgress = autoProgress;
this.WorkFlowTemplate = templateID;
this.Steps = [];
this.WorkFlowMessages = [];
}
}
import { CLASSES } from '../constants';
import { StepTypeEnum } from './stepType.enum';
export class WorkflowStepModel {
ObjectID: string;
ObjectClass = CLASSES.WORKFLOW_STEP;
SortOrder: number;
StepType: StepTypeEnum;
WorkFlowStage: string; // ID of WorkflowStageModel
constructor(order: number, step: StepTypeEnum, stageID: string) {
this.SortOrder = order;
this.StepType = step;
this.WorkFlowStage = stageID;
}
}
import { CLASSES } from '../constants'; import { CLASSES } from '../constants';
import { HiringTeamModel } from './hiringTeam.model'; import { HiringTeamModel } from './hiringTeam.model';
import { ResponseActionEnum } from './responseAction.enum'; import { ResponseActionEnum } from './responseAction.enum';
import { WorkflowMessageModel } from './workflowMessage.model';
import { WorkflowStageModel } from './workflowStage.model';
export class WorkflowTemplateModel { export class WorkflowTemplateModel {
ObjectID: string; ObjectID: string;
...@@ -19,8 +21,7 @@ export class WorkflowTemplateModel { ...@@ -19,8 +21,7 @@ export class WorkflowTemplateModel {
JobOutlineButtonText: string; JobOutlineButtonText: string;
RelatedToJob: boolean; RelatedToJob: boolean;
IsSystemGenerated: boolean; IsSystemGenerated: boolean;
WithdrawalMessage: string;
HiringTeam: HiringTeamModel | string; HiringTeam: HiringTeamModel | string;
WorkFlowStages: Array<string>; WorkFlowStages: Array<WorkflowStageModel>;
Jobs: Array<string>; Jobs: Array<string>;
} }
...@@ -10,6 +10,33 @@ ...@@ -10,6 +10,33 @@
white-space: nowrap; white-space: nowrap;
} }
::ng-deep {
.ui-inputswitch {
height: 18px;
width: 36px !important;
overflow: visible;
background-color: #9e9e9e;
border-color: #9e9e9e;
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
}
.ui-inputswitch-slider {
&:before {
border-radius: 50%;
position: absolute;
content: "";
height: 15px;
width: 15px;
left: 1px;
bottom: 0;
background-color: white;
transition: .4s;
}
}
}
.w-80 { .w-80 {
width: 80% !important; width: 80% !important;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment