Commit b3042cc6 by GD-A-150752

Bug-Fix

S52571964 #Couldn't remove a message template
S52560368 #Hiring Team shouldn't see Save into all templates button
S52549430 #UI Issues (Except 7b)
parent 64e7ad44
...@@ -92,7 +92,7 @@ export const routes: Routes = [ ...@@ -92,7 +92,7 @@ export const routes: Routes = [
canActivate: [AuthGuard] canActivate: [AuthGuard]
}, },
{ {
path: 'message-engine', path: 'message-engine/:jobId',
component: MessageEngineApplicantViewComponent component: MessageEngineApplicantViewComponent
} }
] ]
......
<div class="dashboard-content-area second-part {{objectID ? 'openedFromWorkflow' : '' }}"> <div class="{{objectID ? 'openedFromWorkflow' : 'dashboard-content-area second-part' }}">
<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-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="ui-g ui-fluid"> <div class="ui-g ui-fluid" *ngIf="!objectID">
<div class="ui-g-12"> <div class="ui-g-12">
<div class="page-title page-title-with-arrow"> <div class="page-title page-title-with-arrow">
<a [routerLink]="['/admin/list-message-templates']" class="arrow-btn-blue ml-0" <a [routerLink]="['/admin/list-message-templates']" class="arrow-btn-blue ml-0"
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<label for="MessageTemplate{{messageTemplate.ObjectID}}">Message Template</label> <label for="MessageTemplate{{messageTemplate.ObjectID}}">Message Template</label>
<input [(ngModel)]="messageTemplate.TemplateName" <input [(ngModel)]="messageTemplate.TemplateName"
name="MessageTemplate{{messageTemplate.ObjectID}}" tabindex="1" name="MessageTemplate{{messageTemplate.ObjectID}}" tabindex="1"
autofocus
fieldLabel="Message Template" type="text" [disabled]="showLoader" fieldLabel="Message Template" type="text" [disabled]="showLoader"
class="form-control" id="MessageTemplate{{messageTemplate.ObjectID}}"> class="form-control" id="MessageTemplate{{messageTemplate.ObjectID}}">
</div> </div>
...@@ -42,7 +43,7 @@ ...@@ -42,7 +43,7 @@
<input id="subjectInputId" [(ngModel)]="messageTemplate.Subject" <input id="subjectInputId" [(ngModel)]="messageTemplate.Subject"
name="Subject{{messageTemplate.ObjectID}}" name="Subject{{messageTemplate.ObjectID}}"
fieldLabel="Subject" placeholder="Subject" type="text" fieldLabel="Subject" placeholder="Subject" type="text"
class="form-control" class="form-control" tabindex="2"
[disabled]="showLoader"> [disabled]="showLoader">
</div> </div>
<div class="col-md-6" *ngIf="subjectPlaceholderOptions.length"> <div class="col-md-6" *ngIf="subjectPlaceholderOptions.length">
......
...@@ -142,14 +142,21 @@ export class EditMessageTemplateComponent extends BaseComponent implements OnIni ...@@ -142,14 +142,21 @@ export class EditMessageTemplateComponent extends BaseComponent implements OnIni
* if the template is in edit mode * if the template is in edit mode
*/ */
showSaveBtn(): boolean { showSaveBtn(): boolean {
return this.messageTemplate && this.messageTemplate.ObjectID ? if (!!this.messageTemplate && !!this.messageTemplate.ObjectID) {
(this.messageTemplate.HiringTeam === this.adminPortalLayoutService.getHiringTeamID().ObjectID || return this.messageTemplate.HiringTeam === this.adminPortalLayoutService.getHiringTeamID().ObjectID ?
!this.editMode) : false; (this.templateCreationFromWorkflow() ? true : !this.templateUpdateFromWorkflow()) : false;
}
} }
showSaveIntoAllTemplates(): boolean { showSaveIntoAllTemplates(): boolean {
if (this.templateCreationFromWorkflow()) {
return false;
}
return !!this.messageTemplate && !!this.messageTemplate.ObjectID && return !!this.messageTemplate && !!this.messageTemplate.ObjectID &&
(this.messageTemplate.HiringTeam !== null && !!this.objectID && this.editMode); (this.messageTemplate.HiringTeam === this.adminPortalLayoutService.getHiringTeamID().ObjectID && !!this.objectID
&& this.editMode);
} }
showSaveCopyBtn(): boolean { showSaveCopyBtn(): boolean {
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</div> </div>
<div class="ui-g ui-fluid"> <div class="ui-g ui-fluid">
<p-dialog #messageTemplateDialog [(visible)]="displayNewMessageTemplate" header="Message Template" <p-dialog #messageTemplateDialog [(visible)]="displayNewMessageTemplate" header="Message Template"
[positionLeft]="0" [modal]="true" [responsive]="true"> [positionLeft]="0" [modal]="true" [responsive]="true" class="edit-message-template">
<app-edit-message-template (closeModal)="closeDialog($event)" <app-edit-message-template (closeModal)="closeDialog($event)"
*ngIf="displayNewMessageTemplate" *ngIf="displayNewMessageTemplate"
[objectID]="selectedTemplateID"></app-edit-message-template> [objectID]="selectedTemplateID"></app-edit-message-template>
...@@ -308,7 +308,6 @@ ...@@ -308,7 +308,6 @@
</div> </div>
</div> </div>
</div> </div>
<hr/>
</div> </div>
</ng-template> </ng-template>
...@@ -409,7 +408,7 @@ ...@@ -409,7 +408,7 @@
<label>Send</label> <label>Send</label>
<p-dropdown (onChange)="showMessageTemplateDialog($event, message)" <p-dropdown (onChange)="showMessageTemplateDialog($event, message)"
[(ngModel)]="message.MessageTemplate" [(ngModel)]="message.MessageTemplate"
[autoDisplayFirst]="false" [autoDisplayFirst]="true"
[options]="messageTemplates" [options]="messageTemplates"
filter="true" filter="true"
name="messageTemplate{{message.ObjectID}}" name="messageTemplate{{message.ObjectID}}"
...@@ -428,7 +427,7 @@ ...@@ -428,7 +427,7 @@
</ng-template> </ng-template>
</p-dropdown> </p-dropdown>
</div> </div>
<div class="col-md-1 text-center"> <div class="col-md-1 text-right">
<button (click)="configureMessageTemplate(message)" <button (click)="configureMessageTemplate(message)"
[disabled]="showLoader" icon="ui-icon-settings" [disabled]="showLoader" icon="ui-icon-settings"
pButton pButton
...@@ -442,10 +441,7 @@ ...@@ -442,10 +441,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="ui-g"> <hr/>
<div class="separator">
</div>
</div>
<div *ngFor="let message of stage.WorkFlowMessages" class="form-group row"> <div *ngFor="let message of stage.WorkFlowMessages" class="form-group row">
<div *ngIf="stage.UseMessaging && message.IsWithdrawalMessage" <div *ngIf="stage.UseMessaging && message.IsWithdrawalMessage"
class="ui-g ui-g-3"> class="ui-g ui-g-3">
...@@ -454,7 +450,7 @@ ...@@ -454,7 +450,7 @@
<div *ngIf="stage.UseMessaging && message.IsWithdrawalMessage" <div *ngIf="stage.UseMessaging && message.IsWithdrawalMessage"
class="col-lg-12 col-md-12 mb-10"> class="col-lg-12 col-md-12 mb-10">
<div class="col-md-2"> <div class="col-md-2">
<label>After</label> <label>After {{message.Delay}}</label>
<p-inputMask (change)="generateDelayString(message)" <p-inputMask (change)="generateDelayString(message)"
(onBlur)="toggleInput($event, 'Delay'+message.ObjectID, false)" (onBlur)="toggleInput($event, 'Delay'+message.ObjectID, false)"
(onFocus)="toggleInput($event, 'Delay'+message.ObjectID, true)" (onFocus)="toggleInput($event, 'Delay'+message.ObjectID, true)"
...@@ -499,7 +495,7 @@ ...@@ -499,7 +495,7 @@
<label>Send</label> <label>Send</label>
<p-dropdown (onChange)="showMessageTemplateDialog($event, message)" <p-dropdown (onChange)="showMessageTemplateDialog($event, message)"
[(ngModel)]="message.MessageTemplate" [(ngModel)]="message.MessageTemplate"
[autoDisplayFirst]="false" [autoDisplayFirst]="true"
[options]="messageTemplates" [options]="messageTemplates"
filter="true" filter="true"
name="messageTemplate{{message.ObjectID}}" name="messageTemplate{{message.ObjectID}}"
...@@ -519,7 +515,7 @@ ...@@ -519,7 +515,7 @@
</ng-template> </ng-template>
</p-dropdown> </p-dropdown>
</div> </div>
<div class="col-md-1 text-center"> <div class="col-md-1 text-right">
<button (click)="configureMessageTemplate(message)" <button (click)="configureMessageTemplate(message)"
[disabled]="showLoader" icon="ui-icon-settings" [disabled]="showLoader" icon="ui-icon-settings"
pButton pButton
......
...@@ -365,6 +365,10 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -365,6 +365,10 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
newTemplate.TemplateName = 'New Template'; newTemplate.TemplateName = 'New Template';
newTemplate.id = '0'; newTemplate.id = '0';
this.messageTemplates.push(newTemplate); this.messageTemplates.push(newTemplate);
const optional = new MessageTemplateModel();
optional.TemplateName = 'Please Select';
optional.id = '-1';
this.messageTemplates = [optional, ...this.messageTemplates];
} }
/** /**
...@@ -374,7 +378,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -374,7 +378,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
*/ */
showMessageTemplateDialog($event, message: WorkflowMessageModel): void { showMessageTemplateDialog($event, message: WorkflowMessageModel): void {
const template = $event.value; const template = $event.value;
if (template.id && template.id === '0') { if (template.id === '-1') {
delete message.MessageTemplate;
} else if (template.id && template.id === '0') {
// When new template is selected, store it to global variable // When new template is selected, store it to global variable
this.selectedTemplateID = 'NEW'; this.selectedTemplateID = 'NEW';
this.displayNewMessageTemplate = true; this.displayNewMessageTemplate = true;
......
import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { Component, Input, OnInit, ViewChild } from '@angular/core';
import { NgForm } from '@angular/forms'; import { NgForm } from '@angular/forms';
import { ActivatedRoute, Params, Router } from '@angular/router'; import { ActivatedRoute, Params, Router } from '@angular/router';
import { Editor } from "primeng/editor"; import { Editor } from 'primeng/editor';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
import { AppService } from '../../app.service'; import { AppService } from '../../app.service';
import { ASSOCS } from '../../constants';
import { JobApplicationModel } from "../../models/job-application.model";
import { IframeMsgHandlingService } from '../../oneit/services/iframe-msg-handling.service'; import { IframeMsgHandlingService } from '../../oneit/services/iframe-msg-handling.service';
import { SaveService } from '../../oneit/services/save.service'; import { SaveService } from '../../oneit/services/save.service';
import { UtilsService } from '../../oneit/services/utils.service'; import { UtilsService } from '../../oneit/services/utils.service';
...@@ -30,6 +32,7 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement ...@@ -30,6 +32,7 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement
deletedObjs = {}; deletedObjs = {};
engineApplicantView = new EngineApplicantView(); engineApplicantView = new EngineApplicantView();
jobApplication = new JobApplicationModel();
showLoader = false; showLoader = false;
constructor( constructor(
...@@ -53,8 +56,8 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement ...@@ -53,8 +56,8 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement
.subscribe( .subscribe(
(params: Params) => { (params: Params) => {
this.showLoader = true; this.showLoader = true;
if (params.id && params.id !== '0') { if (params.jobId) {
this.getEngineApplicantViewByID(params.id); this.getEngineApplicantViewByID(params.jobId);
} else { } else {
this.utilsService.createObject(this.engineApplicantView, this.createdObjs); this.utilsService.createObject(this.engineApplicantView, this.createdObjs);
this.showLoader = false; this.showLoader = false;
...@@ -63,23 +66,17 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement ...@@ -63,23 +66,17 @@ export class MessageEngineApplicantViewComponent extends BaseComponent implement
)); ));
} }
initComponent(): void { getEngineApplicantViewByID(jobId: string): void {
}
getEngineApplicantViewByID(id): void {
this.showLoader = true; this.showLoader = true;
this.createdObjs = {};
this.updatedObjs = {};
this.deletedObjs = {};
this.utilsService.resetCounter(); this.utilsService.resetCounter();
this.utilsService.clearErrorMessages(); this.utilsService.clearErrorMessages();
const assocs = []; const assocs = [ASSOCS.JOB, [ASSOCS.CANDIDATE, ASSOCS.USER].join('.')];
this.subscriptions.push(this.messageEngineApplicantViewService.getEngineApplicantViewByID(id, assocs) this.subscriptions.push(this.messageEngineApplicantViewService.getEngineApplicantViewByID(jobId, assocs)
.subscribe( .subscribe(
data => { data => {
console.log(data);
this.engineApplicantView = data; this.engineApplicantView = data;
this.updatedObjs[this.engineApplicantView.ObjectID] = this.engineApplicantView; this.updatedObjs[this.engineApplicantView.ObjectID] = this.engineApplicantView;
......
...@@ -13,7 +13,7 @@ export class MessageEngineApplicantViewService { ...@@ -13,7 +13,7 @@ export class MessageEngineApplicantViewService {
} }
getEngineApplicantViewByID(id, assocs): Observable<any> { getEngineApplicantViewByID(id, assocs): Observable<any> {
return this.searchService.getObjectById('', id, assocs) return this.searchService.getObjectById('JobApplications', id, assocs)
.map( .map(
data => { data => {
const objs = this.utilsService.convertResponseToObjects(data, assocs); const objs = this.utilsService.convertResponseToObjects(data, assocs);
......
...@@ -10,7 +10,10 @@ export const CLASSES = { ...@@ -10,7 +10,10 @@ export const CLASSES = {
WORKFLOW_STEP: 'performa.orm.WorkFlowStep', WORKFLOW_STEP: 'performa.orm.WorkFlowStep',
JOB_APPLICATION: 'class performa.orm.JobApplication', JOB_APPLICATION: 'class performa.orm.JobApplication',
MESSAGE: 'performa.orm.Message', MESSAGE: 'performa.orm.Message',
CHAT_ATTACHMENT: 'performa.orm.ChatAttachment' CHAT_ATTACHMENT: 'performa.orm.ChatAttachment',
CANDIDATE: 'performa.orm.Candidate',
USER: 'oneit.security.SecUser',
JOB: 'performa.orm.Job'
}; };
export const SERVICES = { export const SERVICES = {
...@@ -30,5 +33,9 @@ export const ASSOCS = { ...@@ -30,5 +33,9 @@ export const ASSOCS = {
WORKFLOW_STAGE: 'WorkFlowStages', WORKFLOW_STAGE: 'WorkFlowStages',
WORKFLOW_MESSAGE: 'WorkFlowMessages', WORKFLOW_MESSAGE: 'WorkFlowMessages',
WORKFLOW_STEP: 'Steps', WORKFLOW_STEP: 'Steps',
MESSAGE_TEMPLATE: 'MessageTemplate' MESSAGE_TEMPLATE: 'MessageTemplate',
JOB: 'Job',
CANDIDATE: 'Candidate',
USER: 'User',
MESSAGE: 'Message'
}; };
import { CLASSES } from '../constants';
import { UserModel } from './user.model';
export class CandidateModel {
ObjectID: string;
ObjectClass = CLASSES.CANDIDATE;
Phone: string;
ForgotPasswordMailSendDate: string;
ForgotPasswordKey: string;
VerificationMailSendDate: string;
VerificationKey: string;
IsAccountVerified: boolean;
IsPasswordChanged: boolean;
GoogleAddressText: string;
IsEmailIngest: boolean;
IsMaskedEmail: boolean;
KnownAsAlias: string;
PrivacyPolicyAgreed: boolean;
ConditionsAgreed: boolean;
HasValidAddress: boolean;
User: UserModel;
TestInput: string;
TestAnalysises: Array<string>;
JobApplications: Array<string>;
CultureCriteriaAnswers: Array<string>;
ProfileAssessmentAnswers: Array<string>;
DiversityAnswers: Array<string>;
}
import { CLASSES } from '../constants'; import { CLASSES } from '../constants';
import { ApplicantSourcesEnum } from './applicant-sources.enum'; import { ApplicantSourcesEnum } from './applicant-sources.enum';
import { ApplicationStatusEnum } from './application-status.enum'; import { ApplicationStatusEnum } from './application-status.enum';
import { CandidateModel } from "./candidate.model";
import { JobModel } from "./job.model";
import { MessageModel } from './message.model'; import { MessageModel } from './message.model';
import { WorkflowStageModel } from './workflow-stage.model'; import { WorkflowStageModel } from './workflow-stage.model';
...@@ -24,12 +26,12 @@ export class JobApplicationModel { ...@@ -24,12 +26,12 @@ export class JobApplicationModel {
CultureFit: string; CultureFit: string;
FactorScoreDetails: string; FactorScoreDetails: string;
Note: string; Note: string;
Candidate: string; Candidate: CandidateModel;
Job: string; Job: JobModel;
WorkFlowStage: WorkflowStageModel; WorkFlowStage: WorkflowStageModel;
AssessmentCriteriaAnswers: string; AssessmentCriteriaAnswers: Array<string>;
Notes: string; Notes: Array<string>;
ScheduledEmails: string; ScheduledEmails: Array<string>;
SentEmails: string; SentEmails: Array<string>;
Messages: Array<MessageModel>; Messages: Array<string>;
} }
import { CLASSES } from '../constants';
export class JobModel {
ObjectID: string;
ObjectClass = CLASSES.JOB;
JobTitle: string;
JobDescription: string;
JobStatus: string;
OpenDate: string;
ApplyBy: string;
IncludeAssessmentCriteria: boolean;
IncludeCulture: boolean;
AssessmentType: string;
RandomKey: string;
JobType: string;
ReferenceNumber: string;
LastStatusChangeDate: string;
Remote: boolean;
City: string;
PostCode: string;
ExpectedCandidateRadius: string;
State: string;
Country: string;
RequireCV: boolean;
IsManuallyClosed: boolean;
LastEdited: string;
IsPPJ: boolean;
Industry: string;
CultureStatement: string;
DraftLocation: string;
GoogleAddressText: string;
DiversityIncluded: boolean;
AutoProceed: boolean;
Email: string;
Password: string;
ConfirmPassword: string;
CompletedDetails: boolean;
CompletedRequirements: boolean;
CompletedCulture: boolean;
CompletedAssessmentType: boolean;
SaveAssessmentTemplate: boolean;
SaveCultureTemplate: boolean;
FromTemplate: boolean;
AssessmentTemplateName: string;
CultureTemplateName: string;
AppProcessOption: string;
SuggestedAssessmentType: string;
RankingCompleted: boolean;
CultureTemplate: string;
JobTemplate: string;
AppStatusWorkFlow: string;
AppWorkFlowStage: string;
Level: string;
Client: string;
JobOwner: string;
CreatedBy: string;
HiringTeam: string;
Occupation: string;
ShortenedURL: string;
AssessmentTemplate: string;
ILOJobTitle: string;
WorkFlowTemplate: Array<string>;
JobApplications: Array<string>;
AssessmentCriterias: Array<string>;
CultureCriterias: Array<string>;
WorkFlows: Array<string>;
}
import { CLASSES } from '../constants';
export class UserModel {
ObjectID: string;
ObjectClass = CLASSES.USER;
UserName: string;
Password: string;
Enabled: boolean;
PasswordExpiryDate: string;
FirstName: string;
LastName: string;
UserDescription: string;
Email: string;
SupportUser: string;
SupportKey: string;
ResetPassword: boolean;
PasswordRehashed: boolean;
UpdatedPassword: string;
PrivsOverrides: string;
RolesOverrides: string;
GroupsOverrides: string;
ReportsTo: string;
PrivilegeGrants: Array<string>;
RoleGrants: Array<string>;
GroupGrants: Array<string>;
UserPasswords: Array<string>;
Extensions: Array<string>;
}
...@@ -274,13 +274,25 @@ ...@@ -274,13 +274,25 @@
.ui-dialog { .ui-dialog {
&.ui-dialog-draggable { &.ui-dialog-draggable {
left: 20px !important; left: 130px !important;
right: 20px !important; right: 130px !important;
overflow-y: scroll; overflow-y: scroll;
height: 80% !important; height: 80% !important;
} }
} }
.edit-message-template {
.ui-dialog {
.ui-dialog-titlebar {
display: none;
}
.ui-dialog-content {
padding: 0 !important;
}
}
}
.editor { .editor {
min-height: 150px !important; min-height: 150px !important;
} }
...@@ -314,6 +326,10 @@ body .ui-dropdown-panel .ui-dropdown-filter-container { ...@@ -314,6 +326,10 @@ body .ui-dropdown-panel .ui-dropdown-filter-container {
background-color: #667281; background-color: #667281;
} }
.text-right {
text-align: right !important;
}
.mb-10 { .mb-10 {
margin-bottom: 10px; margin-bottom: 10px;
} }
......
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