ADDED SIT

MOHEMM-SFH-COLORS
umasoodch 4 years ago
parent 95009a1e80
commit 27338e6b73

@ -1,4 +1,4 @@
<div feedback class="custom-button" [ngClass]="requestType === 'SIT' ? 'disable-filter' : ''">
<div feedback class="custom-button">
<div class="iconBox">
<img *ngIf="title !='Announcement' && title !='اعلان' && title !='Items For Sale' && title !='بضاعه للبع' && title !='العروض والخصومات' && title !='Offers & Discount' && title != 'My Team' && title != 'Vacation Rule' && title != 'فريقي' && title != 'الإنابة بالإجازات' " [src]="'data:image/png;base64,'+icon" class="icon">
<!-- <img *ngIf="title == 'My Team' || title == 'Vacation Rule'" [src]="icon" class="icon"> -->

@ -697,7 +697,7 @@ export class HomePage implements OnInit {
this.common.sharedService.setSharedData(selMenu, MenuResponse.SHARED_DATA);
if (subMenu.REQUEST_TYPE === 'ABSENCE') {
this.common.openAbsencePage();
} else if (subMenu.REQUEST_TYPE === 'EIT') {
} else if (subMenu.REQUEST_TYPE === 'SIT') {
this.common.openEitListPage();
} else if (subMenu.REQUEST_TYPE === 'PAYSLIP') {
this.common.openPayslipPage();

@ -0,0 +1,77 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<nav-buttons></nav-buttons>
<ion-title color="light">{{'general, addAttach' | translate}}</ion-title>
<ion-buttons slot="primary">
<ion-button style="background: none !important;" (click)="closeBtnModal()">
<ion-icon slot="icon-only" name="close"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-card>
<ion-card-header class="boxHdr">
<ion-grid no-padding>
<ion-row style="width: 100%;" nowrap align-items-center>
<ion-col size="10">
<div class="hrTitle">{{'general, addAttach' | translate}}</div>
</ion-col>
<ion-col size="2">
<div class="fileDiv"> <input end class="inputfile" type="file" ng2FileSelect [uploader]="uploader"
(change)="onFileSelected($event)" />
<label end for="file">
<ion-icon style="font-size: 30px;" name="add"></ion-icon>
</label></div>
</ion-col>
</ion-row>
</ion-grid>
<!-- <div class="fileDiv"> <input end class="inputfile" type="file" ng2FileSelect [uploader]="uploader"
(change)="onFileSelected($event)" />
<label end for="file">
<ion-icon name="add"></ion-icon>
</label></div> -->
</ion-card-header>
<ion-card-content>
<ion-grid class=" gridAH" *ngIf="uploader?.queue?.length > 0">
<ion-row class="rowAH titleH" align-items-center>
<ion-col size="4">
<label class="Header" for="">{{'addAttach, name' | translate}}</label>
</ion-col>
<ion-col size="4">
<label class="Header" for="">{{'addAttach, size' | translate}}</label>
</ion-col>
<ion-col size="4">
<label class="Header" for="">{{'addAttach, remove' | translate}}</label>
</ion-col>
</ion-row>
<ion-row class="rowAH" *ngFor="let item of uploader.queue">
<ion-col size="4">
<label for="">{{ item?.file?.name }}</label>
</ion-col>
<ion-col size="4">
<label *ngIf="uploader.options.isHTML5">{{ item?.file?.size/1024/1024 | number:'.2' }} MB</label>
</ion-col>
<ion-col size="4">
<button class="iconButton" ion-button (click)="removeFile(item)"> <img class="imgSize"
src="../assets/imgs/deletegray.png"></button>
</ion-col>
</ion-row>
</ion-grid>
</ion-card-content>
</ion-card>
</ion-content>
<ion-footer>
<div class="centerDiv">
<ion-button class="footer-button" color="customnavy" ion-button (click)="OkBtnModal()">
{{'general, ok' | translate}}</ion-button>
</div>
</ion-footer>

@ -0,0 +1,19 @@
.inputfile {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
width: 40px;
height: 40px;
// z-index: -1;
}
.imgSize {
width: 22px;
height: 22px;
}
.Header {
font-weight: bold;
color: #1a586d;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AddAttachComponent } from './add-attach.component';
describe('AddAttachComponent', () => {
let component: AddAttachComponent;
let fixture: ComponentFixture<AddAttachComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AddAttachComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddAttachComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,172 @@
import { AddEitResponse } from './../models/add.eit.response';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { Component, OnInit } from '@angular/core';
import { FileUploader } from 'ng2-file-upload';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { ModalController } from '@ionic/angular';
@Component({
selector: 'app-add-attach',
templateUrl: './add-attach.component.html',
styleUrls: ['./add-attach.component.scss'],
})
export class AddAttachComponent implements OnInit {
private eitResponse: any;//AddEitResponse=new AddEitResponse();
isUpload: boolean = false;
inQueue: boolean = false;
addAttachmentListReq: any;
attachmentID: number = 0;
addAttachRequest: any = [];
fileData: any;
fileType: any;
index: any = 1;
dirPage: any;
TransactionID: any;
indexLastObj: any = 0;
filterAllowedType: any = ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
constructor(public cs: CommonService, public ts: TranslatorService, public modalCtrl: ModalController) {
this.eitResponse = this.cs.sharedService.getSharedData(AddEitResponse.SHARED_DATA, false);
this.TransactionID = this.cs.sharedService.getSharedData('TransactionID', false);
this.indexLastObj = this.cs.sharedService.getSharedData('indexLastObj', false);
// console.log("this.TransactionID : "+ this.TransactionID);
this.isUpload = false;
}
ngOnInit() { }
public uploader: FileUploader = new FileUploader({
allowedMimeType: ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
maxFileSize: 10 * 1024 * 1024,
formatDataFunctionIsAsync: true,
formatDataFunction: async (item) => {
return new Promise((resolve, reject) => {
resolve({
name: item._file.name,
length: item._file.size,
contentType: item._file.type,
date: new Date()
});
});
}
});
public hasBaseDropZoneOver: boolean = false;
public hasAnotherDropZoneOver: boolean = false;
public fileOverBase(e: any): void {
this.hasBaseDropZoneOver = e;
}
public fileOverAnother(e: any): void {
this.hasAnotherDropZoneOver = e;
}
OkBtnModal() {
let fileCount: number = this.uploader.queue.length;
if (fileCount > 0) {
let data: any = this.addAttachRequest;
// this.viewCtrl.dismiss(data);
this.modalCtrl.dismiss(data);
}
else {
let msg: string = "";
msg = this.ts.trPK("general", "noFileSelect");
this.cs.presentAlert(msg);
return;
}
} // end ok button
closeBtnModal() {
// this.viewCtrl.dismiss("cancel");
this.modalCtrl.dismiss("cancel");
}
onFileSelected(input) {
// this.uploader.onWhenAddingFileFailed = function (item: any, filter: any, options: any){
if (!(this.filterAllowedType.indexOf(input.target.files[0].type) > -1)) {
let msg: string = "";
msg = this.ts.trPK("general", "notSupport");
this.cs.presentAlert(msg);
return
} // todo: show alert that you tried uploading wrong files
else {
const file = input.target.files[0];
// console.log(file);
//var encoded = Base64.encode(file);
this.getBase64(file).then(
data => this.pushObject(data, file.name, file.type)
);
// }
// };
}
}
getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
pushObject(fileData, name, type) {
// console.log("before push: "+ this.index);
this.indexLastObj++;
try {
let array = name.split('.');
let attachType: string = array[array.length - 1];
this.addAttachRequest.push(
{
AttachmentID: this.indexLastObj,
P_FILE_CONTENT_TYPE: attachType,//type.split('/')[1],
P_FILE_DATA: fileData.split(',')[1],
P_FILE_NAME: name,//.split('.')[0],
P_TRANSACTION_ID: this.TransactionID
})
} catch (e) {
}
//console.log("after push: "+ this.index);
// return this.addAttachRequest
}
removeFile(objectitem) {
let objIndex1 = this.uploader.queue.findIndex(item => item == objectitem);
this.uploader.queue.splice(objIndex1, 1);
let objIndex = this.addAttachRequest.findIndex(item => item.AttachmentID == objectitem.AttachmentID);
this.addAttachRequest.splice(objIndex, 1);
// this.addAttachRequest =this.addAttachRequest.filter(item => item.AttachmentID !== objectitem.AttachmentID);
}
}

@ -0,0 +1,42 @@
<!-- <ion-header>
<ion-toolbar class="header-toolbar-new">
<ion-buttons *ngIf="getPassdirfromNotifiPage != true" slot="start">
<nav-buttons backLink=""></nav-buttons>
</ion-buttons>
<ion-title color="light">{{headerTitle}}</ion-title>
<ion-buttons *ngIf="getPassdirfromNotifiPage == true" slot="primary">
<ion-button style="background: none !important;" (click)="closemodal()">
<ion-icon slot="icon-only" name="close"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
-->
<app-generic-header
showBack="!getPassdirfromNotifiPage"
[updateDirection]="getPassdirfromNotifiPage"
[headerText]="headerTitle"
(trigger)="closeModal()"
>
</app-generic-header>
<!-- <app-generic-header
showBack="true"
[headerText]="headerTitle">
</app-generic-header> -->
<ion-content padding>
<div #containerDiv id="containerDiv">
</div>
</ion-content>
<ion-footer>
<div class="centerDiv">
<ion-button class="addEitOkButton" color="customnavy" ion-button (click)="validateEITTransaction()">
{{'vacation-rule, next-label' | translate}}</ion-button>
</div>
</ion-footer>

@ -0,0 +1,40 @@
.footer-button {
border-radius: 2px;
padding: 0 1.1em;
min-height: 45px;
min-width: 200px;
}
ion-label {
color: var(--customnavy) !important;
}
.daynamicForm-Label {
font-size: 16px;
color: #a2a5a6 !important;
display: block;
overflow: hidden;
-webkit-flex: 1;
flex: 1;
font-size: inherit;
white-space: normal;
padding: 5px 0px;
margin: 10px auto;
padding-left: 10px;
}
.header-toolbar-new{
--background: #29B5BF;
}
.addEitOkButton{
white-space: normal !important;
text-transform: capitalize !important;
min-height: 45px !important;
min-width: 5px !important;
margin: 8px !important;
background-color: #29B5BF;
width: 80% !important;
color: white!important;
border-radius: 16px !important;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AddEitComponent } from './add-eit.component';
describe('AddEitComponent', () => {
let component: AddEitComponent;
let fixture: ComponentFixture<AddEitComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AddEitComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddEitComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

File diff suppressed because it is too large Load Diff

@ -0,0 +1,267 @@
<ion-header>
<ion-toolbar class="header-toolbar-new">
<nav-buttons></nav-buttons>
<ion-title [ngClass]=" direction === 'en' ? 'title' : 'title-ar'" color="light">{{headerTitle}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<!-------------------------------Start New design ---------------------------------------->
<ion-grid>
<ion-row style="margin-top: 20px;margin-left: 12px;">
<ion-col>
<div size="10" [ngClass]=" direction === 'en' ? 'approvalTitle' : 'approvalTitle-ar'" >{{'general, addAttach' | translate}}</div>
</ion-col>
<ion-col style="padding-left: 7%;" size="2">
<div class="fileDiv">
<input end class="inputfile" style="margin-top: 10px;z-index: 99999;position: absolute;opacity: 0;" type="file" ng2FileSelect [uploader]="uploader"
(change)="onFileSelected($event)" (click)="onFileSelectedclick($event)" />
<label end for="file" class="attachLable">
<ion-icon style="font-size: 22px;" name="add"></ion-icon>
</label></div>
</ion-col>
</ion-row>
<ion-item class="attachmentDiv" *ngIf="attachListOver?.length == 0">
<ion-img style="height: 26px;width:100%;margin-top:12px" src="../assets/imgs/attach-icon.png"></ion-img>
<ion-label style="margin-top: -24px;" position="floating" class="boldTxtNav">{{ 'general, notAttch' | translate}}</ion-label>
</ion-item>
</ion-grid>
<ion-grid class="attachmentDiv" *ngIf="attachListOver?.length > 0">
<div *ngFor="let attachList of attachListOver ; let i = index">
<ion-row>
<ion-col size="1">
<ion-label style="color: black !important;">
{{attachList.AttachmentID +1 }} .
</ion-label>
</ion-col>
<ion-col style="text-align: left;" size="10">
<ion-label style="color: blue !important;" (click)="OpenAttachFiles(attachList.P_FILE_DATA,attachList.P_FILE_CONTENT_TYPE)">
{{attachList.P_FILE_NAME }}
</ion-label>
</ion-col>
<ion-col size="1">
<!-- <button float-end class="attachImgBtn"
(click)="OpenAttachFiles(attachList.P_FILE_DATA,attachList.P_FILE_CONTENT_TYPE)">
<img class="attachImg" src="../assets/imgs/view.png">
</button> -->
<button float-end [disabled]="attachList.isSuccess" class="attachImgBtn removeLable"
(click)="removeFile(attachList)">
<ion-icon style="font-size:22px;margin-left:-7px;margin-top:-2px;" name="close"></ion-icon>
</button>
</ion-col>
</ion-row>
</div>
</ion-grid>
<ion-grid *ngIf="attachmentRes?.length > 0">
<div *ngFor="let attachRes of attachmentRes">
<ion-row>
<ion-col col-8>
<div> <img float-start class="attachImg" src="../assets/imgs/file.png">
</div>
<ion-label>
{{attachRes.FILE_NAME }} </ion-label>
</ion-col>
<ion-col col-4>
<button float-end class="attachImgBtn"
(click)="OpenAttachFiles(attachRes.FILE_DATA,attachRes.FILE_CONTENT_TYPE)">
<img class="attachImg" src="../assets/imgs/view.png">
</button>
<button float-end [disabled]="!isResubmitEIT" class="attachImgBtn" (click)="delelteFile(attachRes)"><img
class="attachImg" src="../assets/imgs/deletegray.png"></button>
</ion-col>
<!-- <button [disabled]="!isResubmitEIT" class="iconButton" (click)="addAttachment(false,attachRes)"><img
class="imgSize" src="../assets/imgs/editIcon.png"></button>
<button (click)="delelteFile(attachRes)" class="iconButton" [disabled]="!isResubmitEIT"><img
class="imgSize" src="../assets/imgs/cancel.png"></button> -->
</ion-row>
</div>
</ion-grid>
<ion-grid class="">
<div [ngClass]=" direction === 'en' ? 'approvalTitle' : 'approvalTitle-ar'">{{'confirmAddEit, comment' | translate}}</div>
<ion-item class="submitNote" lines="none">
<!-- <ion-label position="floating" class="boldTxtNav">{{'confirmAddEit, comment' | translate}}</ion-label> -->
<ion-textarea type="text" [(ngModel)]="eitComments"></ion-textarea>
</ion-item>
</ion-grid>
<ion-grid class="approvalList">
<div [ngClass]=" direction === 'en' ? 'approvalTitle' : 'approvalTitle-ar'">{{'confirmAddEit, approverList' | translate}}</div>
<div class="noDataDiv" *ngIf="approversList?.length == 0">
<p>{{ 'general, empty' | translate}}</p>
</div>
<div style="background-color: white;border-radius: 32px;border: 1px solid #c8c4c4;" *ngIf="approversList?.length > 0">
<ion-list class="notification-list ">
<div class="timeline">
<ion-item style="padding-left: 4%;" *ngFor="let employee of approversList">
<div class="timeline-item" slot="start">
<div [class]="direction == 'en'? 'timeline-thumb-en timeline-icon': 'timeline-thumb-ar timeline-icon'">
<img *ngIf="employee.EMPLOYEE_IMAGE" class="empImge"
[src]="'data:image/png;base64,'+employee.EMPLOYEE_IMAGE">
<img *ngIf="employee.EMPLOYEE_IMAGE == null" class="empImge"
src="../assets/imgs/profile.png"> </div>
</div>
<ion-col>
<ion-label style="color:black !important ;font-weight: bold;padding-top: 0%;">
{{employee.APPROVER}}
</ion-label>
<ion-label style="color:black !important ;padding-top: 4%;">
{{employee.POSITION_TITLE}}
</ion-label>
</ion-col>
<div class="line"></div>
</ion-item>
</div>
</ion-list>
</div>
</ion-grid>
<!-------------------------------End New design ---------------------------------------->
<!-- <ion-card>
<ion-card-header class="boxHdr">
<div class="hrTitle">{{'confirmAddEit, approverList' | translate}}</div>
</ion-card-header>
<ion-card-content>
<ion-grid no-padding class=" gridAH" *ngIf="approversList?.length > 0">
<ion-row class="rowAH titleH" nowrap>
<ion-col size="1">
<ion-label class="Header" for="">{{'confirmAddEit, no' | translate}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="Header" for="">{{'confirmAddEit, approver' | translate}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="Header" for="">{{'confirmAddEit, approverCategory' | translate}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="Header" for="">{{'confirmAddEit, approverType' | translate}}</ion-label>
</ion-col>
<ion-col size="2">
<ion-label class="Header" for="">{{'confirmAddEit, status' | translate}}</ion-label>
</ion-col>
</ion-row>
<ion-row class="rowAH" *ngFor="let item of approversList" nowrap>
<ion-col size="1">
<ion-label class="tbData" for="">{{item.APPROVER_ORDER_NUMBER}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="tbData" for="">{{item.APPROVER}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="tbData" for="">{{item.APPROVER_CATEGORY}}</ion-label>
</ion-col>
<ion-col size="3">
<ion-label class="tbData" for="">{{item.APPROVER_TYPE}}</ion-label>
</ion-col>
<ion-col csize="2">
<ion-label class="tbData" for="">{{item.APPROVAL_STATUS}}</ion-label>
</ion-col>
</ion-row>
</ion-grid>
</ion-card-content>
</ion-card>
<ion-item padding>
<ion-label class="boldTxtNav">{{'confirmAddEit, comment' | translate}}</ion-label>
<ion-textarea type="text" [(ngModel)]="eitComments"></ion-textarea>
</ion-item>
<div>
<ion-card>
<ion-card-header class="boxHdr">
<ion-grid no-padding>
<ion-row style="width: 100%;" class="hrTitle" nowrap>
<ion-col size="10">
<ion-text style="font-size: larger;"><b>{{"absenceList, attachList" | translate}}</b></ion-text>
</ion-col>
<ion-col size="2">
<button class="btnBack" ion-button (click)="addAttachment(true,-1)">
<img class="imgSize" src="../assets/imgs/attachment.png"></button>
</ion-col>
</ion-row>
</ion-grid>
</ion-card-header>
<ion-card-content>
<ion-grid *ngIf="attachListOver?.length > 0">
<div *ngFor="let attachList of attachListOver ; let i = index">
<ion-row>
<ion-col col-8>
<div> <img float-start class="attachImg" src="../assets/imgs/file.png">
</div>
<ion-label>
{{attachList.P_FILE_NAME }} </ion-label>
</ion-col>
<ion-col col-4>
<button float-end class="attachImgBtn"
(click)="OpenAttachFiles(attachList.P_FILE_DATA,attachList.P_FILE_CONTENT_TYPE)">
<img class="attachImg" src="../assets/imgs/view.png">
</button>
<button float-end [disabled]="attachList.isSuccess" class="attachImgBtn"
(click)="removeFile(attachList)"><img class="attachImg" src="../assets/imgs/deletegray.png"></button>
</ion-col>
</ion-row>
</div>
</ion-grid>
<ion-grid *ngIf="attachmentRes?.length > 0">
<div *ngFor="let attachRes of attachmentRes">
<ion-row>
<ion-col col-8>
<div> <img float-start class="attachImg" src="../assets/imgs/file.png">
</div>
<ion-label>
{{attachRes.FILE_NAME }} </ion-label>
</ion-col>
<ion-col col-4>
<button float-end class="attachImgBtn"
(click)="OpenAttachFiles(attachRes.FILE_DATA,attachRes.FILE_CONTENT_TYPE)">
<img class="attachImg" src="../assets/imgs/view.png">
</button>
<button float-end [disabled]="!isResubmitEIT" class="attachImgBtn" (click)="delelteFile(attachRes)"><img
class="attachImg" src="../assets/imgs/deletegray.png"></button>
</ion-col>
</ion-row>
</div>
</ion-grid>
</ion-card-content>
</ion-card> -->
</ion-content>
<ion-footer>
<div class="centerDiv">
<ion-button class="confirmEitOkButton" color="customnavy" ion-button (click)="openSubmitModal()">
{{ (isDelete ? 'general, delete' : 'general, submit') | translate }}</ion-button>
</div>
</ion-footer>

@ -0,0 +1,262 @@
.footer-button {
border-radius: 2px;
padding: 0 1.1em;
min-height: 45px;
min-width: 200px;
}
.imgSize {
width: 22px;
height: 22px;
}
.Header {
font-weight: bold;
color: #1a586d !important;
font-size: 10px;
}
.tbData {
font-size: 10px;
}
.btnBack {
background: transparent;
float: right;
}
.attachmentDiv{
background: #ffffff;
height: auto;
text-align: center;
padding-top: 1px;
margin: 10px;
border-radius: 15px;
border: 1px solid grey;
}
.noDataDiv{
background: #ffffff;
height: 11%;
text-align: center;
padding-top: 1px;
border-radius: 10px;
margin: 10px;
border-radius: 5px;
}
.submitNote{
background: #ffffff;
height: 80px;
padding-top: 1px;
margin: 10px;
border-radius: 15px;
border: 1px solid grey;
}
.approvalList{
--background: #f0efef;
height: auto;
text-align: center;
padding-top: 1px;
border-radius: 10px;
margin: 10px;
border-radius: 5px;
}
/************************New Design**********************************/
.notification-list{
background: none;
background: none;
border-radius: 32px;
ion-item{
// margin-top: 5px;
// margin-bottom: 5px;
background-color: transparent;
.item-date{
width: 100%;
font-size: 16px;
font-weight: bold;
text-align: start;
padding: 0;
margin: 0;
position: absolute;
left: 0;
top: 12%;
}
ion-label , [item-end]{
white-space: normal;
font-size: 14px;
padding-top: 15%;
// :root[dir="ltr"]{
// margin-left: 10px;
// }
// :root[dir="rtl"]{
// margin-right: 10px;
// }
}
}
}
.timeline {
position: relative;
margin: 15px 0 0 0;
// border-bottom: solid 1px var(--cusgray);
}
.timeline:before {
content: '';
position: inherit !important;
top: 0;
bottom: 0;
width: 4px;
// background: #e4e4e4;
z-index: 1;
left: 35px;
/* margin-left: -10px; */
/* z-index: 1; */
}
.timeline .timeline-thumb {
border-radius: 500px;
width: 70px !important;
z-index: 2;
position: absolute;
left: 0px;
// :root[dir="ltr"]{
// left: 37px;
// }
// :root[dir="rtl"]{
// right: 37px;
// }
float: right;
top: 9px;
}
.timeline .timeline-thumb.timeline-icon {
height: 70px;
// text-align: center;
// color: white;
// border: 5px solid #CBD0D3;
// transform: scale(0.2);
}
.timeline .timeline-item {
width: 40px;
}
.timeline .timeline-stats {
position: relative;
font-size: 12px;
color: var(--darkgray);
}
.empImge{
border-radius: 50%;
width:100%;
height: 100%;
border: #dedede solid 1px;
}
.empImgeRep {
border-radius: 50% !important;
width: 80px;
height: 80px;
border: #dedede solid 1px;
}
.line{
padding-bottom:87px;
}
.attachLable{
position: absolute;
top: 0px;
z-index: 0;
background: #30b8c6;
color: #fff;
border-radius: 50%;
border: 0px;
width: 24px;
height: 24px;
text-align: center;
font-size: 5px;
}
.removeLable{
top: 0px;
z-index: 0;
background: #d8252d;
color: #fff;
border-radius: 50%;
border: 0px;
width: 20px;
height: 20px;
text-align: center;
font-size: 5px;
}
.note-modal {
// width: 90%;
// height: 50%;
// top: 20%;
// left: 5%;
// right: 5%;
// bottom: 5%;
background: rgba(0, 0, 0, 0.5) !important;
padding: 30% 10% !important;
--height: 12cm !important;
// --width: 80% !important;
--border-radius:20px;
}
.header-toolbar-new{
--background: #29B5BF;
}
.title{
margin-top: -37px;
margin-left: 85px;
}
.title-ar{
margin-top: -37px;
margin-right: 101px;
}
.confirmEitOkButton{
white-space: normal !important;
text-transform: capitalize !important;
min-height: 45px !important;
min-width: 5px !important;
margin: 8px !important;
background-color: #29B5BF;
width: 80% !important;
color: white!important;
border-radius: 16px !important;
}
.approvalTitle-ar{
font-weight: bold;
font-size: 16px;
text-align: right;
}
.approvalTitle{
font-weight: bold;
font-size: 16px;
text-align: left;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ConfirmAddEitComponent } from './confirm-add-eit.component';
describe('ConfirmAddEitComponent', () => {
let component: ConfirmAddEitComponent;
let fixture: ComponentFixture<ConfirmAddEitComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ConfirmAddEitComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ConfirmAddEitComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,568 @@
import { WorkListAttachViewComponent } from './../../notification/work-list-attach-view/work-list-attach-view.component';
import { AddAttachComponent } from './../add-attach/add-attach.component';
import { NotificationGetAttachResponse } from './../models/NotificationGetAttachRes';
import { EITNotificatonBodyResponse } from './../models/EITNotificationBodyRes';
import { WorkListButtonRequest } from './../models/NotificationButtonReq';
import { ApproversList } from './../../absence/models/approvers';
import { EitRequest } from './../models/eit.request';
import { Component, OnInit } from '@angular/core';
import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response';
import { ModalController } from '@ionic/angular';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { EitService } from '../services/eit.service';
import { AddEitResponse } from '../models/add.eit.response';
import { FileUploader } from 'ng2-file-upload';
import { SubmitEitModalComponent } from '../submit-eit-modal/submit-eit-modal.component';
@Component({
selector: 'app-confirm-add-eit',
templateUrl: './confirm-add-eit.component.html',
styleUrls: ['./confirm-add-eit.component.scss'],
})
export class ConfirmAddEitComponent implements OnInit {
private P_TransactionID: number;
private eitRequest: EitRequest;
approversList = [];
addrespList: any;//EitRespModel;
eitComments: string = "";
menuType: string = "";
selEmp: string = "";
respID: number;
selMenu: MenuResponse;
getAttachList: any;
attachListDisplay: any = [];
headerTitle: string = "";
isTrue: any = 0;
attachItems: any;
public isResubmitEIT: boolean = false;
private itemKey: string = "";
private pActionMode: string = "SUBMIT";
attachReqObj: WorkListButtonRequest = new WorkListButtonRequest();
attachmentRes: any;
objIndex1: any;
attachListOver: any = [];
index: any = 0;
getPassNotificationDetails: any;
isSubmitBtnClicked: boolean;
isDelete: boolean = false;
/***Add Attchment Vars */
isUpload: boolean = false;
inQueue: boolean = false;
addAttachmentListReq: any;
attachmentID: number = 0;
addAttachRequest: any = [];
fileData: any;
fileType: any;
dirPage: any;
TransactionID: any;
indexLastObj: any = 0;
filterAllowedType: any = ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
direction: string;
constructor(public modalController: ModalController, public cs: CommonService, private ts: TranslatorService, private eitService: EitService) {
this.direction = TranslatorService.getCurrentLanguageName()
this.isSubmitBtnClicked = false;
this.eitRequest = new EitRequest();
}
ngOnInit() {
// console.log('ionViewDidLoad ConfirmAddEitPage');
// let selMenu:MenuResponse=new MenuResponse();
this.selMenu = this.cs.sharedService.getSharedData(MenuResponse.SHARED_DATA, false);
this.selEmp = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false);
this.respID = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_RESP_ID, false);
this.eitRequest = this.cs.sharedService.getSharedData(EitRequest.SHARED_DATA, false);
this.isResubmitEIT = this.cs.sharedService.getSharedData('confirmAddEITData', false).isResubmit;
if (this.isResubmitEIT) {
this.getPassNotificationDetails = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.NOT_WORKLIST, false); //WARINING **
// console.log("this.getPassNotificationDetails: " + this.getPassNotificationDetails);
this.P_TransactionID = this.cs.sharedService.getSharedData("TransactionIDResubmit", true);
// let notification = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.NOT_WORKLIST, true);
this.itemKey = this.getPassNotificationDetails.ITEM_KEY;
this.pActionMode = "RESUBMIT";
this.menuType = "E";
this.respID = -999;
this.selEmp = this.eitRequest.P_SELECTED_EMPLOYEE_NUMBER;
this.getApproversList();
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
let msg: string = "";
msg = this.ts.trPK("eit", "update-title");
this.headerTitle = msg;
} else {
this.menuType = this.selMenu.List_Menu.MENU_TYPE;
this.headerTitle = this.selMenu.GetMenuEntriesList.PROMPT;
this.addrespList = this.cs.sharedService.getSharedData(AddEitResponse.SHARED_DATA);
this.itemKey = this.addrespList.SubmitEITTransactionList.P_ITEM_KEY;
this.P_TransactionID = this.addrespList.SubmitEITTransactionList.P_TRANSACTION_ID;
this.isDelete = this.isResubmitEIT = this.cs.sharedService.getSharedData('confirmAddEITData', false).isDelete;
this.getApproversList();
// this.confirmAddEit.submitEit(this.eitRequest).subscribe((result: AddEitResponse) => {
// this.handleSubmitEitResult(result);
// });
}
}
getApproversList() {
let body: any = {
P_TRANSACTION_ID: this.P_TransactionID,
P_AME_TRANSACTION_TYPE: "SSHRMS",
P_PAGE_NUM: 1,
P_PAGE_LIMIT: 1000
}
this.eitService.getApproversList(
body).
subscribe((result: any) => {
this.handleApproversResult(result);
});
}
handleApproversResult(result) {
if (this.cs.validResponse(result)) {
this.approversList = result.GetApprovesList;
// console.log("approvers List" + this.approversList);
}
}
startEitApproval() {
//first call add attach inside success call submit
// if(this.isResubmitEIT){
// this.startEITApprovalProcess();
// }else{
// let listToAdd:any=[];
if (this.attachListOver) {
// this.attachListOver.forEach(element => {
// if(element.toAdd==true)
// listToAdd.push(element);
// });
let request = {
AddAttachmentList: this.attachListOver
}
this.eitService.addAttachment(
request).
subscribe((result: any) => {
this.handleAddAttachmentResults(result);
});
} else {
this.startEITApprovalProcess();
}
// }
}
handleAddAttachmentResults(result) {
if (this.cs.validResponse(result)) {
//this.isUpload=true;
this.isTrue = 0;
for (let i = 0; i < result.AddAttSuccessList.length; i++) {
if (!result.AddAttSuccessList[i].AddSuccess) {
this.attachListOver[i].isSuccess = false;
//this.attachItems[i].isSuccess = false;
// if false display cancel button with waring icon or design
}// end if
else {
// if true remove cancel and set isSuccess = true
// this.attachItems[i].isSuccess = true;
this.attachListOver[i].isSuccess = true;
this.isTrue = this.isTrue + 1; //count flag of attach status
} // end else
} // end for
if (this.isTrue == result.AddAttSuccessList.length) {
this.startEITApprovalProcess();
}
else {
//stope
let filtered = this.attachListOver.filter(function (el) { return el.isSuccess == true; });
this.attachListOver = filtered;
let msg: string = "";
msg = this.ts.trPK("eit", "attach-errorMsg");
this.cs.presentAlert(msg);
// this.cs.presentAlert("fail to upload some attach file");
}
}
}
startEITApprovalProcess() {
let request: any = {};
request.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp;
request.P_MENU_TYPE = this.menuType;
request.P_SELECTED_RESP_ID = this.respID;
request.P_TRANSACTION_ID = this.P_TransactionID;
request.P_ITEM_KEY = this.itemKey;
request.P_ACTION_MODE = this.pActionMode;
request.P_COMMENTS = this.eitComments;
this.eitService.startEitApprovalProcess(
request).
subscribe((result: any) => {
this.handleResults(result);
});
}
cancelEitProcess() {
let body: any = {
P_TRANSACTION_ID: this.P_TransactionID
}
this.eitService.cancelHRTransaction(
body).
subscribe((result: any) => {
this.handleCancelResults(result);
});
}
handleCancelResults(result) {
if (this.cs.validResponse(result)) {
this.isSubmitBtnClicked = false;
// this.navCtrl.popToRoot();
}
}
handleResults(result) {
if (this.cs.validResponse(result)) {
this.isSubmitBtnClicked = true;
//if(this.isResubmitEIT==false){
let msg: string = this.ts.trPK("eit", "approval-message-success");
this.cs.presentAlert(msg);
// }
// this.navCtrl.popToRoot();
// this.cs.openHome();
this.cs.openNotificationPage();
}
}
// addAttachment(){
// this.navCtrl.push('AddAttachPage');
// }
async addAttachment(str: boolean, attachItems: any) {
// console.log("inside attach modal");
//open the modal with return data
let attachDocID = attachItems.ATTACHED_DOCUMENT_ID;
this.cs.sharedService.setSharedData( this.P_TransactionID, 'TransactionID');
this.cs.sharedService.setSharedData(this.attachListOver.length, 'indexLastObj');
const modal = await this.modalController.create({
component: AddAttachComponent
});
modal.onDidDismiss()
.then((data) => {
if (data == "cancel" || data == "undefined") {
return;
} else {
if (!str) {
// this.attachItems = data.map(function(el) {
// var o = Object.assign({}, el);
// o.isSuccess = false;
// return o;
// })
// this.objIndex1 =this.attachmentRes.findIndex(item => item == attachItems); //to use it in remove attach
//.ATTACHED_DOCUMENT_ID
this.updateFile(data, attachDocID);
} else {
console.log(data);
this.attachListDisplay = data.data;
this.attachItems = this.attachListDisplay.map(function (el) {
var o = Object.assign({}, el);
o.isSuccess = false;
return o;
});
this.attachListOver = this.attachListOver ? this.attachListOver.concat(this.attachItems) : this.attachItems;
// this.attachListOver = this.attachListDisplay;
}
// this.attachListDisplay=data;
// this.attachItems = this.attachListDisplay.map(function(el) {
// var o = Object.assign({}, el);
// o.isSuccess = false;
// return o;
// })
}
});
return await modal.present();
}
/*****submit modal********/
async openSubmitModal() {
this.cs.sharedService.setSharedData( this.attachListOver, 'submitAttachmentList');
this.cs.sharedService.setSharedData(this.eitComments, 'eitComments');
const modal = await this.modalController.create({
component: SubmitEitModalComponent,
backdropDismiss: false,
});
modal.cssClass = 'note-modal';
modal.onDidDismiss()
.then((data) => {
console.log(data.data);
if (data.data == "cancel" || data.data == undefined) {
return;
} else {
this.startEitApproval();
}
});
return await modal.present();
}
removeFile(objectitem) {
// if (this.attachItems) {
// let index1 = this.attachItems.findIndex(item => item == objectitem);
// if (index1 > -1) {
// this.attachItems.splice(index1, 1);
// }
// this.attachListDisplay =this.attachListDisplay.filter(item => item.AttachmentID !== objectitem.AttachmentID);
// }
if (this.attachListOver) {
let index2 = this.attachListOver.findIndex(item => item == objectitem);
if (index2 > -1) {
this.attachListOver.splice(index2, 1);
}
//this.attachListOver =this.attachListOver.filter(item => item.AttachmentID !== objectitem.AttachmentID);
}
if (this.attachmentRes) {
let index3 = this.attachmentRes.findIndex(item => item == objectitem);
if (index3 > -1) {
this.attachmentRes.splice(index3, 1);
}
}
}
getAttachment(NotificationID) {
this.attachReqObj.P_NOTIFICATION_ID = NotificationID;
this.eitService.getAttach(this.attachReqObj).
subscribe((result: NotificationGetAttachResponse) => {
this.handleWorkListAttachResult(result);
});
}
handleWorkListAttachResult(result) {
if (this.cs.validResponse(result)) {
// this.sharedData.setSharedData(result, WorKListResponse.SHARED_DATA);
if (result.GetAttachementList != null) {
this.attachmentRes = result.GetAttachementList;
} // if result == null
} // valid it
}
async OpenAttachFiles(value, Type) {
// let modal: Modal = this.modalCtrl.create('WorkListAttachViewPage', { displayData: value, TypeData: Type });
// modal.present();
this.cs.sharedService.setSharedData({ displayData: value, TypeData: Type }, 'WorkListAttachViewPage');
const modal = await this.modalController.create({
component: WorkListAttachViewComponent
});
modal.onDidDismiss()
.then((data) => {
});
return await modal.present();
}
delelteFile(attach) {
// let alert = this.cs.confirmAlertDialog(this.translate.translate('general.deletePerm'));
this.cs.confirmAlertDialog((data) => {
if (data == true) {
this.continueDelete(attach);
}
}, this.ts.trPK('general', 'ok'), () => {
}, this.ts.trPK('general', 'cancel'), this.ts.trPK('general', 'alert'), this.ts.trPK('eit', 'delete-perm'));
// alert.onDidDismiss((data) => {
// if (data == true) {
// this.continueDelete(attach);
// }
// });
}
continueDelete(attach) {
// console.log("trst" + attach.ATTACHED_DOCUMENT_ID);
let req = {
P_ATTACHED_DOCUMENT_ID: attach.ATTACHED_DOCUMENT_ID
}
this.eitService.deleteAttach(req).
subscribe((result: any) => {
if (this.cs.validResponse(result)) {
if (result.DeleteAttachmentList.P_RETURN_STATUS === "S") {
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
let msg: string = "";
msg = this.ts.trPK("eit", "deleteAttach");
this.cs.presentAlert(msg);
//this.cs.presentAlert("Success" );
}
}
});
}
updateFile(attachList, attachDocID) {
//console.log("updateFile" + attachDocID.ATTACHED_DOCUMENT_ID);
let req = {
P_ATTACHED_DOCUMENT_ID: attachDocID,
P_FILE_DATA: attachList[0].P_FILE_DATA,
P_FILE_NAME: attachList[0].P_FILE_NAME,
P_FILE_CONTENT_TYPE: attachList[0].P_FILE_CONTENT_TYPE
}
this.eitService.updateAttach(req).
subscribe((result: any) => {
if (this.cs.validResponse(result)) {
if (result.MessageStatus == 1) {
let msg: string = "";
msg = this.ts.trPK("eit", "attachUpdate");
this.cs.presentAlert(msg);
// this.cs.presentAlert("updated attach successfully" );
//flag to disable update and enable remove
// this.removeFile(attachList);
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
}
} // val
});
}
ionViewWillLeave() {
if (this.P_TransactionID && this.isSubmitBtnClicked == false)
this.cancelEitProcess();
}
/*******************Add attchement Functions*************/
public uploader: FileUploader = new FileUploader({
allowedMimeType: ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
maxFileSize: 10 * 1024 * 1024,
formatDataFunctionIsAsync: true,
formatDataFunction: async (item) => {
return new Promise((resolve, reject) => {
resolve({
name: item._file.name,
length: item._file.size,
contentType: item._file.type,
date: new Date()
});
});
}
});
onFileSelectedclick(event){
event.target.value = '';
}
onFileSelected(input) {
// this.uploader.onWhenAddingFileFailed = function (item: any, filter: any, options: any){
if (!(this.filterAllowedType.indexOf(input.target.files[0].type) > -1)) {
let msg: string = "";
msg = this.ts.trPK("general", "notSupport");
this.cs.presentAlert(msg);
return
} // todo: show alert that you tried uploading wrong files
else {
const file = input.target.files[0];
// console.log(file);
//var encoded = Base64.encode(file);
this.getBase64(file).then(
data => this.pushObject(data, file.name, file.type)
);
// }
// };
}
}
getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
pushObject(fileData, name, type) {
console.log("before push: "+ this.index);
//this.attachListOver.length++;
try {
let array = name.split('.');
let attachType: string = array[array.length - 1];
this.attachListOver.push(
{
AttachmentID: this.attachListOver.length,
P_FILE_CONTENT_TYPE: attachType,//type.split('/')[1],
P_FILE_DATA: fileData.split(',')[1],
P_FILE_NAME: name,//.split('.')[0],
P_TRANSACTION_ID: this.P_TransactionID
})
} catch (e) {
}
//console.log("after push: "+ this.index);
// return this.addAttachRequest
}
// removeFile(objectitem) {
// let objIndex1 = this.uploader.queue.findIndex(item => item == objectitem);
// this.uploader.queue.splice(objIndex1, 1);
// let objIndex = this.addAttachRequest.findIndex(item => item.AttachmentID == objectitem.AttachmentID);
// this.addAttachRequest.splice(objIndex, 1);
// // this.addAttachRequest =this.addAttachRequest.filter(item => item.AttachmentID !== objectitem.AttachmentID);
// }
}

@ -0,0 +1,259 @@
<app-generic-header
showBack="true"
[headerText]="headerTitle">
</app-generic-header>
<ion-content>
<div class="">
<!-- class="colorBG" -->
<div class="content" [hidden]="functionName!='HMG_TKT_NEW_EIT_SS'">
<ion-grid class="headerGrid">
<p class="title">{{ts.trPK('absenceList','tickets-balance')}}</p>
<div style="color: black;">
<div class="result-graph">
<div >
<!-- <ion-datetime
[placeholder]="Select"
display-format="DD/MM/YYYY"
[min]="1900"
[max]="2100"
[(ngModel)]="dateTo"
doneText="Done"
cancelText="Cancel"
></ion-datetime> -->
<ion-datetime [(ngModel)]="Sdate" class="datetime" placeholder="Select" displayFormat="DD MMMM YYYY"
cancelText="{{ts.trPK('general','cancel')}}" doneText="{{ts.trPK('general','done')}}"
(ionChange)="getAccrualBalance()"></ion-datetime>
<!-- <ion-datetime [(ngModel)]="Sdate" class="datetime" displayFormat="DD MMMM YYYY" placeholder="DD MMMM YYYY"
(ionChange)="getAccrualBalance()"></ion-datetime> -->
<ion-icon class="iconCalendar" ios="ios-calendar" md="md-calendar"></ion-icon>
</div>
<div style=" border-bottom: 1px solid #a7a4a4; margin-bottom: 12px;
margin-top: -10px; margin-right: -9px;"></div>
<!-- <div class="result-text-container">
</div> -->
<p-chart #chart class="today-graph" type="doughnut" [data]="data" [options]="options"></p-chart>
<div>
<ion-row>
<ion-col class="col" size="4">
<div class="light-dote"></div>
<!-- </ion-col>
<ion-col> -->
<label [ngClass]="direction == 'en' ? 'light-label':'light-label-ar' ">{{ts.trPK('absenceList','adult')}}</label>
</ion-col>
<ion-col class="col" size="4">
<div class="blue-dote"></div>
<!-- </ion-col>
<ion-col> -->
<label class="blue-label">{{ts.trPK('absenceList','child')}}</label>
</ion-col>
<ion-col class="col" size="4">
<div class="green-dote"></div>
<!-- </ion-col>
<ion-col> -->
<label [ngClass]="direction == 'en'? 'green-label':'green-label-ar'">{{ts.trPK('absenceList','infants')}} </label>
</ion-col>
</ion-row>
</div>
</div>
</div>
</ion-grid>
</div>
<!-- ///////////////////////////////////////////////// -->
<ion-grid [hidden]="functionName!='HMG_TKT_NEW_EIT_SS'" >
<div class="gridService">
<ion-row>
<ion-col class="columns">
<div [class]="direction =='en'? 'adult-dote':'adult-dote-ar'"></div>
<label>{{ts.trPK('absenceList','adult')}}</label>
<br>
<br>
<label class="service">{{accrualNetAdult}}</label>
<br> <label class="services">{{ts.trPK('absenceList','tickets')}}</label>
</ion-col>
<ion-col class="columns">
<div [ngClass]="direction == 'en'? 'child-dote' :'child-dote-ar'"></div>
<label>{{ts.trPK('absenceList','child')}} </label>
<br>
<br>
<label class="service">{{accrualUNetChild}}</label>
<br> <label class="services">{{ts.trPK('absenceList','tickets')}}</label>
</ion-col>
<ion-col class="columns">
<div [ngClass]="direction == 'en'? 'infants-dote': 'infants-dote-ar'"></div>
<label>{{ts.trPK('absenceList','infants')}} </label>
<br>
<br>
<label class="service">{{accrualNetInfants}}</label>
<br> <label class="services">{{ts.trPK('absenceList','tickets')}}</label>
</ion-col>
</ion-row>
</div>
</ion-grid>
<!--
<ion-grid class="three-grid">
<ion-row>
<ion-col >
infants
</ion-col>
<ion-col >2</ion-col>
<ion-col >tickit</ion-col>
</ion-row>
<ion-row>
<ion-col >
child
</ion-col>
<ion-col >2</ion-col>
<ion-col >tickit</ion-col>
</ion-row>
<ion-row>
<ion-col >
adult
</ion-col>
<ion-col >2</ion-col>
<ion-col >tickit</ion-col>
</ion-row>
</ion-grid> -->
<!-- //////////////////////////////////////////////////// -->
<!-- <ion-content padding> -->
<div *ngIf="eitAddedList && eitAddedList.length > 0 ">
<ion-card *ngFor="let eitAddedObj of eitAddedList; let i=index ">
<ion-card-header>
<!-- <button *ngIf="getPassMnuEntryObj.UPDATE_BUTTON == 'Y' && eitAddedObj.statusID!=2" ion-button icon-only
(click)="updateEITRrq(i)">
<ion-icon name="create"></ion-icon>
</button> -->
<button ion-button icon-only (click)="removeAddedItem(i)">
<ion-icon class="imgSize" name="trash"></ion-icon>
</button>
</ion-card-header>
<ion-card-content>
<ion-grid>
<div>
<ion-row>
<ion-col class="colBold">
<label for="">{{'confirmAddEit , status' | translate}}</label>
</ion-col>
<ion-col>
<label for="">{{eitAddedObj.status}}</label>
</ion-col>
</ion-row>
</div>
<div *ngFor="let item of eitAddedObj.Collection_Transaction">
<ion-row *ngIf="item.DISPLAY_FLAG != 'N' ">
<ion-col class="colBold">
<label for="">{{item.SEGMENT_PROMPT}}</label>
</ion-col>
<ion-col class="colBold">
<label for="">{{item.SEGMENT_VALUE_DSP}}</label>
</ion-col>
</ion-row>
</div>
</ion-grid>
</ion-card-content>
</ion-card>
</div>
<div class="no-dataDiv"
*ngIf="!getResEITTransactionList || getResEITTransactionList[0]?.Collection_Transaction.length <= 0">
<!-- <div class="no-dataDiv"> -->
<ion-row>
<img class="empty-data" src="../assets/imgs/box.png" />
</ion-row>
<h4> {{'general, noData' | translate}}</h4>
</div>
<!-- <no-data *ngIf="!getResEITTransactionList || getResEITTransactionList[0]?.Collection_Transaction.length <= 0" txt="{{'general.noData' | translate}}"></no-data> -->
<div *ngIf="getResEITTransactionList && getResEITTransactionList[0]?.Collection_Transaction.length > 0 ">
<!-- <div> -->
<div *ngFor="let EITTransactionList of getResEITTransactionList; let i=index ">
<!-- <ion-card-header class="boxHdr">
<div class="hrTitle">{{this.headerTitle}}</div>
<button ion-button (click)="deleteEIT(i)"
*ngIf="getPassMnuEntryObj.DELETE_BUTTON == 'Y' && EITTransactionList.statusID!=3">
<img class="imgSize" src="../assets/imgs/delete.png"></button>
<button ion-button *ngIf="getPassMnuEntryObj.UPDATE_BUTTON == 'Y' && EITTransactionList.statusID!=2"
(click)="updateEITRrq(i)">
<img class="imgSize" src="../assets/imgs/edit.png"></button>
</ion-card-header> -->
<!-- <ion-card-content> -->
<ion-grid>
<div>
<!-- <ion-row>
<ion-col class="colBold">
<label for="">status</label>
</ion-col>
<ion-col>
<label for="">{{EITTransactionList.status}}</label>
</ion-col>
</ion-row> -->
</div>
<ion-grid class="grids">
<div *ngFor="let item of EITTransactionList.Collection_Transaction">
<!-- <ion-row *ngIf="item.DISPLAY_FLAG != 'N' ">
<ion-col class="colBold">
<label for="">{{item.SEGMENT_PROMPT}}</label>
</ion-col>
<ion-col>
<label for="">{{item.SEGMENT_VALUE_DSP}}</label>
</ion-col>
</ion-row> -->
<ion-row *ngIf="item.DISPLAY_FLAG != 'N' " class="">
<ion-col class="" *ngIf="item.SEGMENT_PROMPT!=''">
<label style="color:#29B5BF;font-weight: bold;" class="label" for="">{{item.SEGMENT_PROMPT}} </label>
<br>
<label class="label" style="color:black;" for="">{{item.SEGMENT_VALUE_DSP}} </label>
<br>
<hr style="background-color: grey;height: 1px">
</ion-col>
</ion-row>
</div>
</ion-grid>
</ion-grid>
<!-- </ion-card-content> -->
</div>
<div>
</div>
</div>
<ion-infinite-scroll (ionInfinite)="doInfinite($event)">
<ion-infinite-scroll-content></ion-infinite-scroll-content>
</ion-infinite-scroll>
</div>
</ion-content>
<ion-icon class="addClass" name="add" (click)="addEITRrq()"></ion-icon>
<!-- <ion-footer>
<div class="centerDiv"> -->
<!-- <button *ngIf="getPassMnuEntryObj.ADD_BUTTON == 'Y'" ion-button (click)="addEITRrq()">{{'requestEit.add'
| translate}} </button> -->
<!-- <ion-button class="footer-button" color="customnavy" ion-button (click)="addEITRrq()">
{{'general, add' | translate}}</ion-button> -->
<!-- </div>
</ion-footer> -->

@ -0,0 +1,334 @@
.footer-button {
border-radius: 2px;
padding: 0 1.1em;
min-height: 45px;
min-width: 200px;
}
.datetime{
// text-align: center;
// font-family: WorkSans-Bold;
// margin-left: 111px;
text-align: center;
font-family: WorkSans-Bold;
margin-left: 47px;
margin-top: -19px;
}
.iconCalendar{
// margin-left: -241px;
// margin-top: 5px;
margin-left: 30px !important;
width: 22% !important;
height: 26px !important;
margin-top: -69px !important;
margin-bottom: 20px !important;
}
h4 {
font-size: 2.2rem;
text-align: center;
color: #000000;
}
.grids{
border-radius: 20px !important;
background: white;
padding-left: 1px;
padding-right: 1px;
margin: 13px;
padding-top: 0px;
padding-bottom: 3px;
padding-left: 13px;
padding-right: 13px;
border: 1px solid #cac8c8;
}
.bgcolor {
color: white;
border-top-right-radius: 19px;
border-top-left-radius: 15px;
padding-top: 1;
padding-bottom: 0;
margin-top: 0;
margin-bottom: 0;
/* border-radius: 12px !important; */
background: #29B5BF;
border-bottom: 1px solid #a7a4a4;
border-top: 1px solid #cac8c8;
margin-left: -13px;
margin-right: -13px;
}
.colEit{
border-right: 1px solid #cac8c8;
border-bottom-left-radius: -10px !important;
padding-top: 8px;
padding-bottom: 8px;
margin-left: 18px;
font-size: 12px !important;
}
.header-div {
background-color: #29B5BF;
text-transform: capitalize;
height: 160px;
// position: relative;
display: block;
margin-bottom: -28px;
}
.header-toolbar-new{
--background: #29B5BF;
}
.addClass{
background-color: #29B5BF;
width: 80px;
height: 80px;
right: 8%;
position: fixed;
color: white;
bottom: 5%;
border-radius: 50%;
z-index: 999;
-webkit-box-shadow: 2px -1px 13px 0px rgba(0,0,0,0.59);
-moz-box-shadow: 2px -1px 13px 0px rgba(0,0,0,0.59);
box-shadow: 2px -1px 13px 0px rgba(0,0,0,0.59);
}
.contentEit:before {
position: absolute;
content: "";
// background: #29B5BF;
height: 140px;
width: 100%;
left: 0;
top: 0px;
z-index: 1;
}
.hrClass{
border-width: 0;
box-sizing: content-box;
border-bottom: 1px solid #e6e6e6;
background: #fff !important;
height: 1px;
}
////////////////////////////////
.content:before {
position: absolute;
content: "";
background: #29B5BF;
height: 140px;
width: 100%;
left: 0;
top: 0px;
z-index: 1;
}
.colorBG{
--background: #f0efef;
}
.Title{
text-align: center;
color: white;
margin-top: -33px;
font-size: 17px;
}
.title{
text-align: center;
color: black;
margin-top: 5px;
font-size: 17px;
}
.today-graph{
display: block !important;
height: 196px;
width: 365px;
/* padding-left: 51px; */
margin-left: 28px !important;
}
.headerGrid{
// background-color: white !important;
// border: 1px solid #cac8c8 !important;
// border-radius: 20px !important;
// padding-top: 28px;
// padding-bottom: 53px;
// margin-left: 9px;
// margin-right: 13px;
// margin-top: -94px;
// margin-bottom: 10px;
background-color: white !important;
border: 1px solid #cac8c8 !important;
/* padding-top: 28px; */
padding-bottom: 53px;
padding-top: -30px;
margin-left: 13px;
margin-right: 13px;
/* margin-top: -86px; */
margin-bottom: 10px;
position: relative;
z-index: 1;
border-radius: 20px;
margin-top: 17px;
}
.result-graph{
font-size: 14px;
margin-left: -48px;
margin-right: 3px;
margin-bottom: -30px;
}
.green-label{
font-size: 15px !important;
margin-left: 7px !important;
margin-right: 42px;
}
.green-label-ar{
font-size: 15px !important;
margin-left: 7px !important;
margin-right: 15px;
}
.blue-label{
font-size: 15px !important;
margin-left: 7px !important;
margin-right: 13px;
}
.light-label{
font-size: 15px !important;
margin-left: 7px !important;
margin-right: -26px;
}
.light-label-ar{
font-size: 15px !important;
margin-right: 7px !important;
margin-left: -26px;
}
.light-dote{
background-color: #3CB9D5;
width: 12px;
height: 12px;
border-radius: 50% !important;
display: inline-block;
}
.blue-dote{
background-color: #29B5BF;
width: 12px;
height: 12px;
border-radius: 50% !important;
display: inline-block;
}
.green-dote{
background-color: #1FA269;
width: 12px;
height: 12px;
border-radius: 50% !important;
display: inline-block;
margin-right: -1px;
}
.col{
text-align: right;
}
.gridService{
/* margin-top: 87px; */
border-radius: 10px;
/* margin-bottom: -49px; */
margin-left: 14px;
margin-right: 14px;
}
.columns{
margin: 3px;
margin-bottom: 13px;
background: white;
border-radius: 27px;
padding-left: 30px;
padding-right: 6px;
padding-top: 19px;
padding-bottom: 8px;
border: 1px solid #cac8c8 !important;
}
.service{
font-size: 22px;
color: black;
letter-spacing: 1px;
font-weight: bold;
}
.services{
font-size: 12px;
color: black;
}
.adult-dote{
background-color: #3CB9D5;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-left: -17px;
margin-right: 5px;
}
.adult-dote-ar{
background-color: #3CB9D5;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-right: 0px;
margin-left: 5px;
}
.child-dote{
background-color: #29B5BF;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-left: -17px;
margin-right: 5px;
}
.child-dote-ar{
background-color: #29B5BF;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-right: 1px;
margin-left: 5px;
}
.infants-dote{
background-color: #1FA269;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-left: -17px;
margin-right: 5px;
// margin-bottom: 6px;
}
.infants-dote-ar{
background-color: #1FA269;
width: 15px;
height: 15px;
border-radius: 50% !important;
display: inline-block;
margin-right: 1px;
margin-left: 5px;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EitListComponent } from './eit-list.component';
describe('EitListComponent', () => {
let component: EitListComponent;
let fixture: ComponentFixture<EitListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EitListComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EitListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,609 @@
import { AddEitComponent } from './../add-eit/add-eit.component';
import { ModalController } from '@ionic/angular';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { EitRequest } from './../models/eit.request';
import { EITTransactionsRequest } from './../models/EITTransactionsReq';
import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response';
import { Component, OnInit } from '@angular/core';
import { EitService } from '../services/eit.service';
import { EIT_ACTION } from '../models/submit.eit.action';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { AddEitResponse } from '../models/add.eit.response';
import { AccrualService } from 'src/app/accrual-balances/services/accrual.service';
import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';
import { AuthenticatedUser } from 'src/app/hmg-common/services/authentication/models/authenticated-user';
@Component({
selector: 'app-eit-list',
templateUrl: './eit-list.component.html',
styleUrls: ['./eit-list.component.scss'],
})
export class EitListComponent implements OnInit {
Sdate: any;
emp_no: any;
balance:any;
//////////////up
P_PAGE_NUM: number;
P_PAGE_LIMIT: number;
IsReachEnd = false;
userName: any;
isDelete = false;
getResEITTransactionList: any = [];
eitAddedList: any = [];
getPassMnuEntryObj: any;
selMenu: MenuResponse = new MenuResponse();
EITTransactionsListObj: EITTransactionsRequest = new EITTransactionsRequest();
selEmp: string;
respID: number;
transactionNo = 0;
menuType = '';
public functionName = '';
private eitRequest: EitRequest;
private eitTransactionTbl: any = [];
private validEitTransactionTbl: any = [];
private desxFlexCode = '';
private selectedIndex: number;
private pAction = 0;
public headerTitle = '';
data: any;
accrualNetInfants: any;
accrualUNetChild: any;
accrualNetAdult: any;
public options = {
cutoutPercentage: 80,
tooltips: { enabled: false },
legend: { display: false }};
gaugeType = 'full';
accrualBalancesList: any;
common: any;
direction: string;
// gaugeValue = 11.200;
// gaugeLabel = "";
// tslint:disable-next-line: max-line-length
constructor(private cs: CommonService, private EITService: EitService, public ts: TranslatorService,
private modalCtrl: ModalController, public accrualService: AccrualService, public authService:AuthenticationService,) {
this.direction = TranslatorService.getCurrentLanguageName();
this.selMenu = this.cs.sharedService.getSharedData(MenuResponse.SHARED_DATA, false);
this.selEmp = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false);
this.respID = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_RESP_ID, false);
this.getPassMnuEntryObj = this.selMenu.GetMenuEntriesList;
this.menuType = this.selMenu.List_Menu.MENU_TYPE;
this.transactionNo = 0;
this.functionName = this.getPassMnuEntryObj.FUNCTION_NAME;
this.headerTitle = this.selMenu.GetMenuEntriesList.PROMPT;
this.validEitTransactionTbl = [];
this.P_PAGE_NUM = 1;
this.P_PAGE_LIMIT = 50;
}
ngOnInit() {
/////////////
this.Sdate = new Date().toISOString();
this.getUserDetails();
////////////////up
this.getEITTransactions();
this.accrualBalancesList = this.cs.sharedService.getSharedData('tickitsbalance', false);
// accrualNetInfants
// accrualUNetChild
// accrualNetAdult
if(this.accrualBalancesList){
this.accrualNetAdult = this.accrualBalancesList[1].ACCRUAL_NET_ENTITLEMENT;
this.accrualUNetChild = this.accrualBalancesList[2].ACCRUAL_NET_ENTITLEMENT;
this. accrualNetInfants = this.accrualBalancesList[3].ACCRUAL_NET_ENTITLEMENT;
}
this.data = {
// labels: ['earingTotal', 'deductionTotal'],
datasets: [
{ data: [this.accrualNetInfants, this.accrualUNetChild, this.accrualNetAdult],
backgroundColor: [
'#1FA269',
'#29B5BF',
'#3CB9D5', ],
borderWidth: 2
}
]
};
}
getUserDetails(){
this.authService.loadAuthenticatedUser().subscribe((user: AuthenticatedUser) => {
if (user) {
// this.emp_no=user.EMPLOYEE_NUMBER;
}
});
}
public getAccrualBalance() {
if (this.Sdate) {
let today = new Date(this.Sdate);
let day = today.getDate();
let month = today.getMonth() + 1;
let year = today.getFullYear();
let todayDate = month + '/' + day + '/' + year;
let effectiveDate = todayDate;
const request = {
P_SELECTED_EMPLOYEE_NUMBER: this.selEmp,
P_EFFECTIVE_DATE: effectiveDate
};
this.accrualService
.getAccrualBalances(request)
.subscribe((result: any) => {
this.handleAccrualResult(result);
});
}
}
handleAccrualResult(result) {
if (this.cs.validResponse(result)) {
this.balance=result.GetAccrualBalancesList;
this.accrualNetAdult = this.balance[1].ACCRUAL_NET_ENTITLEMENT;
this.accrualUNetChild = this.balance[2].ACCRUAL_NET_ENTITLEMENT;
this. accrualNetInfants = this.balance[3].ACCRUAL_NET_ENTITLEMENT;
}
}
///////////////////////////////////
getEITTransactions() {
this.IsReachEnd = false;
this.EITTransactionsListObj.P_PAGE_LIMIT = this.P_PAGE_LIMIT;
this.EITTransactionsListObj.P_PAGE_NUM = this.P_PAGE_NUM;
this.EITTransactionsListObj.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp;
this.EITTransactionsListObj.P_SELECTED_RESP_ID = this.respID;
this.EITTransactionsListObj.P_MENU_TYPE = this.selMenu.List_Menu.MENU_TYPE;
this.EITTransactionsListObj.P_FUNCTION_NAME = this.getPassMnuEntryObj.FUNCTION_NAME;
this.EITService.getEITTransactionsList(this.EITTransactionsListObj).
subscribe((result: any) => {
this.handleEITTransactionsResult(result);
});
}
handleEITTransactionsResult(result) {
if (this.cs.validResponse(result)) {
if (this.cs.hasData(result.GetEITTransactionList)) {
this.getResEITTransactionList = result.GetEITTransactionList;
this.P_PAGE_NUM++;
this.EITTransactionsListObj.P_PAGE_NUM = this.P_PAGE_NUM;
const lastItemIndex = this.getResEITTransactionList.length - 1;
if (result.GetEITTransactionList[lastItemIndex] && result.GetEITTransactionList[lastItemIndex].Collection_Transaction[0]) {
const lastitem = result.GetEITTransactionList[lastItemIndex].Collection_Transaction[0];
// tslint:disable-next-line: triple-equals
if (lastitem.NO_OF_ROWS == lastitem.ROW_NUM) {
this.IsReachEnd = true;
} else {
this.IsReachEnd = false;
}
}
}
}
}
doInfinite(infiniteScroll) {
if (!this.IsReachEnd) {
this.EITService.getEITTransactionsList(this.EITTransactionsListObj).
subscribe((result: any) => {
if (this.cs.validResponse(result)) {
if (this.cs.hasData(result.GetEITTransactionList)) {
this.P_PAGE_NUM++;
this.EITTransactionsListObj.P_PAGE_NUM = this.P_PAGE_NUM;
result.GetEITTransactionList.forEach(vr => {
console.log(vr.length);
if(vr.length && vr.length != 0){
if (vr.Collection_Transaction[0].ROW_NUM == vr.Collection_Transaction[0].NO_OF_ROWS) {
this.IsReachEnd = true;
} else {
this.IsReachEnd = false;
}
this.getResEITTransactionList.push(vr);
}
});
} else {
this.IsReachEnd = true;
}
}
// this.P_PAGE_NUM++;
if (infiniteScroll) {
infiniteScroll.target.complete();
}
}, (Error) => console.log(Error), () => infiniteScroll.target.complete());
} else {
if (infiniteScroll) {
infiniteScroll.target.complete();
}
}
}
addEITRrq(i?) {
this.pAction = EIT_ACTION.ADD;
// this.sharedData.setSharedData(this.getResEITTransactionList[i].Collection_Transaction,EITTransactionsRequest.SHARED_DATA);
this.cs.sharedService.setSharedData(this.pAction, EITTransactionsRequest.SUBMIT_EIT_ACTION);
// this.navCtrl.push("AddEitPage");
// this.openEit(i);
this.openEitNew(i);
}
updateEITRrq(i) {
this.pAction = EIT_ACTION.UPDATE;
this.cs.sharedService.setSharedData(this.getResEITTransactionList[i].Collection_Transaction, EITTransactionsRequest.SHARED_DATA);
this.cs.sharedService.setSharedData(this.pAction, EITTransactionsRequest.SUBMIT_EIT_ACTION);
// this.fillEitTransactionTable(i);
// this.navCtrl.push("AddEitPage");
// this.openEit(i);
this.openEitNew(i);
}
deleteEIT(i) {
this.deleteEITRrq(i);
// let alert=this.common.showConfirmMsg(this.translate.translate('requestEit.deleteReq'));
// alert.onDidDismiss((data) => {
// if(data==true){
// this.deleteEITRrq(i);
// }
// });
}
deleteEITRrq(i) {
const list: any = this.getResEITTransactionList[i];
// tslint:disable-next-line: triple-equals
if (list.statusID != 2) {
this.selectedIndex = i;
// if(this.transactionNo==0)
this.transactionNo++;
this.pAction = EIT_ACTION.DELETE;
// this.sharedData.setSharedData(this.getResEITTransactionList[i].Collection_Transaction,EITTransactionsRequest.SHARED_DATA);
// this.sharedData.setSharedData(EIT_ACTION.DELETE,EITTransactionsRequest.SUBMIT_EIT_ACTION);
this.fillEitTransactionTable(i);
this.validateEITTransaction();
// this.submitEit();
// this.navCtrl.push("AddEitPage");
} else {
let msg = '';
msg = this.ts.trPK('general', 'attemptDel');
this.cs.presentAlert(msg);
// alert("You are attempting to delete a row that has already been deleted.");
}
}
openEitNew(index) {
let item: any = [];
if (this.pAction == EIT_ACTION.UPDATE) {
item = this.getResEITTransactionList[index].Collection_Transaction;
}
this.transactionNo++;
// tslint:disable-next-line: max-line-length
this.cs.sharedService.setSharedData({ dirfromNotificationPage: false, submitEITObjList: item, transNo: this.transactionNo }, 'AddEITData');
this.cs.openAddEitPage();
// this.navCtrl.push('AddEitPage', { dirfromNotificationPage: false, submitEITObjList: item, transNo: this.transactionNo });
}
async openEit(index) {
let item: any = [];
// tslint:disable-next-line: triple-equals
if (this.pAction == EIT_ACTION.UPDATE) {
item = this.getResEITTransactionList[index].Collection_Transaction;
}
this.transactionNo++;
// tslint:disable-next-line: max-line-length
this.cs.sharedService.setSharedData({ dirfromNotificationPage: false, submitEITObjList: item, transNo: this.transactionNo }, 'AddEITData');
const modalPage = await this.modalCtrl.create({
component: AddEitComponent
});
// modalPage.present();
modalPage.onDidDismiss()
.then((data: any) => {
if (data) {
// this.transactionNo++;
// this.updatedData=this.updatedData?this.updatedData.concat(data.updated):data.updated;
// this.notificationBodyRes[index].Collection_Transaction=data.updated;
this.selectedIndex = index;
this.desxFlexCode = data.eitRequest.P_DESC_FLEX_CONTEXT_CODE;
// tslint:disable-next-line: triple-equals
if (this.pAction == EIT_ACTION.ADD) {
index = this.eitAddedList.length + 1;
const status = this.ts.trPK('eit', '.added');
const statusID = EIT_ACTION.ADD;
const obj = { status, statusID, Collection_Transaction: data.updated };
this.eitAddedList.push(obj);
} else {
const status = this.ts.trPK('eit', '.updated');
const statusID = EIT_ACTION.UPDATE;
this.getResEITTransactionList[this.selectedIndex].status = status;
this.getResEITTransactionList[this.selectedIndex].statusID = statusID;
}
this.updateTransactionList(data.eitRequest.EITTransactionTBL, false);
} else {
// tslint:disable-next-line: triple-equals
if (this.transactionNo != 0) {
this.transactionNo--;
}
}
});
modalPage.present();
// modalPage.onDidDismiss(data => {
// if (data) {
// // this.transactionNo++;
// //this.updatedData=this.updatedData?this.updatedData.concat(data.updated):data.updated;
// // this.notificationBodyRes[index].Collection_Transaction=data.updated;
// this.selectedIndex = index;
// this.desxFlexCode = data.eitRequest.P_DESC_FLEX_CONTEXT_CODE;
// if (this.pAction == EIT_ACTION.ADD) {
// index = this.eitAddedList.length + 1;
// let status = this.ts.trPK("eit", ".added");
// let statusID = EIT_ACTION.ADD;
// let obj = { status: status, statusID: statusID, Collection_Transaction: data.updated };
// this.eitAddedList.push(obj);
// } else {
// let status = this.ts.trPK("eit", ".updated");
// let statusID = EIT_ACTION.UPDATE;
// this.getResEITTransactionList[this.selectedIndex].status = status;
// this.getResEITTransactionList[this.selectedIndex].statusID = statusID;
// }
// this.updateTransactionList(data.eitRequest.EITTransactionTBL, false);
// } else {
// if (this.transactionNo != 0)
// this.transactionNo--;
// }
// });
}
fillEitTransactionTable(index) {
let obj = { peiObjVer: null, peiExtraInfoID: null };
const list: any = this.getResEITTransactionList[index].Collection_Transaction;
let valuseArr: any = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < list.length; i++) {
const item = list[i];
// tslint:disable-next-line: triple-equals
// tslint:disable-next-line: max-line-length
if (item.APPLICATION_COLUMN_NAME != 'PEI_ACTION' && item.APPLICATION_COLUMN_NAME != 'PEI_EXTRA_INFO_ID' && item.APPLICATION_COLUMN_NAME != 'PEI_OBJECT_VERSION_NUMBER') {
this.desxFlexCode = item.DESC_FLEX_CONTEXT_CODE;
// tslint:disable-next-line: triple-equals
if (item.DATE_VALUE == '') {
item.DATE_VALUE = null;
}
valuseArr.push(
{
TRANSACTION_NUMBER: this.transactionNo,
NAME: item.APPLICATION_COLUMN_NAME,
VARCHAR2_VALUE: item.VARCHAR2_VALUE,
NUMBER_VALUE: item.NUMBER_VALUE,
DATE_VALUE: item.DATE_VALUE,
}
);
} else {
if (item.APPLICATION_COLUMN_NAME == 'PEI_OBJECT_VERSION_NUMBER') {
obj.peiObjVer = item.NUMBER_VALUE;
}
else if (item.APPLICATION_COLUMN_NAME == 'PEI_EXTRA_INFO_ID') {
obj.peiExtraInfoID = item.NUMBER_VALUE;
}
}
}// end for
// }
valuseArr = this.fillExtraInformation(valuseArr, 'DELETE_ROW', obj.peiExtraInfoID, obj.peiObjVer, this.transactionNo);
this.eitTransactionTbl = valuseArr;
}
fillExtraInformation(values: any, peiAction: string, peiExtraInfoID: number, peiObjVer: number, transNo: number): any {
values.push(
{
TRANSACTION_NUMBER: transNo,
NAME: 'PEI_ACTION',
VARCHAR2_VALUE: peiAction,
NUMBER_VALUE: null,
DATE_VALUE: null
});
values.push(
{
TRANSACTION_NUMBER: transNo,
NAME: 'PEI_EXTRA_INFO_ID',
VARCHAR2_VALUE: null,
NUMBER_VALUE: peiExtraInfoID,
DATE_VALUE: null
});
values.push(
{
TRANSACTION_NUMBER: transNo,
NAME: 'PEI_OBJECT_VERSION_NUMBER',
VARCHAR2_VALUE: null,
NUMBER_VALUE: peiObjVer,
DATE_VALUE: null
});
return values;
}
submitEit() {
this.eitRequest = new EitRequest();
const list: any = this.fixTransactionNo();
this.eitRequest.EITTransactionTBL = list;
this.eitRequest.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp;
this.eitRequest.P_MENU_TYPE = this.menuType;
this.eitRequest.P_SELECTED_RESP_ID = this.respID; // this.selMenu.List_Menu.RESP_ID,//-999,
this.eitRequest.P_FUNCTION_NAME = this.functionName;
this.eitRequest.P_DESC_FLEX_CONTEXT_CODE = this.desxFlexCode;
this.EITService.submitEit(this.eitRequest).subscribe((result: AddEitResponse) => {
this.handleSubmitEitResult(result);
});
}
handleSubmitEitResult(result) {
if (this.cs.validResponse(result)) {
this.cs.sharedService.setSharedData(this.eitRequest, EitRequest.SHARED_DATA);
this.cs.sharedService.setSharedData(result, AddEitResponse.SHARED_DATA);
// this.addrespList=result.SubmitEITTransactionList;
// this.itemKey=this.addrespList.P_ITEM_KEY;
// this.P_TransactionID=result.SubmitEITTransactionList.P_TRANSACTION_ID;
// this.sharedData.setSharedData(result,AddEitResponse.SHARED_DATA);
// //this.cs.sharedService.setSharedData(result.SubmitEITTransactionList.P_TRANSACTION_ID,"TransactionIDResubmit");
// // this.sharedData.setSharedData(this.eitRequest,EitRequest.SHARED_DATA);
this.cs.sharedService.setSharedData({ isResubmit: false, isDelete: this.isDelete }, 'confirmAddEITData');
this.cs.openConfirmEitPage();
// this.navCtrl.push("ConfirmAddEitPage", { isResubmit: false, isDelete: this.isDelete });
}
}
validateEITTransaction() {
this.isDelete = false;
this.eitRequest = {
P_SELECTED_EMPLOYEE_NUMBER: this.selEmp,
P_MENU_TYPE: this.menuType,
P_SELECTED_RESP_ID: this.respID,
P_FUNCTION_NAME: this.functionName,
P_DESC_FLEX_CONTEXT_CODE: this.desxFlexCode,
EITTransactionTBL: this.eitTransactionTbl
};
this.EITService.validateEITTransaction(this.eitRequest).subscribe((result: any) => {
this.handleEITValidateTr(result);
});
}
private handleEITValidateTr(result) {
if (this.cs.validResponse(result)) {
// public static SHARED_DATA = 'login-request';
// this.sharedData.setSharedData(this.eitRequest, EitRequest.SHARED_DATA);
const status = this.ts.trPK('eit', '.deleted');
const statusID = EIT_ACTION.DELETE;
this.isDelete = true;
this.getResEITTransactionList[this.selectedIndex].status = status;
this.getResEITTransactionList[this.selectedIndex].statusID = statusID;
this.updateTransactionList(this.eitTransactionTbl, false);
this.submitEit();
} else {
if (this.transactionNo != 0) {
this.transactionNo--;
}
}
}
updateTransactionList(list, isRemove) {
// let newlist = this.validEitTransactionTbl.map(a => a.NAME='PEI_EXTRA_INFO_ID');
let isAnewRow = false;
let updateDelTransNo: number;
if (this.cs.hasData(this.validEitTransactionTbl)) {
this.validEitTransactionTbl.forEach(element => {
if (element.NAME == 'PEI_EXTRA_INFO_ID') {
if (element.NUMBER_VALUE == -1) {
isAnewRow = true;
return;
}
}
});
}
list.forEach(element => {
// NAME=PEI_EXTRA_INFO_ID
// const index = this.validEitTransactionTbl.findIndex(x => x.TRANSACTION_NUMBER === element.TRANSACTION_NUMBER);
// let newlist = this.validEitTransactionTbl.map(a => a.NAME==='PEI_EXTRA_INFO_ID');
if (isAnewRow == true) {
const index: number = this.validEitTransactionTbl.findIndex(x => x.TRANSACTION_NUMBER === element.TRANSACTION_NUMBER);
// if(index!=-1)
// this.validEitTransactionTbl.splice(index, 1);
} else {
const index: number = this.validEitTransactionTbl.findIndex(x => x.NAME === 'PEI_EXTRA_INFO_ID' && x.NUMBER_VALUE === element.NUMBER_VALUE);
if (index != -1) {
// this.validEitTransactionTbl.splice(index, 1);
if (!updateDelTransNo) {
updateDelTransNo = this.validEitTransactionTbl[index].TRANSACTION_NUMBER;
}
}
}
});
if (updateDelTransNo) {
this.removeItems(updateDelTransNo);
}
if (isRemove == false) {
this.validEitTransactionTbl = this.validEitTransactionTbl ? this.validEitTransactionTbl.concat(list) : list;
}
}
fixTransactionNo(): any[] {
const list: any = [];
let newIndex = 1;
const length: number = this.validEitTransactionTbl.length;
for (let i = 0; i < length; i++) {
// let item :any={};
const item = Object.assign({}, this.validEitTransactionTbl[i]);
const transNo: number = item.TRANSACTION_NUMBER;
const obj: any = item;
if (i == 0) {
obj.TRANSACTION_NUMBER = newIndex;
list.push(obj);
} else {
const prevEl: any = this.validEitTransactionTbl[i - 1].TRANSACTION_NUMBER;
if (transNo == prevEl) {
obj.TRANSACTION_NUMBER = newIndex;
list.push(obj);
} else {
newIndex++;
obj.TRANSACTION_NUMBER = newIndex;
list.push(obj);
}
}
}
return list;
}
removeItems(transNo) {
const list = [];
for (let i = 0; i < this.validEitTransactionTbl.length; i++) {
if (this.validEitTransactionTbl[i].TRANSACTION_NUMBER != transNo) {
list.push(this.validEitTransactionTbl[i]);
}
}
this.validEitTransactionTbl = list;
}
removeAddedItem(index) {
const list = [];
let item: any = [];
for (let i = 0; i < this.eitAddedList.length; i++) {
if (i != index) {
list.push(this.eitAddedList[i]);
}
}
item = this.eitAddedList[index];
this.eitAddedList = list;
this.removeItems(item.Collection_Transaction[0].TRANSACTION_NUMBER);
}
//////////////////////////
// getUserDetails(){
// this.authService.loadAuthenticatedUser().subscribe((user: AuthenticatedUser) => {
// if (user) {
// this.emp_no=user.EMPLOYEE_NUMBER;
// }
// });
// }
// public getAccrualBalance() {
// if (this.Sdate) {
// let today = new Date(this.Sdate);
// let day = today.getDate();
// let month = today.getMonth() + 1;
// let year = today.getFullYear();
// let todayDate = month + '/' + day + '/' + year;
// let effectiveDate = todayDate;
// const request = {
// P_SELECTED_EMPLOYEE_NUMBER: this.emp_no,
// P_EFFECTIVE_DATE: effectiveDate
// };
// this.accrualService
// .getAccrualBalances(request)
// .subscribe((result: any) => {
// this.handleAccrualResult(result);
// });
// }
// }
// handleAccrualResult(result) {
// if (this.cs.validResponse(result)) {
// this.balance=result.GetAccrualBalancesList;
// }
// }
}
////////////////////////////////up

@ -0,0 +1,61 @@
<ion-header>
<ion-toolbar class="header-toolbar-new">
<nav-buttons></nav-buttons>
<ion-title color="light">{{'eit, update-title' | translate}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<!-- <button ion-button (click)="resubmitEit()">next</button> -->
<div *ngIf="notificationBodyRes?.length > 0 ">
<ion-card *ngFor="let item of notificationBodyRes; let i=index ">
<ion-card-header class="hrTitle">
<div class="hrTitle">{{'worklistMain, notfDetails' | translate}} </div>
<!-- <button ion-button icon-only *ngIf="item.Collection_Notification[0].ACTION!='DELETE_ROW'" (click)="updateEitNot(i)">
<ion-icon name="create"></ion-icon>
</button> -->
<div class="editIconDiv"><button ion-button *ngIf="item.Collection_Notification[0].ACTION!='DELETE_ROW'" (click)="updateEitNot(i)">
<img class="imgSize" src="../assets/imgs/edit.png"></button>
</div>
</ion-card-header>
<ion-card-content>
<ion-grid class="grids">
<div *ngFor="let notificationBody of item.Collection_Notification ">
<ion-row *ngIf=" notificationBody.DISPLAY_FLAG != 'N' ">
<ion-col class="colBold">
<label style="color:#29B5BF;font-weight: bold;" class="label" for="">{{notificationBody.SEGMENT_PROMPT}}</label>
<!-- </ion-col>
<ion-col class="colBold"> -->
<br>
<label class="label" style="color:black;" for="">{{notificationBody.SEGMENT_VALUE_DSP}}</label>
<hr style="background-color: grey;height: 1px">
</ion-col>
</ion-row>
</div>
</ion-grid>
</ion-card-content>
</ion-card>
</div>
</ion-content>
<ion-footer>
<div class="centerDiv">
<ion-button class="addEitOkButton" color="customnavy" ion-button (click)="resubmitEit()">
{{ 'general, next' | translate }}</ion-button>
</div>
</ion-footer>

@ -0,0 +1,17 @@
.addEitOkButton{
white-space: normal !important;
text-transform: capitalize !important;
min-height: 45px !important;
min-width: 5px !important;
margin: 8px !important;
background-color: #29B5BF;
width: 80% !important;
color: white!important;
border-radius: 16px !important;
}
.editIconDiv{
right: 10px;
position: absolute;
top: 10px;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EitUpdateListComponent } from './eit-update-list.component';
describe('EitUpdateListComponent', () => {
let component: EitUpdateListComponent;
let fixture: ComponentFixture<EitUpdateListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EitUpdateListComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EitUpdateListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,135 @@
import { AddEitComponent } from './../add-eit/add-eit.component';
import { ModalController } from '@ionic/angular';
import { EitRequest } from './../models/eit.request';
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { EITNotificatonBodyResponse } from '../models/EITNotificationBodyRes';
import { EitService } from '../services/eit.service';
@Component({
selector: 'app-eit-update-list',
templateUrl: './eit-update-list.component.html',
styleUrls: ['./eit-update-list.component.scss'],
})
export class EitUpdateListComponent implements OnInit {
public notificationBodyRes: any = {};
private updatedData: any = [];
private updatedItem: any;
private itemKey: string = "";
private notificationId: number;
private selEmp: string;
private functionName: string;
private eitTransactionTbl: any = [];
private eitRequest: EitRequest;
private descFlex: string;
constructor(public cs: CommonService, public eitService: EitService, public modalController: ModalController) {
this.notificationBodyRes = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.SHARED_DATA, false);
let notification = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.NOT_WORKLIST, false);
this.itemKey = notification.ITEM_KEY;
this.notificationId = notification.NOTIFICATION_ID;
this.functionName = notification.FUNCTION_NAME;
this.selEmp = notification.SELECTED_EMPLOYEE_NUMBER;
this.descFlex = notification.DESC_FLEX_CONTEXT_CODE;
this.fillEitTransactionTable();
}
ngOnInit() { console.log("ngOnInit");}
async updateEitNot(index) {
let item = this.notificationBodyRes[index].Collection_Notification;
this.cs.sharedService.setSharedData({ dirfromNotificationPage: true, submitEITObjList: item }, 'AddEITData')
const modal = await this.modalController.create({
component: AddEitComponent
});
modal.onDidDismiss()
.then((data: any) => {
// console.log("data" + data);
// console.log("data" + data.data.updated);
// console.log("data" + data.data.eitRequest.EITTransactionTBL);
if(data.data == undefined)
{
return;
}
else if (data.data) {
this.updatedData = this.updatedData ? this.updatedData.concat(data.data.updated) : data.data.updated;
this.notificationBodyRes[index].Collection_Notification = data.data.updated;
this.updateTransactionList(data.data.eitRequest.EITTransactionTBL);
}
});
return await modal.present();
}
updateTransactionList(list) {
list.forEach(element => {
const index = this.eitTransactionTbl.findIndex(x => x.TRANSACTION_NUMBER === element.TRANSACTION_NUMBER);
if (index != -1)
this.eitTransactionTbl.splice(index, 1);
});
this.eitTransactionTbl = this.eitTransactionTbl ? this.eitTransactionTbl.concat(list) : list;
}
resubmitEit() {
this.eitRequest = new EitRequest();
this.eitRequest.EITTransactionTBL = this.eitTransactionTbl;
this.eitRequest.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp;
this.eitRequest.P_MENU_TYPE = "E";
this.eitRequest.P_SELECTED_RESP_ID = -999;
this.eitRequest.P_FUNCTION_NAME = this.functionName;
this.eitRequest.P_DESC_FLEX_CONTEXT_CODE = this.descFlex;
let body = {
P_NOTIFICATION_ID: this.notificationId,
P_ITEM_KEY: this.itemKey,
EITTransactionTBL: this.eitTransactionTbl
}
this.eitService.reSubmitEit(body).subscribe((result: any) => {
this.handleResubmitEit(result);
});
}
handleResubmitEit(result) {
if (this.cs.validResponse(result)) {
this.cs.sharedService.setSharedData(result.ResubmitEITTransactionList.P_TRANSACTION_ID, "TransactionIDResubmit");
this.cs.sharedService.setSharedData(this.eitRequest, EitRequest.SHARED_DATA);
this.cs.sharedService.setSharedData({ isResubmit: true }, 'confirmAddEITData');
this.cs.openConfirmEitPage();
}
}
fillEitTransactionTable() {
let valuseArr: any = [];
let varcharValue: any = null;
let numbervalue: any = 0;
let dateValue: any = null;
let transNo: number = 1;
let textValue = "";
// if(this.ExtraObj.transactionNo)
// transNo=this.ExtraObj.transactionNo;
for (let j = 0; j < this.notificationBodyRes.length; j++) {
let list = this.notificationBodyRes[j].Collection_Notification;
for (let i = 0; i < list.length; i++) {
let item = list[i];
varcharValue = null;
numbervalue = null;
dateValue = null;
valuseArr.push(
{
TRANSACTION_NUMBER: item.TRANSACTION_NUMBER,
NAME: item.APPLICATION_COLUMN_NAME,
VARCHAR2_VALUE: item.VARCHAR2_VALUE,
NUMBER_VALUE: item.NUMBER_VALUE,
DATE_VALUE: item.DATE_VALUE,
}
)
}// end for
}
this.eitTransactionTbl = valuseArr;
}
}

@ -0,0 +1,81 @@
import { AddAttachComponent } from './add-attach/add-attach.component';
import { ConfirmAddEitComponent } from './confirm-add-eit/confirm-add-eit.component';
import { AddEitComponent } from './add-eit/add-eit.component';
import { HmgCommonModule } from 'src/app/hmg-common/hmg-common.module';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { EITPage } from './eit.page';
import { HomeComponent } from './home/home.component';
import { EitListComponent } from './eit-list/eit-list.component';
import { DatePicker } from '@ionic-native/date-picker/ngx';
import { WorkListAttachViewComponent } from '../notification/work-list-attach-view/work-list-attach-view.component';
import { EitUpdateListComponent } from './eit-update-list/eit-update-list.component';
import { SubmitEitModalComponent } from './submit-eit-modal/submit-eit-modal.component';
const routes: Routes = [
{
path: '',
component: EITPage,
children: [
{
path: 'homepage',
component: HomeComponent
},
{
path: 'eit-list',
component: EitListComponent
},
{
path: 'add-eit',
component: AddEitComponent
},
{
path: 'confirm-add-eit',
component: ConfirmAddEitComponent
},
{
path: 'add-attach',
component: AddAttachComponent
},
{
path: 'eit-update-list',
component: EitUpdateListComponent
},
{
path: 'eit-submit-modal',
component: SubmitEitModalComponent
}
]
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
HmgCommonModule,
RouterModule.forChild(routes)
],
declarations: [
EITPage,
HomeComponent,
EitListComponent,
AddEitComponent,
ConfirmAddEitComponent,
AddAttachComponent,
EitUpdateListComponent,
SubmitEitModalComponent
],
entryComponents: [
WorkListAttachViewComponent
],
providers: [
DatePicker
]
})
export class EITPageModule { }

@ -0,0 +1,3 @@
<ion-content>
<ion-router-outlet></ion-router-outlet>
</ion-content>

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EITPage } from './eit.page';
describe('EITPage', () => {
let component: EITPage;
let fixture: ComponentFixture<EITPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EITPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EITPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-eit',
templateUrl: './eit.page.html',
styleUrls: ['./eit.page.scss'],
})
export class EITPage implements OnInit {
constructor() { }
ngOnInit() {
}
}

@ -0,0 +1,87 @@
<app-generic-header
showBack="true"
[headerText]="headerTitle">
</app-generic-header>
<!-- backLink="/home" -->
<ion-content>
<!--From Home List-->
<ion-list style="margin-top: 40px;border-top: 1px solid #c8c8c8;" *ngIf="pageType=='home'">
<ion-item lines="none" class="custCollabs ion-item-styling" *ngFor="let menuItem of menu.children; let i=index"
(click)="openPage(menuItem, i);">
<ion-row style="width: 100%;">
<!-- Parent Pages -->
<ion-col size="12" class="">
<div [ngClass]="{'selectedDiv': selectedMenu == i,'notSelected': selectedMenu != i }">
<ion-label>
<b text-wrap>{{menuItem.PROMPT}}</b>
<ion-icon [ngClass]='direction == "en"? "span-arrow-en":"span-arrow-ar"' name="arrow-forward"></ion-icon>
</ion-label>
</div>
<!-- Child Pages -->
<ion-list [hidden]="selectedMenu != i" lines="full">
<ion-item lines="full" class="" *ngFor="let subPage of menuItem.children;let i2=index" text-wrap
(click)="openPage(subPage, i2)">
<!-- <ion-row>
<ion-col size="10" class="menu-name"><span ion-text color="color2">&nbsp;{{subPage.PROMPT}} </span> -->
<ion-label><span ion-text color="color2">&nbsp;{{subPage.PROMPT}} </span>
<ion-icon [ngClass]='direction == "en"? "span-arrow-en":"span-arrow-ar"' name="arrow-forward"></ion-icon>
</ion-label>
<!-- </ion-col>
</ion-row> -->
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<!-- <ion-icon [name]="selectedMenu == i? 'ios-arrow-down' : 'ios-arrow-forward'"
*ngIf="menuItem.children && menuItem.MENU_ENTRY_TYPE=='MENU'" slot="end" class="arrow-down"></ion-icon> -->
</ion-item>
</ion-list>
<!--From My Team List-->
<ion-list style="margin-top: 40px;border-top: 1px solid #c8c8c8;" *ngIf="pageType=='myteam'">
<ion-item lines="none" class="custCollabs ion-item-styling" *ngFor="let menuItem of menu; let i=index"
(click)="openPage(menuItem, i);">
<ion-row style="width: 100%;">
<!-- Parent Pages -->
<ion-col size="12" class="">
<div [ngClass]="{'selectedDiv': selectedMenu == i,'notSelected': selectedMenu != i }">
<ion-label>
<b text-wrap>{{menuItem.PROMPT}}</b>
<!-- <ion-icon style="float: right;font-size: 25px;color: grey;" name="arrow-forward"></ion-icon> -->
<ion-icon [ngClass]='direction == "en"? "span-arrow-en":"span-arrow-ar"' name="arrow-forward"></ion-icon>
</ion-label>
</div>
<!-- Child Pages -->
<ion-list [hidden]="selectedMenu != i" lines="full">
<ion-item lines="full" class="" *ngFor="let subPage of menuItem.children;let i2=index" text-wrap
(click)="openPage(subPage, i2)">
<!-- <ion-row>
<ion-col size="10" class="menu-name"><span ion-text color="color2">&nbsp;{{subPage.PROMPT}} </span> -->
<ion-label><span ion-text color="color2">&nbsp;{{subPage.PROMPT}} </span>
<!-- <ion-icon style="float: right;font-size: 25px;color: grey;" name="arrow-forward"></ion-icon> -->
<ion-icon [ngClass]='direction == "en"? "arrow-forward":"arrow-forward-ar"' name="arrow-forward"></ion-icon>
</ion-label>
<!-- </ion-col>
</ion-row> -->
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<!-- <ion-icon [name]="selectedMenu == i? 'ios-arrow-down' : 'ios-arrow-forward'"
*ngIf="menuItem.children && menuItem.MENU_ENTRY_TYPE=='MENU'" slot="end" class="arrow-down"></ion-icon> -->
</ion-item>
</ion-list>
</ion-content>

@ -0,0 +1,95 @@
ion-item.custCollabs.item.item-block.item-md,
ion-item.custCollabs.item.item-block.item-ios {
padding: 0px;
}
.ion-item-styling {
color: black;
line-height: 2;
margin: 8px 2px;
min-height: 40px;
background-color: #ffffff;
border-bottom: 1px solid #c8c8c8;
}
.header-toolbar-new{
--background: #29B5BF;
}
ion-item.item.item-block {
.item-inner {
border: 0px !important;
padding: 0px !important;
}
ion-item.childItem.item.item-block {
padding: 0px 5px;
width: 100%;
ion-label.label.label-md,
ion-label.label.label-ios {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
border-bottom: 1px solid #e4e5e7;
border-radius: 0px;
color: #000000;
}
}
ion-col.menu-name.col {
padding: 0px;
}
div.selectedDiv {
background: #209a83;
color: #ffffff;
padding: 0px 10px;
min-height: 40px;
}
div.notSelected {
padding: 0px 10px;
}
// ion-label.label.label-md,
// ion-label.label.label-ios {
}
ion-icon::before {
line-height: 2;
}
.arrow-down{
position: absolute;
top: 0;
right:0;
}
// .list-md > .item-block:last-child .item-inner,
// .list-ios > .item-block:last-child .item-inner{
// border-bottom: 1px solid #dedede;
// }
.span-arrow-en{
float: right;
font-size: 25px;
color: grey;
transform: rotate(0deg);
}
.span-arrow-ar{
float: left;
font-size: 25px;
color: grey;
transform: rotate(180deg);
}
.arrow-forward{
float: right;
font-size: 25px;
color: grey;
}
.arrow-forward-ar{
float: left;
font-size: 25px;
color: grey;
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HomeComponent } from './home.component';
describe('HomeComponent', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HomeComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,73 @@
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { Component, OnInit } from '@angular/core';
import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss'],
})
export class HomeComponent implements OnInit {
menu: any;
pages: any;
headerTitle: string;
selMenu: MenuResponse = new MenuResponse();
// Selected Side Menu
selectedMenu: any;
direction: string;
pageType: string;
constructor(private cs: CommonService, private ts: TranslatorService) {
this.direction = TranslatorService.getCurrentLanguageName();
this.menu = this.cs.sharedService.getSharedData('menuEntries', false);
this.pageType = this.cs.sharedService.getSharedData('homemenuentries', false);
this.selMenu = this.cs.sharedService.getSharedData(MenuResponse.SHARED_DATA, false);
const title: string = this.ts.trPK('eit', 'my-requests');
this.headerTitle = this.menu.PROMPT ? this.menu.PROMPT : title;
}
ngOnInit() { }
openPage(page, index) {
console.log(page + "index" + index);
// Reset the content nav to have just this page
// we wouldn't want the back button to show in this scenario
if (page.children.length === 0) {
this.goToRequest(page);
} else {
if (this.selectedMenu === 0) {
this.selectedMenu = -1;
} else if (this.selectedMenu !== -1) {
this.selectedMenu = -1;
} else {
this.selectedMenu = index;
}
}
console.log('selected>>>>>>>' + this.selectedMenu);
}
goToRequest(menuEntry) {
let selMenu: MenuResponse = new MenuResponse();
selMenu = this.cs.sharedService.getSharedData(MenuResponse.SHARED_DATA, false);
selMenu.GetMenuEntriesList = menuEntry;
this.cs.sharedService.setSharedData(selMenu, MenuResponse.SHARED_DATA);
if (menuEntry.REQUEST_TYPE === 'ABSENCE') {
this.cs.openAbsencePage();
} else if (menuEntry.REQUEST_TYPE === 'EIT') {
this.cs.openEitListPage();
} else if (menuEntry.REQUEST_TYPE === 'BASIC_DETAILS') {
this.cs.openProfile('basicDetails');
} else if (menuEntry.REQUEST_TYPE === 'ADDRESS') {
this.cs.openProfile('address');
}
if (menuEntry.REQUEST_TYPE === 'PAYSLIP') {
this.cs.openPayslipPage();
}
if (menuEntry.REQUEST_TYPE === 'TIME_CARD') {
this.cs.openTimeCardPage();
}
}
}

@ -0,0 +1,18 @@
export class EITNotificationBodyItems {
public TRANSACTION_NUMBER :number;
public DESC_FLEX_NAME : string;
public ACTION : string;
public EXTRA_INFO_ID :number;
public DESC_FLEX_CONTEXT_COD : string;
public APPLICATION_COLUMN_NAME : string;
public SEGMENT_SEQ_NUM :number;
public DATATYPE : string;
public SEGMENT_NAME : string;
public VARCHAR2_VALUE : string;
public SEGMENT_PROMPT : string;
public NUMBER_VALUE :number;
public SEGMENT_VALUE_DSP : string;
public DATE_VALUE : string ;
public PREV_SEGMENT_VALUE_DSP : string;
public DISPLAY_FLAG : string ;
}

@ -0,0 +1,8 @@
import { EITNotificationBodyItems } from './EITNotificationBodyItems';
import { Response } from '../../hmg-common/services/models/response';
export class EITNotificatonBodyResponse extends Response {
public static SHARED_DATA = 'Notif_BODY_List';
public static NOT_WORKLIST = 'Notif_WORK_LOST';
public EITNotificationBodyItems: EITNotificationBodyItems [];
}

@ -0,0 +1,13 @@
import { Request } from '../../hmg-common/services/models/request';
export class EITTransactionsRequest extends Request{
public static SUBMIT_EIT_ACTION='submit-eit-action';
public static SHARED_DATA='submit_eit_obj';
public P_PAGE_NUM : Number;
public P_PAGE_LIMIT : Number;
public P_MENU_TYPE:String;
public P_SELECTED_EMPLOYEE_NUMBER:String;
public P_FUNCTION_NAME:String;
public P_SELECTED_RESP_ID : Number;
}

@ -0,0 +1,6 @@
import { Request } from '../../hmg-common/services/models/request';
export class WorkListButtonRequest extends Request{
//public static SHARED_DATA = '';
public P_NOTIFICATION_ID :any;
}

@ -0,0 +1,21 @@
import { Response } from '../../hmg-common/services/models/response';
export class NotificationGetAttachResponse extends Response {
public static SHARED_DATA = '';
public SEQ_NUM = 0;// Int
public FILE_NAME = '';//String
public FILE_DATA = '';//base64
public PK1_VALUE = '';//String
public PK2_VALUE = '';//String
public PK3_VALUE = '';//String
public PK4_VALUE = '';//String
public FILE_CONTENT_TYPE = '';//String
public ATTACHED_DOCUMENT_ID = 0;//Int
public DOCUMENT_ID = 0;//Int
public CATEGORY_ID = 0;//Int
public DATATYPE_ID = 0;//Int
public ENTITY_NAME = '';//String
public FILE_ID = 0;//Int
public PK5_VALUE = '';//String
}

@ -0,0 +1,8 @@
import { Response } from '../../hmg-common/services/models/response';
import { EitRespModel } from './eit.response.model'
export class AddEitResponse extends Response {
public static SHARED_DATA = 'add-eit-response';
SubmitEITTransactionList: EitRespModel;
}

@ -0,0 +1,15 @@
import { EitTransactionModel } from './eit.transaction.model';
export class EitAddressRequest {
public static SHARED_DATA = 'eit-request';
public P_MENU_TYPE: string;
public P_SELECTED_EMPLOYEE_NUMBER: string;
public P_FUNCTION_NAME: string;
public P_SELECTED_RESP_ID: Number;
P_DESC_FLEX_CONTEXT_CODE: string;
EITTransactionTBL: EitTransactionModel[];
P_COUNTRY_CODE: string;
P_EFFECTIVE_DATE: string;
P_ACTION: string;
}

@ -0,0 +1,12 @@
import { EitTransactionModel } from './eit.transaction.model';
export class EitRequest {
public static SHARED_DATA = 'eit-request';
public P_MENU_TYPE: string;
public P_SELECTED_EMPLOYEE_NUMBER: string;
public P_FUNCTION_NAME: string;
public P_SELECTED_RESP_ID: Number;
P_DESC_FLEX_CONTEXT_CODE: string;
EITTransactionTBL: EitTransactionModel[];
}

@ -0,0 +1,6 @@
export class EitRespModel {
P_ITEM_KEY: string;
P_RETURN_MSG:string;
P_RETURN_STATUS:string;
P_TRANSACTION_ID:number;
}

@ -0,0 +1,7 @@
export class EitTransactionModel {
TRANSACTION_NUMBER: number;
NUMBER_VALUE: number;
NAME: string;
DATE_VALUE: string;
VARCHAR2_VALUE: string;
}

@ -0,0 +1,6 @@
// tslint:disable-next-line:class-name
export enum EIT_ACTION {
ADD = 1,
DELETE = 2,
UPDATE=3
}

@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { EitService } from './eit.service';
describe('EitService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: EitService = TestBed.get(EitService);
expect(service).toBeTruthy();
});
});

@ -0,0 +1,134 @@
import { NotificationGetAttachResponse } from './../models/NotificationGetAttachRes';
import { EITTransactionsRequest } from './../models/EITTransactionsReq';
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';
import { ConnectorService } from 'src/app/hmg-common/services/connector/connector.service';
import { AddEitResponse } from '../models/add.eit.response';
import { ApproversList } from 'src/app/absence/models/approvers';
import { WorkListButtonRequest } from '../models/NotificationButtonReq';
@Injectable({
providedIn: 'root'
})
export class EitService {
/* EIT Services URLs */
public static getMenuEntries = 'Services/ERP.svc/REST/GET_MENU_ENTRIES';
public static getEITTransctions = 'Services/ERP.svc/REST/GET_EIT_TRANSACTIONS';
public static getEITDFFStrutre = 'Services/ERP.svc/REST/GET_EIT_DFF_STRUCTURE';
public static getSetValue = 'Services/ERP.svc/REST/GET_VALUE_SET_VALUES';
public static getDefaultValue = 'Services/ERP.svc/REST/GET_DEFAULT_VALUE';
public static validateEITTransctions = 'Services/ERP.svc/REST/VALIDATE_EIT_TRANSACTION';
public static submitEit = 'Services/ERP.svc/REST/SUBMIT_EIT_TRANSACTION';
public static resubmitEit = 'Services/ERP.svc/REST/RESUBMIT_EIT_TRANSACTION';
public static startEitProcess = 'Services/ERP.svc/REST/START_EIT_APPROVAL_PROCESS';
public static updateAttach = 'Services/ERP.svc/REST/UPDATE_ATTACHMENT';
public static deleteAttach = 'Services/ERP.svc/REST/DELETE_ATTACHMENT';
public static getApproversList = 'Services/ERP.svc/REST/GET_APPROVERS_LIST';
public static addAttachment = 'Services/ERP.svc/REST/ADD_ATTACHMENT';
public static cancelHRTransaction = 'Services/ERP.svc/REST/CANCEL_HR_TRANSACTION';
public static getAttach = 'Services/ERP.svc/REST/GET_ATTACHMENTS';
constructor(public authService: AuthenticationService, public con: ConnectorService) { }
public getMenuEntries(menuEntries: any, onError?: any, errorLabel?: string, isPostNoLoad = false): Observable<any> {
const request = menuEntries;
this.authService.authenticateRequest(request);
if (isPostNoLoad) {
return this.con.postNoLoad(EitService.getMenuEntries, request, onError, errorLabel);
} else {
return this.con.post(EitService.getMenuEntries, request, onError, errorLabel);
}
}
// tslint:disable-next-line: no-shadowed-variable
public getEITTransactionsList(EITTransactionsRequest: EITTransactionsRequest, onError?: any, errorLabel?: string): Observable<any> {
const request = EITTransactionsRequest;
this.authService.authenticateRequest(request);
return this.con.post(EitService.getEITTransctions, request, onError, errorLabel);
}
public submitEit(eit: any, onError?: any, errorLabel?: string): Observable<AddEitResponse> {
const request = eit;
request.EITTransactionTBLModel = eit.EITTransactionTBL;
this.authService.authenticateRequest(request);
return this.con.post(EitService.submitEit, request, onError, errorLabel);
}
public validateEITTransaction(validateEITTransactionReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = validateEITTransactionReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.validateEITTransctions, request, onError, errorLabel);
}
public getEITDFFStrutre(EITDFFStrutreReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = EITDFFStrutreReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.getEITDFFStrutre, request, onError, errorLabel);
}
public getSetValue(SetValueReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = SetValueReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.getSetValue, request, onError, errorLabel);
}
public getDefaultValue(DefaultValueReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = DefaultValueReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.getDefaultValue, request, onError, errorLabel);
}
public getApproversList(abProcess: any, onError?: any, errorLabel?: string): Observable<ApproversList> {
const request = abProcess;
request.P_AME_TRANSACTION_TYPE = 'SSHRMS';
request.P_PAGE_NUM = 1;
request.P_PAGE_LIMIT = 1000; // check later on
this.authService.authenticateRequest(request);
return this.con.post(EitService.getApproversList, request, onError, errorLabel);
}
public addAttachment(addAttachrequest: any, onError?: any, errorLabel?: string): Observable<any> {
const request = addAttachrequest;
this.authService.authenticateRequest(request);
return this.con.post(EitService.addAttachment, request, onError, errorLabel);
}
public startEitApprovalProcess(eitProcess: any, onError?: any, errorLabel?: string): Observable<any> {
const request = eitProcess;
this.authService.authenticateRequest(request);
return this.con.post(EitService.startEitProcess, request, onError, errorLabel);
}
public cancelHRTransaction(transactionID: any, onError?: any, errorLabel?: string): Observable<any> {
const request = transactionID;
this.authService.authenticateRequest(request);
return this.con.post(EitService.cancelHRTransaction, request, onError, errorLabel);
}
public getAttach(getAttachReq: WorkListButtonRequest, onError?: any, errorLabel?: string): Observable<NotificationGetAttachResponse> {
const request = getAttachReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.getAttach, request, onError, errorLabel);
}
public deleteAttach(delteAttachReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = delteAttachReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.deleteAttach, request, onError, errorLabel);
}
public updateAttach(updateAttachReq: any, onError?: any, errorLabel?: string): Observable<any> {
const request = updateAttachReq;
this.authService.authenticateRequest(request);
return this.con.post(EitService.updateAttach, request, onError, errorLabel);
}
public reSubmitEit(eit: any, onError?: any, errorLabel?: string): Observable<any> {
const request = eit;
this.authService.authenticateRequest(request);
return this.con.post(EitService.resubmitEit, request, onError, errorLabel);
}
}

