absence update

production
Sultan Khan 7 years ago
parent 84643553bf
commit ef0c8a7b8a

@ -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">
<ion-back-button color="light" class="btnBack" defaultHref=""></ion-back-button>
</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>
<ion-grid class=" gridAH" *ngIf="approversList?.length > 0">
<ion-row class="rowAH titleH">
<ion-col col-1>
<label class="Header" for="">{{ts.trPK('confirmAddEit','no')}}</label>
</ion-col>
<ion-col col-3>
<label class="Header" for="">{{ts.trPK('confirmAddEit','approver')}}</label>
</ion-col>
<ion-col col-3>
<label class="Header" for="">{{ts.trPK('confirmAddEit','approverCategory')}} </label>
</ion-col>
<ion-col col-3>
<label class="Header" for="">{{ts.trPK('confirmAddEit','approverType')}}</label>
</ion-col>
<ion-col col-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 col-1>
<label for="">{{item.APPROVER_ORDER_NUMBER}}</label>
</ion-col>
<ion-col col-3>
<label for="">{{item.APPROVER}}</label>
</ion-col>
<ion-col col-3>
<label for="">{{item.APPROVER_CATEGORY}}</label>
</ion-col>
<ion-col col-3>
<label for="">{{item.APPROVER_TYPE}}</label>
</ion-col>
<ion-col col-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('confirmAddEit','attachList')}}</div>
<button ion-button (click)="addAttachment(true,-1)">
<img class="imgSize" src="../assets/imgs/attachment.png"></button>
</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]="!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,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,19 @@
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";
@Component({
selector: 'app-absence-confirm',
templateUrl: './absence-confirm.component.html',
styleUrls: ['./absence-confirm.component.scss'],
})
export class AbsenceConfirmComponent implements OnInit {
constructor(
public common: CommonService,
public ts: TranslatorService,
) { }
ngOnInit() {}
}

@ -9,6 +9,10 @@ import { AbsencePage } from './absence.page';
import { DatePicker } from '@ionic-native/date-picker/ngx';
import { HomeComponent } from './home/home.component';
import { SubmitAbsenceComponent } from './submit-absence/submit-absence.component';
import { replacmentListService } from './service/replacement-list.service';
import { HmgCommonModule } from './../hmg-common/hmg-common.module';
import { ReplacementListComponent } from '../vacation-rule/replacement-list/replacement-list.component';
import { AbsenceConfirmComponent } from './absence-confirm/absence-confirm.component';
const routes: Routes = [
{
path: '',
@ -21,6 +25,14 @@ const routes: Routes = [
{
path: 'submit-absence',
component: SubmitAbsenceComponent
},
{
path: 'replacement-list',
component: ReplacementListComponent
},
{
path:'confirm-absence',
component:AbsenceConfirmComponent
}
]
}
@ -31,9 +43,10 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
HmgCommonModule,
RouterModule.forChild(routes)
],
providers:[AbsenceListService, SubmitAbsenceService, DatePicker],
declarations: [AbsencePage, HomeComponent, SubmitAbsenceComponent]
providers:[AbsenceListService, SubmitAbsenceService, replacmentListService, DatePicker],
declarations: [AbsencePage, HomeComponent, SubmitAbsenceComponent,AbsenceConfirmComponent]
})
export class AbsencePageModule {}

@ -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,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);
}
}

