Commit 7d463ed7 by GD-A-150752

edit-workflow-template 85%

parent 5121545b
......@@ -4,7 +4,7 @@ import { Select2Module } from 'ng2-select2';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { ModalModule } from 'ngx-bootstrap/modal';
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 { AppRoutingModule } from './app.routing';
import { AppService } from './app.service';
......@@ -31,7 +31,10 @@ import { OneITModule } from './oneit/oneit.module';
DeviceDetectorModule.forRoot(),
Select2Module,
ModalModule.forRoot(),
BsDropdownModule.forRoot()
BsDropdownModule.forRoot(),
InputMaskModule,
DragDropModule,
OrderListModule
],
declarations: [
AppComponent,
......
......@@ -26,8 +26,9 @@ export class AppService {
return this.enumService.getEnumsWithNULLOptionLabel('PlaceholderOptions', 'Select variable');
}
getTypes(serviceName: string): Observable<Array<any>> {
return this.enumService.getEnums(serviceName, true);
getTypes(serviceName: string, includeNull = false, blankLabel = null): Observable<Array<any>> {
return includeNull ? this.enumService.getEnumsWithNULLOptionLabel(serviceName, blankLabel) :
this.enumService.getEnums(serviceName, true);
}
getSearchListing(serviceName: string, queryType: string, queryParams, assocs, searchName): Observable<Array<any>> {
......
......@@ -2,7 +2,7 @@
<app-error-message></app-error-message>
<form #form="ngForm">
<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 class="ui-g form-group">
<div class="ui-g-12 ui-md-12">
......@@ -100,21 +100,19 @@
</div>
<div class="ui-g form-group">
<div class="ui-g-12 ui-md-12">
<div class="ui-g form-group">
<div class="ui-g-12 ui-md-3 ui-fluid">
<p-button label="Cancel" [disabled]="showLoader"
routerLink="/admin/list-message-templates"></p-button>
</div>
<div class="ui-g-12 ui-md-3 ui-fluid">
<p-button *ngIf="showSaveBtn()" label="Save" [disabled]="showLoader"
(onClick)="saveMessageTemplate()">
</p-button>
</div>
<div class="ui-g-12 ui-md-3 ui-fluid">
<p-button *ngIf="showSaveCopyBtn()" label="Save As a Copy" [disabled]="showLoader"
(onClick)="saveMessageTemplate(true)">
</p-button>
</div>
<div class="text-center form-group">
<button type="button" value="Cancel" class="btn btn-primary largeBtn greyBtn"
routerLink="/admin/list-message-templates">Cancel
</button>
<button *ngIf="showSaveBtn()" type="button" value="Save" class="btn btn-primary largeBtn"
(click)="saveMessageTemplate()" [disabled]="showLoader">
Save
</button>
<button *ngIf="showSaveCopyBtn()" type="button" value="Save As a Copy"
class="btn btn-primary largeBtn"
(click)="saveMessageTemplate(true)" [disabled]="showLoader">
Save As a Copy
</button>
</div>
</div>
</div>
......
......@@ -400,4 +400,6 @@ export class EditMessageTemplateComponent extends BaseComponent implements OnIni
createdExists(): boolean {
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 { Observable } from 'rxjs/Observable';
import { SERVICES } from "../../constants";
import { MessageTemplateModel } from "../../models/messageTemplate.model";
import { SearchService } from '../../oneit/services/search.service';
import { UtilsService } from '../../oneit/services/utils.service';
......@@ -12,11 +14,10 @@ export class EditWorkflowTemplateService {
) {
}
getDummy456s(assocs): Observable<any> {
return this.searchService.getObjects('MessageTemplates', 'All', {}, assocs, null, null, null, null)
getMessageTemplates(assocs, queryParam): Observable<Array<MessageTemplateModel>> {
return this.searchService.getObjects(SERVICES.MESSAGE_TEMPLATES, 'All', queryParam, assocs, 'Autocomplete', null, null, null)
.map(
data =>
this.utilsService.convertResponseToObjects(data, assocs)
data => this.utilsService.convertResponseToObjects(data, assocs)
);
}
......
......@@ -24,7 +24,7 @@ export class ErrorMessageComponent implements OnInit {
this.subscriptions.push(
this.msgsService.errorMsgsUpdated.subscribe(
data => {
console.log(data);
// console.log(data);
this.errorMsgs = data;
}
)
......
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { combineLatest } from 'rxjs/observable/combineLatest';
import { Subscription } from 'rxjs/Subscription';
import { AppService } from '../../app.service';
import { SEARCH, SERVICES } from '../../constants';
......@@ -7,6 +8,7 @@ import { MessageTemplateModel } from '../../models/messageTemplate.model';
import { SorterModel } from '../../models/sorterModel';
import { SearchService } from '../../oneit/services/search.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';
@Component({
......@@ -20,13 +22,15 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
sharedTemplates: Array<MessageTemplateModel> = [];
sortOptions: Array<SorterModel>;
showLoader = false;
processing = false;
constructor(
private router: Router,
private activatedRoute: ActivatedRoute,
private utilsService: UtilsService,
private searchService: SearchService,
private appService: AppService
private appService: AppService,
private adminPortalLayoutService: AdminPortalLayoutService
) {
super(utilsService);
}
......@@ -37,6 +41,24 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
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 sharedMsgParams = {
OnlyGlobalTemplate: true
};
......@@ -45,33 +67,21 @@ export class ListMessageTemplateComponent extends BaseComponent implements OnIni
};
this.subscriptions.push(
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', myMsgParams, [], SEARCH.MESSAGE_TEMPLATE)
.subscribe(
messages => {
this.myTemplates = messages;
this.sortSpecificTemplate('myTemplates');
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
combineLatest(
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', myMsgParams, [], SEARCH.MESSAGE_TEMPLATE),
this.appService.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', sharedMsgParams, [], SEARCH.MESSAGE_TEMPLATE)
)
);
this.subscriptions.push(
this.appService
.getSearchListing(SERVICES.MESSAGE_TEMPLATES, 'All', sharedMsgParams, [], SEARCH.MESSAGE_TEMPLATE)
.subscribe(
messages => {
this.sharedTemplates = messages;
(response: [Array<MessageTemplateModel>, Array<MessageTemplateModel>]) => {
this.myTemplates = response[0].filter(message => message.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.sharedTemplates = response[1];
this.sortSpecificTemplate('myTemplates');
this.sortSpecificTemplate('sharedTemplates');
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
);
setTimeout(() => (this.showLoader = false), 0);
}
sortSpecificTemplate(arrayName: string): void {
......
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { combineLatest } from 'rxjs/observable/combineLatest';
import { Subscription } from 'rxjs/Subscription';
import { AppService } from '../../app.service';
import { SEARCH, SERVICES } from '../../constants';
import { SorterModel } from '../../models/sorterModel';
import { WorkflowTemplateModel } from '../../models/workflowTemplate.model';
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';
@Component({
......@@ -19,11 +21,13 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
sharedTemplates: Array<WorkflowTemplateModel> = [];
sortOptions: Array<SorterModel>;
showLoader = false;
processing = false;
constructor(
private router: Router,
private utilsService: UtilsService,
private appService: AppService
private appService: AppService,
private adminPortalLayoutService: AdminPortalLayoutService
) {
super(utilsService);
}
......@@ -33,31 +37,48 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
new SorterModel('Alphabetical (A-Z)', true),
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 = {
OnlyGlobalTemplates: true
};
const myParams = {
OnlyGlobalTemplates: false
};
this.subscriptions.push(
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', myParams, [], SEARCH.WORKFLOW_TEMPLATE)
.subscribe(
messages => {
this.myTemplates = messages;
this.sortSpecificTemplate('myTemplates');
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
);
this.subscriptions.push(
combineLatest(
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', myParams, [], SEARCH.WORKFLOW_TEMPLATE),
this.appService.getSearchListing(SERVICES.WORKFLOW_TEMPLATES, 'All', sharedParams, [], SEARCH.WORKFLOW_TEMPLATE)
)
.subscribe(
messages => {
this.sharedTemplates = messages;
(response: [Array<WorkflowTemplateModel>, Array<WorkflowTemplateModel>]) => {
this.myTemplates = response[0].filter(wf => wf.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.sortSpecificTemplate('myTemplates');
this.sharedTemplates = response[1];
this.sortSpecificTemplate('sharedTemplates');
const val = this.myTemplates.map(m => m.ObjectID)
.join(',');
console.log(val);
this.showLoader = false;
},
error => {
this.showLoader = false;
......@@ -65,7 +86,6 @@ export class ListWorkFlowsComponent extends BaseComponent implements OnInit {
}
)
);
setTimeout(() => (this.showLoader = false), 0);
}
sortSpecificTemplate(arrayName: string): void {
......
......@@ -4,7 +4,10 @@ export const CLASSES = {
APPLICATION_STATUS: 'performa.orm.types.ApplicationStatus',
HIRING_TEAM: 'performa.orm.HiringTeam',
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 = {
......
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 { HiringTeamModel } from './hiringTeam.model';
import { ResponseActionEnum } from './responseAction.enum';
import { WorkflowMessageModel } from './workflowMessage.model';
import { WorkflowStageModel } from './workflowStage.model';
export class WorkflowTemplateModel {
ObjectID: string;
......@@ -19,8 +21,7 @@ export class WorkflowTemplateModel {
JobOutlineButtonText: string;
RelatedToJob: boolean;
IsSystemGenerated: boolean;
WithdrawalMessage: string;
HiringTeam: HiringTeamModel | string;
WorkFlowStages: Array<string>;
WorkFlowStages: Array<WorkflowStageModel>;
Jobs: Array<string>;
}
......@@ -10,6 +10,33 @@
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 {
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