@ -0,0 +1,39 @@
<ion-content padding>
<!--
<ion-col col-1
style="margin-right: -22px;margin-top: -10px;">
<ion-button class="closeIcon" (click)="closeModal()">
<img src="../assets/imgs/close.png">
</ion-button>
</ion-col> -->
<h2><div class="Header">{{'eit,confirmation' | translate}}</div></h2>
<div>
<div *ngIf="submitAttachmentList.length==0" class="labelcheck" lines="none" style="text-align: center;">
{{'eit,no-attachment' | translate}}
</div>
<div *ngIf="eitComments==''" class="labelcheck" style="text-align: center;margin-bottom: 5px;padding-bottom: 16px;">
{{'eit,no-note' | translate}}
</div>
</div>
<ion-footer style="border-top: 1px solid grey !important;">
<ion-row class="rowBtn">
<ion-label class="labelRadio">{{'eit,submit' | translate}}</ion-label>
<ion-button class="submitOkButton" (click)="OkBtnModal()"> {{ts.trPK('general','ok')}}
</ion-button>
</ion-row>
<ion-row class="rowBtn">
<ion-button class="submitCancelButton" (click)="closeModal()"> {{ts.trPK('general','cancel')}}
</ion-button>
</ion-row>
</ion-footer>
</ion-content>

