Merge branch 'master' of https://hmg.git.cloudforge.com/mohemmionic5
commit
a2511c41ce
@ -0,0 +1,51 @@
|
||||
|
||||
<ion-header >
|
||||
<ion-toolbar class="header-toolbar">
|
||||
<ion-title color="light"> {{ts.trPK('addAttach','title')}}</ion-title>
|
||||
<ion-buttons slot="start">
|
||||
<nav-buttons></nav-buttons>
|
||||
</ion-buttons>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
<ion-content>
|
||||
|
||||
<ion-card>
|
||||
<ion-card-header class="boxHdr">
|
||||
<div class="hrTitle"> {{ts.trPK('addAttach','title')}}</div>
|
||||
<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">
|
||||
<ion-col size="4">
|
||||
<label class="Header" for=""> {{ts.trPK('addAttach','name')}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="4">
|
||||
<label class="Header" for="">{{ts.trPK('addAttach','size')}} </label>
|
||||
</ion-col>
|
||||
<ion-col size="4">
|
||||
<label class="Header" for=""> {{ts.trPK('addAttach','remove')}} </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 color="customnavy" (click)="OkBtnModal()">{{ts.trPK('general','ok')}} </ion-button>
|
||||
</div>
|
||||
</ion-footer>
|
||||
@ -0,0 +1,103 @@
|
||||
.col {
|
||||
//border: #dedede solid 1px;
|
||||
padding: 2px !important;
|
||||
text-align: center;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
|
||||
.item-md.item-block .item-inner,
|
||||
.item-ios.item-block .item-inner {
|
||||
padding: 0px !important;
|
||||
}
|
||||
.iconButton .imgSize{
|
||||
width:22px !important;
|
||||
}
|
||||
.itemAH {
|
||||
padding: 0px !important;
|
||||
font-size: 13px;
|
||||
|
||||
}
|
||||
|
||||
.gridAH {
|
||||
text-align: center;
|
||||
padding: 5px 5px !important;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.rowAH {
|
||||
white-space: normal;
|
||||
|
||||
.col {
|
||||
border: 1px solid var(--cusgray);
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Header {
|
||||
font-weight: bold;
|
||||
color: var(--customnavy);
|
||||
font-size: 14px;
|
||||
|
||||
}
|
||||
|
||||
.titleH {
|
||||
font-size: 15px;
|
||||
border: 1px solid var(--cusgray);
|
||||
border-top-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
border-bottom: 0px;
|
||||
|
||||
.col {
|
||||
border: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
ion-label.label.label-md,
|
||||
ion-label.label.label-ios {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.fileDiv .inputfile {
|
||||
width: 0.1px;
|
||||
height: 0.1px;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
// z-index: -1;
|
||||
}
|
||||
|
||||
.inputfile+label {
|
||||
display: inline-block;
|
||||
color: var(--light);
|
||||
}
|
||||
|
||||
.fileDiv {
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
right:0;
|
||||
top:0;
|
||||
:root[dir="ltr"] {
|
||||
float: right;
|
||||
}
|
||||
|
||||
:root[dir="rtl"] {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
ion-icon{
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
button.iconButton.button.button-ios.button-default.button-default-ios,
|
||||
button.iconButton.button.button-md.button-default.button-default-md {
|
||||
padding: 0px;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { AbsenceAttachmentComponent } from './absence-attachment.component';
|
||||
|
||||
describe('AbsenceAttachmentComponent', () => {
|
||||
let component: AbsenceAttachmentComponent;
|
||||
let fixture: ComponentFixture<AbsenceAttachmentComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ AbsenceAttachmentComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AbsenceAttachmentComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,168 @@
|
||||
import { Component, EventEmitter, OnInit } from "@angular/core";
|
||||
import { CommonService } from "src/app/hmg-common/services/common/common.service";
|
||||
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
|
||||
import { FileUploader } from "ng2-file-upload";
|
||||
import { AddAttachService } from "../service/add-attach-service";
|
||||
import { AddEitResponse } from "src/app/eit/models/add.eit.response";
|
||||
import { ModalController } from '@ionic/angular';
|
||||
|
||||
/**
|
||||
* Generated class for the AddAttachPage page.
|
||||
*
|
||||
* See https://ionicframework.com/docs/components/#navigation for more info on
|
||||
* Ionic pages and navigation.
|
||||
*/
|
||||
|
||||
@Component({
|
||||
selector: "absence-attachment",
|
||||
templateUrl: "absence-attachment.component.html",
|
||||
styleUrls: ["./absence-attachment.component.scss"]
|
||||
})
|
||||
export class AbsenceAttachmentComponent 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;
|
||||
filterAllowedType: any = [
|
||||
"application/pdf",
|
||||
"image/jpeg",
|
||||
"image/png",
|
||||
"text/plain",
|
||||
"image/jpg",
|
||||
"application/vnd.ms-excel",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||
];
|
||||
|
||||
constructor(
|
||||
public common: CommonService,
|
||||
public AddAttachService: AddAttachService,
|
||||
public modalCtrl: ModalController,
|
||||
public ts: TranslatorService
|
||||
) {
|
||||
this.eitResponse = this.common.sharedService.getSharedData(
|
||||
AddEitResponse.SHARED_DATA,
|
||||
true
|
||||
);
|
||||
// this.TransactionID = this.navParams.get("TransactionID");
|
||||
// this.indexLastObj = this.navParams.get("indexLastObj");
|
||||
|
||||
// console.log("this.TransactionID : "+ this.TransactionID);
|
||||
this.isUpload = false;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
ngOnInit() {}
|
||||
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.modalCtrl.dismiss(data);
|
||||
|
||||
}
|
||||
else {
|
||||
let msg: string = "";
|
||||
msg = this.ts.trPK("general", "noFileSelect");
|
||||
this.common.presentAlert(msg);
|
||||
return;
|
||||
}
|
||||
} // end ok button
|
||||
|
||||
closeBtnModal() {
|
||||
// this.viewCtrl.dismiss("cancel");
|
||||
}
|
||||
|
||||
onFileSelected(input) {
|
||||
if (!(this.filterAllowedType.indexOf(input.target.files[0].type) > -1)) {
|
||||
let msg: string = "";
|
||||
msg = this.ts.trPK("general", "noFileSelect");
|
||||
this.common.presentAlert(msg);
|
||||
return;
|
||||
} // todo: show alert that you tried uploading wrong files
|
||||
else {
|
||||
const file = input.target.files[0];
|
||||
|
||||
// console.log(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) {}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,136 @@
|
||||
|
||||
<ion-header >
|
||||
<ion-toolbar class="header-toolbar">
|
||||
<ion-title color="light"> {{ts.trPK('submitAbsenceConfirm','submitAbsenceConfirm')}}</ion-title>
|
||||
<ion-buttons slot="start">
|
||||
<nav-buttons></nav-buttons>
|
||||
</ion-buttons>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
<ion-content>
|
||||
|
||||
|
||||
<ion-card>
|
||||
<ion-card-header class="boxHdr">
|
||||
<div class="hrTitle"> {{ts.trPK('confirmAddEit','approverList')}}</div>
|
||||
</ion-card-header>
|
||||
<ion-card-content class="confirm-details">
|
||||
|
||||
<ion-grid class=" gridAH" *ngIf="approversList?.length > 0">
|
||||
<ion-row class="rowAH titleH">
|
||||
<ion-col size="1" >
|
||||
<label class="Header" for="">{{ts.trPK('confirmAddEit','no')}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label class="Header" for="">{{ts.trPK('confirmAddEit','approver')}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label class="Header" for="">{{ts.trPK('confirmAddEit','approverCategory')}} </label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label class="Header" for="">{{ts.trPK('confirmAddEit','approverType')}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="2">
|
||||
<label class="Header" for="">{{ts.trPK('confirmAddEit','status')}}</label>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
|
||||
<ion-row class="rowAH" *ngFor="let item of approversList">
|
||||
<ion-col size="1">
|
||||
<label for="">{{item.APPROVER_ORDER_NUMBER}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label for="">{{item.APPROVER}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label for="">{{item.APPROVER_CATEGORY}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="3">
|
||||
<label for="">{{item.APPROVER_TYPE}}</label>
|
||||
</ion-col>
|
||||
<ion-col size="2">
|
||||
<label for="">{{item.APPROVAL_STATUS}}</label>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
|
||||
|
||||
</ion-card-content>
|
||||
</ion-card>
|
||||
|
||||
<ion-item padding>
|
||||
<ion-label class="boldTxtNav">{{ts.trPK('confirmAddEit','comment')}}</ion-label>
|
||||
<ion-textarea type="text" [(ngModel)]="absComments"></ion-textarea>
|
||||
</ion-item>
|
||||
|
||||
|
||||
<div>
|
||||
<ion-card>
|
||||
|
||||
<ion-card-header class="boxHdr">
|
||||
<div class="hrTitle">{{ts.trPK('absenceList','attachList')}}</div>
|
||||
|
||||
<img class="imgSize" src="../assets/imgs/attachment.png" (click)="addAttachment(true,-1)">
|
||||
|
||||
</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 size="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 size="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 size="8">
|
||||
<div> <img float-start class="attachImg" src="../assets/imgs/file.png">
|
||||
</div>
|
||||
<ion-label>
|
||||
{{attachRes.FILE_NAME }} </ion-label>
|
||||
|
||||
</ion-col>
|
||||
<ion-col size="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]="!isResubmitAbs" 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>
|
||||
|
||||
</div>
|
||||
|
||||
</ion-content>
|
||||
<ion-footer>
|
||||
<div class="centerDiv">
|
||||
<ion-button color="customnavy" (click)="startAbApproval()">{{ts.trPK('confirmAddEit','start')}}</ion-button>
|
||||
</div>
|
||||
|
||||
</ion-footer>
|
||||
@ -0,0 +1,31 @@
|
||||
.imgSize{
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
height:20px;
|
||||
width:20px;
|
||||
}
|
||||
.rowAH ion-col {
|
||||
border: 1px solid #d9d9d9;
|
||||
font-size: 13px;
|
||||
}
|
||||
.titleH {
|
||||
font-size: 13px;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-top-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
border-bottom: 0px;
|
||||
}
|
||||
.gridAH {
|
||||
text-align: center;
|
||||
padding: 5px 5px !important;
|
||||
border-radius: 5px;
|
||||
}
|
||||
ion-card-content.confirm-details{
|
||||
padding: 0;
|
||||
}
|
||||
.confirm-details label{
|
||||
font-size: 13px;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { AbsenceConfirmComponent } from './absence-confirm.component';
|
||||
|
||||
describe('AbsenceConfirmComponent', () => {
|
||||
let component: AbsenceConfirmComponent;
|
||||
let fixture: ComponentFixture<AbsenceConfirmComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ AbsenceConfirmComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AbsenceConfirmComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,327 @@
|
||||
import { Component, OnInit } from "@angular/core";
|
||||
import { CommonService } from "src/app/hmg-common/services/common/common.service";
|
||||
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
|
||||
import { ApproversList } from '../models/approvers';
|
||||
import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response';
|
||||
import { WorkListButtonRequest } from 'src/app/eit/models/NotificationButtonReq';
|
||||
import { ModalController } from '@ionic/angular';
|
||||
import { NotificationGetAttachResponse } from 'src/app/eit/models/NotificationGetAttachRes';
|
||||
import { AbsenceResponse } from '../models/absence.response';
|
||||
import { SubmitAbConfirmService } from '../service/submit-absence-confirm.service';
|
||||
import { WorklistAttachService } from '../service/work-list-attach.service';
|
||||
import { ConfirmAddEitService } from '../service/confirm-add-eit-service';
|
||||
import { AbsenceNotificatonBodyResponse } from '../models/AbsenceNotificationBodyRes';
|
||||
import { AbsenceAttachmentComponent } from '../absence-attachment/absence-attachment.component';
|
||||
import { WorkListAttachViewComponent } from 'src/app/notification/work-list-attach-view/work-list-attach-view.component';
|
||||
|
||||
@Component({
|
||||
selector: "app-absence-confirm",
|
||||
templateUrl: "./absence-confirm.component.html",
|
||||
styleUrls: ["./absence-confirm.component.scss"]
|
||||
})
|
||||
export class AbsenceConfirmComponent implements OnInit {
|
||||
P_TransactionID: number;
|
||||
approversList: ApproversList;
|
||||
selEmp: string = "";
|
||||
respID: number;
|
||||
absComments: string = "";
|
||||
selMenu: MenuResponse;
|
||||
attachItems: any;
|
||||
attachListDisplay: any;
|
||||
isTrue: any = 0;
|
||||
getPassNotificationDetails: any;
|
||||
menuType: string = "";
|
||||
attachmentRes: any;
|
||||
objIndex1: any;
|
||||
attachListOver: any = [];
|
||||
index: any = 0;
|
||||
attachReqObj: WorkListButtonRequest = new WorkListButtonRequest();
|
||||
private isResubmitAbs: boolean = false;
|
||||
private isSubmitBtnClicked: boolean;
|
||||
constructor(
|
||||
public common: CommonService,
|
||||
public ts: TranslatorService,
|
||||
public modalCtrl: ModalController,
|
||||
public ConfirmAddEitService: ConfirmAddEitService,
|
||||
public submitConService: SubmitAbConfirmService,
|
||||
public WorklistAttachService: WorklistAttachService
|
||||
) {
|
||||
this.isSubmitBtnClicked = false;
|
||||
|
||||
// this.isResubmitAbs = this.navParams.get("isResubmit");
|
||||
if (this.isResubmitAbs) {
|
||||
this.P_TransactionID = this.common.sharedService.getSharedData(
|
||||
AbsenceResponse.SHARED_DATA
|
||||
);
|
||||
this.getPassNotificationDetails =this.common.sharedService.getSharedData(
|
||||
AbsenceNotificatonBodyResponse.NOT_WORKLIST,
|
||||
true
|
||||
);
|
||||
this.selEmp = this.getPassNotificationDetails.SELECTED_EMPLOYEE_NUMBER;
|
||||
this.menuType = "E";
|
||||
this.respID = -999;
|
||||
// this.getApproversList();
|
||||
// console.log("this.getPassNotificationDetails.P_NOTIFICATION_ID :"+this.getPassNotificationDetails.NOTIFICATION_ID);
|
||||
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
|
||||
} else {
|
||||
this.selMenu = this.common.sharedService.getSharedData(
|
||||
MenuResponse.SHARED_DATA,
|
||||
true
|
||||
);
|
||||
this.selEmp = this.common.sharedService.getSharedData(
|
||||
MenuResponse.SHARED_SEL_EMP,
|
||||
true
|
||||
);
|
||||
this.respID = this.common.sharedService.getSharedData(
|
||||
MenuResponse.SHARED_SEL_RESP_ID,
|
||||
true
|
||||
);
|
||||
this.P_TransactionID = this.common.sharedService.getSharedData(
|
||||
AbsenceResponse.SHARED_DATA
|
||||
);
|
||||
this.menuType = this.selMenu.List_Menu.MENU_TYPE;
|
||||
}
|
||||
this.getApproversList();
|
||||
}
|
||||
|
||||
ngOnInit() {}
|
||||
startAbApproval() {
|
||||
if (this.attachListOver) {
|
||||
//first call add attach inside success call submit
|
||||
let request = {
|
||||
AddAttachmentList: this.attachListOver
|
||||
};
|
||||
this.ConfirmAddEitService.addAttachment(request).subscribe(
|
||||
(result: any) => {
|
||||
this.handleAddAttachmentResults(result);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
this.startAbsApprovalProcess();
|
||||
}
|
||||
} //end
|
||||
|
||||
handleAddAttachmentResults(result) {
|
||||
if (this.common.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;
|
||||
// if false display cancel button with waring icon or design
|
||||
} // end if
|
||||
else {
|
||||
// if true remove cancel and set 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.startAbsApprovalProcess();
|
||||
} else {
|
||||
//stope
|
||||
let filtered = this.attachListOver.filter(function(el) {
|
||||
return el.isSuccess == true;
|
||||
});
|
||||
this.attachListOver = filtered;
|
||||
let msg: string = "";
|
||||
// msg = this.translate.translate("addAttach.errorMsg");
|
||||
//this.common.showAlert(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
startAbsApprovalProcess() {
|
||||
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_COMMENTS = this.absComments;
|
||||
this.submitConService
|
||||
.startAbApprovalProcess(request)
|
||||
.subscribe((result: any) => {
|
||||
this.handleResults(result);
|
||||
});
|
||||
}
|
||||
cancelAbProcess() {
|
||||
let body: any = {
|
||||
P_TRANSACTION_ID: this.P_TransactionID
|
||||
};
|
||||
this.submitConService.cancelHRTransaction(body).subscribe((result: any) => {
|
||||
this.handleCancelResults(result);
|
||||
});
|
||||
}
|
||||
handleCancelResults(result) {
|
||||
if (this.common.validResponse(result)) {
|
||||
this.isSubmitBtnClicked = false;
|
||||
// this.navCtrl.popToRoot();
|
||||
}
|
||||
}
|
||||
handleResults(result) {
|
||||
if (this.common.validResponse(result)) {
|
||||
this.isSubmitBtnClicked = true;
|
||||
//if(this.isResubmitAbs==false){
|
||||
let msg: string = this.ts.trPK("general", "messageSuccess");
|
||||
this.common.presentAlert(msg);
|
||||
|
||||
// }
|
||||
// this.navCtrl.popToRoot();
|
||||
this.common.openNotificationPage();
|
||||
}
|
||||
}
|
||||
|
||||
getApproversList() {
|
||||
let body: any = {
|
||||
P_TRANSACTION_ID: this.P_TransactionID,
|
||||
P_AME_TRANSACTION_TYPE: "SSHRMS",
|
||||
P_PAGE_NUM: 1,
|
||||
P_PAGE_LIMIT: 1000
|
||||
};
|
||||
this.submitConService.getApproversList(body).subscribe((result: any) => {
|
||||
this.handleApproversResult(result);
|
||||
});
|
||||
}
|
||||
|
||||
handleApproversResult(result) {
|
||||
if (this.common.validResponse(result)) {
|
||||
this.approversList = result.GetApprovesList;
|
||||
}
|
||||
}
|
||||
|
||||
async addAttachment(str: boolean, attachItems: any) {
|
||||
let attachDocID = attachItems.ATTACHED_DOCUMENT_ID;
|
||||
// var modalPage = this.modalCtrl.create("AddAttachPage", {
|
||||
// indexLastObj: this.attachListOver.length,
|
||||
// TransactionID: this.P_TransactionID,
|
||||
// enableBackdropDismiss: false
|
||||
// });
|
||||
const modal = await this.modalCtrl.create({
|
||||
component: AbsenceAttachmentComponent,
|
||||
componentProps:{ indexLastObj: this.attachListOver.length, TransactionID: this.P_TransactionID},
|
||||
keyboardClose: true,
|
||||
animated: false
|
||||
});
|
||||
modal.onDidDismiss()
|
||||
.then((data) => {
|
||||
if (data == "cancel" || data == "undefined") {
|
||||
return;
|
||||
} else {
|
||||
if (!str) {
|
||||
this.updateFile(data, attachDocID);
|
||||
} else {
|
||||
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;
|
||||
}
|
||||
}
|
||||
});
|
||||
return await modal.present();
|
||||
|
||||
}
|
||||
|
||||
removeFile(objectitem) {
|
||||
|
||||
if (this.attachListOver) {
|
||||
let index2 = this.attachListOver.findIndex(item => item == objectitem);
|
||||
if (index2 > -1) {
|
||||
this.attachListOver.splice(index2, 1);
|
||||
}
|
||||
}
|
||||
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.WorklistAttachService.getAttach(this.attachReqObj).subscribe(
|
||||
(result: NotificationGetAttachResponse) => {
|
||||
this.handleWorkListAttachResult(result);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
handleWorkListAttachResult(result) {
|
||||
if (this.common.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) {
|
||||
this.common.sharedService.setSharedData({ displayData: value, TypeData: Type }, 'WorkListAttachViewPage');
|
||||
const modal = await this.modalCtrl.create({
|
||||
component: WorkListAttachViewComponent
|
||||
});
|
||||
|
||||
modal.onDidDismiss()
|
||||
.then((data) => {
|
||||
});
|
||||
|
||||
return await modal.present();
|
||||
}
|
||||
|
||||
updateFile(attachList, attachDocID) {
|
||||
|
||||
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.submitConService.updateAttach(req).subscribe((result: any) => {
|
||||
if (this.common.validResponse(result)) {
|
||||
if (result.MessageStatus == 1) {
|
||||
let msg: string = "";
|
||||
// msg = this.translate.translate("addAttach.attachUpdate");
|
||||
// this.common.showAlert(msg);
|
||||
|
||||
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
|
||||
}
|
||||
} // val
|
||||
});
|
||||
}
|
||||
|
||||
delelteFile(attach) {
|
||||
// let alert = this.common.showConfirmMsg(
|
||||
// this.translate.translate("general.deletePerm")
|
||||
// );
|
||||
// alert.onDidDismiss(data => {
|
||||
// if (data == true) {
|
||||
// this.continueDelete(attach);
|
||||
// }
|
||||
// });
|
||||
}
|
||||
continueDelete(attach) {
|
||||
|
||||
let req = {
|
||||
P_ATTACHED_DOCUMENT_ID: attach.ATTACHED_DOCUMENT_ID
|
||||
};
|
||||
this.submitConService.delteAttach(req).subscribe((result: any) => {
|
||||
if (this.common.validResponse(result)) {
|
||||
if (result.DeleteAttachmentList.P_RETURN_STATUS === "S") {
|
||||
this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID);
|
||||
// let msg: string = "";
|
||||
// msg = this.translate.translate("addAttach.deleteAttach");
|
||||
// this.common.showAlert(msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
ionViewWillLeave() {
|
||||
if (this.P_TransactionID && this.isSubmitBtnClicked == false)
|
||||
this.cancelAbProcess();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
.imgSize{
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
height:20px;
|
||||
width:20px;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
export class AbsenceNotificationBodyItems {
|
||||
public TRANSACTION_NUMBER :number;
|
||||
public DESC_FLEX_NAME : string;
|
||||
public ACTION : string;
|
||||
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 { Response } from './response';
|
||||
import { AbsenceNotificationBodyItems } from './AbsenceNotificationBodtItems';
|
||||
|
||||
export class AbsenceNotificatonBodyResponse extends Response {
|
||||
public static SHARED_DATA = 'Abs_Notif_BODY_List';
|
||||
public static NOT_WORKLIST = 'Abs_Notif_WORK_LIST';
|
||||
public AbsenceNotificationBodyItems: AbsenceNotificationBodyItems [];
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
import {Request} from './request'
|
||||
|
||||
export class ReplacementServiceRequest extends Request{
|
||||
P_SEARCH_USER_NAME:string;
|
||||
P_SEARCH_EMPLOYEE_DISPLAY_NAME:string;
|
||||
P_SEARCH_EMAIL_ADDRESS:string;
|
||||
P_PAGE_NUM:number;
|
||||
P_PAGE_LIMIT:number;
|
||||
P_SELECTED_EMPLOYEE_NUMBER:string
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
|
||||
export class replacmentinfo extends Request{
|
||||
public EMAIL_ADDRESS:string;
|
||||
public EMPLOYEE_DISPLAY_NAME: string;
|
||||
public FROM_ROW_NUM: number;
|
||||
public NO_OF_ROWS: number;
|
||||
public ROW_NUM: number;
|
||||
public TO_ROW_NUM: number;
|
||||
public USER_NAME: string;
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
import { Response } from './response';
|
||||
import {replacmentinfo} from './replacment-info';
|
||||
|
||||
export class ReplacmentResponse extends Response {
|
||||
public static SHARED_DATA = 'replacment-shared';
|
||||
public replacmentInfo: replacmentinfo;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
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 { Observable } from "rxjs";
|
||||
@Injectable()
|
||||
export class AddAttachService {
|
||||
public static addAttachment = "Services/ERP.svc/REST/ADD_ATTACHMENT";
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService
|
||||
) {}
|
||||
|
||||
public addAttachment(
|
||||
addAttachrequest: any,
|
||||
onError?: any,
|
||||
errorLabel?: string
|
||||
): Observable<any> {
|
||||
const request = addAttachrequest;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(
|
||||
AddAttachService.addAttachment,
|
||||
request,
|
||||
onError,
|
||||
errorLabel
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
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 { Observable } from "rxjs";
|
||||
// import {AddEitResponse} from '../models/add.eit.response'
|
||||
@Injectable()
|
||||
export class ConfirmAddEitService {
|
||||
public static addAttachment = "Services/ERP.svc/REST/ADD_ATTACHMENT";
|
||||
public static submitEit = "Services/ERP.svc/REST/SUBMIT_EIT_TRANSACTION";
|
||||
public static startEitProcess =
|
||||
"Services/ERP.svc/REST/START_EIT_APPROVAL_PROCESS";
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService
|
||||
) {}
|
||||
|
||||
public submitEit(eit: any, onError?: any, errorLabel?: string) {
|
||||
const request = eit;
|
||||
request.EITTransactionTBLModel = eit.EITTransactionTBL;
|
||||
//request.EITTransactionTBL=[];
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(
|
||||
ConfirmAddEitService.submitEit,
|
||||
request,
|
||||
onError,
|
||||
errorLabel
|
||||
);
|
||||
}
|
||||
|
||||
public startEitApprovalProcess(
|
||||
eitProcess: any,
|
||||
onError?: any,
|
||||
errorLabel?: string
|
||||
): Observable<any> {
|
||||
const request = eitProcess;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(
|
||||
ConfirmAddEitService.startEitProcess,
|
||||
request,
|
||||
onError,
|
||||
errorLabel
|
||||
);
|
||||
}
|
||||
public addAttachment(
|
||||
addAttachrequest: any,
|
||||
onError?: any,
|
||||
errorLabel?: string
|
||||
): Observable<any> {
|
||||
const request = addAttachrequest;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(
|
||||
ConfirmAddEitService.addAttachment,
|
||||
request,
|
||||
onError,
|
||||
errorLabel
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ReplacementListService } from './replacement-list.service';
|
||||
|
||||
describe('ReplacementListService', () => {
|
||||
beforeEach(() => TestBed.configureTestingModule({}));
|
||||
|
||||
it('should be created', () => {
|
||||
const service: ReplacementListService = TestBed.get(ReplacementListService);
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,23 @@
|
||||
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 { Observable } from 'rxjs';;
|
||||
import {Request} from '../models/request'
|
||||
import { ReplacementServiceRequest } from '../models/replacement-Service.request';
|
||||
|
||||
@Injectable()
|
||||
export class replacmentListService {
|
||||
public static getReplacmentEmployeeList = 'Services/ERP.svc/REST/GET_REPLACEMENT_LIST';
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService,
|
||||
|
||||
) {
|
||||
|
||||
}
|
||||
public getReplacmentList(req: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = req;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(replacmentListService.getReplacmentEmployeeList, request, onError, errorLabel);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
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 { Observable } from 'rxjs';
|
||||
import {ApproversList} from '../models/approvers'
|
||||
|
||||
|
||||
@Injectable()
|
||||
export class SubmitAbConfirmService {
|
||||
public static cancelHRTransaction='Services/ERP.svc/REST/CANCEL_HR_TRANSACTION';
|
||||
public static startAbsenceProcess='Services/ERP.svc/REST/START_ABSENCE_APPROVAL_PROCESS';
|
||||
public static getApproversList='Services/ERP.svc/REST/GET_APPROVERS_LIST';
|
||||
public static updateAttach='Services/ERP.svc/REST/UPDATE_ATTACHMENT';
|
||||
public static delteAttach='Services/ERP.svc/REST/DELETE_ATTACHMENT';
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService) { }
|
||||
|
||||
public cancelHRTransaction(transactionID: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = transactionID;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(SubmitAbConfirmService.cancelHRTransaction, request, onError, errorLabel);
|
||||
}
|
||||
|
||||
public startAbApprovalProcess(abProcess: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = abProcess;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(SubmitAbConfirmService.startAbsenceProcess, 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.api.post(SubmitAbConfirmService.getApproversList, request, onError, errorLabel);
|
||||
}
|
||||
|
||||
public updateAttach(updateAttachReq: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = updateAttachReq;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(SubmitAbConfirmService.updateAttach, request, onError, errorLabel);
|
||||
}
|
||||
|
||||
public delteAttach(delteAttachReq: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = delteAttachReq;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(SubmitAbConfirmService.delteAttach, request, onError, errorLabel);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
import { Injectable } from "@angular/core";
|
||||
import { Http, Response, Headers } from "@angular/http";
|
||||
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
|
||||
import { ConnectorService } from "src/app/hmg-common/services/connector/connector.service";
|
||||
import { Observable } from "rxjs";
|
||||
import { WorkListButtonRequest } from "src/app/eit/models/NotificationButtonReq";
|
||||
|
||||
@Injectable()
|
||||
export class WorklistAttachService {
|
||||
public static getAttach = "Services/ERP.svc/REST/GET_ATTACHMENTS";
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService
|
||||
) {}
|
||||
|
||||
public getAttach(
|
||||
getAttachReq: WorkListButtonRequest,
|
||||
onError?: any,
|
||||
errorLabel?: string
|
||||
) {
|
||||
const request = getAttachReq;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(
|
||||
WorklistAttachService.getAttach,
|
||||
request,
|
||||
onError,
|
||||
errorLabel
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
|
||||
<ion-header >
|
||||
<ion-toolbar class="header-toolbar">
|
||||
<ion-title color="light"> {{ts.trPK('absenceList','attach')}}</ion-title>
|
||||
<ion-buttons slot="start">
|
||||
<nav-buttons></nav-buttons>
|
||||
</ion-buttons>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
<ion-content padding>
|
||||
<div [hidden]="AttachmentList && AttachmentList.length > 0">
|
||||
<p>{{ts.trPK('general','notAttch')}}</p>
|
||||
</div>
|
||||
<div *ngIf="AttachmentList && AttachmentList.length > 0 ">
|
||||
<ion-card>
|
||||
|
||||
<ion-card-header class="boxHdr">
|
||||
<div class="hrTitle">{{ts.trPK('absenceList','attachList')}}</div>
|
||||
</ion-card-header>
|
||||
<ion-card-content>
|
||||
<ion-grid>
|
||||
<div *ngFor="let item of AttachmentList">
|
||||
<ion-row>
|
||||
<ion-col col-10>
|
||||
<div> <img float-start class="attachImg" src="../assets/imgs/file.png">
|
||||
</div>
|
||||
<ion-label >
|
||||
{{item.SEQ_NUM }}. {{item.FILE_NAME}} </ion-label>
|
||||
|
||||
</ion-col>
|
||||
<ion-col col-2 >
|
||||
<button float-end class="attachImgBtn" (click)="OpenAttachFiles(item.FILE_DATA,item.FILE_CONTENT_TYPE
|
||||
)">
|
||||
<img class="attachImg" src="../assets/imgs/view.png">
|
||||
</button>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</div>
|
||||
|
||||
</ion-grid>
|
||||
</ion-card-content>
|
||||
</ion-card>
|
||||
|
||||
</div>
|
||||
|
||||
</ion-content>
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ViewAttachmentsComponent } from './view-attachments.component';
|
||||
|
||||
describe('ViewAttachmentsComponent', () => {
|
||||
let component: ViewAttachmentsComponent;
|
||||
let fixture: ComponentFixture<ViewAttachmentsComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ ViewAttachmentsComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ViewAttachmentsComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,39 @@
|
||||
import { Component, OnInit } from "@angular/core";
|
||||
import { CommonService } from "src/app/hmg-common/services/common/common.service";
|
||||
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
|
||||
import { ModalController } from "@ionic/angular";
|
||||
import { WorkListAttachViewComponent } from "src/app/notification/work-list-attach-view/work-list-attach-view.component";
|
||||
import { AbsenceAttahcment } from "../models/abs.attach";
|
||||
import { AbsenceAttahcmentResponse } from "../models/abs.attach.response";
|
||||
@Component({
|
||||
selector: "app-view-attachments",
|
||||
templateUrl: "./view-attachments.component.html",
|
||||
styleUrls: ["./view-attachments.component.scss"]
|
||||
})
|
||||
export class ViewAttachmentsComponent implements OnInit {
|
||||
AttachmentList: AbsenceAttahcment[];
|
||||
constructor(
|
||||
public common: CommonService,
|
||||
public modalCtrl: ModalController,
|
||||
private ts: TranslatorService
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.AttachmentList = this.common.sharedService.getSharedData(
|
||||
AbsenceAttahcmentResponse.SHARED_DATA
|
||||
);
|
||||
}
|
||||
async OpenAttachFiles(value, Type) {
|
||||
this.common.sharedService.setSharedData(
|
||||
{ displayData: value, TypeData: Type },
|
||||
"WorkListAttachViewPage"
|
||||
);
|
||||
const modal = await this.modalCtrl.create({
|
||||
component: WorkListAttachViewComponent
|
||||
});
|
||||
|
||||
modal.onDidDismiss().then(data => {});
|
||||
|
||||
return await modal.present();
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,85 @@
|
||||
<p>
|
||||
home works!
|
||||
</p>
|
||||
<ion-header >
|
||||
<ion-toolbar class="header-toolbar">
|
||||
<ion-title color="light"> {{ts.trPK('home','worklist')}}</ion-title>
|
||||
<ion-buttons slot="start">
|
||||
<nav-buttons></nav-buttons>
|
||||
</ion-buttons>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
<ion-content [ngClass]=" direction == 'ltr' ? 'left' : 'right'">
|
||||
<!-- first select type view -->
|
||||
<ion-item>
|
||||
<ion-label>{{ts.trPK('worklist','view')}}</ion-label>
|
||||
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}" [(ngModel)]="notificationType"
|
||||
(ionChange)=onChangeView($event)>
|
||||
<ion-select-option value="1" selected="true">{{ts.trPK('worklist','openNot')}}</ion-select-option>
|
||||
<ion-select-option value="2">{{ts.trPK('worklist','fyi')}}</ion-select-option>
|
||||
<ion-select-option value="3">{{ts.trPK('worklist','toDo')}}</ion-select-option>
|
||||
<ion-select-option value="4">{{ts.trPK('worklist','all')}}</ion-select-option>
|
||||
<ion-select-option value="5">{{ts.trPK('worklist','meNot')}} </ion-select-option>
|
||||
</ion-select>
|
||||
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-label>{{ts.trPK('worklist','searchby')}}</ion-label>
|
||||
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}" [(ngModel)]="searchBy"
|
||||
(ionChange)="getValueSelected($event)">
|
||||
<ion-select-option value="1">{{ts.trPK('worklist','from')}}</ion-select-option>
|
||||
<ion-select-option value="2">{{ts.trPK('worklist','subject')}}</ion-select-option>
|
||||
<ion-select-option value="3">{{ts.trPK('worklist','sent')}}</ion-select-option>
|
||||
<ion-select-option value="4">{{ts.trPK('worklist','itemType')}}</ion-select-option>
|
||||
<ion-select-option value="5">{{ts.trPK('worklist','none')}}</ion-select-option>
|
||||
|
||||
</ion-select>
|
||||
</ion-item>
|
||||
|
||||
|
||||
<div *ngIf="HideDateInput==true">
|
||||
<ion-item>
|
||||
<ion-label>{{ts.trPK('worklist','sent')}} </ion-label>
|
||||
<ion-datetime placeholder="{{ts.trPK('worklist','enter')}}" displayFormat="DD-MMM-YYYY" pickerFormat="DD-MMM-YYYY"
|
||||
[(ngModel)]="InputDate"></ion-datetime>
|
||||
</ion-item>
|
||||
</div>
|
||||
<div *ngIf="HideTextInput==true">
|
||||
<ion-item>
|
||||
<ion-input placeholder="{{ts.trPK('worklist','enter')}}" [(ngModel)]="inputSearch">
|
||||
</ion-input>
|
||||
</ion-item>
|
||||
</div>
|
||||
|
||||
<ion-list class="notification-list ">
|
||||
<div class="timeline">
|
||||
<ion-item *ngFor="let notificationList of WorkListResObj">
|
||||
|
||||
<div class="timeline-item" slot="start">
|
||||
<!-- <div class="item-date"> {{notificationList.BEGIN_DATE }} </div> -->
|
||||
|
||||
<div class="item-date"> {{notificationList.BEGIN_DATE | dateString }} </div>
|
||||
<div class="timeline-thumb bg-color-dot timeline-icon">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ion-label (click)="openNotificationDetail(notificationList)"> {{notificationList.SUBJECT}}
|
||||
</ion-label>
|
||||
|
||||
</ion-item>
|
||||
</div>
|
||||
</ion-list>
|
||||
|
||||
<!-- *ngIf="rowsNo <= noOfrows" -->
|
||||
|
||||
<ion-infinite-scroll (ionInfinite)="doInfinite($event)">
|
||||
<ion-infinite-scroll-content></ion-infinite-scroll-content>
|
||||
</ion-infinite-scroll>
|
||||
|
||||
|
||||
|
||||
</ion-content>
|
||||
<ion-footer>
|
||||
<div class="centerDiv">
|
||||
|
||||
<ion-button color="customnavy" (click)="getAllPushNotificationFun()">{{ts.trPK('worklist','search')}}</ion-button>
|
||||
</div>
|
||||
</ion-footer>
|
||||
@ -0,0 +1,159 @@
|
||||
|
||||
.bar-stable {
|
||||
background-color: var(--cusgray) !important;
|
||||
}
|
||||
.tabs{
|
||||
background-color: var(--cusgray) !important;
|
||||
}
|
||||
.icon-size-lg {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
/*Timeline*/
|
||||
|
||||
.pos-absolute-right {
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
position: relative;
|
||||
margin: 15px 0 0 0;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 4px;
|
||||
background: #e4e4e4;
|
||||
z-index: 1;
|
||||
/* margin-left: -10px; */
|
||||
/* z-index: 1; */
|
||||
}
|
||||
|
||||
.timeline .timeline-thumb {
|
||||
|
||||
border-radius: 500px;
|
||||
width: 50px;
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
// :root[dir="ltr"]{
|
||||
// left: 37px;
|
||||
// }
|
||||
// :root[dir="rtl"]{
|
||||
// right: 37px;
|
||||
// }
|
||||
width: 50px;
|
||||
float: right;
|
||||
top: 0px;
|
||||
}
|
||||
|
||||
.timeline .timeline-thumb.timeline-icon {
|
||||
height: 50px;
|
||||
// text-align: center;
|
||||
// color: white;
|
||||
// border: 5px solid #CBD0D3;
|
||||
transform: scale(0.3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
.timeline .timeline-item {
|
||||
width: 50px;
|
||||
|
||||
}
|
||||
|
||||
.timeline .timeline-stats {
|
||||
position: relative;
|
||||
font-size: 12px;
|
||||
color: var(--darkgray);
|
||||
|
||||
}
|
||||
|
||||
|
||||
.divider-title {
|
||||
background: #e4e4e4;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
|
||||
.color-red {
|
||||
color: var(--danger) !important;
|
||||
}
|
||||
|
||||
.bg-color-dot {
|
||||
// background-color: #ff3b30 !important;
|
||||
background: var(--primary);
|
||||
background: -moz-linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%);
|
||||
background: -webkit-linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%);
|
||||
background: linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%);
|
||||
|
||||
|
||||
}
|
||||
|
||||
.notification-list{
|
||||
ion-item{
|
||||
// margin-top: 5px;
|
||||
// margin-bottom: 5px;
|
||||
|
||||
background-color: transparent;
|
||||
.item-date{
|
||||
width: 55px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
ion-label , [item-end]{
|
||||
|
||||
white-space: normal;
|
||||
font-size: 14px;
|
||||
// :root[dir="ltr"]{
|
||||
// margin-left: 10px;
|
||||
// }
|
||||
// :root[dir="rtl"]{
|
||||
// margin-right: 10px;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.input-wrapper {
|
||||
--flex:none;
|
||||
}
|
||||
ion-input ,ion-datetime{
|
||||
border-bottom: #dedede 1px solid;
|
||||
}
|
||||
.left {
|
||||
.timeline:before{
|
||||
left: 62px;
|
||||
}
|
||||
.notification-list ion-item{
|
||||
padding-left: 3px;
|
||||
}
|
||||
.timeline-thumb{
|
||||
left: 37px;
|
||||
}
|
||||
}
|
||||
.right {
|
||||
.timeline:before{
|
||||
right: 62px;
|
||||
}
|
||||
.notification-list ion-item{
|
||||
padding-right: 3px;
|
||||
}
|
||||
.timeline-thumb{
|
||||
right: 37px;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,187 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Component, OnInit, ViewChild } from "@angular/core";
|
||||
import { CommonService } from "src/app/hmg-common/services/common/common.service";
|
||||
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
|
||||
import { WorkListRequest } from "../models/workListRequest";
|
||||
import * as moment from "moment";
|
||||
import { WorKListResponse } from "../models/workListResponse";
|
||||
import { WorklistService } from "../service/worklist.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-home',
|
||||
templateUrl: './home.component.html',
|
||||
styleUrls: ['./home.component.scss'],
|
||||
selector: "app-home",
|
||||
templateUrl: "./home.component.html",
|
||||
styleUrls: ["./home.component.scss"]
|
||||
})
|
||||
export class HomeComponent implements OnInit {
|
||||
// @ViewChild(Navbar) navBar: Navbar;
|
||||
private WorkListObj: WorkListRequest;
|
||||
WorkListResObj: any; //WorKListResponse;
|
||||
notificationType: string = "1";
|
||||
pageNum: number = 1;
|
||||
rowsNo: number;
|
||||
noOfrows: number;
|
||||
selectedValue: string = "";
|
||||
FromUserName: string = "";
|
||||
ItemKeyDisplayName: string = "";
|
||||
SentDate: string = "";
|
||||
Subject: string = "";
|
||||
inputSearch: string = "";
|
||||
HideDateInput: boolean = false;
|
||||
HideTextInput: boolean = false;
|
||||
InputDate: string;
|
||||
IsReachEnd: boolean = false;
|
||||
public direction = 'ltr';
|
||||
constructor(
|
||||
public common: CommonService,
|
||||
public ts: TranslatorService,
|
||||
public WorklistService: WorklistService
|
||||
) {
|
||||
this.WorkListObj = new WorkListRequest();
|
||||
this.WorkListObj.P_NOTIFICATION_TYPE = "1";
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = "";
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = "";
|
||||
this.WorkListObj.P_PAGE_NUM = 0;
|
||||
this.WorkListObj.P_PAGE_LIMIT = 50; //number
|
||||
}
|
||||
|
||||
constructor() { }
|
||||
ngOnInit() {
|
||||
this.direction = TranslatorService.getCurrentDirection();
|
||||
}
|
||||
ionViewDidLoad() {
|
||||
// this.navBar.backButtonClick = () => {
|
||||
// // you can set a full custom history here if you want
|
||||
// let pages = [
|
||||
// {
|
||||
// page: "HomePage"
|
||||
// }
|
||||
// ];
|
||||
// this.navCtrl.setPages(pages);
|
||||
// };
|
||||
}
|
||||
|
||||
ngOnInit() {}
|
||||
ionViewWillEnter() {
|
||||
this.getAllPushNotificationFun();
|
||||
}
|
||||
getValueSelected(Value) {
|
||||
this.selectedValue = Value;
|
||||
if (this.selectedValue == "1") {
|
||||
this.HideDateInput = false;
|
||||
this.HideTextInput = true;
|
||||
} else if (this.selectedValue == "2") {
|
||||
this.HideDateInput = false;
|
||||
this.HideTextInput = true;
|
||||
} else if (this.selectedValue == "3") {
|
||||
this.HideDateInput = true;
|
||||
this.HideTextInput = false;
|
||||
} else if (this.selectedValue == "4") {
|
||||
this.HideDateInput = false;
|
||||
this.HideTextInput = true;
|
||||
} else if (this.selectedValue == "5") {
|
||||
this.HideDateInput = false;
|
||||
this.HideTextInput = false;
|
||||
}
|
||||
}
|
||||
|
||||
getAllPushNotificationFun() {
|
||||
this.WorkListObj.P_PAGE_NUM = 1;
|
||||
this.IsReachEnd = false;
|
||||
|
||||
if (this.selectedValue == "1") {
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = this.inputSearch;
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = "";
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = "";
|
||||
} else if (this.selectedValue == "2") {
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = "";
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = "";
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = this.inputSearch;
|
||||
} else if (this.selectedValue == "3") {
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = "";
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = "";
|
||||
if (this.InputDate)
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = moment(this.InputDate).format(
|
||||
"DD-MMM-YYYY"
|
||||
);
|
||||
else this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = "";
|
||||
} else if (this.selectedValue == "4") {
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = "";
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = this.inputSearch;
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = "";
|
||||
} else if (this.selectedValue == "5") {
|
||||
this.WorkListObj.P_SEARCH_FROM_USER = "";
|
||||
this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = "";
|
||||
this.WorkListObj.P_SEARCH_SENT_DATE = "";
|
||||
this.WorkListObj.P_SEARCH_SUBJECT = "";
|
||||
}
|
||||
|
||||
this.WorklistService.getWorkList(this.WorkListObj).subscribe(
|
||||
(result: WorKListResponse) => {
|
||||
this.handleWorkListResult(result);
|
||||
}
|
||||
);
|
||||
} //End getNotifications
|
||||
|
||||
private handleWorkListResult(result) {
|
||||
if (this.common.validResponse(result)) {
|
||||
// this.sharedData.setSharedData(result, WorKListResponse.SHARED_DATA);
|
||||
if (this.common.hasData(result.GetWorkList)) {
|
||||
this.WorkListObj.P_PAGE_NUM++;
|
||||
this.WorkListResObj = result.GetWorkList;
|
||||
let lastItemIndex = this.WorkListResObj.length - 1;
|
||||
if (result.GetWorkList[lastItemIndex]) {
|
||||
let lastitem = result.GetWorkList[lastItemIndex];
|
||||
if (lastitem.NO_OF_ROWS == lastitem.ROW_NUM) {
|
||||
this.IsReachEnd = true;
|
||||
} else {
|
||||
this.IsReachEnd = false;
|
||||
}
|
||||
// this.navCtrl.push('SmsAuthenticatePage');
|
||||
}
|
||||
} else {
|
||||
this.WorkListResObj = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
openNotificationDetail(obj) {
|
||||
//this.navCtrl.push("WorkListMainPage", { passNotificationList: obj });
|
||||
}
|
||||
onChangeView(selectedValue: any) {
|
||||
this.WorkListObj.P_NOTIFICATION_TYPE = selectedValue;
|
||||
}
|
||||
|
||||
doInfinite(infiniteScroll) {
|
||||
//this.pageNum= this.pageNum + 1;
|
||||
|
||||
if (!this.IsReachEnd) {
|
||||
this.WorklistService.getWorkList(this.WorkListObj).subscribe(
|
||||
(result: any) => {
|
||||
if (this.common.validResponse(result)) {
|
||||
this.WorkListObj.P_PAGE_NUM++;
|
||||
if (this.common.hasData(result.GetWorkList)) {
|
||||
result.GetWorkList.forEach(element => {
|
||||
if (element.ROW_NUM == element.NO_OF_ROWS) {
|
||||
this.IsReachEnd = true;
|
||||
} else {
|
||||
this.IsReachEnd = false;
|
||||
}
|
||||
this.WorkListResObj.push(element);
|
||||
});
|
||||
} // if list length >0
|
||||
else {
|
||||
this.IsReachEnd = true;
|
||||
}
|
||||
} // if response == 1
|
||||
//this.pageNum++;
|
||||
infiniteScroll.complete();
|
||||
}
|
||||
);
|
||||
} else {
|
||||
if (infiniteScroll) infiniteScroll.complete();
|
||||
}
|
||||
} //end infiniteScroll
|
||||
}
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
export class AbsenceNotificationBodyItems {
|
||||
public TRANSACTION_NUMBER :number;
|
||||
public DESC_FLEX_NAME : string;
|
||||
public ACTION : string;
|
||||
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 { Response } from './response';
|
||||
import { AbsenceNotificationBodyItems } from './AbsenceNotificationBodtItems';
|
||||
|
||||
export class AbsenceNotificatonBodyResponse extends Response {
|
||||
public static SHARED_DATA = 'Abs_Notif_BODY_List';
|
||||
public static NOT_WORKLIST = 'Abs_Notif_WORK_LIST';
|
||||
public AbsenceNotificationBodyItems: AbsenceNotificationBodyItems [];
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListActionHistoryRequest extends Request{
|
||||
//public static SHARED_DATA = '';
|
||||
public P_NOTIFICATION_ID :any;
|
||||
public P_PAGE_NUM:number ;//number
|
||||
public P_PAGE_LIMIT:number;//number
|
||||
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
import { Response } from './response';
|
||||
|
||||
export class WorkListActionHistoryResponse extends Response {
|
||||
//public static SHARED_DATA = '';
|
||||
public NOTIFICATION_ID = 0; //Int
|
||||
public ROW_NUM = 0; //Int
|
||||
public SEQUENCE = 0; //Int
|
||||
public NO_OF_ROWS = 0; //Int
|
||||
public NAME = ''; //String
|
||||
public FROM_ROW_NUM = 0; //Int
|
||||
public ACTION = ''; //String
|
||||
public TO_ROW_NUM = 0; //Int
|
||||
public NOTIFICATION_DATE = ''; //String
|
||||
public NOTE = ''; //String
|
||||
}
|
||||
@ -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 { Response } from './response';
|
||||
import { EITNotificationBodyItems } from './EITNotificationBodyItems';
|
||||
|
||||
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,12 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListActionRequest extends Request{
|
||||
// public static SHARED_DATA = '';
|
||||
public P_NOTIFICATION_ID :any;
|
||||
public P_FORWARD_TO_USER_NAME:string;//String
|
||||
public P_ACTION_MODE:string;//String
|
||||
public P_COMMENTS:string;
|
||||
public RespondAttributeList:any[];
|
||||
public P_APPROVER_INDEX :any;
|
||||
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListBodyRequest extends Request{
|
||||
// public static SHARED_DATA = '';
|
||||
public P_NOTIFICATION_ID :any;
|
||||
public P_TRANSACTION_ID :number;
|
||||
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListButtonRequest extends Request{
|
||||
//public static SHARED_DATA = '';
|
||||
public P_NOTIFICATION_ID :any;
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
import { Response } from './response';
|
||||
|
||||
export class NotificatonButtonResponse extends Response {
|
||||
//public static SHARED_DATA = '';
|
||||
|
||||
public BUTTON_SEQ = -1;
|
||||
public BUTTON_LABEL = '';
|
||||
public BUTTON_ACTION = '';
|
||||
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
import { Response } from './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,7 @@
|
||||
import { Response } from './response';
|
||||
import {RFCEmployeeList } from './RFCEmployee';
|
||||
|
||||
export class WorKListRFCEmployeeResponse extends Response {
|
||||
|
||||
public RFCEmployeeList: RFCEmployeeList [];
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
export class RFCEmployeeList {
|
||||
public SEQ :number;
|
||||
public ROW_NUM : number;
|
||||
public USER_NAME : string;
|
||||
public NO_OF_ROWS :number;
|
||||
public EMPLOYEE_DISPLAY_NAME : string;
|
||||
public FROM_ROW_NUM : number;
|
||||
public ACTION :string;
|
||||
public TO_ROW_NUM : number;
|
||||
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
export class ReplacmentEmployeeList {
|
||||
public ROW_NUM : number;
|
||||
public USER_NAME : string;
|
||||
public NO_OF_ROWS :number;
|
||||
public EMPLOYEE_DISPLAY_NAME : string;
|
||||
public FROM_ROW_NUM : number;
|
||||
public EMAIL_ADDRESS :string;
|
||||
public TO_ROW_NUM : number;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListReplacmentEmployeeRequest extends Request{
|
||||
public P_PAGE_NUM : any;
|
||||
public P_PAGE_LIMIT : Number;
|
||||
public P_SEARCH_USER_NAME:String;
|
||||
public P_SEARCH_EMPLOYEE_DISPLAY_NAME:String;
|
||||
public P_SEARCH_EMAIL_ADDRESS:String;
|
||||
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
import { Response } from './response';
|
||||
import {ReplacmentEmployeeList } from './ReplacmentEmployeeList';
|
||||
|
||||
export class WorKListReplacmentEmployeeResponse extends Response {
|
||||
public static SHARED_DATA = 'work-list';
|
||||
|
||||
public ReplacmentEmployeeList: ReplacmentEmployeeList [];
|
||||
}
|
||||
@ -0,0 +1,72 @@
|
||||
export class WorklistsubmitterInfoItems {
|
||||
|
||||
public BUSINESS_GROUP_ID:number;
|
||||
public ACTUAL_TERMINATION_DATE:string;
|
||||
public BUSINESS_GROUP_NAME :string;
|
||||
public EMPLOYEE_EMAIL_ADDRESS :string;
|
||||
public PERSON_ID:number;
|
||||
public JOB_ID:number;
|
||||
public PERSON_TYPE_ID:number;
|
||||
public POSITION_ID:number;
|
||||
public ASSIGNMENT_ID:number;
|
||||
public ORGANIZATION_ID:number;
|
||||
public ASSIGNMENT_START_DATE:string;
|
||||
public LOCATION_ID:number;
|
||||
public ASSIGNMENT_END_DATE:string;
|
||||
public PAYROLL_ID:number;
|
||||
public PRIMARY_FLAG:string;
|
||||
public GRADE_ID:number;
|
||||
public CURRENT_EMPLOYEE_FLAG:string;
|
||||
public JOB_NAME:string;
|
||||
public ASSIGNMENT_STATUS_TYPE_ID:number;
|
||||
public POSITION_NAME:string;
|
||||
public NORMAL_HOURS:number;
|
||||
public ORGANIZATION_NAME:string;
|
||||
public FREQUENCY:string;
|
||||
public LOCATION_NAME:string;
|
||||
public FREQUENCY_MEANING:string;
|
||||
public PAYROLL_NAME:string;
|
||||
public EMPLOYEE_NUMBER:string;
|
||||
public PAYROLL_CODE:string;
|
||||
public EMPLOYEE_NAME:string;
|
||||
public GRADE_NAME:string;
|
||||
public EMPLOYEE_DISPLAY_NAME:string;
|
||||
public EMPLOYEE_MOBILE_NUMBER:string;
|
||||
public NATIONAL_IDENTIFIER:string;
|
||||
public EMPLOYEE_WORK_NUMBER:string;
|
||||
public SYSTEM_PERSON_TYPE:string;
|
||||
public SUPERVISOR_ID:number;
|
||||
public PERSON_TYPE:string;
|
||||
public SUPERVISOR_ASSIGNMENT_ID:string;
|
||||
public MANUAL_TIMECARD_FLAG:string;
|
||||
public SUPERVISOR_NUMBER:string;
|
||||
public MANUAL_TIMECARD_MEANING:string;
|
||||
public SUPERVISOR_NAME:string;
|
||||
public SWIPES_EXEMPTED_FLAG:string;
|
||||
public SUPERVISOR_DISPLAY_NAME:string;
|
||||
public SWIPES_EXEMPTED_MEANING:string;
|
||||
public SUPERVISOR_EMAIL_ADDRESS:string;
|
||||
public ASSIGNMENT_NUMBER:string;
|
||||
public SUPERVISOR_MOBILE_NUMBER:string;
|
||||
public UNIT_NUMBER:string;
|
||||
public SUPERVISOR_WORK_NUMBER:string;
|
||||
public USER_STATUS:string;
|
||||
public EMPLOYEE_IMAGE:string;//base64;
|
||||
public EMPLOYMENT_CATEGORY:string;
|
||||
public TK_PERSON_ID:number;
|
||||
public ASSIGNMENT_TYPE:string;
|
||||
public TK_EMPLOYEE_NUMBER:string;
|
||||
public EMPLOYMENT_CATEGORY_MEANING:string;
|
||||
public TK_EMPLOYEE_NAME:string;
|
||||
public PER_INFORMATION_CATEGORY:string;
|
||||
public TK_EMPLOYEE_DISPLAY_NAME:string;
|
||||
public NATIONALITY_CODE:string;
|
||||
public TK_EMAIL_ADDRESS:string;
|
||||
public NATIONALITY_MEANING:string;
|
||||
public NUM_OF_SUBORDINATES :number;
|
||||
public HIRE_DATE:string;
|
||||
public FROM_ROW_NUM:number;
|
||||
public TO_ROW_NUM:number;
|
||||
public NO_OF_ROWS:number;
|
||||
public ROW_NUM:number;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListSubmitterInfoRequest extends Request{
|
||||
public P_NOTIFICATION_TYPE: string;//string
|
||||
public P_SELECTED_EMPLOYEE_NUMBER: string;//String
|
||||
public P_SELECTED_RESP_ID: Number;//NUMBER
|
||||
public P_PAGE_NUM : Number;
|
||||
public P_PAGE_LIMIT : Number;
|
||||
public P_SEARCH_USER_NAME:String;
|
||||
public P_SEARCH_EMPLOYEE_DISPLAY_NAME:String;
|
||||
public P_SEARCH_EMAIL_ADDRESS:String;
|
||||
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
import { Response } from './response';
|
||||
import { WorklistsubmitterInfoItems } from './WorklistsubmitterInfoItems';
|
||||
|
||||
export class WorklistsubmitterInfoResponse extends Response {
|
||||
//public static SHARED_DATA = '';
|
||||
|
||||
|
||||
public WorklistsubmitterInfoItems: WorklistsubmitterInfoItems [];
|
||||
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
export class Request {
|
||||
public P_USER_NAME: string;
|
||||
public LanguageID: number;
|
||||
//public IPAdress: string;
|
||||
public P_SESSION_ID: number;
|
||||
public VersionID: number;
|
||||
public Channel: number;
|
||||
public P_PASSWORD: string;
|
||||
public P_MOBILE_NUMBER: string;
|
||||
public P_EMAIL_ADDRESS: string;
|
||||
public TokenID:string;
|
||||
public P_NOTIFICATION_ID:number;
|
||||
public MobileNumber: string;
|
||||
public UserName:string;
|
||||
public LogInTokenID:string;
|
||||
public MobileType:string;
|
||||
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
export class Response {
|
||||
public LanguageID?: number;
|
||||
public ErrorCode:string;
|
||||
public ErrorEndUserMessage:string;
|
||||
public ErrorMessage:string;
|
||||
public ErrorType: number;
|
||||
public MessageStatus: number;
|
||||
public SuccessMsg:string;
|
||||
public SuccessMsgN:string;
|
||||
public IsAuthenticated:boolean;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
import { Request } from './request';
|
||||
|
||||
export class WorkListRequest extends Request{
|
||||
public static SHARED_DATA = 'login-request';
|
||||
// Channel: Channel, //channel
|
||||
// LanguageID: LanguageID,//langlist
|
||||
// P_USER_NAME:userName,//string
|
||||
// P_SESSION_ID:sessionID,//number
|
||||
public P_NOTIFICATION_TYPE: string;//string
|
||||
public P_SEARCH_FROM_USER:string;//string
|
||||
public P_SEARCH_SUBJECT:string;//string
|
||||
public P_SEARCH_SENT_DATE:string;//string
|
||||
public P_SEARCH_ITEM_TYPE_DSP_NAME:string;//string
|
||||
public P_PAGE_NUM:number;//number
|
||||
public P_PAGE_LIMIT:number;//number
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
export class WorkListResItems {
|
||||
public ITEM_KEY: string;
|
||||
public PRIORITY_F : string;
|
||||
public NOTIFICATION_ID: number;
|
||||
public RECIPIENT_ROLE : string;
|
||||
public FROM_USER : string;
|
||||
public END_DATE: string;
|
||||
public TO_USER: string;
|
||||
public ITEM_TYPE_DISPLAY_NAME: string;
|
||||
public SUBJECT: string;
|
||||
public MORE_INFO_ROLE: string;
|
||||
public LANGUAGE: string;
|
||||
public FROM_ROLE: string;
|
||||
public BEGIN_DATE: string;
|
||||
public ITEM_TYPE: string;
|
||||
public DUE_DATE: string;
|
||||
public NOTIFICATION_NAME: string;
|
||||
public STATUS: string;
|
||||
public MAIL_STATUS: string;
|
||||
public PRIORITY: number;
|
||||
public ORIGINAL_RECIPIENT: string;
|
||||
public SELECTED_EMPLOYEE_NUMBER: string;
|
||||
public ROW_NUM: number;
|
||||
public NO_OF_ROWS: number;
|
||||
public FROM_ROW_NUM : number;
|
||||
public TO_ROW_NUM : number;
|
||||
public REQUEST_TYPE: string;
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
import { Response } from './response';
|
||||
import { WorkListResItems } from './workListResItems';
|
||||
|
||||
export class WorKListResponse extends Response {
|
||||
public static SHARED_DATA = 'work-list';
|
||||
|
||||
public WorkListItems: WorkListResItems [];
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { NotificationService } from './notification.service';
|
||||
|
||||
describe('NotificationService', () => {
|
||||
beforeEach(() => TestBed.configureTestingModule({}));
|
||||
|
||||
it('should be created', () => {
|
||||
const service: NotificationService = TestBed.get(NotificationService);
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,25 @@
|
||||
import {Injectable} from '@angular/core';
|
||||
import {Http, Response, Headers} from "@angular/http";
|
||||
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
|
||||
import { ConnectorService } from "src/app/hmg-common/services/connector/connector.service";
|
||||
import {Observable} from 'rxjs';
|
||||
import {WorkListRequest} from '../models/workListRequest';
|
||||
import {WorKListResponse} from '../models/workListResponse';
|
||||
|
||||
|
||||
@Injectable()
|
||||
export class WorklistService {
|
||||
public static getWorkList = 'Services/ERP.svc/REST/GET_WORKLIST';
|
||||
constructor(
|
||||
public api: ConnectorService,
|
||||
public authService: AuthenticationService,
|
||||
|
||||
) { }
|
||||
|
||||
public getWorkList(WorkListReq: any, onError?: any, errorLabel?: string): Observable<any> {
|
||||
const request = WorkListReq;
|
||||
this.authService.authenticateRequest(request);
|
||||
return this.api.post(WorklistService.getWorkList, request, onError, errorLabel);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
/**
|
||||
* Generated class for the DateStringPipe pipe.
|
||||
*
|
||||
* See https://angular.io/api/core/Pipe for more info on Angular Pipes.
|
||||
*/
|
||||
@Pipe({
|
||||
name: 'dateString',
|
||||
})
|
||||
export class DateStringPipe implements PipeTransform {
|
||||
/**
|
||||
* Takes a value and makes it lowercase.
|
||||
*/
|
||||
locale = {
|
||||
en: {
|
||||
// month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
||||
month_names_short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
||||
}
|
||||
};
|
||||
transform(value: string) {
|
||||
let x = new Date(Date.parse(value));
|
||||
//return value.toLowerCase();
|
||||
let month = this.getMonthNameShort('en',x.getMonth())
|
||||
return ""+ x.getDate()+" "+ month +" "+x.getFullYear();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
getMonthNameShort(lang,month) {
|
||||
lang = lang && (lang in this.locale) ? lang : 'en';
|
||||
return this.locale[lang].month_names_short[month];
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
/**
|
||||
* Generated class for the FilterLangPipe pipe.
|
||||
*
|
||||
* See https://angular.io/api/core/Pipe for more info on Angular Pipes.
|
||||
*/
|
||||
@Pipe({
|
||||
name: 'filterLang',
|
||||
})
|
||||
export class FilterLangPipe implements PipeTransform {
|
||||
/**
|
||||
* return the correct translated values.
|
||||
*/
|
||||
transform(value: string, valuen:string) {
|
||||
let desc =value;
|
||||
if(valuen){
|
||||
let lang= localStorage.getItem('language');
|
||||
lang = lang!=null ? lang:'2';
|
||||
if(lang=='2'){
|
||||
desc=value;
|
||||
}else{
|
||||
desc=valuen;
|
||||
}
|
||||
}
|
||||
return desc
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { DateStringPipe } from './date-string/date-string';
|
||||
import { FilterLangPipe } from './filter-lang/filter-lang';
|
||||
@NgModule({
|
||||
declarations: [DateStringPipe,
|
||||
FilterLangPipe],
|
||||
imports: [],
|
||||
exports: [DateStringPipe,
|
||||
FilterLangPipe]
|
||||
})
|
||||
export class PipesModule {}
|
||||
Loading…
Reference in New Issue