Commit 0cd09b13 by Bharti Ladumor

S54103527 # Matchd / Talentology - No Plan [Enhancement] #Add Applicant feature…

S54103527 # Matchd / Talentology - No Plan [Enhancement] #Add Applicant feature : Added edit applicant components and update applicants
parent 482f06e5
...@@ -14,6 +14,7 @@ import { HomeComponent } from './oneit/components/home/home.component'; ...@@ -14,6 +14,7 @@ import { HomeComponent } from './oneit/components/home/home.component';
import { IframePageComponent } from './oneit/components/iframe-page/iframe-page.component'; import { IframePageComponent } from './oneit/components/iframe-page/iframe-page.component';
import { AuthGuard } from './oneit/guards/auth.guard'; import { AuthGuard } from './oneit/guards/auth.guard';
import { SearchApplicantsComponent } from './components/search-applicants/search-applicants.component'; import { SearchApplicantsComponent } from './components/search-applicants/search-applicants.component';
import { EditApplicantComponent } from './components/edit-applicant/edit-applicant.component';
export const routes: Routes = [ export const routes: Routes = [
{ {
...@@ -81,6 +82,12 @@ export const routes: Routes = [ ...@@ -81,6 +82,12 @@ export const routes: Routes = [
canActivate: [AuthGuard], canActivate: [AuthGuard],
component: SearchApplicantsComponent, component: SearchApplicantsComponent,
runGuardsAndResolvers: 'always' runGuardsAndResolvers: 'always'
},
{
path: 'edit-applicant/:id',
canActivate: [AuthGuard],
component: EditApplicantComponent,
runGuardsAndResolvers: 'always'
} }
] ]
}, },
......
.ui-g.form-group > div {
padding : 0px !important;
}
\ No newline at end of file
<p> <form #form="ngForm">
edit-applicant works! <p-toolbar>
</p> <div class="ui-toolbar-group-left">
Edit Applicant
</div>
<div class="ui-toolbar-group-right ui-fluid" >
<p-splitButton label="Save" icon="ui-icon-save" [model]="saveDropdown" styleClass="secondary-btn" (onClick)="saveApplicants(true)"></p-splitButton>
</div>
<div class="ui-toolbar-group-right ui-fluid">
<button pButton type="button" icon="ui-icon-cancel" label="Cancel" [routerLink]="['/search-applicant']" class="secondary-btn"></button>
</div>
</p-toolbar>
<div class="ui-g form-group" style="margin-top: 10px;">
<div class="ui-g-12 ui-md-2">
<label>{{FIELDS.FIRST_NAME}}</label>
</div>
<div class="ui-g-12 ui-md-4 ui-fluid">
<input [(ngModel)]="applicant.User.FirstName" name="FirstName" [fieldLabel]="FIELDS.FIRST_NAME" type="text" pInputText class="ui-inputtext">
</div>
<div class="ui-g-12 ui-md-2">
<label>{{FIELDS.LAST_NAME}}</label>
</div>
<div class="ui-g-12 ui-md-4 ui-fluid">
<input [(ngModel)]="applicant.User.LastName" name="LastName" [fieldLabel]="FIELDS.LAST_NAME" type="text" pInputText class="ui-inputtext">
</div>
</div>
<div class="ui-g form-group">
<div class="ui-g-12 ui-md-2">
<label>{{FIELDS.EMAIL}}</label>
</div>
<div class="ui-g-12 ui-md-4 ui-fluid">
<input [(ngModel)]="applicant.User.Email" name="email" oneitemail [fieldLabel]="FIELDS.EMAIL" type="text" pInputText class="ui-inputtext" >
</div>
<div class="ui-g-12 ui-md-2">
<label>{{FIELDS.PHONE}}</label>
</div>
<div class="ui-g-12 ui-md-4 ui-fluid">
<input [(ngModel)]="applicant.Phone" name="phone" [fieldLabel]="FIELDS.PHONE" type="text" pInputText class="ui-inputtext">
</div>
</div>
<div class="ui-g form-group">
<div class="ui-g-12 ui-md-2">
<label>{{FIELDS.LOCATION}}</label>
</div>
<div class="ui-g-12 ui-md-4 ui-fluid">
<input [(ngModel)]="applicant.GoogleAddressText" name="location" [fieldLabel]="FIELDS.LOCATION" type="text" pInputText class="ui-inputtext">
</div>
</div>
<span *ngIf="applicant.JobApplications.length">
<h4>Job Applications</h4><br/>
<p-table #table [columns]="cols" [value]="applicant.JobApplications" [paginator]="false" selectionMode="single" (onRowSelect)="onRowSelect($event.data)">
<ng-template pTemplate="colgroup" let-columns>
<colgroup>
<col *ngFor="let col of columns" [style.width]="col.width">
</colgroup>
</ng-template>
<ng-template pTemplate="header" let-columns>
<tr>
<th *ngFor="let col of columns" [pSortableColumn]="col.field" [pSortableColumnDisabled]="col.noSort">
{{col.header}}
<p-sortIcon [field]="col.field" *ngIf="!col.noSort"></p-sortIcon>
</th>
</tr>
<tr>
<th *ngFor="let col of columns">
<input *ngIf="!col.noFilter" pInputText type="text" (input)="table.filter($event.target.value, col.field, 'contains')">
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-rowData let-columns="columns">
<tr>
<ng-container *ngFor="let col of columns">
<td *ngIf="col.field != ''">
{{utilsService.getActualFieldValue(rowData, col.field)}}
</td>
</ng-container>
</tr>
</ng-template>
<ng-template pTemplate="emptymessage" let-columns >
<tr>
<td [attr.colspan]="columns.length">
No applicatans found - please try again.
</td>
</tr>
</ng-template>
</p-table>
</span>
<p-progressSpinner *ngIf="showLoader"></p-progressSpinner>
</form>
\ No newline at end of file
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, ViewChild } from '@angular/core';
import { Subscription } from 'rxjs';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { NgForm } from '@angular/forms';
import { FIELDS } from '../../constants';
import { SearchApplicantService } from '../search-applicants/search-applicants.service';
import { UtilsService } from '../../oneit/services/utils.service';
import { Candidate } from '../search-applicants/search-applicants.model';
import { SaveService } from '../../oneit/services/save.service';
@Component({ @Component({
selector: 'app-edit-applicant', selector: 'app-edit-applicant',
...@@ -7,9 +15,80 @@ import { Component, OnInit } from '@angular/core'; ...@@ -7,9 +15,80 @@ import { Component, OnInit } from '@angular/core';
}) })
export class EditApplicantComponent implements OnInit { export class EditApplicantComponent implements OnInit {
constructor() { } subscriptions: Array<Subscription> = [];
@ViewChild('form') form: NgForm;
ngOnInit() { saveDropdown = [{
} label : 'Save & Back', icon: 'ui-icon-refresh', command: () => { this.saveApplicants(false);}
}]
readonly FIELDS = FIELDS;
applicant : Candidate = new Candidate();
showLoader : boolean = false;
cols = [
{ field: 'Job.HiringTeam.Company.CompanyName', header: 'Customer', width: '33%', noSort: false, noFilter: false},
{ field: 'Job.HiringTeam.HiringTeamName', header: 'Hiring Team', width: '33%', noSort: false, noFilter: false},
{ field: 'Job.JobTitle', header: 'Job', width: '33%', noSort: false, noFilter: false},
];
constructor(private activatedRoute : ActivatedRoute,
private SearchApplicantService : SearchApplicantService,
private utilsService : UtilsService,
private saveService : SaveService,
private router : Router) { }
ngOnInit() {
this.subscriptions.push(this.activatedRoute.params
.subscribe(
(params: Params) => {
this.showLoader = true;
if (params.id && params.id !== '0') {
this.showLoader = false;
this.getApplicate(params.id);
}
}
));
}
getApplicate(id) {
this.SearchApplicantService.getApplicantByID(id, ['User', 'JobApplications', 'JobApplications.Job.HiringTeam.Company']).subscribe(data => {
this.applicant = data;
this.showLoader = false;
}, error => {
this.utilsService.handleError(error);
this.showLoader = false;
})
}
saveApplicants(reload) {
this.utilsService.clearErrorMessages();
if (this.form.invalid) {
this.utilsService.showAllErrorMessages();
} else {
this.showLoader = true;
let updatedObjs = {};
this.utilsService.addObjsToJSONByObjectID(updatedObjs, [this.applicant, this.applicant.User])
this.subscriptions.push(this.saveService.saveObjectsWithDefaultSvc({}, updatedObjs, {})
.subscribe(
data => {
this.utilsService.handleSuccess();
if (reload) {
let idToNavigate = this.applicant.ObjectID;
this.getApplicate(idToNavigate);
}
else {
this.router.navigate(["/search-applicant"]);
}
this.showLoader = false;
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
);
}
}
} }
.ui-g.form-group > div {
padding : 0px !important;
margin-top: 10px;
}
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</div> </div>
<span *ngIf="showResult"> <span *ngIf="showResult">
<h4>Search Results ({{applicants.length}})</h4><br/> <h4>Search Results ({{applicants.length}})</h4><br/>
<p-table #table [columns]="cols" [value]="applicants" [paginator]="false" selectionMode="single" (onRowSelect)="onRowSelect($event.data)"> <p-table #table [columns]="cols" [value]="applicants" [paginator]="false" selectionMode="single" >
<ng-template pTemplate="colgroup" let-columns> <ng-template pTemplate="colgroup" let-columns>
<colgroup> <colgroup>
<col *ngFor="let col of columns" [style.width]="col.width"> <col *ngFor="let col of columns" [style.width]="col.width">
...@@ -52,8 +52,9 @@ ...@@ -52,8 +52,9 @@
{{utilsService.getActualFieldValue(rowData, col.field)}} {{utilsService.getActualFieldValue(rowData, col.field)}}
</td> </td>
</ng-container> </ng-container>
<td> <td align="center">
<button pButton type="button" icon="ui-icon-edit" title="Edit" (click)="onRowSelect(rowData)"></button> <button pButton type="button" icon="ui-icon-edit" title="Edit"
[routerLink]="['/edit-applicant', rowData.ObjectID]"></button>
</td> </td>
</tr> </tr>
</ng-template> </ng-template>
......
...@@ -48,7 +48,7 @@ export class SearchApplicantsComponent implements OnInit { ...@@ -48,7 +48,7 @@ export class SearchApplicantsComponent implements OnInit {
this.showLoader = false; this.showLoader = false;
})) }))
} }
ngOnDestroy(){ ngOnDestroy(){
this.utilsService.unsubscribeSubscriptions(this.subscriptions); this.utilsService.unsubscribeSubscriptions(this.subscriptions);
} }
......
import { CLASSES } from "../../constants";
export class Candidate {
ObjectID : string;
ObjectClass = CLASSES.CANDIDATE;
Phone : string;
GoogleAddressText : string
User : User = new User();
JobApplications : JobApplications[] = [];
}
export class User {
ObjectID : string;
ObjectClass = CLASSES.USER;
FirstName : string;
LastName : string;
Email : string;
}
export class JobApplications {
ObjectID : string;
ObjectClass = CLASSES.JOB_APPLICATION;
}
\ No newline at end of file
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
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 { Observable } from 'rxjs';
@Injectable() @Injectable()
export class SearchApplicantService { export class SearchApplicantService {
...@@ -17,4 +18,17 @@ export class SearchApplicantService { ...@@ -17,4 +18,17 @@ export class SearchApplicantService {
this.utilsService.convertResponseToObjects(data, assocs) this.utilsService.convertResponseToObjects(data, assocs)
); );
} }
getApplicantByID(id, assocs): Observable<any> {
return this.searchService.getObjectById("Candidates", id, assocs)
.map(
data => {
let objs = this.utilsService.convertResponseToObjects(data, assocs);
if(objs && objs.length > 0){
return objs[0];
}
}
);
}
} }
\ No newline at end of file
...@@ -8,7 +8,7 @@ export const CLASSES = { ...@@ -8,7 +8,7 @@ export const CLASSES = {
WORKFLOW_MESSAGE: 'performa.orm.WorkFlowMessage', WORKFLOW_MESSAGE: 'performa.orm.WorkFlowMessage',
WORKFLOW_STAGE: 'performa.orm.WorkFlowStage', WORKFLOW_STAGE: 'performa.orm.WorkFlowStage',
WORKFLOW_STEP: 'performa.orm.WorkFlowStep', WORKFLOW_STEP: 'performa.orm.WorkFlowStep',
JOB_APPLICATION: 'class performa.orm.JobApplication', JOB_APPLICATION: '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', CANDIDATE: 'performa.orm.Candidate',
...@@ -43,3 +43,11 @@ export const ASSOCS = { ...@@ -43,3 +43,11 @@ export const ASSOCS = {
SENT_BY: 'SentBy', SENT_BY: 'SentBy',
ATTACHMENTS: 'Attachments' ATTACHMENTS: 'Attachments'
}; };
export const FIELDS = {
FIRST_NAME : "First Name",
LAST_NAME : 'Last Name',
EMAIL : 'Email',
PHONE : 'Phone',
LOCATION : 'Location',
}
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