@ -0,0 +1,53 @@
.rowBtn{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.Header{
color: black !important;
font-size: 25px !important;
font-weight: bold !important;;
margin: 0;
text-align: center;
margin-bottom: 20px;
}
.labelRadio{
color: black !important;
font-weight: bold !important;
padding-bottom: 20px;
}
.labelcheck{
color: red !important;
font-weight: bold !important;
margin-bottom: 10px;
}
.submitOkButton{
white-space: normal !important;
text-transform: capitalize !important;
min-height: 45px !important;
min-width: 5px !important;
margin: 8px !important;
--background:: #29B5BF;
width: 100% !important;
color: white!important;
border-radius: 16px !important;
}
.submitCancelButton{
white-space: normal !important;
text-transform: capitalize !important;
min-height: 45px !important;
min-width: 5px !important;
margin: 8px !important;
--background:: #29B5BF;
width: 100% !important;
color: white!important;
border-radius: 16px !important;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SubmitEitModalComponent } from './submit-eit-modal.component';
describe('SubmitEitModalComponent', () => {
let component: SubmitEitModalComponent;
let fixture: ComponentFixture<SubmitEitModalComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ SubmitEitModalComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SubmitEitModalComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,36 @@
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { ModalController } from '@ionic/angular';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
@Component({
selector: 'app-submit-eit-modal',
templateUrl: './submit-eit-modal.component.html',
styleUrls: ['./submit-eit-modal.component.scss'],
})
export class SubmitEitModalComponent implements OnInit {
submitAttachmentList :any =[];
eitComments: string;
constructor( public ts: TranslatorService,private modalCtrl: ModalController, private cs: CommonService){
this.submitAttachmentList = this.cs.sharedService.getSharedData('submitAttachmentList', false);
this.eitComments = this.cs.sharedService.getSharedData('eitComments', false);
}
ngOnInit() {
console.log("modal");
//this.actionBtns = this.cs.sharedService.getSharedData("passActionMore" , false);
console.log("modal");
}
closeModal() {
this.modalCtrl.dismiss();
}
OkBtnModal() {
let data = "ok";
this.modalCtrl.dismiss(data);
}
}
Loading…
Cancel
Save