no message

FATIMA-Q2-DEVELOPMENT
Fatimah Alshammari 5 years ago
parent f92bcf4c32
commit d5f2a66deb

@ -45,6 +45,12 @@
</ion-label>
</ion-item>
<ion-item (click)="openMyRequestPage()">
<ion-thumbnail slot="start" class="menu-thumb">
<img style= "height: 24px !important;" src="../assets/imgs/profile_icon.png" item-left>
</ion-thumbnail>
<ion-label class="profile">HR Request</ion-label>
</ion-item>
<!-- <ion-item (click)="openChangePassword()"> -->
<ion-item (click)="openChangePassword()">

@ -193,6 +193,11 @@ export class AppComponent implements OnInit {
this.menu.toggle();
}
public openMyRequestPage() {
this.cs.openMyRequestPage();
this.menu.toggle();
}
async openDigitalId() {
const modal = await this.modalController.create({
component: DigitalIdComponent,

@ -1118,6 +1118,12 @@ public getMonthNameAr(value: number): string {
public openMyTeamDetailPage() {
this.nav.navigateForward(['/my-team/details']);
}
public openHRRequestPage() {
this.nav.navigateForward(['/my-team/hr-request']);
}
public openMyRequestPage() {
this.nav.navigateForward(['/my-team/my-request']);
}
public openPage(link: string) {
this.nav.navigateForward([link]);

@ -13,13 +13,72 @@
<div class="user-info">
<div class="user-image-container">
<div class="user-image">
<img [src]="employee.EMPLOYEE_IMAGE ? 'data:image/png;base64,'+employee.EMPLOYEE_IMAGE : '../assets/imgs/profile.png'" alt="Team Member Image"/>
<img class="img" [src]="employee.EMPLOYEE_IMAGE ? 'data:image/png;base64,'+employee.EMPLOYEE_IMAGE : '../assets/imgs/profile.png'" alt="Team Member Image"/>
</div>
</div>
<h1>{{employee.EMPLOYEE_NAME}}</h1>
<span>{{employee.JOB_NAME}}</span>
</div>
<div class="user-actions">
<div >
<ion-row>
<ion-segment
(ionChange)="segmentChanged($event)"
[value]="activeSegment">
<ion-segment-button
value="About"
[ngClass]="activeSegment == 'About' ? 'active-Segment' : 'normal-Segment'">
<!-- <ion-label> Team Members</ion-label> -->
<img [ngClass]="direction == 'en' ? 'imgSize-en':'imgSize-ar' " src="../assets/imgs/profile.svg">
</ion-segment-button>
<ion-segment-button
value="create-request"
[ngClass]="activeSegment == 'create-request' ? 'active-Segment' : 'normal-Segment'">
<img (click)="getMenuEntries(employee)" [ngClass]="direction == 'en' ? 'imgSize-en':'imgSize-ar' " src="../assets/imgs/create-req.svg">
<!-- <ion-label> {{ts.trPK('vacation-rule','create-request')}}</ion-label> -->
</ion-segment-button>
<ion-segment-button
value="Attendance"
[ngClass]="activeSegment == 'Attendance' ? 'active-Segment' : 'normal-Segment'" >
<!-- <ion-label>{{ts.trPK('attendance','attendance')}}</ion-label> -->
<img [ngClass]="direction == 'en' ? 'imgSize-en':'imgSize-ar' " src="../assets/imgs/view-attendance.svg">
</ion-segment-button>
<ion-segment-button
value="Team Members"
[ngClass]="activeSegment == 'Team Members' ? 'active-Segment' : 'normal-Segment'">
<!-- <ion-label>{{ts.trPK('myTeam','team-members')}}</ion-label> -->
<img [ngClass]="direction == 'en' ? 'imgSize-en':'imgSize-ar' " src="../assets/imgs/team-members.svg">
</ion-segment-button>
</ion-segment>
</ion-row>
</div>
<div class="user-actions">
<ion-row class="ion-justify-content-center">
<ion-col [size]="3">
<div class="action-button col-button">
<span>{{ts.trPK('myTeam','profile-details')}}</span>
</div>
</ion-col>
<ion-col [size]="3" (click)="getMenuEntries(employee)">
<div class="action-button col-button">
<span>{{ts.trPK('vacation-rule','create-request')}}</span>
</div>
</ion-col>
<ion-col [size]="3" >
<div class="action-button col-button">
<span>{{ts.trPK('myTeam','view-attendence')}} </span>
</div>
</ion-col>
<ion-col [size]="3" >
<div class="action-button col-button">
<span>{{ts.trPK('myTeam','team-members')}}</span>
</div>
</ion-col>
</ion-row>
</div>
<div class="user-actions">
<ion-row class="ion-justify-content-center">
<ion-col [size]="4">
<div class="action-button col-button">
@ -98,6 +157,27 @@
</div>
</ion-col>
</ion-row>
<!-- <ion-row *ngIf="attendanceTrackingList.stats == '' || attendanceTrackingList.stats == '' "> Hello </ion-row>
</div> -->
</div>
<div *ngIf="showAttendence" class="result-graph-attendence">
<div >
<ion-row style="margin-top: 8px; margin-left: 12px;">
<ion-col [size]="8">
<span class="attendence-text"> {{ts.trPK('attendance','monthly-attendance-calendar')}}</span>
</ion-col>
<ion-col [size]="4">
<ion-row>
<button (click)="showCalender()" style="background: white; margin-left: 15px;">
<label [ngClass]="direction == 'en' ? 'stats-en':'stats-ar' " >{{ts.trPK('attendance-tracking','view-days')}}</label>
<img src="../assets/imgs/view-days.svg">
</button>
</ion-row>
</ion-col>
</ion-row>
</div>
<div class="header">
@ -132,6 +212,37 @@
<div>
<span [ngClass]="direction == 'en' ? 'request-heading':'request-heading-ar'">{{ts.trPK('myTeam','attendance-statistics')}}</span>
</div>
<div>
<ion-row class="attendance-summary">
<ion-col [size]="4">
<div class="attendance-information">
<span>{{ts.trPK('attendance-tracking','schedule')}}</span>
<h2>{{timeCardSummaryData?.SCHEDULE_DAYS}}</h2>
</div>
</ion-col>
<ion-col [size]="2">
<div class="attendance-information">
<span>{{ts.trPK('attendance-tracking','off-days')}}</span>
<h2>{{timeCardSummaryData?.OFF_DAYS}}</h2>
</div>
</ion-col>
<ion-col [size]="3">
<div class="attendance-information">
<span>{{ts.trPK('attendance-tracking','non-analyzed')}}</span>
<h2>{{timeCardSummaryData?.NOT_ANALYZED_DAYS}}</h2>
</div>
</ion-col>
<ion-col [size]="3">
<div class="attendance-information">
<span>{{ts.trPK('attendance-tracking','shortage-hours')}}</span>
<h2>{{timeCardSummaryData?.SHORTAGE_HRS}}</h2>
</div>
</ion-col>
</ion-row>
</div>
<div style="position: relative;">
<div class="label-container">
<div class="green-label-container">
@ -153,6 +264,45 @@
</div>
</div>
<!-- //////////////////////////////////CALENDAR/////////////////////////////////////////////////////// -->
<div *ngIf="!showAttendence">
<div *ngIf="showData" [ngClass]="direction == 'en' ? 'calendar-container':'calendar-container-ar' ">
<div>
<ion-row style="margin-top: 8px; margin-left: 12px;">
<ion-col [size]="8">
<span class="attendence-text"> {{ts.trPK('attendance','monthly-attendance-calendar')}}</span>
</ion-col>
<ion-col [size]="4">
<ion-row>
<button (click)="showCalender()" style="background: white; margin-left: 15px; margin-top: 6px;">
<label [ngClass]="direction == 'en' ? 'stats-en':'stats-ar' " >{{ts.trPK('attendance-tracking','view-stats')}}</label>
<img src="../assets/imgs/view-stats.svg">
</button>
</ion-row>
</ion-col>
</ion-row>
</div>
<div class="header">
<div>
<div>
<ion-row >
<ion-slides [options]="slideOptsOne">
<ion-slide *ngFor="let filter of filters; let i=index" (click)="monthCardSliders(filter.monthNo)" [ngClass]="filter.disable === true ? 'disable-filter' : ''">
<app-card-calendar
[text]="filter.name"
[color]="filter.color"
[active]="filter.active"
(click)="activeFilter(i)"
></app-card-calendar>
</ion-slide>
</ion-slides>
</ion-row>
</div>
<ion-row class="attendance-summary">
<ion-col [size]="3">
<div class="attendance-information">
@ -196,7 +346,14 @@
</div>
<div *ngIf="activeSegment === 'Team Members'">
<div style="margin-top: 15px;background: white;border-radius: 100px;overflow: hidden;">
<div style="margin-top: -23px;">
<ion-row>
<ion-col><p class="text">{{ts.trPK('myTeam','my-team-members')}}</p></ion-col>
<ion-col> <div class="number"><p [ngClass]="direction == 'en' ? 'numberEmp-en':'numberEmp-ar' ">{{EmpTotal}}</p></div></ion-col>
</ion-row>
</div>
<!-- <div style="margin-top: 15px;background: white;border-radius: 100px;overflow: hidden;">
<ion-row no-padding>
<ion-col [size]="3" class="search-dropdown" no-padding>
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}"
@ -223,7 +380,7 @@
<ion-icon name="close" ></ion-icon>
</ion-col>
</ion-row>
</div>
</div> -->
<ng-container *ngFor="let subordinate of empSubordinate;let i=index">
<app-employee-information

@ -128,28 +128,113 @@ ion-title{
color: black;
}
.active-Segment {
font-size: 0.3cm !important;
background: #269DB8 !important;
text-transform: none;
--color-checked: none;
border-radius: 100px;
border:0;
}
.active-Segment ion-label{
font-size: 11px;
color: white !important;
}
.normal-Segment ion-label{
color: black !important;
font-size: 11px;
}
.normal-Segment {
font-size: 0.3cm !important;
text-transform: none;
--color-checked: none;
border: 0;
}
.img{
width: 100px;
height: 100px;
display: inline-flex;
overflow: hidden;
background: transparent;
border-radius: 70% !important;
position: relative;
top: 3px;
}
@media screen and (min-width: 1px) and (max-width:767px){
.active-Segment {
width: 11%;
max-width: 11%;
min-width: 11%;
height: 30% !important;
min-height: 36px;
padding-right: -10px;
border-radius: 50% !important;
margin-right: 22px;
margin-left: 22px;
background-color: #269DB8;
}}
@media screen and (min-width: 768px) and (max-width:1024px){
.active-Segment{
width: 11%;
max-width: 11%;
min-width: 11%;
height: 56% !important;
min-height: 68px;
padding-right: -10px;
border-radius: 50% !important;
margin-right: 62px;
margin-left: 45px;
background: #269DB8 !important;
padding-left: 17px;}}
@media screen and (min-width: 1px) and (max-width:767px){
.normal-Segment {
width: 11%;
max-width: 11%;
min-width: 11%;
height: 30% !important;
min-height: 36px;
padding-right: -10px;
border-radius: 50% !important;
margin-right: 22px;
margin-left: 22px;
background: #414040 !important;
}}
@media screen and (min-width: 768px) and (max-width:1024px){
.normal-Segment{
width: 11%;
max-width: 11%;
min-width: 11%;
height: 56% !important;
min-height: 68px;
padding-right: -10px;
border-radius: 50% !important;
margin-right: 62px;
margin-left: 45px;
background: #414040 !important;
padding-left: 17px;}}
@media screen and (min-width: 1px) and (max-width:767px){
.imgSize-en{
position: absolute;
/* right: 15px; */
top: 0;
bottom: 0;
left: 9px;
margin: auto;
height: 18px;
}}
@media screen and (min-width: 768px) and (max-width:1024px){
.imgSize-en{position: absolute;
top: 0;
bottom: 0;
left: 9px;
margin: auto;
height: 28px;}}
@media screen and (min-width: 1px) and (max-width:767px){
.imgSize-ar{
position: absolute;
/* right: 15px; */
top: 0;
bottom: 0;
right: 7px;
margin: auto;
height: 18px;
}}
@media screen and (min-width: 768px) and (max-width:1024px){
.imgSize-ar{position: absolute;
top: 0;
bottom: 0;
right: 9px;
margin: auto;
height: 28px;}}
.colum-container{
padding: 15px;
border-bottom: 1px solid #ccc;
@ -462,4 +547,88 @@ ion-title{
}
.Boldtext{
font-size: 13px;
font-family: WorkSans-Bold;
color: black !important;
display: block !important;
// line-height: 0px !important;
}
.attendence{
position: relative;
background: white;
border-radius: 20px;
border: 1px solid #ccc;
}
.attendence-text{
margin-bottom: 1px;
margin-left: 10px;
font-family: WorkSans-Bold;
font-size: 16px;
}
.stats-en{
color: #289DB8; font-size: 9px;
margin-right: 5px;
font-family: 'WorkSans-Bold';
}
.stats-ar{
color: #289DB8; font-size: 9px;
// margin-right: 5px;
font-family: 'WorkSans-Bold';
}
.text{
font-size: 16px;
font-weight: bolder;
font-family: 'WorkSans-Bold';
margin-top: 27px;
}
.number{
width: 20px;
height: 20px;
padding-right: -10px;
border-radius: 100%;
background-color: #269DB8;
z-index: 9;
margin-top: 26px;
}
.numberEmp-en{
color: white;
font-size: 13px;
font-weight: bolder;
margin-left: 6px;
}
.numberEmp-ar{
color: white;
font-size: 13px;
font-weight: bolder;
margin-right: 6px;
}
.slider-container{
padding-bottom: 20px;
}
.filters-row {
margin-top: 10px;
margin-left: 20px;
}
.disable-filter {
pointer-events: none;
opacity: .3;
}

@ -84,8 +84,129 @@ export class DetailsComponent implements OnInit {
public showUserNameOrNameInput = true;
// tslint:disable-next-line: max-line-length
public monthsNameArray = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
public monthIndex = new Date().getMonth() + 1;
// public monthIndex = new Date().getMonth() + 1;
public monthIndex = new Date().getMonth();
public EmpTotal = [];
public selectedFilter = '';
public itemType = '';
public monthNo : any;
public filters = [
{
// value: '',
name: 'JAN',
active: true,
color: '#0a0a0a',
key: 'January',
monthNo: 1,
disable: false
},
{
// value: '',
name: 'FEB',
active: false,
color: '#0a0a0a',
key: 'February',
monthNo: 2,
disable: false
},
{
// value: '',
name: 'MAR',
active: false,
color: '#0a0a0a',
key: 'March',
monthNo: 3,
disable: false
},
{
// value: '',
name: 'APRIL',
active: false,
color: '#0a0a0a',
key: 'April',
monthNo: 4,
disable: false
},
{
// value: '',
name: 'MAY',
active: false,
color: '#0a0a0a',
key: 'May',
monthNo: 5,
disable: false
},
{
// value: '',
name: 'JUN',
active: false,
color: '#0a0a0a',
key: 'June',
monthNo: 6,
disable: false
},
{
// value: '',
name: 'JUL',
active: false,
color: '#0a0a0a',
key: 'July',
monthNo: 7,
disable: false
},
{
// value: '',
name: 'AUG',
active: false,
color: '#0a0a0a',
key: 'Augest',
monthNo: 8,
disable: false
},
{
// value: '',
name: 'SEP',
active: false,
color: '#0a0a0a',
key: 'September',
monthNo: 9,
disable: false
},
{
// value: '',
name: 'NOV',
active: false,
color: '#0a0a0a',
key: 'November',
monthNo: 10,
disable: false
},
{
// value: '',
name: 'OCT',
active: false,
color: '#0a0a0a',
key: 'October',
monthNo: 11,
disable: false
},
{
// value: '',
name: 'DEC',
active: false,
color: '#0a0a0a',
key: 'December',
monthNo: 12,
disable: false
}
];
public slideOptsOne = {
slidesPerView: 7,
spaceBetween: 1
};
constructor(
public timeCardService: TimeCardService,
@ -139,7 +260,9 @@ export class DetailsComponent implements OnInit {
this.showData = false;
this.nextMonth = new Date().getMonth() + 2;
this.preMonth = new Date().getMonth();
this.calendarConfig(this.common.getMonthName(new Date().getMonth() + 1) , new Date().getFullYear());
this.monthNo = new Date().getMonth() ;
this.calendarConfig(this.common.getMonthName(new Date().getMonth()) , new Date().getFullYear());
// this.calendarConfig(this.common.getMonthName(new Date().getMonth() + 1) , new Date().getFullYear());
}
calendarConfig(month?, year?) {
@ -176,6 +299,17 @@ export class DetailsComponent implements OnInit {
});
}
monthCardSliders(monthNo){
this.common.startLoading();
this.showData = false;
this.currentDate = new Date(this.currentYear, this.monthNo);
console.log(this.currentDate + "___________" );
this.calendarConfig(this.getMonthName(this.monthNo) , this.currentYear);
this.monthNo = this.monthNo;
console.log(monthNo+"_________")
}
nextSlide() {
if (this.currentMonthName !== this.month) {
@ -200,7 +334,7 @@ export class DetailsComponent implements OnInit {
this.preMonth = 12;
}
this.currentDate = new Date(this.currentYear, (this.preMonth - 1), 1);
console.log(this.currentDate);
// console.log(this.currentDate);
this.calendarConfig(this.getMonthName(this.preMonth) , this.currentYear);
this.preMonth = this.preMonth - 1;
this.nextMonth = this.preMonth + 2;

@ -7,7 +7,54 @@
<ion-content>
<div class="contentBg">
<div class="result-graph">
<div class="result-graph">
<div class="request-heading">
<span>{{ts.trPK('myTeam','search-by')}}</span>
</div>
<div>
<ion-row class="custom-radio">
<!-- <ion-col [size]="3" class="search-dropdown" no-padding> -->
<ion-radio-group [(ngModel)]="searchKeySelect" (ionChange)="showSelectedField($event)" class="radio-list">
<ion-radio value="Name" [checked]="this.searchKeySelect === 'Name'" [color]="myColor" >{{ts.trPK('searchForReplacment','name')}}</ion-radio>
<ion-label class="text-label" >{{ts.trPK('searchForReplacment','name')}}</ion-label>
<ion-radio value="User Name" [checked]="this.searchKeySelect === 'User Name'" [color]="myColor" >{{ts.trPK('searchForReplacment','userName')}}</ion-radio>
<ion-label class="text-label">{{ts.trPK('searchForReplacment','userName')}}</ion-label>
<ion-radio value="Email" [checked]="this.searchKeySelect === 'Email'" [color]="myColor" >{{ts.trPK('searchForReplacment','email')}}</ion-radio>
<ion-label class="text-label">{{ts.trPK('searchForReplacment','email')}}</ion-label>
</ion-radio-group>
</ion-row>
<!-- <ion-row>
<ion-input placeholder="Search by" class="search-label"[(ngModel)]="searchKeySelect" (ionChange)="showSelectedField($event)" ></ion-input>
</ion-row> -->
<ion-row>
<ion-col class="search-label">
<ion-input *ngIf="showEmailInput" placeholder="Search by Email" [(ngModel)]="searchEmail" pattern="email"></ion-input>
<ion-input *ngIf="showUserNameOrNameInput" placeholder ="Search by Name or Username" [(ngModel)]="searchNameOrUserName"></ion-input>
</ion-col>
</ion-row>
</div>
<!-- <div class="result-text-container">
<h2>{{totalEmployees}}</h2>
<span>{{ts.trPK('myTeam','total')}} <br> {{ts.trPK('myTeam','team-members')}}</span>
</div> -->
</div>
<div>
<ion-row>
<ion-col><p class="text">{{ts.trPK('myTeam','my-team-members')}}</p></ion-col>
<ion-col> <div class="number"><p [ngClass]="direction == 'en' ? 'numberEmp-en':'numberEmp-ar' ">{{EmpTotal}}</p></div></ion-col>
</ion-row>
</div>
<!-- <div class="result-graph">
<div class="request-heading">
<span>{{ts.trPK('myTeam','team-stats')}}</span>
</div>
@ -19,7 +66,7 @@
<p-chart class="today-graph" type="doughnut" [data]="data" [options]="options"></p-chart>
</div>
<!-- <ion-row class="filters-row">
<ion-row class="filters-row">
<ion-slides [options]="slideOptsOne">
<ion-slide *ngFor="let filter of filters; let i=index">
<app-card-filter

@ -162,3 +162,70 @@ ion-content {
}
}
}
// .myClass .toggle-icon {
// background-color: purple; // this changes the background, ie the grey stripe.
// .toggle-inner {
// background-color: yellow; // this changes the backgroundcolor of the toggle dot.
// }
// }
.text-label{
--color: black !important;
font-size: 13px;
margin-left: 15px;
margin-right: 18px;
}
.radio-list{
background: white;
margin-left: 18px;
/* margin-right: 10px; */
margin-top: 12px;
}
// .selected .radio-icon {
// border-color: #0064D9;
// color: red;
// }
.radio-icon{
.custom-radio .radio-icon {
margin: 0px;
border-radius: 50%;
border-width: var(--border-width);
border-style: var(--border-style);
border-color: #dcdcdc;
margin-top: 6px !important;
border-color: #d8d4d4 !important;}
}
.text{
font-size: 16px;
font-weight: bolder;
font-family: 'WorkSans-Bold';
margin-top: 27px;
}
.number{
width: 20px;
height: 20px;
padding-right: -10px;
border-radius: 100%;
background-color: #269DB8;
z-index: 9;
margin-top: 26px;
}
.numberEmp-en{
color: white;
font-size: 13px;
font-weight: bolder;
margin-left: 6px;
}
.numberEmp-ar{
color: white;
font-size: 13px;
font-weight: bolder;
margin-right: 6px;
}

@ -28,6 +28,9 @@ export class HomeComponent implements OnInit {
public selEmpNo: any;
public totalEmployees = 0;
public pageFirstVisit = false;
myColor: string = 'secondary';
public EmpTotal = [];
public direction: string;
public options = {
cutoutPercentage: 80,
@ -90,7 +93,9 @@ export class HomeComponent implements OnInit {
public myTeamService: MyTeamService,
public modalController: ModalController,
private location: Location
) {}
) {
this.direction = TranslatorService.getCurrentLanguageName();
}
ngOnInit() {
this.common.sharedService.setSharedData( [], DetailsComponent.opendEmployeesARR);

@ -8,6 +8,8 @@ import { IonicModule } from '@ionic/angular';
import { MyTeamPage } from './my-team.page';
import { HmgCommonModule } from '../hmg-common/hmg-common.module';
import { HRRequestComponent } from './hr-request/hr-request.component';
import { MyRequestComponent } from './my-request/my-request.component';
const routes: Routes = [
{
@ -24,6 +26,14 @@ const routes: Routes = [
{
path: 'details-2',
component: DetailsComponent
},
{
path: 'hr-request',
component: HRRequestComponent
},
{
path: 'my-request',
component: MyRequestComponent
}
]
}
@ -37,6 +47,11 @@ const routes: Routes = [
IonicModule,
RouterModule.forChild(routes)
],
declarations: [MyTeamPage,HomeComponent,DetailsComponent]
declarations: [MyTeamPage,
HomeComponent,
DetailsComponent,
HRRequestComponent,
MyRequestComponent,
]
})
export class MyTeamPageModule {}

@ -7,6 +7,8 @@ import { AuthenticationService } from "src/app/hmg-common/services/authenticatio
export class MyTeamService {
public static EMPLOYEE_SHARED_DATA = 'employee';
public static getMyTeam = 'Services/ERP.svc/REST/GET_EMPLOYEE_SUBORDINATES';
public static getSuborinateStatus = 'Services/ERP.svc/REST/GET_SUBORDINATES_ATTD_STATUS';
public static getUserInfo = 'Services/ERP.svc/REST/Get_UserInformation';
constructor(
public con: ConnectorService,
private authService: AuthenticationService
@ -16,4 +18,17 @@ export class MyTeamService {
this.authService.authenticateRequest(request);
return this.con.post(MyTeamService.getMyTeam, request, onError, errorLabel);
}
public getSuborinatesAttStatus(absence: any, onError?: any, errorLabel?: string){
const request = absence;
this.authService.authenticateRequest(request);
return this.con.post(MyTeamService.getSuborinateStatus, request, onError, errorLabel);
}
public getUserInfo(absence: any, onError?: any, errorLabel?: string){
const request = absence;
this.authService.authenticateRequest(request);
return this.con.post(MyTeamService.getUserInfo, request, onError, errorLabel);
}
}

@ -1075,6 +1075,54 @@
"en": "My Profile",
"ar": "معلوماتي"
},
"HR-request": {
"en": "CREATE HR REQUEST",
"ar": "HR انشاء طلب"
},
"MyHR-request": {
"en": "MY HR REQUEST",
"ar": "HR طلباتي"
},
"ServiceType": {
"en": "Service Type",
"ar": "نوع الخدمه"
},
"createHR-Request": {
"en": "Create HR Request",
"ar": "HR انشاء طلب"
},
"code-sent": {
"en": "Verification Code Sent to",
"ar": "رمز التحقق ارسل ل"
},
"verify-code": {
"en": "Verify Code",
"ar": "التحقق من الكود"
},
"DeptName": {
"en": "Department Name",
"ar": "تفاصيل الملف الشخصي"
},
"RelatedSection": {
"en": "Related Section",
"ar": "تفاصيل الملف الشخصي"
},
"RelatedTopic": {
"en": "Related Topic",
"ar": "تفاصيل الملف الشخصي"
},
"SupportingDocument": {
"en": "Supporting Document",
"ar": "تفاصيل الملف الشخصي"
},
"Description": {
"en": "Description",
"ar": "تفاصيل الملف الشخصي"
},
"profile-details": {
"en": "Profile Details",
"ar": "تفاصيل الملف الشخصي"
},
"edit-profile": {
"en": "Edit Profile",
"ar": "تعديل المعلومات"

Loading…
Cancel
Save