general enhancments

production
Mohamed Mekawy 6 years ago
commit c9e7e5a851

@ -6893,9 +6893,9 @@
"dev": true
},
"handlebars": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz",
"integrity": "sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw==",
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz",
"integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==",
"dev": true,
"requires": {
"neo-async": "^2.6.0",

@ -89,7 +89,7 @@
"primeicons": "^1.0.0",
"primeng": "^7.1.3",
"run": "1.4.0",
"rxjs": "~6.3.3",
"rxjs": "^6.3.3",
"xlsx": "^0.14.3",
"zone.js": "~0.8.29"
},
@ -152,7 +152,8 @@
},
"cordova-plugin-file": {},
"cordova-plugin-filepath": {},
"com-badrit-base64": {}
"com-badrit-base64": {},
"call-number": {}
},
"platforms": [
"browser",
@ -160,4 +161,4 @@
"android"
]
}
}
}

@ -1,31 +1,32 @@
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', redirectTo: 'authentication/login', pathMatch: 'full' },
{
path: 'authentication', loadChildren: './authentication/authentication.module#AuthenticationPageModule'},
{ path: 'home', loadChildren: './home/home.module#HomePageModule' },
{ path: 'profile', loadChildren: './profile/profile.module#ProfilePageModule' },
{ path: 'vacation-rule', loadChildren: './vacation-rule/vacation-rule.module#VacationRulePageModule' },
{ path: 'accrual-balances', loadChildren: './accrual-balances/accrual-balances.module#AccrualBalancesPageModule' },
{ path: 'my-team', loadChildren: './my-team/my-team.module#MyTeamPageModule' },
{ path: 'attendance', loadChildren: './attendance/attendance.module#AttendancePageModule' },
{ path: 'eit', loadChildren: './eit/eit.module#EITPageModule' },
{ path: 'absence', loadChildren: './absence/absence.module#AbsencePageModule' },
{ path: 'notification', loadChildren: './notification/notification.module#NotificationPageModule' },
{ path: 'my-specialist', loadChildren: './my-specialist/my-specialist.module#MySpecialistPageModule' },
{ path: 'my-subordinate', loadChildren: './my-subordinate/my-subordinate.module#MySubordinatePageModule' }, { path: 'time-card', loadChildren: './time-card/time-card.module#TimeCardPageModule' }
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
];
@NgModule({
imports: [
/*RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules}),*/
RouterModule.forRoot(routes),
],
exports: [RouterModule]
})
export class AppRoutingModule { }
const routes: Routes = [
{ path: '', redirectTo: 'authentication/login', pathMatch: 'full' },
{
path: 'authentication', loadChildren: './authentication/authentication.module#AuthenticationPageModule'},
{ path: 'home', loadChildren: './home/home.module#HomePageModule' },
{ path: 'profile', loadChildren: './profile/profile.module#ProfilePageModule' },
{ path: 'vacation-rule', loadChildren: './vacation-rule/vacation-rule.module#VacationRulePageModule' },
{ path: 'accrual-balances', loadChildren: './accrual-balances/accrual-balances.module#AccrualBalancesPageModule' },
{ path: 'my-team', loadChildren: './my-team/my-team.module#MyTeamPageModule' },
{ path: 'attendance', loadChildren: './attendance/attendance.module#AttendancePageModule' },
{ path: 'eit', loadChildren: './eit/eit.module#EITPageModule' },
{ path: 'absence', loadChildren: './absence/absence.module#AbsencePageModule' },
{ path: 'notification', loadChildren: './notification/notification.module#NotificationPageModule' },
{ path: 'my-specialist', loadChildren: './my-specialist/my-specialist.module#MySpecialistPageModule' },
{ path: 'my-subordinate', loadChildren: './my-subordinate/my-subordinate.module#MySubordinatePageModule' },
{ path: 'time-card', loadChildren: './time-card/time-card.module#TimeCardPageModule' },
{ path: 'payslip', loadChildren: './payslip/payslip.module#PayslipPageModule' }
];
@NgModule({
imports: [
/*RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules}),*/
RouterModule.forRoot(routes),
],
exports: [RouterModule]
})
export class AppRoutingModule { }

@ -14,15 +14,13 @@
<ion-item>
<img class="item-icon" src="assets/imgs/username.png" item-start />
<ion-label>{{ts.trPK('login','username')}}</ion-label>
<ion-input required type="text" [(ngModel)]="username">
<ion-input required type="text" [(ngModel)]="username" placeholder="{{ts.trPK('login','username')}}">
</ion-input>
</ion-item>
<ion-item>
<img class="item-icon" src="assets/imgs/password.png" item-start />
<ion-label>{{ts.trPK('login','password')}}</ion-label>
<ion-input required type="password" [(ngModel)]="password">
<ion-input required type="password" [(ngModel)]="password" placeholder="{{ts.trPK('login','password')}}">
</ion-input>
</ion-item>

@ -694,13 +694,14 @@ export class AddEitComponent implements OnInit {
if (isSelectElement) {
let elem = this.getSelectElementByName(segmentName);
elem = document.getElementById(elem),
alert(elem.length);
// var firstoption = document.createElement("option");
// firstoption.text = text;
// firstoption.value = val;
// elem.add(firstoption);
elem.value = val;
elem.text=text;
alert(elem.length);
//elem.text=text;
}else{
console.log("else - " + elem.value);
elem.value = val;

@ -52,6 +52,9 @@ export class HomeComponent implements OnInit {
} else if (menuEntry.REQUEST_TYPE == 'EIT') {
this.cs.openEitListPage();
}
if (menuEntry.REQUEST_TYPE =='PAYSLIP'){
this.cs.openPayslipPage();
}
}
}