@ -22,6 +22,9 @@ import { DateTimeInput } from "../../uI-elements/date-time.input";
import { DatePicker } from "@ionic-native/date-picker/ngx";
import { Request } from "../models/request";
import * as moment from "moment";
import {ReplacementListComponent} from "../../vacation-rule/replacement-list/replacement-list.component";
import {ReplacmentResponse} from "../models/replacment-response";
import { AbsenceResponse } from '../models/absence.response';
@Component({
selector: "app-submit-absence",
templateUrl: "./submit-absence.component.html",
@ -39,6 +42,7 @@ export class SubmitAbsenceComponent implements OnInit {
private hiddenInput: HiddenInput;
private eitVALSettoCall: any = [];
private action: string = "";
private modalFlag: any = false;
menuType: any;
employeeSel: any;
absenceType: any;
@ -77,7 +81,8 @@ export class SubmitAbsenceComponent implements OnInit {
public common: CommonService,
public datePicker: DatePicker,
public ts: TranslatorService,
private elementRef: ElementRef
private elementRef: ElementRef,
) {
////*new add*/////
/**********resubmit************ */
@ -209,23 +214,37 @@ export class SubmitAbsenceComponent implements OnInit {
this.totalDays = result.CalculateAbsenceDuration.P_ABSENCE_DAYS;
}
}
async openSearch(){
const modal = await this.modalCtrl.create({
component: ReplacementListComponent,
keyboardClose: true,
animated: false
});
let dismissed = modal.onDidDismiss();
dismissed.then(() => {
this.modalFlag = false;
});
return await modal.present();
}
SearchReplacment() {
let pageClosed = retData => {
this.replacmentEmployeeInfo = retData;
// this.replacmentEmployeeInfo=this.sharedData.getSharedData(ReplacmentResponse.SHARED_DATA,true);
// console.log(this.replacmentEmployeeInfo)
if (this.replacmentEmployeeInfo) {
this.employeeName = this.replacmentEmployeeInfo.EMPLOYEE_DISPLAY_NAME;
this.employeeID = this.replacmentEmployeeInfo.USER_NAME;
this.employeeSel = this.employeeName + "," + this.employeeID;
}
//Do something
};
// this.navCtrl.push(ServiceNewPage, {pageClosed: pageClosed});
// this.navCtrl.push("ReplacmentListModelPage", {
// pageClosed: pageClosed
// });
async SearchReplacment() {
const modal = await this.modalCtrl.create({
component: ReplacementListComponent
});
modal.onDidDismiss()
.then((data) => {
const user = data.data.empData;
console.log(data)
console.log(user);
if (data) {
this.employeeName = user.EMPLOYEE_DISPLAY_NAME;
this.employeeID = user.USER_NAME;
this.employeeSel = this.employeeName + "," + this.employeeID;
}
});
return await modal.present();
}
handleReplacment(result) {
if (this.common.validResponse(result)) {
@ -454,6 +473,7 @@ export class SubmitAbsenceComponent implements OnInit {
this.fillAbsStructure();
}
}
bindHtmlElemEvents(id, obj) {
return false;
const elem = document.getElementById(id);
@ -1000,9 +1020,17 @@ export class SubmitAbsenceComponent implements OnInit {
let elem = document.getElementById(
this.absenceDffresponse[i].APPLICATION_COLUMN_NAME
) as HTMLInputElement;
let elemVal = (document.getElementById(
let elemVal="";
if (elem.classList.contains('onic-date')) {
elemVal = (document.getElementById(
this.absenceDffresponse[i].APPLICATION_COLUMN_NAME
) as HTMLInputElement).value;
elemVal = moment(elemVal).format("YYYY/MM/DD hh:mm:ss");
}else{
elemVal = (document.getElementById(
this.absenceDffresponse[i].APPLICATION_COLUMN_NAME
) as HTMLInputElement).value;
}
textValue = elemVal;
if (
@ -1395,10 +1423,12 @@ export class SubmitAbsenceComponent implements OnInit {
private handleSubmitAbsence(result) {
if (this.common.validResponse(result)) {
if (this.getPassdirfromNotifiPage) {
// this.common.sharedService.setSharedData(result.ResubmitAbsenceTransactionList.P_TRANSACTION_ID, AbsenceResponse.SHARED_DATA);
// this.navCtrl.push("SubmitAbsenceConfirmPage", { isResubmit: true });
this.common.sharedService.setSharedData(result.ResubmitAbsenceTransactionList.P_TRANSACTION_ID, AbsenceResponse.SHARED_DATA);
this.common.openConfirmAbsece();
// this.navCtrl.push("SubmitAbsenceConfirmPage", { isResubmit: true });
} else {
// this.sharedData.setSharedData(result.SumbitAbsenceTransactionList.P_TRANSACTION_ID, AbsenceResponse.SHARED_DATA);
this.common.sharedService.setSharedData(result.SumbitAbsenceTransactionList.P_TRANSACTION_ID, AbsenceResponse.SHARED_DATA);
this.common.openConfirmAbsece();
// this.navCtrl.push("SubmitAbsenceConfirmPage", { isResubmit: false });
}
}

@ -11,6 +11,7 @@ import { AppRoutingModule } from './app-routing.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ZBar } from '@ionic-native/zbar/ngx';
import { Geolocation } from '@ionic-native/geolocation/ngx';
@NgModule({
declarations: [AppComponent],
entryComponents: [],

@ -109,4 +109,4 @@ img.centerDiv {
}
}
.centerDiv .button{width:200px;}

@ -90,6 +90,8 @@ import { RateService } from './services/rate/rate.service';
import { PaymentComponent } from './ui/payment/payment.component';
import { PaymentService } from './ui/payment/service/payment.service';
import { MenuService } from './services/menu/menuservice.service';
import { ReplacementListComponent } from '../vacation-rule/replacement-list/replacement-list.component';
@NgModule({
imports: [
CommonModule,
@ -149,7 +151,8 @@ import { MenuService } from './services/menu/menuservice.service';
EmptyDataComponent,
DetailButtonComponent,
HeaderButtonComponent,
PaymentComponent
PaymentComponent,
ReplacementListComponent
],
exports: [
@ -197,8 +200,8 @@ import { MenuService } from './services/menu/menuservice.service';
EmptyDataComponent,
DetailButtonComponent,
HeaderButtonComponent,
PaymentComponent
PaymentComponent,
ReplacementListComponent
],
providers: [
ConnectorService,

@ -958,7 +958,9 @@ export class CommonService {
public openSubmitAbsencePage() {
this.nav.navigateForward(["/absence/submit-absence"]);
}
public openConfirmAbsece(){
this.nav.navigateForward(["/absence/confirm-absence"]);
}
public reload(url: string, from: string) {
console.log("force reload called from:" + from);
// window.location.reload();

@ -19,6 +19,9 @@ export class DateInput extends UiElement {
let date = new Date();
this.value = date.toISOString().slice(0, 10);
}
dateChange($event){
console.log($event)
}
public getTemplate() {
let requiredClass: string = "";
if (this.disabled == "N") { this.disabled = "disabled" } else { this.disabled = "" }
@ -41,7 +44,7 @@ export class DateInput extends UiElement {
"<ion-item>" +
" <ion-label class='daynamicForm-Label " + requiredClass + "' id='title' >" + this.label + "</ion-label>" +
// " <div class='daynamicForm-DateTime " + disaledClass + "' id='" + this.elementId + "' data-dtvalue='" + this.value + "' " + this.disabled + ">" + this.value + "</div>" +
"<ion-datetime displayFormat='DD/MM/YYYY' value='" + this.value + "' id='" + this.elementId + "' data-dtvalue='" + this.value + "' " + this.disabled + "></ion-datetime>" +
"<ion-datetime class='onic-date' (ionChange)='setDate()' displayFormat='MMM/DD/YYYY' value='" + this.value + "' id='" + this.elementId + "' data-dtvalue='" + this.value + "' " + this.disabled + " ></ion-datetime>" +
// " <input class='daynamicForm-DateTime' type='text' id='" + this.elementId + "' value='" + this.value + "' "+this.disabled+" (click)='showDateTimePicker()'/>"+
// " <input class='daynamicForm-DateTime' type='date' id='" + this.elementId + "' value='" + dateValue+ "' "+this.disabled+" />"+
// " <input class='daynamicForm-DateTime' type='time' id='" + this.elementId + "Time' value='" + timeValue + "' "+this.disabled+" />"+

@ -26,7 +26,7 @@ export class SelectInput extends UiElement {
"<div class='custom-text-area-element' style='" + this.hidden + "'>" +
"<label class='daynamicForm-Label " + requiredClass + "' id='title' >" + this.label + "</label>" +
"<select class='daynamicForm-Select' id='" + this.elementId + "' " + this.disabled + ">" +
"<option value='" + this.value + "' >" + this.value + "</option>" +
// "<option value='" + this.value + "' >" + this.value + "</option>" +
"</select>" +
"</div> ";

@ -67,8 +67,7 @@ const routes: Routes = [
HomeComponent,
VacationTypeComponent,
NotificationTypeComponent,
CreateVacationRuleComponent,
ReplacementListComponent
CreateVacationRuleComponent
]
})
export class VacationRulePageModule { }

@ -1178,5 +1178,23 @@
"en":"Please select absence type",
"ar":"اختر نوع الإجازة"
}
},
"submitAbsenceConfirm": {
"submitAbsenceConfirm":{
"en": "Submit Absence Confirm",
"ar": "إرسال تأكيد الإجازة"
},
"start":{
"en":"Submit",
"ar":"تنفيذ"
},
"cancel":{
"en":"Cancel",
"ar":"إلغاء"
},
"addAttch":{
"en":"Add Attachment",
"ar":"أضف مرفق"
}
}
}

@ -746,3 +746,4 @@ color: var(--dark);
width:100%;
margin-left: 0.4cm;
}
.centerDiv .button{width:200px;}
Loading…
Cancel
Save