@ -1007,6 +1007,16 @@ export class CommonService {
public openChangeImagePage() {
this.nav.navigateForward(["/profile/profileImg"]);
}
public openPayslipPage() {
this.nav.navigateForward(["/payslip/home"]);
}
public openEarningsPage() {
this.nav.navigateForward(["/payslip/Earnings"]);
}
public openDeductionsPage() {
this.nav.navigateForward(["/payslip/Deductions"]);
}
public reload(url: string, from: string) {
console.log("force reload called from:" + from);
// window.location.reload();

@ -23,8 +23,8 @@ export class ConnectorService {
public static timeOut = 30 * 1000;
// public static host = 'http://10.50.100.113:6060/'; // development service
//public static host = "https://uat.hmgwebservices.com/";
public static host = 'https://hmgwebservices.com/';
public static host = "https://uat.hmgwebservices.com/";
//public static host = 'https://hmgwebservices.com/';
//public static host = 'http://10.200.204.11:4444/'; // production service
// public static host = 'http://10.50.100.198:6060/';
// public static host = 'http://10.50.100.113:6060/'; // development service

@ -6,6 +6,7 @@ import { FilePath } from "@ionic-native/file-path/ngx";
import { File } from "@ionic-native/file/ngx";
import { TranslatorService } from '../../services/translator/translator.service';
import { Base64 } from "@ionic-native/base64/ngx";
import { DevicePermissionsService } from '../../services/device-permissions/device-permissions.service';
// import { Chooser } from '@ionic-native/chooser';
@Component({
@ -24,10 +25,12 @@ export class FileUploderProfileComponent implements OnInit {
public image: string;
public attachmentImg = 'assets/icon/attachment.png';
public deleteImg = 'assets/icon/delete.png';
public defultProfile = '../../../../assets/imgs/profile.png';
public selectedImage:any;
public nativePath: any;
public errorMsg:any;
public allowdType: any = ["jpg", "jpeg", "png"];
camera: boolean
constructor(
public cameraController:Camera,
@ -39,6 +42,8 @@ export class FileUploderProfileComponent implements OnInit {
private file: File,
public ts: TranslatorService,
public base64:Base64,
private permissions: DevicePermissionsService
// private chooser: Chooser
@ -59,17 +64,30 @@ export class FileUploderProfileComponent implements OnInit {
//selected attach
//need convert
//insert or display
private permissionsToOpenCamera() {
this.permissions.requestCameraAutherization().then(granted => {
this.camera = granted as boolean;
if (this.camera) {
this.openFile();
}
}
);
}
async openFile(){
const actionSheet = await this.actionSheetCtrl.create({
header: 'Change Profile Photo',
buttons: [{
text: 'Delete Current Image',
role: 'destructive',
icon: 'trash',
handler: () => {
console.log('Delete clicked');
}
}, {
buttons: [{
// text: 'Delete Current Image',
// role: 'destructive',
// icon: 'trash',
// handler: () => {
// console.log('Delete clicked');
// this.deleteCurrent();
// }
// },{
text: 'Take Photo',
icon: 'camera',
handler: () => {
@ -123,6 +141,8 @@ export class FileUploderProfileComponent implements OnInit {
public deleteCurrent(){
// send empty image
//this.onimgLoad.emit("");
console.log("deleteCurrent");
this.encodeFiles(this.defultProfile);
}
@ -143,21 +163,21 @@ export class FileUploderProfileComponent implements OnInit {
}
encodeFiles(entry) {
this.base64.encodeFile(this.nativePath).then(
alert("encodeFiles")
this.base64.encodeFile(entry).then(
(base64File: string) => {
const type = this.nativePath.substr(
this.nativePath.lastIndexOf(".") + 1
);
// const type = this.nativePath.substr(
// this.nativePath.lastIndexOf(".") + 1
// );
console.log("base64File 1" + base64File);
alert("base64File 1" + base64File);
if (this.allowdType.includes(type.toLowerCase())) {
} else {
this.attachmentData = null;
this.errorMsg = this.ts.trPK("general", "not-supported");
}
// if (this.allowdType.includes(type.toLowerCase())) {
// } else {
// this.attachmentData = null;
// this.errorMsg = this.ts.trPK("general", "not-supported");
// }
},
err => {
console.log(err);

@ -72,6 +72,13 @@
<p>{{ts.trPK('changePassword','changePassword')}}</p>
</button>
</ion-col>
<!-- <ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="openPayslip()">
<ion-img class="serviceItemImg" src="../assets/imgs/changepass.png"></ion-img>
<p>{{ts.trPK('payslip','title')}}</p>
</button>
</ion-col> -->
</ion-row>
<!-- <button class="menu-item" ion-item menuClose ion-item *ngFor="let item of menuList; let i=index" (click)="getMeunDetails(i)" >

@ -217,6 +217,7 @@ export class HomePage implements OnInit {
private handleMenuResult(result) {
if (this.common.validResponse(result)) {
if (this.common.hasData(result.List_Menu)) {
console.log("list menu");
this.menuList = result.List_Menu;
}
}
@ -234,6 +235,7 @@ export class HomePage implements OnInit {
let selMenu: MenuResponse = new MenuResponse();
selMenu.List_Menu = item;
selMenu.userid = this.userData.EMPLOYEE_NUMBER;
console.log("menu: "+selMenu.List_Menu);
this.common.sharedService.setSharedData(selMenu, MenuResponse.SHARED_DATA);
if (item.MENU_TYPE == "M") {
this.common.openMyTeamPage();
@ -268,6 +270,7 @@ export class HomePage implements OnInit {
request.P_MENU_TYPE = item.MENU_TYPE;
request.NationalityCode = nationality;
//set emp and resp id
console.log("set data");
this.common.sharedService.setSharedData(
selEmpNo,
MenuResponse.SHARED_SEL_EMP
@ -302,6 +305,11 @@ export class HomePage implements OnInit {
private Change_password() {
this.common.openChangePassword();
}
private openPayslip() {
this.common.openPayslipPage();
}
private attendance() {
// this.zbarOptions = {
// flash: "off",

@ -0,0 +1,33 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons>
<ion-title color="light" >{{ts.trPK('payslip','deductions')}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-card *ngIf="GetDeductionsList !='' " >
<ion-card-header class="boxHdr">
<div class="hrTitle"> {{ts.trPK('payslip','deductions')}} </div>
</ion-card-header>
<ion-card-content>
<div>
<ion-grid>
<ion-row *ngFor="let list of GetDeductionsList" >
<ion-col class="colBold">
<label for="">{{list.ELEMENT_NAME}}</label>
</ion-col>
<ion-col>
<label for="">{{list.AMOUNT}}</label>
</ion-col>
</ion-row>
</ion-grid>
</div>
</ion-card-content>
</ion-card>
</ion-content>

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

@ -0,0 +1,51 @@
import { Component, OnInit } from '@angular/core';
import {PayslipService} from '../service/payslip.service'
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
import { HomeComponent } from '../home/home.component';
@Component({
selector: 'app-deductions',
templateUrl: './deductions.component.html',
styleUrls: ['./deductions.component.scss'],
})
export class DeductionsComponent implements OnInit {
actionContextID:any;
GetDeductionsList:any='';
constructor(
public payslipService:PayslipService,
public ts: TranslatorService,
public common: CommonService,
public sharedData: SharedDataService,) {
this.actionContextID = this.common.sharedService.getSharedData(
HomeComponent.ACTION_CONTEXT_ID,
false
);
}
ngOnInit() {
this.getDeduction(this.actionContextID );
}
getDeduction(ActionContextID){
const request = {
P_ACTION_CONTEXT_ID: ActionContextID,
P_PAGE_NUM: 1,
P_PAGE_LIMIT: 1000
};
this.payslipService.getDeduction(request, ()=> {} , this.ts.trPK('general', 'retry')).subscribe((result)=>
{
this.handleGetDeductionResult(result);
}
);
}
handleGetDeductionResult(result){
if (result.GetDeductionsList != null) {
this.GetDeductionsList = result.GetDeductionsList;
}
}
}

@ -0,0 +1,35 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons>
<ion-title color="light" >{{ts.trPK('payslip','earnings')}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-card *ngIf="GetEarningsList !='' " >
<ion-card-header class="boxHdr">
<div class="hrTitle"> {{ts.trPK('payslip','earnings')}} </div>
</ion-card-header>
<ion-card-content>
<div>
<ion-grid>
<ion-row *ngFor="let list of GetEarningsList" >
<ion-col class="colBold">
<label for="">{{list.ELEMENT_NAME}}</label>
</ion-col>
<ion-col>
<label for="">{{list.AMOUNT}}</label>
</ion-col>
</ion-row>
</ion-grid>
</div>
</ion-card-content>
</ion-card>
</ion-content>

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

@ -0,0 +1,51 @@
import { Component, OnInit } from '@angular/core';
import {PayslipService} from '../service/payslip.service'
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
import { HomeComponent } from '../home/home.component';
@Component({
selector: 'app-earnings',
templateUrl: './earnings.component.html',
styleUrls: ['./earnings.component.scss'],
})
export class EarningsComponent implements OnInit {
GetEarningsList:any='';
actionContextID:any;
constructor(
public payslipService:PayslipService,
public ts: TranslatorService,
public common: CommonService,
public sharedData: SharedDataService,) {
this.actionContextID = this.common.sharedService.getSharedData(
HomeComponent.ACTION_CONTEXT_ID,
false
);
}
ngOnInit() {
this.getEarings(this.actionContextID)
}
getEarings(ActionContextID){
const request = {
P_ACTION_CONTEXT_ID: ActionContextID,
P_PAGE_NUM: 1,
P_PAGE_LIMIT: 1000
};
this.payslipService.getEarings(request, ()=> {} , this.ts.trPK('general', 'retry')).subscribe((result)=>
{
this.handleGetEaringsResult(result);
}
);
}
handleGetEaringsResult(result){
if (result.GetEarningsList != null) {
this.GetEarningsList = result.GetEarningsList;
}
}
}

@ -0,0 +1,221 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons>
<ion-title color="light" >{{ts.trPK('payslip','title')}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-item>
<ion-label>choose payslip</ion-label>
<ion-select (ionChange)="showInfo($event)" okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}" [(ngModel)]="choosePayslip">
<ion-select-option value="{{i}}" *ngFor="let options of GetPayslipList; let i=index">{{options.PAYSLIP_CHOICE}} </ion-select-option>
</ion-select>
</ion-item>
<!-- <ion-list *ngIf="showPaySlip !=''" >
<ion-item>
<ion-row><ion-label>PERIOD NAME</ion-label><ion-label>{{showPaySlip.PERIOD_NAME}}</ion-label></ion-row>
<ion-row><ion-label>PERIOD START DATE</ion-label><ion-label>{{showPaySlip.PERIOD_START_DATE}}</ion-label> </ion-row>
<ion-row> <ion-label>PERIOD END DATE</ion-label><ion-label>{{showPaySlip.PERIOD_END_DATE}}</ion-label> </ion-row>
</ion-item>
</ion-list> -->
<ion-card *ngIf="showPaySlip !=''">
<ion-card-header class="boxHdr">
<div class="hrTitle"> {{ts.trPK('payslip','payroll-info')}} </div>
</ion-card-header>
<ion-card-content>
<div>
<ion-grid>
<ion-row>
<ion-col class="colBold">
<label for=""> {{ts.trPK('payslip','peroid-name')}}
</label>
</ion-col>
<ion-col>
<label for="">{{showPaySlip.PERIOD_NAME}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','start-date')}}
</label>
</ion-col>
<ion-col>
<label for="">{{showPaySlip.PERIOD_START_DATE}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','end-date')}}
</label>
</ion-col>
<ion-col>
<label for="">{{showPaySlip.PERIOD_END_DATE}}</label>
</ion-col>
</ion-row>
</ion-grid>
</div>
</ion-card-content>
</ion-card>
<ion-card *ngIf="GetSummaryOfPaymentList !='' " >
<ion-card-header class="boxHdr">
<div class="hrTitle"> {{ts.trPK('payslip','summary-payment')}} </div>
</ion-card-header>
<ion-card-content>
<div>
<ion-grid>
<ion-row >
<ion-col class="colBold">
<label for=""> {{ts.trPK('payslip','deductions-Amount')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_DEDUCTIONS_AMOUNT}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','deductions-percentage')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_DEDUCTIONS_PERCENTAGE}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','earings-Amount')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_EARNINGS_AMOUNT}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','earings-percentage')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_EARNINGS_PERCENTAGE}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','pay-Amount')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_PAY_AMOUNT}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','pay-percentage')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetSummaryOfPaymentList.TOTAL_PAY_PERCENTAGE}}</label>
</ion-col>
</ion-row>
</ion-grid>
</div>
</ion-card-content>
</ion-card>
<ion-card *ngIf="GetPaymentInformationList !='' " >
<ion-card-header class="boxHdr">
<div class="hrTitle"> {{ts.trPK('payslip','payment-information')}} </div>
</ion-card-header>
<ion-card-content>
<div>
<ion-grid>
<ion-row >
<ion-col class="colBold">
<label for=""> {{ts.trPK('payslip','payment-method')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetPaymentInformationList.PAYMENT_METHOD_NAME}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','bank-name')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetPaymentInformationList.BANK_NAME}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','branch-name')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetPaymentInformationList.BRANCH_NAME}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','account-no')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetPaymentInformationList.ACCOUNT_NUMBER}}</label>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="colBold">
<label for="">{{ts.trPK('payslip','amount')}}
</label>
</ion-col>
<ion-col>
<label for="">{{GetPaymentInformationList.AMOUNT}}</label>
</ion-col>
</ion-row>
</ion-grid>
</div>
</ion-card-content>
</ion-card>
<ion-row *ngIf="showPaySlip !=''" style="text-align: center;">
<ion-col class="greenTxt" col-6>
<button ion-button block class="notColBtn" (click)="openEarings()">
<p>{{ts.trPK('payslip','earnings')}}</p>
<ion-img class="serviceItemImg" src="../assets/imgs/details.png"></ion-img>
</button>
</ion-col>
<ion-col class="greenTxt" col-6>
<button ion-button block class="notColBtn" (click)="openDeductions()">
<p>{{ts.trPK('payslip','deductions')}}</p>
<ion-img class="serviceItemImg" src="../assets/imgs/details.png"></ion-img>
</button>
</ion-col>
</ion-row>
</ion-content>

@ -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,137 @@
import { Component, OnInit } from '@angular/core';
import {PayslipService} from '../service/payslip.service'
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss'],
})
export class HomeComponent implements OnInit {
selEmp: string;
respID: number;
selMenu: MenuResponse;
GetPayslipList:any='';
GetSummaryOfPaymentList:any='';
GetPaymentInformationList:any='';
showPaySlip:any=[];
ActionContextID:any;
public static ACTION_CONTEXT_ID = "passActionContectID";
constructor(
public payslipService:PayslipService,
public ts: TranslatorService,
public common: CommonService,
public sharedData: SharedDataService,
) {}
ngOnInit() {
console.log("test");
this.selEmp = this.common.sharedService.getSharedData(
MenuResponse.SHARED_SEL_EMP,
false
);
console.log(" this.selEmp" + this.selEmp);
this.respID = this.common.sharedService.getSharedData(
MenuResponse.SHARED_SEL_RESP_ID,
false
);
console.log(" this.respID" + this.respID);
this.selMenu = new MenuResponse();
this.selMenu = this.common.sharedService.getSharedData(
MenuResponse.SHARED_DATA,
false
);
console.log(" this.selMenu" + this.selMenu);
this.getPayslip();
}
getPayslip(){
const request = {
P_SELECTED_EMPLOYEE_NUMBER: this.selEmp,//'125346',//this.selEmp,
P_MENU_TYPE: this.selMenu.List_Menu.MENU_TYPE,// 'E',//this.selMenu.List_Menu.MENU_TYPE,
P_SELECTED_RESP_ID:this.respID//"-999" //this.respID,
// P_PAGE_NUM: this.P_PAGE_NUM,
// P_PAGE_LIMIT: this.P_PAGE_LIMIT
};
this.payslipService.getPayslip(request, ()=> {} , this.ts.trPK('general', 'retry')).subscribe((result)=>
{
this.handleRespondGetPayslipResult(result);
}
);
}
handleRespondGetPayslipResult(result){
if (result.GetPayslipList != null) {
this.GetPayslipList = result.GetPayslipList;
}
}
// showPaymentInfo
showInfo(event){
console.log(event.detail.value);
const index = parseInt(event.detail.value);
this.showPaySlip =this.GetPayslipList[index];
this.ActionContextID=this.GetPayslipList[index].ACTION_CONTEXT_ID;
this.common.sharedService.setSharedData(this.ActionContextID,HomeComponent.ACTION_CONTEXT_ID);
this.getSummeryOfPayment(this.ActionContextID);
this.getPaymentInfo(this.ActionContextID)
}
getSummeryOfPayment(ActionContextID){
const request = {
P_ACTION_CONTEXT_ID: ActionContextID,
};
this.payslipService.getSummeryOFPayment(request, ()=> {} , this.ts.trPK('general', 'retry')).subscribe((result)=>
{
this.handleSummeryOfPaymentResult(result);
}
);
}
handleSummeryOfPaymentResult(result){
if (result.GetSummaryOfPaymentList != null) {
this.GetSummaryOfPaymentList = result.GetSummaryOfPaymentList[0];
}
}
getPaymentInfo(ActionContextID){
const request = {
P_ACTION_CONTEXT_ID: ActionContextID,
};
this.payslipService.getPaymentInfo(request, ()=> {} , this.ts.trPK('general', 'retry')).subscribe((result)=>
{
this.handleGetPaymentInfoResult(result);
}
);
}
handleGetPaymentInfoResult(result){
if (result.GetPaymentInformationList != null) {
this.GetPaymentInformationList = result.GetPaymentInformationList[0];
}
}
openEarings(){
this.common.openEarningsPage();
}
openDeductions(){
this.common.openDeductionsPage();
}
}

@ -0,0 +1,4 @@
// import { Request } from './request';
// export class PayslipRequest extends Request{
// }

@ -0,0 +1,47 @@
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 {EarningsComponent}from './earnings/earnings.component'
import {DeductionsComponent} from './deductions/deductions.component'
import { PayslipPage } from './payslip.page';
import {HomeComponent} from './home/home.component'
const routes: Routes = [
{
path: '',
component: PayslipPage,
children: [
{
path: 'home',
component: HomeComponent
},
{
path: 'Deductions',
component: DeductionsComponent
},
{
path: 'Earnings',
component: EarningsComponent
},
]
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
providers:[
HomeComponent,
EarningsComponent,
DeductionsComponent
],
declarations: [PayslipPage,HomeComponent,EarningsComponent,DeductionsComponent]
})
export class PayslipPageModule {}

@ -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 { PayslipPage } from './payslip.page';
describe('PayslipPage', () => {
let component: PayslipPage;
let fixture: ComponentFixture<PayslipPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PayslipPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PayslipPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

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

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

@ -0,0 +1,54 @@
import { Injectable } from '@angular/core';
import { ConnectorService } from '../../hmg-common/services/connector/connector.service';
import { AuthenticationService } from '../../hmg-common/services/authentication/authentication.service';
import { Observable } from "rxjs";
@Injectable({
providedIn: 'root'
})
export class PayslipService {
public static getPayslip ="Services/ERP.svc/REST/GET_PAYSLIP";
public static getSummaryOFPayment ="Services/ERP.svc/REST/GET_SUMMARY_OF_PAYMENT";
public static getPaymentInfo ="Services/ERP.svc/REST/GET_PAYMENT_INFORMATION";
public static getEarnings ="Services/ERP.svc/REST/GET_EARNINGS";
public static getDeduction ="Services/ERP.svc/REST/GET_DEDUCTIONS";
constructor(
public api: ConnectorService,
public authService: AuthenticationService,
) { }
public getPayslip(PayslipRequest: any, onError?: any,errorLabel?: string): Observable<any> {
const request = PayslipRequest;
this.authService.authenticateRequest(request);
return this.api.post(PayslipService.getPayslip,request,onError,errorLabel);
}
public getSummeryOFPayment(PayslipRequest: any, onError?: any,errorLabel?: string): Observable<any> {
const request = PayslipRequest;
this.authService.authenticateRequest(request);
return this.api.post(PayslipService.getSummaryOFPayment,request,onError,errorLabel);
}
public getPaymentInfo(PayslipRequest: any, onError?: any,errorLabel?: string): Observable<any> {
const request = PayslipRequest;
this.authService.authenticateRequest(request);
return this.api.post(PayslipService.getPaymentInfo,request,onError,errorLabel);
}
public getEarings(PayslipRequest: any, onError?: any,errorLabel?: string): Observable<any> {
const request = PayslipRequest;
this.authService.authenticateRequest(request);
return this.api.post(PayslipService.getEarnings,request,onError,errorLabel);
}
public getDeduction(PayslipRequest: any, onError?: any,errorLabel?: string): Observable<any> {
const request = PayslipRequest;
this.authService.authenticateRequest(request);
return this.api.post(PayslipService.getDeduction,request,onError,errorLabel);
}
}

@ -23,11 +23,14 @@ export class SelectInput extends UiElement {
if (this.disabled == "N") { this.disabled = "disabled" } else { this.disabled = "" }
if (this.hidden == "N") { this.hidden = "display:none;" } else { this.hidden = "" }
const template =
"<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 + ">" +
"</select>" +
"</div> ";
"<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>"+
"</select>"+
"</div> ";
// "<ion-item style='" + this.hidden + "'>" +
// "<ion-label id='title' >" + this.label + "</ion-label>" +

@ -1,8 +1,14 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/vacation-rule/create-vacation-rule"></ion-back-button>
<!-- <ion-back-button color="light" class="btnBack" defaultHref="/vacation-rule/create-vacation-rule"></ion-back-button> -->
<nav-buttons backLink="/vacation-rule/vacation-type"></nav-buttons>
</ion-buttons>
<ion-title color="light">{{ 'vacation-rule, create-vacation-rule' | translate}}</ion-title>
</ion-toolbar>
</ion-header>

@ -54,6 +54,8 @@ export class CreateVacationRuleComponent implements OnInit {
SelAction: string = "";
hideForwordEmployee: any;
exampleJsonObject: any;
wFLookUpList:any;
GetRespondAttributeValueList:any;
private numberInput: NumberInput;
private textInput: TextInput;
private selectInput: SelectInput;
@ -182,24 +184,58 @@ export class CreateVacationRuleComponent implements OnInit {
msg = this.ts.trPK('vacation-rule', 'fillSDate');
// this.common.showAlert(msg);
this.cs.presentAlert(msg);
} else if (this.selEmployeeID == undefined) {
msg = this.ts.trPK('vacation-rule', 'fillReplacement');
// this.common.showAlert(msg);
this.cs.presentAlert(msg);
} else {
var responseAttrDic = this.exampleJsonObject;
// var responseAttrDic = this.exampleJsonObject;//haroon
var responseAttrDic =this.RespondAttributeList; // Ashwaq
this.P_RESPOND_ATTRIBUTES_TBL = [];
for (let key in responseAttrDic) {
let obj: any = {};
obj.ATTRIBUTE_NAME = key;
//obj.ATTRIBUTE_NAME = key;haroon
obj.ATTRIBUTE_NAME =responseAttrDic[key].ATTRIBUTE_NAME;//ashwaq to get ATTRIBUTE_NAME
if (typeof responseAttrDic[key] === "number") {
obj.ATTRIBUTE_NUMBER_VALUE = responseAttrDic[key];
// obj.ATTRIBUTE_NUMBER_VALUE = responseAttrDic[key];haroon
obj.ATTRIBUTE_NUMBER_VALUE = (document.getElementById(responseAttrDic[key].ATTRIBUTE_NAME) as HTMLInputElement).value;
}
// else if (isDate(responseAttrDic[key])) {
// obj.ATTRIBUTE_DATE_VALUE = responseAttrDic[key];
// }
else {
obj.ATTRIBUTE_TEXT_VALUE = responseAttrDic[key];
//obj.ATTRIBUTE_TEXT_VALUE = responseAttrDic[key];//haroon
obj.ATTRIBUTE_TEXT_VALUE =(document.getElementById(responseAttrDic[key].ATTRIBUTE_NAME) as HTMLInputElement).value;
}
this.P_RESPOND_ATTRIBUTES_TBL.push(obj);
}
// for (let key in responseAttrDic) {
// let obj: any = {};
// obj.ATTRIBUTE_NAME = key;
// if (typeof responseAttrDic[key] === "number") {
// // obj.ATTRIBUTE_NUMBER_VALUE = responseAttrDic[key];
// obj.ATTRIBUTE_NUMBER_VALUE = (document.getElementById(responseAttrDic[key].ATTRIBUTE_NAME) as HTMLInputElement).value;
// }
// else if (responseAttrDic[key].ATTRIBUTE_TYPE == "VARCHAR2") {
// obj.ATTRIBUTE_TEXT_VALUE = (document.getElementById(responseAttrDic[key].ATTRIBUTE_NAME) as HTMLInputElement).value;
// }
// // else if (isDate(responseAttrDic[key])) {
// // obj.ATTRIBUTE_DATE_VALUE = responseAttrDic[key];
// // }
// else {
// obj.ATTRIBUTE_TEXT_VALUE = (document.getElementById(responseAttrDic[key].ATTRIBUTE_NAME) as HTMLInputElement).value;//responseAttrDic[key];
// }
// this.P_RESPOND_ATTRIBUTES_TBL.push(obj);
// }
let repUserName = this.selEmployeeID;
if(repUserName == null || repUserName ==""){
}
if (this.hideForwordEmployee && this.hideForwordEmployee.ATTRIBUTE_NAME) {
let obj: any = {};
repUserName = "";
@ -249,7 +285,7 @@ export class CreateVacationRuleComponent implements OnInit {
this.vacationRuleRequest = request;
this.vacationRuleService.createVacationRule(request, () => {
this.ApplyFunc();
//this.ApplyFunc();
}, this.ts.trPK('general', 'retry')).subscribe((result) => {
if (this.cs.validResponse(result)) {
console.log(result);
@ -442,8 +478,9 @@ export class CreateVacationRuleComponent implements OnInit {
this.hideForwordEmployee = result.RespondRolesList[0];
}
if (result.RespondAttributesList){
if (result.RespondAttributesList) {
//this.schemaNotific = JSON.parse(result.P_Schema);
////////************************************** */
this.createVacationDynamicFields(result.RespondAttributesList);
}
this.reverseAction();
@ -457,17 +494,29 @@ export class CreateVacationRuleComponent implements OnInit {
}
}
createVacationDynamicFields(RespondAttributesList){
createVacationDynamicFields(RespondAttributesList) {
console.log("createVacationDynamicFields");
const containerId = 'CVDynamicFields';
for(let i=0;i<RespondAttributesList.length;i++){
if(RespondAttributesList[i].ATTRIBUTE_TYPE=="VARCHAR2"){
this.textInput = new TextInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId,"","","","");
}else if(RespondAttributesList[i].ATTRIBUTE_TYPE=="LOOKUP"){
this.selectInput = new SelectInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId,"","","");
}else if(RespondAttributesList[i].ATTRIBUTE_TYPE=="DATE"){
this.dateInput = new DateInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId,"","","");
}else if(RespondAttributesList[i].ATTRIBUTE_TYPE=="NUMBER"){
this.numberInput = new NumberInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId,"","","");
for (let i = 0; i < RespondAttributesList.length; i++) {
if (RespondAttributesList[i].ATTRIBUTE_TYPE == "VARCHAR2") {
console.log("1");
this.textInput = new TextInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId, "", "", "", "");
} else if (RespondAttributesList[i].ATTRIBUTE_TYPE == "LOOKUP") {
console.log("2");
//call create WF_LOOKUP
//call there or when the got response from responsedAtt
this.selectInput = new SelectInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId, "", "", "");
this.getWFLookUp(RespondAttributesList[i].ATTRIBUTE_FORMAT, RespondAttributesList[i].ATTRIBUTE_NAME);
} else if (RespondAttributesList[i].ATTRIBUTE_TYPE == "DATE") {
console.log("3");
this.dateInput = new DateInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId, "", "", "");
} else if (RespondAttributesList[i].ATTRIBUTE_TYPE == "NUMBER") {
console.log("4");
this.numberInput = new NumberInput(RespondAttributesList[i].ATTRIBUTE_DISPLAY_NAME, RespondAttributesList[i].ATTRIBUTE_NAME, "", containerId, "", "", "");
}
}
}
@ -487,6 +536,7 @@ export class CreateVacationRuleComponent implements OnInit {
handleFillResponseAttr(result) {
if (this.cs.validResponse(result)) {
if (result.GetRespondAttributeValueList && result.GetRespondAttributeValueList.length > 0) {
this.GetRespondAttributeValueList=result.GetRespondAttributeValueList;
let resp_val: any = result.GetRespondAttributeValueList[0].P_ATTRIBUTE_NAME;
let Emp_ID: any = result.GetRespondAttributeValueList[0].P_ATTRIBUTE_TEXT_VALUE;
let valueList = result.GetRespondAttributeValueList;
@ -509,6 +559,9 @@ export class CreateVacationRuleComponent implements OnInit {
obj[valueList[i].P_ATTRIBUTE_NAME] = valueList[i].P_ATTRIBUTE_TEXT_VALUE;
}
this.exampleJsonObject = obj;
//Call set value of responsed attribute
// this.createVacationDynamicFields(this.exampleJsonObject);//ashwaq
this.setRespondAttributeValue();
// this.exampleJsonObject = new Map(valueList.map(obj => [ obj., obj.P_ATTRIBUTE_TEXT_VALUE ]));
}
}
@ -586,5 +639,110 @@ export class CreateVacationRuleComponent implements OnInit {
return pAction;
}
}
getWFLookUp(resAttrFormat: any, ATTRIBUTE_NAME) {
const request = {
P_LOOKUP_TYPE: resAttrFormat,
}
this.vacationRuleService.getLookup(request, () => { }, this.ts.trPK('general', 'retry')).subscribe(
(result: any) => {
if (this.cs.validResponse(result)) {
// console.log("Lookup result "+ result);
this.wFLookUpList=result.WFLookUpList
this.fillDropdownList(result.WFLookUpList, ATTRIBUTE_NAME);
} else {
this.cs.presentAlert(result.ErrorEndUserMessage);
}
});
}
// handleGetLookupResult(result, ATTRIBUTE_FORMAT, attributeID) {
// //set the value
// console.log("handleGetLookupResult");
// let obj : any=[];
// obj=result.
// // for (let i = 0; i < result.length; i++) {
// // obj[i] = result[i].LOOKUP_MEANING;
// // }
// //this.selectInput = new SelectInput(val1, val2,obj[0], containerId,"","","");
// this.fillDropdownList(obj,attributeID);
// }
fillDropdownList(optionList: any = [],attributeID) {
let elemID: any = attributeID;
let eitObj: any;
if (optionList.length > 0) {
let select = document.getElementById(elemID) as HTMLSelectElement;
document.getElementById(elemID).innerHTML = "";
var firstoption = document.createElement("option");
firstoption.text = this.ts.trPK("general", "choose");
firstoption.value = "";
select.add(firstoption);
for (let i = 0; i < optionList.length; i++) {
var option = document.createElement("option");
option.text = optionList[i].LOOKUP_MEANING;
option.value = optionList[i].LOOKUP_CODE;
select.add(option);
}
select.disabled = false;
}
}
setRespondAttributeValue(){
for (let i = 0; i < this.RespondAttributeList.length; i++) {
if(this.RespondAttributeList[i].ATTRIBUTE_NAME == this.GetRespondAttributeValueList[i].P_ATTRIBUTE_NAME){
if (this.RespondAttributeList[i].ATTRIBUTE_TYPE == "VARCHAR2") {
console.log("1");
let x = (document.getElementById(this.RespondAttributeList[i].ATTRIBUTE_NAME)) as HTMLInputElement;
x.value=this.GetRespondAttributeValueList[i].P_ATTRIBUTE_NUMBER_VALUE;
} else if (this.RespondAttributeList[i].ATTRIBUTE_TYPE == "LOOKUP") {
console.log("2");
//call create WF_LOOKUPP_ATTRIBUTE_NAME
//call there or when the got response from responsedAtt
let x = (document.getElementById(this.RespondAttributeList[i].ATTRIBUTE_NAME)) as HTMLSelectElement;
if(this.wFLookUpList){
let index= this.wFLookUpList.findIndex(x => x.LOOKUP_CODE == this.GetRespondAttributeValueList[i].P_ATTRIBUTE_TEXT_VALUE);
console.log("Hel: "+ index);
x.options[index+1].selected=true;
}
} else if (this.RespondAttributeList[i].ATTRIBUTE_TYPE == "DATE") {
console.log("3");
} else if (this.RespondAttributeList[i].ATTRIBUTE_TYPE == "NUMBER") {
console.log("4");
let x = (document.getElementById(this.RespondAttributeList[i].ATTRIBUTE_NAME)) as HTMLInputElement;
x.value=this.GetRespondAttributeValueList[i].P_ATTRIBUTE_NUMBER_VALUE;
}
}//end if
}
}
}// end class

@ -28,7 +28,7 @@ export class VacationRuleServiceService {
public static notificationReassign = 'Services/ERP.svc/REST/GET_NOTIFICATION_REASSIGN_MODE';
public static getRespondAttributeValues = 'Services/ERP.svc/REST/GET_RESPOND_ATTRIBUTE_VALUE';
public static getReplacmentEmployeeList = 'Services/ERP.svc/REST/GET_REPLACEMENT_LIST';
public static getLookup='Services/ERP.svc/REST/GET_WF_LOOKUP';
constructor(public authService: AuthenticationService, public con: ConnectorService) { }
@ -91,4 +91,10 @@ export class VacationRuleServiceService {
this.authService.authenticateRequest(request);
return this.con.post(VacationRuleServiceService.deleteVacationRule, request, onError, errorLabel);
}
public getLookup (getLookupRequest :any,onError,errorLabel){
const request =getLookupRequest;
this.authService.authenticateRequest(request);
return this.con.post(VacationRuleServiceService.getLookup,request,onError,errorLabel);
}
}

@ -762,8 +762,8 @@
"ar":"مسح"
},
"choose":{
"en":"",
"ar":""
"en":"choose",
"ar":"أختر"
},
"confirmation":{
"en":"Confirmation",
@ -1019,6 +1019,10 @@
"en": "Please fill action field",
"ar": "يرجى ملء حقل العمل"
},
"fillReplacement": {
"en": "Please select a replacement ",
"ar": "يرجى إختيار بديل"
},
"deliver": {
"en": "Deliver notifications to me regardless of any general rules",
"ar": "تسليم الإخطارات لي بغض النظر عن أي قواعد عامة"
@ -1641,5 +1645,87 @@
"en":"Action is required",
"ar":"اختر حركة"
}
},
"payslip": {
"title":{
"en": "payslip",
"ar":"كشف الراتب"
},
"end-date":{
"en": "Peroid End Date",
"ar":" تاريخ بداية الفترة"
},
"start-date":{
"en": "Peroid Start Date",
"ar":" تاريخ نهاية الفترة"
},
"peroid-name":{
"en": "Peroid Name",
"ar":"اسم الفترة "
},
"deductions-Amount":{
"en": "Total Deductions Amount",
"ar":"قيمة الخصومات "
},
"deductions-percentage":{
"en": "Total Deductions Percentage",
"ar":"نسبة الخصومات "
},
"earings-Amount":{
"en": "Total Earings Amount",
"ar":"قيمة الربح "
},
"earings-percentage":{
"en": "Total Earings Percentage",
"ar":"نسبة الربح "
},
"pay-Amount":{
"en": "Total Pay Amount",
"ar":"قيمة الأجر "
},
"pay-percentage":{
"en": "Total Pay Percentage",
"ar":"نسبة الأجر "
},
"payment-method":{
"en": "Payment Method Name",
"ar":"اسم عملية الدفع "
},
"bank-name":{
"en": "Bank Name",
"ar":"اسم البنك "
},
"branch-name":{
"en": "Branch Name",
"ar":"اسم الفرع "
},
"account-no":{
"en": "Account NO.",
"ar":"رقم الحساب "
},
"amount":{
"en": "Amount",
"ar":" القيمة"
},
"earnings":{
"en": "Earnings",
"ar":"أرباح "
},
"deductions":{
"en": "Deductions",
"ar":"الخصومات "
},
"payment-information":{
"en": "Payment Information",
"ar":"معلةمات الدفع "
},
"summary-payment":{
"en": "Summary of Payment",
"ar":"ملخص الدفع "
},
"payroll-info":{
"en": "Payroll Processing Information",
"ar":"معلومات كشف الراتب "
}
}
}

@ -1 +0,0 @@
,HMG/Mohamed.Mekawy,CS-1F-MOHAMED,24.10.2019 14:24,file:///C:/Users/mohamed.mekawy/AppData/Roaming/LibreOffice/4;
Loading…
Cancel
Save