merge master-newdesign
commit
ae3a2e4995
@ -0,0 +1,132 @@
|
||||
<ion-header>
|
||||
<ion-toolbar>
|
||||
<!-- class="header-toolbar" <nav-buttons></nav-buttons> -->
|
||||
<ion-title color="dark">{{ 'replacementRoll, title' | translate}}</ion-title>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
<ion-content >
|
||||
|
||||
<ion-list syle="margin-bottom:2px !important" [hidden]="isAnswer==true">
|
||||
<ion-item>
|
||||
<ion-label class="boldTxtNav">{{'replacementRoll, searchBy' | translate}}</ion-label>
|
||||
<ion-select okText='{{"general, ok" | translate }}' cancelText='{{"general, cancel" | translate }}'
|
||||
[(ngModel)]="searchBy">
|
||||
<ion-select-option value="1" selected="true">{{'addAttach, name' | translate}}</ion-select-option>
|
||||
<ion-select-option value="2">{{'login, username' | translate}}</ion-select-option>
|
||||
<ion-select-option value="3">{{'general, email' | translate}}</ion-select-option>
|
||||
</ion-select>
|
||||
</ion-item>
|
||||
|
||||
<ion-item lines="none">
|
||||
<ion-button class="filterBtn" button-type="clear" (click)="getreplacmentemployee()" item-end>
|
||||
<ion-icon slot="icon-only" color="white" name="search"></ion-icon>
|
||||
</ion-button>
|
||||
|
||||
<ion-input class="filterInput" [(ngModel)]="inputSearch" placeholder='{{"general, search" | translate}}'></ion-input>
|
||||
|
||||
<!-- <button ion-button icon-only (click)="getreplacmentemployee()" clear type="button" item-end>
|
||||
<ion-icon name="search"></ion-icon>
|
||||
</button> -->
|
||||
|
||||
|
||||
</ion-item>
|
||||
|
||||
<!-- <ion-item>
|
||||
<ion-label>
|
||||
{{selEmpName}}
|
||||
</ion-label>
|
||||
</ion-item> -->
|
||||
<!-- <div class="centerDiv">
|
||||
<button ion-button (click)="closePage()">{{'general.save' | translate}}</button>
|
||||
</div> -->
|
||||
</ion-list>
|
||||
|
||||
<!-- <div class="noteInput">
|
||||
<ion-label [hidden]="isAnswer==false" class="boldTxtNav" padding>{{"replacementRoll, question" | translate}} :
|
||||
{{pQuestion}} ?</ion-label>
|
||||
<ion-label [hidden]="isAnswer==false" class="boldTxtNav" padding>{{"replacementRoll, answer" | translate}}
|
||||
</ion-label>
|
||||
<ion-label [hidden]="isAnswer==true" class="boldTxtNav" padding>{{"replacementRoll, enterNote" | translate}}
|
||||
</ion-label>
|
||||
<ion-item>
|
||||
<ion-textarea [(ngModel)]="userNote"></ion-textarea>
|
||||
</ion-item>
|
||||
</div> -->
|
||||
|
||||
<ion-item [hidden]="isAnswer==true">
|
||||
<!-- <ion-list *ngIf="ReplacementList"> -->
|
||||
<!-- <ion-list *ngIf="ReplacementList">
|
||||
-->
|
||||
<!-- <ion-radio-group mode="md" [(ngModel)]="selEmp"> -->
|
||||
<!-- <ion-grid fixed>
|
||||
<ion-row justify-content-end>
|
||||
<ion-col [ngClass]="{'activated': (active == i),'deactivated': (active != i)}" (click)="select(employee,i)"
|
||||
*ngFor="let employee of demoeAttach;let i=index;"
|
||||
size-xs="6" size-sm="6" size-md="6" size-lg="6" align-self-stretch>
|
||||
<div class="profileImageDiv"> <img class="profileImage" src="../assets/imgs/profile.png"></div>
|
||||
<div *ngIf="active == i" class="selIEmpDiv"> <img class="selIEmpImage" src="../assets/imgs/green.png"></div>
|
||||
|
||||
|
||||
|
||||
<br/>
|
||||
<div class="repContentDiv">
|
||||
<ion-label style="color:var(--dark) !important">
|
||||
<span style="font-weight: bold !important">{{employee.EMPLOYEE_DISPLAY_NAME}}</span>
|
||||
<br>{{employee.USER_NAME}}<br>
|
||||
{{employee.EMAIL_ADDRESS}}</ion-label>
|
||||
</div>
|
||||
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid> -->
|
||||
|
||||
|
||||
<!-- </ion-radio-group> -->
|
||||
<!--
|
||||
</ion-list> -->
|
||||
|
||||
<div class="square-container">
|
||||
<div (click)="select(employee,i)" *ngFor="let employee of ReplacementList;let i=index;" class="square">
|
||||
<div class="profileImageDiv">
|
||||
<!-- <img class="profileImage" src="../assets/imgs/profile.png"> -->
|
||||
|
||||
<img *ngIf="employee.EMPLOYEE_IMAGE" class="empImgeRep" [src]="'data:image/png;base64,'+employee.EMPLOYEE_IMAGE">
|
||||
<img *ngIf="employee.EMPLOYEE_IMAGE == null" class="empImgeRep" src="../assets/imgs/profile.png">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div *ngIf="active == i" class="selIEmpDiv">
|
||||
<img class="selIEmpImage" src="../assets/imgs/green.png">
|
||||
</div>
|
||||
|
||||
<div [ngClass]="{'activated': (active == i),'deactivated': (active != i)}"
|
||||
class="content">
|
||||
<ion-label>
|
||||
|
||||
<span style="font-weight: bold !important">{{employee.EMPLOYEE_DISPLAY_NAME}}</span>
|
||||
<br>{{employee.USER_NAME}}<br>
|
||||
{{employee.EMAIL_ADDRESS}}
|
||||
</ion-label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</ion-item>
|
||||
<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 class="footer-button" style="background: var(--newgreen)!important;border-radius: 10px; --background: transparent; " ion-button (click)="submitAction()">
|
||||
{{'general, submit' | translate}}</ion-button>
|
||||
|
||||
<ion-button class="footer-button" style="background: var(--darkblue)!important;border-radius: 10px; --background: transparent; " ion-button (click)="closeModal()">
|
||||
{{'general, cancel' | translate}}</ion-button>
|
||||
</div>
|
||||
</ion-footer>
|
||||
@ -0,0 +1,121 @@
|
||||
button.item-button.button.button-md.button-clear.button-clear-md {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.footer-button {
|
||||
border-radius: 3px;
|
||||
padding: 0 1.1em;
|
||||
min-height: 45px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
// ion-item {
|
||||
// margin-top: 5%;
|
||||
// margin-right: 7%;
|
||||
// width: 100%;
|
||||
// }
|
||||
.ionItem{
|
||||
border: #e4e4e4 solid;
|
||||
/* margin: 6px; */
|
||||
/* padding: 11px; */
|
||||
height: 85px;
|
||||
width: 164px;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.profileImageDiv{
|
||||
text-align: center;
|
||||
margin-bottom: -27px;
|
||||
z-index: 3;
|
||||
position: relative;
|
||||
top: 0;
|
||||
|
||||
}
|
||||
.profileImage{
|
||||
width:60px !important;
|
||||
// margin-left: -25px;
|
||||
// margin-right: 22px;
|
||||
}
|
||||
|
||||
.activated{
|
||||
border: #209a83 0.02cm solid ;
|
||||
}
|
||||
.deactivated{ border: #e4e4e4 0.02cm solid;
|
||||
}
|
||||
.repContentDiv{
|
||||
text-align: center;
|
||||
width: 85%;
|
||||
font-size: 14px;
|
||||
border: #e4e4e4 solid;
|
||||
border-radius: 5px;
|
||||
padding: 20px 8px 8px 8px;
|
||||
margin-top: -9px;
|
||||
margin-right: -35px
|
||||
|
||||
}
|
||||
.selIEmpDiv{
|
||||
text-align: right;
|
||||
margin-bottom: -26px;
|
||||
margin-right: 0px;
|
||||
z-index: 3;
|
||||
position: relative;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.selIEmpImage{
|
||||
width:22px !important
|
||||
|
||||
}
|
||||
|
||||
.noteInput{
|
||||
border: solid var(--gray) 1px;
|
||||
border-radius: 15px;
|
||||
margin: 8px 17px 0px 17px;
|
||||
padding: 10px 2px 10px 2px;
|
||||
}
|
||||
.filterInput{
|
||||
border: solid var(--gray) 1px;
|
||||
border-radius: 21px;
|
||||
padding-left: 10px !important;
|
||||
}
|
||||
.filterBtn{
|
||||
background: var(--newgreen);
|
||||
--background: var (--newgreen);
|
||||
border-radius: 50%;
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
*{
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.square-container{
|
||||
// padding: 8px;
|
||||
width:100%;
|
||||
}
|
||||
.square{
|
||||
// width:calc(100% / 2);
|
||||
width:50%;
|
||||
float:left;
|
||||
position: relative;
|
||||
// padding-bottom: calc(100% / 2);
|
||||
}
|
||||
|
||||
.square .content{
|
||||
width: calc(100% - 16px) !important;
|
||||
height: calc(100% - 16px) !important;
|
||||
margin: 8px;
|
||||
padding: 16px;
|
||||
// position: absolute;
|
||||
color: white;
|
||||
border-radius: 9px;
|
||||
text-align: center;
|
||||
// background-color: #0095ff;
|
||||
// box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { AbsenceReplacementListComponent } from './absence-replacement-list.component';
|
||||
|
||||
describe('AbsenceReplacementListComponent', () => {
|
||||
let component: AbsenceReplacementListComponent;
|
||||
let fixture: ComponentFixture<AbsenceReplacementListComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ AbsenceReplacementListComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AbsenceReplacementListComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,342 @@
|
||||
import { ModalController } from '@ionic/angular';
|
||||
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 { WorKListReplacmentEmployeeResponse } from 'src/app/notification/models/ReplacmentEmployeeRes';
|
||||
import { WorkListReplacmentEmployeeRequest } from 'src/app/notification/models/ReplacmentEmployeeReq';
|
||||
import { WorkListActionRequest } from 'src/app/notification/models/NotificationActionReq';
|
||||
import { WorklistMainService } from 'src/app/notification/service/work-list.main.service';
|
||||
import { ViewReplacementModalComponent } from 'src/app/notification/view-replacement-modal/view-replacement-modal.component';
|
||||
import { WorklistService } from 'src/app/notification/service/worklist.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-absence-replacement-list',
|
||||
templateUrl: './absence-replacement-list.component.html',
|
||||
styleUrls: ['./absence-replacement-list.component.scss'],
|
||||
})
|
||||
export class AbsenceReplacementListComponent implements OnInit {
|
||||
|
||||
P_SEARCH_EMPLOYEE_DISPLAY_NAME: string = "";
|
||||
P_SEARCH_EMAIL_ADDRESS: string = "";
|
||||
getPassActionMode: any;
|
||||
selectedValue: any;
|
||||
inputSearch: any;
|
||||
selEmpName: any;
|
||||
selectedUserInf: any;
|
||||
userNote: any;
|
||||
getPassNotificationDetails: any;
|
||||
isAnswer: boolean = false;
|
||||
pQuestion: string = "";
|
||||
selEmp: any;
|
||||
P_PAGE_NUM: number;
|
||||
P_PAGE_LIMIT: number;
|
||||
ReplacementList: any = [];
|
||||
searchBy: string = "";
|
||||
IsReachEnd: boolean = false;
|
||||
ReplacmentListRes: WorKListReplacmentEmployeeResponse;
|
||||
private WorkListReplacmentEmployeeObj: WorkListReplacmentEmployeeRequest = new WorkListReplacmentEmployeeRequest();
|
||||
private WorkListActionObj: WorkListActionRequest;
|
||||
getpassResAttr: any = [];
|
||||
active: any;
|
||||
demoeAttach:any=[];
|
||||
|
||||
constructor(public worklistService: WorklistService, private cs: CommonService, private ts: TranslatorService, public workListMainService: WorklistMainService, public modalCtrl: ModalController) {
|
||||
this.P_PAGE_NUM = 1;
|
||||
this.P_PAGE_LIMIT = 50;
|
||||
// this.getPassActionMode = this.cs.sharedService.getSharedData('passActionMode', false);
|
||||
// this.getPassNotificationDetails = this.cs.sharedService.getSharedData('passNotificationInfo', false);
|
||||
// this.getpassResAttr = this.cs.sharedService.getSharedData('passResAttr', false);
|
||||
// this.pQuestion = this.cs.sharedService.getSharedData('pQuestion', false);
|
||||
// if (this.getPassActionMode == "ANSWER_INFO") {
|
||||
// this.isAnswer = true;
|
||||
// }
|
||||
this.WorkListReplacmentEmployeeObj.P_PAGE_NUM = this.P_PAGE_NUM;
|
||||
this.WorkListReplacmentEmployeeObj.P_PAGE_LIMIT = this.P_PAGE_LIMIT;
|
||||
|
||||
// this.WorkListActionObj = new WorkListActionRequest();
|
||||
// this.WorkListActionObj.P_NOTIFICATION_ID = this.getPassNotificationDetails.NOTIFICATION_ID;//26919060;
|
||||
// this.WorkListActionObj.P_FORWARD_TO_USER_NAME = "";
|
||||
// this.WorkListActionObj.P_ACTION_MODE = "";
|
||||
// this.WorkListActionObj.P_COMMENTS = "";
|
||||
// this.WorkListActionObj.RespondAttributeList =[];// this.getpassResAttr;
|
||||
// this.WorkListActionObj.P_APPROVER_INDEX = null;
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
||||
this.demoeAttach = [{
|
||||
USER_NAME: '18888',
|
||||
EMPLOYEE_DISPLAY_NAME: "AAA fgfhfhfhf hyutyututut ",
|
||||
EMAIL_ADDRESS: "test@yuyuu.hjj",
|
||||
|
||||
|
||||
|
||||
},
|
||||
{
|
||||
|
||||
USER_NAME: '18888',
|
||||
EMPLOYEE_DISPLAY_NAME: "AAA fgfhfhfhf hyutyututut ",
|
||||
EMAIL_ADDRESS: "test@yuyuu.hjj"
|
||||
|
||||
},
|
||||
{
|
||||
USER_NAME: '18888',
|
||||
EMPLOYEE_DISPLAY_NAME: "AAA fgfhfhfhf hyutyututut ",
|
||||
EMAIL_ADDRESS: "test@yuyuu.hjj"
|
||||
|
||||
},
|
||||
{
|
||||
USER_NAME: '18888',
|
||||
EMPLOYEE_DISPLAY_NAME: "AAA fgfhfhfhf hyutyututut ",
|
||||
EMAIL_ADDRESS: "test@yuyuu.hjj"
|
||||
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
getreplacmentemployee() {
|
||||
this.ReplacementList = [];
|
||||
this.IsReachEnd = false;
|
||||
this.P_PAGE_NUM = 1;
|
||||
if (this.inputSearch) {
|
||||
switch (this.searchBy) {
|
||||
case '1': {
|
||||
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME = this.inputSearch;
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS = "";
|
||||
|
||||
break;
|
||||
}
|
||||
case '2': {
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME = this.inputSearch;
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS = "";
|
||||
break;
|
||||
}
|
||||
case '3': {
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS = this.inputSearch;
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME = "";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME = "";
|
||||
this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS = "";
|
||||
}
|
||||
// if(this.selectedValue =="1"){
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME=this.inputSearch;
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME="";
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS="";
|
||||
// }
|
||||
// else if(this.selectedValue =="2"){
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME="";
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME=this.inputSearch;
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS="";
|
||||
// }
|
||||
// else if(this.selectedValue =="3"){
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME="";
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME="";
|
||||
// this.WorkListReplacmentEmployeeObj.P_SEARCH_EMAIL_ADDRESS=this.inputSearch;
|
||||
// }
|
||||
|
||||
this.worklistService.getReplacmentEmployeeList(this.WorkListReplacmentEmployeeObj).
|
||||
subscribe((result: WorKListReplacmentEmployeeResponse) => {
|
||||
this.handleWorkListReplacmentEmployeeResult(result);
|
||||
});
|
||||
|
||||
}//End replacment Employee
|
||||
|
||||
handleWorkListReplacmentEmployeeResult(result) {
|
||||
|
||||
if (this.cs.validResponse(result)) {
|
||||
// this.sharedData.setSharedData(result, WorKListResponse.SHARED_DATA);
|
||||
if (this.cs.hasData(result.ReplacementList)) {
|
||||
//this.ReplacmentListRes =result.ReplacementList;
|
||||
this.ReplacementList = result.ReplacementList;
|
||||
this.P_PAGE_NUM++;
|
||||
let lastItemIndex = this.ReplacementList.length - 1;
|
||||
if (result.ReplacementList[lastItemIndex]) {
|
||||
let lastitem = result.ReplacementList[lastItemIndex];
|
||||
if (lastitem.NO_OF_ROWS == lastitem.ROW_NUM) {
|
||||
this.IsReachEnd = true;
|
||||
} else {
|
||||
this.IsReachEnd = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let msg: string = this.ts.trPK('general', 'noResult');
|
||||
this.cs.presentAlert(msg);
|
||||
}
|
||||
// if(result.ReplacementList.length == 0){
|
||||
|
||||
// }
|
||||
|
||||
// else if(result.ReplacementList != null)
|
||||
// {
|
||||
// this.ReplacmentListRes =result.ReplacementList;
|
||||
// //open modal
|
||||
// this.openModale(this.ReplacmentListRes);
|
||||
|
||||
|
||||
// } // if result == null
|
||||
|
||||
} // valid it
|
||||
}
|
||||
|
||||
getValueSelected(Value) {
|
||||
|
||||
this.selectedValue = Value;
|
||||
}
|
||||
|
||||
|
||||
select(selectEmp,index){
|
||||
console.log(selectEmp.EMPLOYEE_DISPLAY_NAME);
|
||||
this.selEmp=selectEmp
|
||||
this.active=index;
|
||||
}
|
||||
clear() {
|
||||
this.selEmpName = "";
|
||||
this.selectedUserInf = null;
|
||||
|
||||
}
|
||||
async openModale(ReplacmentListRes) {
|
||||
const modal = await this.modalCtrl.create({
|
||||
component: ViewReplacementModalComponent
|
||||
});
|
||||
|
||||
modal.onDidDismiss()
|
||||
.then((data) => {
|
||||
if (data == "cancel" || data == "undefined") {
|
||||
//this.selEmpName="";
|
||||
return;
|
||||
} else {
|
||||
this.selectedUserInf = data;
|
||||
this.selEmpName = this.selectedUserInf.EMPLOYEE_DISPLAY_NAME;
|
||||
}
|
||||
});
|
||||
|
||||
return await modal.present();
|
||||
}
|
||||
|
||||
submitAction() {
|
||||
this.selEmp
|
||||
if( this.selEmp){
|
||||
let data = this.selEmp;
|
||||
this.modalCtrl.dismiss(data);
|
||||
}else{
|
||||
let msg: string = this.ts.trPK("replacementRoll", "msg");
|
||||
this.cs.showErrorMessageDialog(() => {
|
||||
}, this.ts.trPK('general', 'ok'), msg);
|
||||
return false;
|
||||
}
|
||||
|
||||
// if (this.selEmp && this.isAnswer == false) {
|
||||
// // this.selectedUserInf = this.ReplacementList[this.selEmp];
|
||||
// this.selectedUserInf = this.selEmp;
|
||||
// console.log("selEmp "+ this.selEmp.USER_NAME);
|
||||
|
||||
// if (this.selectedUserInf && this.selectedUserInf.USER_NAME) {
|
||||
// console.log("userInfo "+this.selectedUserInf.USER_NAME);
|
||||
// if (this.userNote) {
|
||||
// this.WorkListActionObj.P_FORWARD_TO_USER_NAME = this.selectedUserInf.USER_NAME;
|
||||
// this.WorkListActionObj.P_ACTION_MODE = this.getPassActionMode;
|
||||
// this.WorkListActionObj.P_COMMENTS = this.userNote;// response Attr
|
||||
|
||||
// this.workListMainService.actionButton(this.WorkListActionObj).
|
||||
// subscribe((result: any) => {
|
||||
// this.handleApplayActionResult(result);
|
||||
// });
|
||||
// } else {
|
||||
// let msg: string = this.ts.trPK("replacementRoll", "enterNote");
|
||||
// this.cs.showErrorMessageDialog(() => {
|
||||
// }, this.ts.trPK('general', 'ok'), msg);
|
||||
|
||||
// }
|
||||
// } else {
|
||||
// let msg: string = this.ts.trPK("replacementRoll", "msg");
|
||||
// this.cs.showErrorMessageDialog(() => {
|
||||
// }, this.ts.trPK('general', 'ok'), msg);
|
||||
// }
|
||||
// } else if (this.isAnswer == true) {
|
||||
// if (this.userNote) {
|
||||
// this.WorkListActionObj.P_FORWARD_TO_USER_NAME = null;
|
||||
// this.WorkListActionObj.P_ACTION_MODE = this.getPassActionMode;
|
||||
// this.WorkListActionObj.P_COMMENTS = this.userNote;// response Attr
|
||||
|
||||
// this.workListMainService.actionButton(this.WorkListActionObj).
|
||||
// subscribe((result: any) => {
|
||||
// this.handleApplayActionResult(result);
|
||||
// });
|
||||
// } else {
|
||||
// let msg: string = this.ts.trPK("replacementRoll", "enterNote");
|
||||
// this.cs.showErrorMessageDialog(() => {
|
||||
// }, this.ts.trPK('general', 'ok'), msg);
|
||||
// }
|
||||
// } else {
|
||||
// let msg: string = this.ts.trPK("replacementRoll", "msg");
|
||||
// this.cs.showErrorMessageDialog(() => {
|
||||
// }, this.ts.trPK('general', 'ok'), msg);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
doInfinite(infiniteScroll) {
|
||||
if (!this.IsReachEnd) {
|
||||
//const request =new WorkListActionRequest();
|
||||
// request.WorkListReplacmentEmployeeObj.P_SEARCH_USER_NAME=this.P_SEARCH_USER_NAME;
|
||||
// request.WorkListReplacmentEmployeeObj.P_SEARCH_EMPLOYEE_DISPLAY_NAME=this.P_SEARCH_EMPLOYEE_DISPLAY_NAME;
|
||||
// request.P_SEARCH_EMAIL_ADDRESS=this.P_SEARCH_EMAIL_ADDRESS;
|
||||
this.WorkListReplacmentEmployeeObj.P_PAGE_NUM = this.P_PAGE_NUM;
|
||||
this.WorkListReplacmentEmployeeObj.P_PAGE_LIMIT = this.P_PAGE_LIMIT;
|
||||
// request.P_SELECTED_EMPLOYEE_NUMBER=this.selEmp;
|
||||
|
||||
this.worklistService.getReplacmentEmployeeList(this.WorkListReplacmentEmployeeObj).
|
||||
subscribe((result: any) => {
|
||||
if (this.cs.validResponse(result)) {
|
||||
if (this.cs.hasData(result.ReplacementList)) {
|
||||
this.P_PAGE_NUM++;
|
||||
result.ReplacementList.forEach(vr => {
|
||||
if (vr.ROW_NUM == vr.NO_OF_ROWS) {
|
||||
this.IsReachEnd = true;
|
||||
}
|
||||
else {
|
||||
this.IsReachEnd = false;
|
||||
}
|
||||
this.ReplacementList.push(vr);
|
||||
// this.pro.GetVacationRulesList.push(vr);
|
||||
});
|
||||
} else {
|
||||
this.IsReachEnd = true;
|
||||
}
|
||||
}
|
||||
//this.P_PAGE_NUM++;
|
||||
if (infiniteScroll)
|
||||
infiniteScroll.target.complete();
|
||||
|
||||
|
||||
// console.log(resFlag);
|
||||
}, (Error) => console.log(Error), () => infiniteScroll.target.complete());
|
||||
} else {
|
||||
if (infiniteScroll)
|
||||
infiniteScroll.target.complete();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
closeModal() {
|
||||
this.modalCtrl.dismiss();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
<ion-content padding>
|
||||
|
||||
<!--
|
||||
<ion-col col-1
|
||||
style="margin-right: -22px;margin-top: -10px;">
|
||||
<ion-button class="closeIcon" (click)="closeModal()">
|
||||
<img src="../assets/imgs/close.png">
|
||||
|
||||
</ion-button>
|
||||
</ion-col> -->
|
||||
|
||||
|
||||
<h2><div class="Header">Confirmation</div></h2>
|
||||
|
||||
<div>
|
||||
<div *ngIf="submitAbsAttachmentList.length==0" class="labelcheck" lines="none" style="text-align: center;">
|
||||
No Attachment
|
||||
</div>
|
||||
<div *ngIf="absComments==''" class="labelcheck" style="text-align: center;margin-bottom: 5px;padding-bottom: 16px;">
|
||||
No Note
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<ion-footer style="border-top: 2px solid grey !important;">
|
||||
<ion-row class="rowBtn">
|
||||
<ion-label class="labelRadio">Are you sure you want to submit</ion-label>
|
||||
<ion-button class="submitOkButton" (click)="OkBtnModal()"> {{ts.trPK('general','ok')}}
|
||||
</ion-button>
|
||||
</ion-row>
|
||||
|
||||
<ion-row class="rowBtn">
|
||||
<ion-button class="submitCancelButton" (click)="closeModal()"> {{ts.trPK('general','cancel')}}
|
||||
</ion-button>
|
||||
|
||||
</ion-row>
|
||||
</ion-footer>
|
||||
</ion-content>
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
.rowBtn{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.Header{
|
||||
color: black !important;
|
||||
font-size: 25px !important;
|
||||
font-weight: bold !important;;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.labelRadio{
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.labelcheck{
|
||||
color: red !important;
|
||||
font-weight: bold !important;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.submitOkButton{
|
||||
white-space: normal !important;
|
||||
text-transform: capitalize !important;
|
||||
min-height: 45px !important;
|
||||
min-width: 5px !important;
|
||||
margin: 8px !important;
|
||||
--background:: #22c6b3;
|
||||
width: 100% !important;
|
||||
color: white!important;
|
||||
border-radius: 16px !important;
|
||||
}
|
||||
.submitCancelButton{
|
||||
white-space: normal !important;
|
||||
text-transform: capitalize !important;
|
||||
min-height: 45px !important;
|
||||
min-width: 5px !important;
|
||||
margin: 8px !important;
|
||||
--background:: #094875;
|
||||
width: 100% !important;
|
||||
color: white!important;
|
||||
border-radius: 16px !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SubmitAbsenceModalComponent } from './submit-absence-modal.component';
|
||||
|
||||
describe('SubmitAbsenceModalComponent', () => {
|
||||
let component: SubmitAbsenceModalComponent;
|
||||
let fixture: ComponentFixture<SubmitAbsenceModalComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ SubmitAbsenceModalComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(SubmitAbsenceModalComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,36 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
|
||||
import { ModalController } from '@ionic/angular';
|
||||
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-submit-absence-modal',
|
||||
templateUrl: './submit-absence-modal.component.html',
|
||||
styleUrls: ['./submit-absence-modal.component.scss'],
|
||||
})
|
||||
export class SubmitAbsenceModalComponent implements OnInit {
|
||||
submitAbsAttachmentList :any =[];
|
||||
absComments: string;
|
||||
constructor( private ts: TranslatorService,private modalCtrl: ModalController, private cs: CommonService){
|
||||
this.submitAbsAttachmentList = this.cs.sharedService.getSharedData('submitAbsAttachmentList', false);
|
||||
this.absComments = this.cs.sharedService.getSharedData('absComments', false);
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
console.log("modal");
|
||||
//this.actionBtns = this.cs.sharedService.getSharedData("passActionMore" , false);
|
||||
console.log("modal");
|
||||
|
||||
}
|
||||
closeModal() {
|
||||
this.modalCtrl.dismiss();
|
||||
}
|
||||
|
||||
|
||||
OkBtnModal() {
|
||||
let data = "ok";
|
||||
this.modalCtrl.dismiss(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
.header-toolbar-new{
|
||||
--background: #22c6b3;
|
||||
}
|
||||
@ -0,0 +1,113 @@
|
||||
<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('attendance','attendance')}}</ion-title>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
|
||||
<ion-content class="colorBG">
|
||||
<div class="header-div">
|
||||
<div class="header-div">
|
||||
<p style="position: absolute; left: 40%; bottom: 65%;">{{currentMonth}}</p>
|
||||
<ion-slides>
|
||||
<ion-slide>
|
||||
<ion-grid class="headerGrid">
|
||||
<div style="color: black;">
|
||||
<!-- <ngx-gauge
|
||||
[type]="gaugeType"
|
||||
[value]="gaugeValue"
|
||||
[label]="gaugeLabel">
|
||||
</ngx-gauge> -->
|
||||
<div class="result-graph">
|
||||
|
||||
<div class="request-heading">
|
||||
|
||||
<span>Open Request Analysis</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="result-text-container">
|
||||
|
||||
<h2>287</h2>
|
||||
|
||||
<span>TOTAL <br> OPEN REQUEST</span>
|
||||
|
||||
</div>
|
||||
|
||||
<p-chart class="today-graph" type="doughnut" [data]="data" [options]="options"></p-chart>
|
||||
|
||||
</div>
|
||||
<div style="position: relative;
|
||||
left: 79%;
|
||||
bottom: 35px;
|
||||
color: black;
|
||||
background-color: #22c6b3;
|
||||
width: 20%; height: 6px;">
|
||||
</div>
|
||||
<div style="position: relative;
|
||||
left: 79%;
|
||||
bottom: 20px;
|
||||
color: black;
|
||||
background-color: #094875;
|
||||
width: 20%; height: 6px;">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</ion-grid>
|
||||
|
||||
</ion-slide>
|
||||
</ion-slides>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 45%;">
|
||||
<ion-grid>
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<ion-grid class="labelGrid">
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<label style="font-size: 13px;">SCHEDULE</label>
|
||||
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<h2 style="margin-left: 45%; font-size: 25px;">23</h2>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-grid class="labelGrid">
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<label style="font-size: 12px;">OFF DAYS</label>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<h2 style="margin-left: 45%; font-size: 25px;">08</h2>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-grid class="labelGrid">
|
||||
<label style="font-size: 13px;">NON ANALYZED</label>
|
||||
<h2 style="margin-left: 45%; font-size: 25px;">01</h2>
|
||||
</ion-grid>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-grid class="labelGrid">
|
||||
<label style="font-size: 13px;">SHORTAGE HOURS</label>
|
||||
<h2 style="margin-left: 45%; font-size: 25px;">03</h2>
|
||||
</ion-grid>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
</div>
|
||||
<div >
|
||||
<ion-grid class="bodyGrid">
|
||||
<app-circle-calendar></app-circle-calendar>
|
||||
</ion-grid>
|
||||
</div>
|
||||
</ion-content>
|
||||
@ -0,0 +1,242 @@
|
||||
.colorBG {
|
||||
--background: #f0efef;
|
||||
}
|
||||
.header-div {
|
||||
background: #22c6b3;
|
||||
color: var(--light);
|
||||
text-transform: capitalize;
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 210px;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.chart-modal .modal-Wrapper {
|
||||
--background: rgb(116, 108, 108) !important;
|
||||
--border-color:white!important ;
|
||||
width: 85%!important ;
|
||||
height: 40px !important ;
|
||||
|
||||
}
|
||||
|
||||
.navbar{
|
||||
font-size: 10px !important;
|
||||
--background: #22C6B3 !important;
|
||||
color: aliceblue !important;
|
||||
// margin-top: 10px !important;
|
||||
|
||||
}
|
||||
|
||||
.menu{
|
||||
// margin-left:330px !important;
|
||||
margin-top: 0px !important;
|
||||
font-size: 35px !important;
|
||||
background: #22C6B3;
|
||||
color: aliceblue;
|
||||
margin-left: 0px !important;
|
||||
|
||||
}
|
||||
|
||||
.person{
|
||||
|
||||
margin-left:100px !important;
|
||||
margin-top: 0px !important;
|
||||
font-size: 23px !important;
|
||||
background: #22C6B3 !important;
|
||||
color: aliceblue !important;
|
||||
|
||||
}
|
||||
|
||||
.grid{
|
||||
margin-bottom: 550px !important;
|
||||
margin-top: 20px !important;
|
||||
margin-left: 15px !important;
|
||||
margin-right: 15px !important;
|
||||
background-color:white !important;
|
||||
border-radius: 20px !important;
|
||||
height: 250px !important;
|
||||
}
|
||||
|
||||
.headerGrid{
|
||||
margin-bottom: 550px !important;
|
||||
margin-top: 80px !important;
|
||||
margin-left: 15px !important;
|
||||
margin-right: 15px !important;
|
||||
background-color:white !important;
|
||||
border-radius: 20px !important;
|
||||
height: 250px !important;
|
||||
}
|
||||
|
||||
.bodyGrid{
|
||||
margin-bottom: 550px !important;
|
||||
margin-top: 20px !important;
|
||||
margin-left: 15px !important;
|
||||
margin-right: 15px !important;
|
||||
background-color:white !important;
|
||||
border-radius: 20px !important;
|
||||
height: 270px !important;
|
||||
}
|
||||
.labelGrid{
|
||||
margin-top: -30px !important;
|
||||
background-color:white !important;
|
||||
border-radius: 20px !important;
|
||||
height: 100px !important;
|
||||
}
|
||||
|
||||
.ionSliders{
|
||||
margin: 0px !important;
|
||||
padding: 0px !important;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.ionSlide{
|
||||
margin-top: 5px !important;
|
||||
margin-left: 190px !important;
|
||||
color: black !important;
|
||||
|
||||
}
|
||||
.dateLable{
|
||||
|
||||
margin-left: 90px !important;
|
||||
color: black !important;
|
||||
font-size: small !important;
|
||||
margin-top: 15px !important;
|
||||
}
|
||||
// h1{
|
||||
// font-size: 15px !important;
|
||||
// text-align: center !important;
|
||||
// }
|
||||
.arrowDropright{
|
||||
margin-left:100px !important;
|
||||
font-size: 20px !important;
|
||||
color: rgb(168, 165, 165) !important;
|
||||
margin-top: 15px !important;
|
||||
|
||||
}
|
||||
.arrowDropleft{
|
||||
font-size: 20px !important;
|
||||
margin-left: 10px !important;
|
||||
margin-top: 15px !important;
|
||||
color: rgb(116, 108, 108) !important;
|
||||
}
|
||||
|
||||
.ionLable{
|
||||
font-size: 10px !important;
|
||||
}
|
||||
|
||||
.number{
|
||||
|
||||
font-size: 18px !important;
|
||||
font-weight: bolder !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.header-div{
|
||||
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, (--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%);
|
||||
background: #22C6B3;
|
||||
// background: linear-gradient(90deg, #85C48D 0%, #85C48D 13%, #2BB5C6 98%, #2BB5C6 100%);
|
||||
color:var(--light);
|
||||
text-transform: capitalize;
|
||||
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 210px;
|
||||
margin-bottom:60px;
|
||||
// border-radius: 0px 0px 70px 70px;
|
||||
}
|
||||
|
||||
.request-heading {
|
||||
|
||||
span {
|
||||
|
||||
text-align: center;
|
||||
|
||||
display: block;
|
||||
|
||||
padding-top: 8px;
|
||||
|
||||
font-family: workSans-Regular;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.result-graph {
|
||||
|
||||
position: relative;
|
||||
|
||||
background: white;
|
||||
|
||||
margin-right: 20px;
|
||||
|
||||
margin-left: 20px;
|
||||
|
||||
margin-top: 20px;
|
||||
|
||||
padding-bottom: 20px;
|
||||
|
||||
border-radius: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.result-text-container {
|
||||
|
||||
padding: 0;
|
||||
|
||||
margin: 0;
|
||||
|
||||
position: absolute;
|
||||
|
||||
left: 50%;
|
||||
|
||||
top: 50%;
|
||||
|
||||
display: block;
|
||||
|
||||
text-align: center;
|
||||
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
h2 {
|
||||
|
||||
font-size: 38px;
|
||||
|
||||
font-family: WorkSans-Bold;
|
||||
|
||||
margin: 0 auto;
|
||||
|
||||
line-height: 36px;
|
||||
|
||||
}
|
||||
|
||||
span {
|
||||
|
||||
width: 125px;
|
||||
|
||||
display: block;
|
||||
|
||||
margin: 0 auto;
|
||||
|
||||
font-size: 12px;
|
||||
|
||||
font-family: workSans-Regular;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MonthlyAttendanceComponent } from './monthly-attendance.component';
|
||||
|
||||
describe('MonthlyAttendanceComponent', () => {
|
||||
let component: MonthlyAttendanceComponent;
|
||||
let fixture: ComponentFixture<MonthlyAttendanceComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ MonthlyAttendanceComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(MonthlyAttendanceComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,101 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { CommonService } from '../../hmg-common/services/common/common.service';
|
||||
import { TranslatorService } from '../../hmg-common/services/translator/translator.service';
|
||||
import { SharedDataService } from '../../hmg-common/services/shared-data-service/shared-data.service';
|
||||
import { GetSubordinatesAttdStatusRequest } from 'src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest';
|
||||
import { DashboredService } from 'src/app/hmg-common/services/dashbored/dashbored.service';
|
||||
import { GetSubordinatesAttdStatusResponse } from 'src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusResponse';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'app-monthly-attendance',
|
||||
templateUrl: './monthly-attendance.component.html',
|
||||
styleUrls: ['./monthly-attendance.component.scss'],
|
||||
})
|
||||
export class MonthlyAttendanceComponent implements OnInit {
|
||||
|
||||
constructor(
|
||||
private cs: CommonService,
|
||||
public ts: TranslatorService,
|
||||
public sharedData: SharedDataService,
|
||||
public DS: DashboredService) { }
|
||||
gaugeType = 'full';
|
||||
gaugeValue = 28.3;
|
||||
gaugeLabel = 'Days';
|
||||
// gaugeAppendText = "km/hr";
|
||||
|
||||
|
||||
currentMonth: any;
|
||||
todayYear: any;
|
||||
todayMonth: any;
|
||||
public options = {
|
||||
|
||||
cutoutPercentage: 80,
|
||||
|
||||
tooltips: { enabled: false },
|
||||
|
||||
legend: { display: false }
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
public data = {
|
||||
|
||||
datasets: [
|
||||
|
||||
{
|
||||
|
||||
data: [120, 50],
|
||||
|
||||
backgroundColor: [
|
||||
|
||||
'#22c6b3',
|
||||
|
||||
'#094875',
|
||||
],
|
||||
|
||||
borderWidth: 2
|
||||
|
||||
}]
|
||||
|
||||
};
|
||||
ngOnInit() { }
|
||||
|
||||
ionViewWillEnter() {
|
||||
this.currentMonth = this.sharedData.getSharedData("currentMonth");
|
||||
console.log(this.currentMonth);
|
||||
let day = this.currentMonth.split(" ");
|
||||
this.todayMonth =day[0];
|
||||
this.todayYear = day[1];
|
||||
this.todayYear = parseInt(this.todayYear);
|
||||
console.log("MONTH: " +this.todayMonth);
|
||||
console.log("YEAR: " +this.todayYear);
|
||||
this.getSubordinatesAttStatus()
|
||||
}
|
||||
|
||||
|
||||
getSubordinatesAttStatus() {
|
||||
let request: GetSubordinatesAttdStatusRequest = new GetSubordinatesAttdStatusRequest();
|
||||
// request.P_SCHEDULE_DATE_FROM = "/Date(1578603600000+0300)/"; //test
|
||||
// request.P_SCHEDULE_DATE_TO = "/Date(1576011600000+0300)/";//test
|
||||
console.log(this.currentMonth);
|
||||
request.SearchMonth = this.todayMonth;
|
||||
request.SearchYear = 2019//this.todayYear;
|
||||
|
||||
this.DS.getSubordinatesAttStatus(request, () => { console.log("Error "); }).subscribe((result: GetSubordinatesAttdStatusResponse) => {
|
||||
if (this.cs.validResponse(result)) {
|
||||
console.log("response");
|
||||
console.log(result);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
x(){
|
||||
console.log("ENAD CHANge")
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
<ion-content padding>
|
||||
|
||||
<!--
|
||||
<ion-col col-1
|
||||
style="margin-right: -22px;margin-top: -10px;">
|
||||
<ion-button class="closeIcon" (click)="closeModal()">
|
||||
<img src="../assets/imgs/close.png">
|
||||
|
||||
</ion-button>
|
||||
</ion-col> -->
|
||||
|
||||
|
||||
<h2><div class="Header">Confirmation</div></h2>
|
||||
|
||||
<div>
|
||||
<div *ngIf="submitAttachmentList.length==0" class="labelcheck" lines="none" style="text-align: center;">
|
||||
No Attachment
|
||||
</div>
|
||||
<div *ngIf="eitComments==''" class="labelcheck" style="text-align: center;margin-bottom: 5px;padding-bottom: 16px;">
|
||||
No Note
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<ion-footer style="border-top: 1px solid grey !important;">
|
||||
<ion-row class="rowBtn">
|
||||
<ion-label class="labelRadio">Are you sure you want to submit</ion-label>
|
||||
<ion-button class="submitOkButton" (click)="OkBtnModal()"> {{ts.trPK('general','ok')}}
|
||||
</ion-button>
|
||||
</ion-row>
|
||||
|
||||
<ion-row class="rowBtn">
|
||||
<ion-button class="submitCancelButton" (click)="closeModal()"> {{ts.trPK('general','cancel')}}
|
||||
</ion-button>
|
||||
|
||||
</ion-row>
|
||||
</ion-footer>
|
||||
</ion-content>
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
.rowBtn{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.Header{
|
||||
color: black !important;
|
||||
font-size: 25px !important;
|
||||
font-weight: bold !important;;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.labelRadio{
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.labelcheck{
|
||||
color: red !important;
|
||||
font-weight: bold !important;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.submitOkButton{
|
||||
white-space: normal !important;
|
||||
text-transform: capitalize !important;
|
||||
min-height: 45px !important;
|
||||
min-width: 5px !important;
|
||||
margin: 8px !important;
|
||||
--background:: #22c6b3;
|
||||
width: 100% !important;
|
||||
color: white!important;
|
||||
border-radius: 16px !important;
|
||||
}
|
||||
.submitCancelButton{
|
||||
white-space: normal !important;
|
||||
text-transform: capitalize !important;
|
||||
min-height: 45px !important;
|
||||
min-width: 5px !important;
|
||||
margin: 8px !important;
|
||||
--background:: #094875;
|
||||
width: 100% !important;
|
||||
color: white!important;
|
||||
border-radius: 16px !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SubmitEitModalComponent } from './submit-eit-modal.component';
|
||||
|
||||
describe('SubmitEitModalComponent', () => {
|
||||
let component: SubmitEitModalComponent;
|
||||
let fixture: ComponentFixture<SubmitEitModalComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ SubmitEitModalComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(SubmitEitModalComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,36 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
|
||||
import { ModalController } from '@ionic/angular';
|
||||
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-submit-eit-modal',
|
||||
templateUrl: './submit-eit-modal.component.html',
|
||||
styleUrls: ['./submit-eit-modal.component.scss'],
|
||||
})
|
||||
export class SubmitEitModalComponent implements OnInit {
|
||||
submitAttachmentList :any =[];
|
||||
eitComments: string;
|
||||
constructor( private ts: TranslatorService,private modalCtrl: ModalController, private cs: CommonService){
|
||||
this.submitAttachmentList = this.cs.sharedService.getSharedData('submitAttachmentList', false);
|
||||
this.eitComments = this.cs.sharedService.getSharedData('eitComments', false);
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
console.log("modal");
|
||||
//this.actionBtns = this.cs.sharedService.getSharedData("passActionMore" , false);
|
||||
console.log("modal");
|
||||
|
||||
}
|
||||
closeModal() {
|
||||
this.modalCtrl.dismiss();
|
||||
}
|
||||
|
||||
|
||||
OkBtnModal() {
|
||||
let data = "ok";
|
||||
this.modalCtrl.dismiss(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
import { FeedbackDirective } from './feedback.directive';
|
||||
|
||||
describe('FeedbackDirective', () => {
|
||||
it('should create an instance', () => {
|
||||
const directive = new FeedbackDirective();
|
||||
expect(directive).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -1,24 +0,0 @@
|
||||
import { Directive, ElementRef, HostListener } from '@angular/core';
|
||||
import { TranslatorService } from '../../services/translator/translator.service';
|
||||
import { CommonService } from '../../services/common/common.service';
|
||||
import { FeedbackService } from './feedback.service';
|
||||
|
||||
@Directive({
|
||||
selector: '[feedback]'
|
||||
})
|
||||
export class FeedbackDirective {
|
||||
|
||||
constructor(
|
||||
private cs: CommonService,
|
||||
private ts: TranslatorService,
|
||||
private el: ElementRef,
|
||||
private feedBackService: FeedbackService
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@HostListener('mousedown') onMouseEnter() {
|
||||
this.feedBackService.vibrate();
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { FeedbackService } from './feedback.service';
|
||||
|
||||
describe('FeedbackService', () => {
|
||||
beforeEach(() => TestBed.configureTestingModule({}));
|
||||
|
||||
it('should be created', () => {
|
||||
const service: FeedbackService = TestBed.get(FeedbackService);
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -1,20 +0,0 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Vibration } from '@ionic-native/vibration/ngx';
|
||||
// import { SettingsService } from 'src/app/settings/service/settings.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class FeedbackService {
|
||||
// constructor(private vibration: Vibration, private settings: SettingsService) {}
|
||||
constructor(private vibration: Vibration) {}
|
||||
|
||||
public async vibrate() {
|
||||
try {
|
||||
const on = true;
|
||||
if (on) {
|
||||
this.vibration.vibrate(500);
|
||||
}} catch (e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
<div class="main-container" [ngStyle]="active === true ? {'background': color} : {}">
|
||||
<div class="main-container-radius" [ngStyle]="active === true ? {'background-color': '#ffffff'} : {'background-color': color}"></div>
|
||||
<span class="number-span" [ngStyle]="active === true ? {'color': '#ffffff'} : {}">{{value}}</span>
|
||||
<span class="text-span" [ngStyle]="active === true ? {'color': '#ffffff'} : {}">{{text}}</span>
|
||||
</div>
|
||||
@ -0,0 +1,33 @@
|
||||
.main-container{
|
||||
width: 72px;
|
||||
background-color: white;
|
||||
padding: 10px;
|
||||
border-radius: 20px;
|
||||
height: 70px;
|
||||
text-align: right;
|
||||
font-family: WorkSans-Regular;
|
||||
padding-top: 25px;
|
||||
box-shadow: 0 0 6px rgba(0,0,0,0.16);
|
||||
position: relative;
|
||||
}
|
||||
.main-container-radius{
|
||||
// content: "";
|
||||
position: absolute;
|
||||
width: 30px;
|
||||
height: 6px;
|
||||
border-radius: 10px;
|
||||
background-color: red;
|
||||
left: 10px;
|
||||
top: 10px;
|
||||
}
|
||||
.number-span{
|
||||
font-size: 19px;
|
||||
display: block;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.text-span{
|
||||
font-size: 14px;
|
||||
color: #888;
|
||||
margin: -1px;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CardFilterComponent } from './card-filter.component';
|
||||
|
||||
describe('CardFilterComponent', () => {
|
||||
let component: CardFilterComponent;
|
||||
let fixture: ComponentFixture<CardFilterComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CardFilterComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardFilterComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,18 @@
|
||||
import { Component, OnInit, Input } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-card-filter',
|
||||
templateUrl: './card-filter.component.html',
|
||||
styleUrls: ['./card-filter.component.scss'],
|
||||
})
|
||||
export class CardFilterComponent implements OnInit {
|
||||
@Input() value: number;
|
||||
@Input() text: string;
|
||||
@Input() active: boolean;
|
||||
@Input() color: string;
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {}
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
|
||||
<calendar #slider [dateFormatter]="calendar.dateFormatter"
|
||||
[monthviewEventDetailTemplate]="template"
|
||||
[calendarMode]="calendar.mode"
|
||||
[currentDate]="currentDateParent"
|
||||
[lockSwipes]="true"
|
||||
(onTimeSelected)="onDayClicked($event)">
|
||||
</calendar>
|
||||
|
||||
|
||||
<ng-template #template let-showEventDetail="showEventDetail" let-selectedDate="selectedDate" let-noEventsLabel="noEventsLabel">
|
||||
|
||||
</ng-template>
|
||||
|
||||
@ -0,0 +1,124 @@
|
||||
|
||||
|
||||
|
||||
// .modalCss .modal-Wrapper {
|
||||
// width: 600px;
|
||||
// height: 300px;
|
||||
// }
|
||||
|
||||
.chart-modal .modal-Wrapper {
|
||||
--background: rgb(116, 108, 108) !important;
|
||||
--border-color:white!important ;
|
||||
width: 85%!important ;
|
||||
height: 40px !important ;
|
||||
|
||||
}
|
||||
|
||||
.navbar{
|
||||
font-size: 10px !important;
|
||||
--background: #22C6B3 !important;
|
||||
color: aliceblue !important;
|
||||
// margin-top: 10px !important;
|
||||
|
||||
}
|
||||
|
||||
.menu{
|
||||
// margin-left:330px !important;
|
||||
margin-top: 0px !important;
|
||||
font-size: 35px !important;
|
||||
background: #22C6B3;
|
||||
color: aliceblue;
|
||||
margin-left: 0px !important;
|
||||
|
||||
}
|
||||
|
||||
.person{
|
||||
|
||||
margin-left:100px !important;
|
||||
margin-top: 0px !important;
|
||||
font-size: 23px !important;
|
||||
background: #22C6B3 !important;
|
||||
color: aliceblue !important;
|
||||
|
||||
}
|
||||
|
||||
.grid{
|
||||
margin-bottom: 550px !important;
|
||||
margin-top: 20px !important;
|
||||
margin-left: 15px !important;
|
||||
margin-right: 15px !important;
|
||||
background-color:white !important;
|
||||
border-radius: 20px !important;
|
||||
height: 250px !important;
|
||||
}
|
||||
|
||||
.ionSliders{
|
||||
margin: 0px !important;
|
||||
padding: 0px !important;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.ionSlide{
|
||||
margin-top: 5px !important;
|
||||
margin-left: 190px !important;
|
||||
color: black !important;
|
||||
|
||||
}
|
||||
.dateLable{
|
||||
|
||||
margin-left: 90px !important;
|
||||
color: black !important;
|
||||
font-size: small !important;
|
||||
margin-top: 15px !important;
|
||||
}
|
||||
// h1{
|
||||
// font-size: 15px !important;
|
||||
// text-align: center !important;
|
||||
// }
|
||||
.arrowDropright{
|
||||
margin-left:100px !important;
|
||||
font-size: 20px !important;
|
||||
color: rgb(168, 165, 165) !important;
|
||||
margin-top: 15px !important;
|
||||
|
||||
}
|
||||
.arrowDropleft{
|
||||
font-size: 20px !important;
|
||||
margin-left: 10px !important;
|
||||
margin-top: 15px !important;
|
||||
color: rgb(116, 108, 108) !important;
|
||||
}
|
||||
|
||||
.ionLable{
|
||||
font-size: 10px !important;
|
||||
}
|
||||
|
||||
.number{
|
||||
|
||||
font-size: 18px !important;
|
||||
font-weight: bolder !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.header-div{
|
||||
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, (--primary) 0%, var(--secondary) 36%,var(--secondary) 59%, var(--customnavy) 100%);
|
||||
background: #22C6B3;
|
||||
// background: linear-gradient(90deg, #85C48D 0%, #85C48D 13%, #2BB5C6 98%, #2BB5C6 100%);
|
||||
color:var(--light);
|
||||
text-transform: capitalize;
|
||||
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 210px;
|
||||
margin-bottom:60px;
|
||||
// border-radius: 0px 0px 70px 70px;
|
||||
}
|
||||
|
||||
.advanced-search-modal {
|
||||
--height: 12cm !important;
|
||||
--width: 80% !important;
|
||||
--border-radius: 0.4cm;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CircleCalendarComponent } from './circle-calendar.component';
|
||||
|
||||
describe('CircleCalendarComponent', () => {
|
||||
let component: CircleCalendarComponent;
|
||||
let fixture: ComponentFixture<CircleCalendarComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CircleCalendarComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CircleCalendarComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,149 @@
|
||||
import { Component, OnInit, Output, Input, ViewChild, ElementRef, EventEmitter } from '@angular/core';
|
||||
import { TimeSlot } from './time.slot';
|
||||
import { SharedDataService } from '../../services/shared-data-service/shared-data.service';
|
||||
import { ModalController } from '@ionic/angular';
|
||||
import { DateInfoModalComponent } from './date-info-modal/date-info-modal.component';
|
||||
import { MenuResponse } from '../../services/menu/models/menu-response';
|
||||
import * as moment from 'moment';
|
||||
import { CommonService } from '../../services/common/common.service';
|
||||
import { GetDayAndHoursDetailsRequest } from 'src/app/time-card/service/models/get-day-hours-type-details.request';
|
||||
import { TimeCardService } from 'src/app/time-card/service/time-card.service';
|
||||
import { GetShiftDetailRequest } from 'src/app/time-card/service/models/get-shift-detail.request';
|
||||
import { GetSwipesRequest } from 'src/app/time-card/service/models/get-swipes-request';
|
||||
|
||||
@Component({
|
||||
selector: 'app-circle-calendar',
|
||||
templateUrl: './circle-calendar.component.html',
|
||||
styleUrls: ['./circle-calendar.component.scss']
|
||||
})
|
||||
export class CircleCalendarComponent implements OnInit {
|
||||
|
||||
@Input() eventsdateDayOff: any = [];
|
||||
@Input() eventsdateAttend: any = [];
|
||||
@Input() eventsdateAbsent: any = [];
|
||||
@Input() normalDays: any = [];
|
||||
@Input() dayHoursTypeDetailsList: any = [];
|
||||
@Input() currentDateParent: string;
|
||||
@Output() monthTitle = new EventEmitter();
|
||||
@Output() currentYear = new EventEmitter();
|
||||
|
||||
public monthName: any;
|
||||
public yearDate: any;
|
||||
public selEmp: string;
|
||||
public selMenu: MenuResponse = new MenuResponse();
|
||||
public respID: number;
|
||||
public menuType: any;
|
||||
public dayAndHoursPageNumber = 1;
|
||||
public selectedFilters: any = {};
|
||||
public selectedShiftFilter: any;
|
||||
public arrDaysAttendance: any = [];
|
||||
public arrDaysAbsent: any = [];
|
||||
public arrDaysOff: any = [];
|
||||
public selectedShift: any;
|
||||
public shiftDetailsData: any = [];
|
||||
public swipeDetailsData: any = [];
|
||||
public arrOfAllList: any = [];
|
||||
eventsdata: any = [];
|
||||
|
||||
public calendar = {
|
||||
mode: 'month'
|
||||
};
|
||||
|
||||
public currentAvailableAppoDate: any;
|
||||
public eventsInput: any = [];
|
||||
public events: TimeSlot[] = [];
|
||||
public selectedTime: string;
|
||||
public selectedDate: string;
|
||||
public weekDaysEn = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||
public weekDaysEnSort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
||||
public lockSwipeToPrev: any = true;
|
||||
public currentDate: any;
|
||||
public selectedDateObject: any;
|
||||
public currentDateToSwipe: any;
|
||||
public activeMonth: any;
|
||||
public isFirst = false;
|
||||
public selectedIndexData: any;
|
||||
arrFutrueDays: any;
|
||||
eventsdateFutrue: any;
|
||||
detailData: any;
|
||||
constructor(
|
||||
public sharedData: SharedDataService,
|
||||
public mod: ModalController,
|
||||
public common: CommonService,
|
||||
public timeCardService: TimeCardService) { }
|
||||
@ViewChild('slider') slides: ElementRef;
|
||||
|
||||
ngOnInit() {
|
||||
this.reRenderCalendar();
|
||||
console.log(this.currentDateParent);
|
||||
}
|
||||
|
||||
// tslint:disable-next-line: use-life-cycle-interface
|
||||
ngAfterViewInit() {
|
||||
setTimeout(() => {
|
||||
this.reRenderCalendar();
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
reRenderCalendar() {
|
||||
this.renderDate(this.eventsdateAbsent, 'absent');
|
||||
this.renderDate(this.eventsdateAttend, 'present');
|
||||
this.renderDate(this.eventsdateDayOff, 'dayoff');
|
||||
this.renderDate(this.normalDays, 'scheduleDay');
|
||||
}
|
||||
|
||||
public async dateModal(shiftDetails) {
|
||||
const modal = await this.mod.create({
|
||||
component: DateInfoModalComponent,
|
||||
showBackdrop: true,
|
||||
backdropDismiss: true,
|
||||
componentProps: {
|
||||
TODAYDATE: this.selectedIndexData,
|
||||
SHIFTDETAILS: shiftDetails
|
||||
}
|
||||
});
|
||||
modal.cssClass = 'calendar-modal';
|
||||
await modal.present();
|
||||
}
|
||||
|
||||
public renderDate(arrayDays, cssClass) {
|
||||
const td = document.querySelectorAll('.swiper-slide-active .monthview-datetable td:not(.text-muted)');
|
||||
arrayDays.forEach(dateObj => {
|
||||
const date = dateObj.startTime;
|
||||
td.forEach(element => {
|
||||
// tslint:disable-next-line: triple-equals
|
||||
if (date.getDate() == element.textContent.trim()) {
|
||||
element.classList.add(cssClass);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
onDayClicked(event) {
|
||||
if (this.isFirst) {
|
||||
console.log(event.selectedTime.getDate());
|
||||
const selectedIndex = event.selectedTime.getDate();
|
||||
this.selectedIndexData = this.dayHoursTypeDetailsList[selectedIndex - 1];
|
||||
if (this.selectedIndexData.present) {
|
||||
const rtpID = this.selectedIndexData.RTP_ID;
|
||||
this.getScheduleShiftDetails(rtpID);
|
||||
}
|
||||
} else {
|
||||
this.isFirst = true;
|
||||
}
|
||||
}
|
||||
|
||||
getScheduleShiftDetails(RTP_ID) {
|
||||
const GetShiftDetailRequestObject = new GetShiftDetailRequest();
|
||||
GetShiftDetailRequestObject.P_RTP_ID = RTP_ID;
|
||||
GetShiftDetailRequestObject.P_PAGE_NUM = 1;
|
||||
GetShiftDetailRequestObject.P_PAGE_LIMIT = 10;
|
||||
this.timeCardService.getShiftDetail(GetShiftDetailRequestObject).subscribe((result) => {
|
||||
if (this.common.validResponse(result)) {
|
||||
console.log(result);
|
||||
this.shiftDetailsData = result.GetScheduleShiftsDetailsList;
|
||||
this.dateModal(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,104 @@
|
||||
|
||||
<!-- <ion-slides [options]="slideOptsOne" (ionSlideDidChange)="slideChanged($event)">
|
||||
<ion-slide *ngFor="let shift of SHIFTDETAILS.GetScheduleShiftsDetailsList; let i=index"> -->
|
||||
<!-- <div> -->
|
||||
<ion-grid class="headerGrid">
|
||||
<ion-row style="margin-left: -130px; margin-top: 27px;">
|
||||
<ion-col size="10">
|
||||
<div style="width: 100%;">
|
||||
<div class="result-graph">
|
||||
<div class="result-text-container">
|
||||
<h2 class="percentage">{{percentage}}</h2>
|
||||
<span>Completed <br><br><br><br></span>
|
||||
</div>
|
||||
<p-chart class="today-graph" type="doughnut" [data]="data" [options]="options"></p-chart>
|
||||
</div>
|
||||
</div>
|
||||
</ion-col>
|
||||
<ion-col size="2">
|
||||
<div class="div" >
|
||||
<ion-row >
|
||||
<p class="p0">{{nameDay}}</p>
|
||||
</ion-row>
|
||||
<ion-row >
|
||||
<p class="p1">{{day}}</p>
|
||||
</ion-row>
|
||||
<ion-row >
|
||||
<p class="p2">{{nameMonth}}</p>
|
||||
</ion-row>
|
||||
<ion-row >
|
||||
<p class="p3">{{year}}</p>
|
||||
</ion-row>
|
||||
<ion-row>
|
||||
<p class="p5">{{ts.trPK('attendance','present')}}</p>
|
||||
</ion-row>
|
||||
</div>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
|
||||
<div>
|
||||
<ion-grid class="grid">
|
||||
<ion-row class="gridrow">
|
||||
<ion-col class="liftcol">
|
||||
<ion-row class="amountlabel"> <p>{{shiftTime}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','shift-time')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
<ion-col class="rightcol">
|
||||
<ion-row class="amountlabel"><p >{{scheduled}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','regular')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
<ion-row class="gridrow" >
|
||||
<ion-col class="liftcol">
|
||||
<ion-row class="amountlabel"><p >{{startDate}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','check-in')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
<ion-col class="rightcol">
|
||||
<ion-row class="amountlabel"> <p >{{endDate}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','check-out')}} </p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
</ion-row >
|
||||
<ion-row class="gridrow">
|
||||
<ion-col class="liftcol">
|
||||
<ion-row class="amountlabel"> <p >{{lateIn}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','late-in')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
<ion-col class="rightcol">
|
||||
<ion-row class="amountlabel"> <p >{{excess}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','excess')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
<ion-row class="gridrow">
|
||||
<ion-col class="liftcol">
|
||||
<ion-row class="amountlabel"> <p >{{shortage}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p>{{ts.trPK('attendance-tracking','shortage')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
<ion-col class="rightcol">
|
||||
<ion-row class="amountlabel"> <p >{{earlyOut}}</p> </ion-row>
|
||||
<ion-row class="rowlabel">
|
||||
<p >{{ts.trPK('attendance-tracking','early-out')}}</p>
|
||||
</ion-row>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
|
||||
</ion-grid>
|
||||
</div>
|
||||
<!-- </div> -->
|
||||
|
||||
<!-- </ion-slide>
|
||||
</ion-slides> -->
|
||||
@ -0,0 +1,180 @@
|
||||
.result-text-container {
|
||||
|
||||
// padding: 0;
|
||||
|
||||
// margin: 0;
|
||||
|
||||
// position: absolute;
|
||||
|
||||
// left: 50%;
|
||||
|
||||
// top: 50%;
|
||||
|
||||
// display: block;
|
||||
|
||||
// text-align: center;
|
||||
|
||||
// transform: translate(-50%, -50%);
|
||||
//////////////////////////here
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
left: 58%;
|
||||
top: 67%;
|
||||
display: block;
|
||||
text-align: center;
|
||||
-webkit-transform: translate(-50%, -50%);
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
h2 {
|
||||
|
||||
font-size: 25px;
|
||||
|
||||
// font-family: WorkSans-Bold;
|
||||
font-weight: bold;
|
||||
|
||||
margin: 0 auto;
|
||||
|
||||
line-height: 36px;
|
||||
|
||||
}
|
||||
|
||||
span {
|
||||
|
||||
width: 125px;
|
||||
|
||||
display: block;
|
||||
|
||||
margin: 0 auto;
|
||||
|
||||
font-size: 12px;
|
||||
|
||||
font-family: workSans-Regular;
|
||||
color: rgb(163, 163, 163) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.today-graph{
|
||||
display: block;
|
||||
height: 127px;
|
||||
width: 288px;
|
||||
}
|
||||
.amountlabel{
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
font-size: 13px !important;
|
||||
// border-top: 1px solid rgb(163, 163, 163) !important;
|
||||
margin-left: 0px !important;
|
||||
margin-bottom: -29px !important;
|
||||
}
|
||||
.rowlabel{
|
||||
color: rgb(163, 163, 163) !important;
|
||||
font-size: 13px !important;
|
||||
font-family: WorkSans-Bold;
|
||||
}
|
||||
.grid{
|
||||
padding-bottom: -20px !important;
|
||||
padding-top: -20px !important;
|
||||
height: 360px !important;
|
||||
|
||||
}
|
||||
.liftcol{
|
||||
// padding-top: 1px !important;
|
||||
// padding-bottom: 1px !important;
|
||||
border-right: 1px solid rgb(163, 163, 163) !important;
|
||||
}
|
||||
|
||||
.rightcol{
|
||||
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
.gridrow{
|
||||
border-top: 1px solid rgb(163, 163, 163) !important;
|
||||
margin-left: 19px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.div{
|
||||
// border: 1px solid #a3a3a3 !important;
|
||||
// text-align: center;
|
||||
// width: 274%;
|
||||
// border-radius: 8%;
|
||||
// height: 40%;
|
||||
// margin-right: -11px;
|
||||
border: 1px solid #a3a3a3 !important;
|
||||
border-radius: 9px;
|
||||
width: 241%;
|
||||
margin-right: -226px;
|
||||
|
||||
|
||||
}
|
||||
.p0{
|
||||
margin-bottom: -13px !important;
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
font-size: 15px !important;
|
||||
margin-top: 8px;
|
||||
text-align: center;
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
.p1{
|
||||
margin-bottom: -7px !important;
|
||||
color: black !important;
|
||||
font-family: WorkSans-Bold !important;
|
||||
font-size: 33px;
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
.p2{ font-weight: bold !important;
|
||||
font-size: 17px !important;
|
||||
margin-bottom: 43px !important;
|
||||
margin-top: 0px !important;
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
margin-left: 33px;
|
||||
}
|
||||
.p3{ /* margin-bottom: -72px !important; */
|
||||
color: black !important;
|
||||
font-weight: bold !important;
|
||||
font-size: 19px;
|
||||
margin-top: -43px;
|
||||
margin-left: 27px;
|
||||
}
|
||||
.p4{ margin-bottom: 56px !important;
|
||||
margin-top: -26px !important;
|
||||
color: black !important;
|
||||
}
|
||||
// .pdiv{background-color: gray;height: 26px;}
|
||||
.p5{
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
background-color: #094875;
|
||||
color: white;
|
||||
margin-top: -13px;
|
||||
margin-bottom: -3px;
|
||||
height: 21px;
|
||||
width: 110px;
|
||||
padding-top: 7px;
|
||||
/* font-family: WorkSans-Bold !important; */
|
||||
padding-bottom: 21px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
// .less{ background-color: #22C6B3;
|
||||
// background-color: #22C6B3;
|
||||
// border: none;
|
||||
// color: white;
|
||||
// text-align: center;
|
||||
// text-decoration: none;
|
||||
// display: inline-block;
|
||||
// font-size: 12px;
|
||||
// border-radius: 30px;
|
||||
// height: 26px;
|
||||
// padding: 6px 24px;
|
||||
// margin-left: 123px;
|
||||
// /* margin-top: -19px; */
|
||||
// margin-bottom: 17px;
|
||||
// }
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { DateInfoModalComponent } from './date-info-modal.component';
|
||||
|
||||
describe('DateInfoModalComponent', () => {
|
||||
let component: DateInfoModalComponent;
|
||||
let fixture: ComponentFixture<DateInfoModalComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ DateInfoModalComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DateInfoModalComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,138 @@
|
||||
import { Component, OnInit, Input, ViewChild } from '@angular/core';
|
||||
import { ModalController, NavParams, IonInfiniteScroll } from '@ionic/angular';
|
||||
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
|
||||
import { IonSlides } from '@ionic/angular';
|
||||
|
||||
@Component({
|
||||
selector: 'app-date-info-modal',
|
||||
templateUrl: './date-info-modal.component.html',
|
||||
styleUrls: ['./date-info-modal.component.scss'],
|
||||
})
|
||||
export class DateInfoModalComponent implements OnInit {
|
||||
@ViewChild('slides') slides: IonSlides;
|
||||
[x: string]: any;
|
||||
gaugeType = 'full';
|
||||
gaugeValue = 28.3;
|
||||
gaugeLabel = 'Days';
|
||||
@Input() TODAYDATE: any;
|
||||
@Input() SHIFTDETAILS: any;
|
||||
today: any;
|
||||
month: any;
|
||||
monthDate: any;
|
||||
excess: any;
|
||||
shortage: any;
|
||||
lateIn: any;
|
||||
scheduled: any;
|
||||
earlyOut: any;
|
||||
shiftTime: any;
|
||||
startDate: any;
|
||||
endDate: any;
|
||||
shift: any;
|
||||
percentage: any;
|
||||
data: any;
|
||||
scheduleDate: any;
|
||||
tests: any;
|
||||
year: any;
|
||||
nameMonth: any;
|
||||
nameDay: any;
|
||||
public weekDaysEn = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||
|
||||
public options = {
|
||||
cutoutPercentage: 85,
|
||||
tooltips: { enabled: false },
|
||||
legend: { display: false }
|
||||
};
|
||||
|
||||
public slideOptsOne = {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 0
|
||||
};
|
||||
|
||||
constructor(
|
||||
public modalController: ModalController,
|
||||
public navParams: NavParams,
|
||||
public ts: TranslatorService
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
console.log(this.TODAYDATE);
|
||||
this.excess = this.TODAYDATE.EXCESS_HRS;
|
||||
this.lateIn = this.TODAYDATE.LATE_IN_HRS;
|
||||
this.shortage = this.TODAYDATE.SHORTAGE_HRS;
|
||||
this.scheduled = this.TODAYDATE.SCHEDULED_HRS;
|
||||
this.earlyOut = this.TODAYDATE.EARLY_OUT_HRS ;
|
||||
this.scheduleDate = this.TODAYDATE.SCHEDULE_DATE;
|
||||
this.assignData(this.SHIFTDETAILS.GetScheduleShiftsDetailsList[0]);
|
||||
}
|
||||
|
||||
assignData(shiftDetails) {
|
||||
this.shiftTime = shiftDetails.SHT_NAME;
|
||||
this.startDate = shiftDetails.SHT_ACTUAL_START_TIME;
|
||||
this.endDate = shiftDetails.SHT_ACTUAL_END_TIME;
|
||||
this.percentage = shiftDetails.PERCENTAGE;
|
||||
this.percChart = this.percentage.substring(0, this.percentage.indexOf('%'));
|
||||
const test = this.scheduleDate;
|
||||
const splitdate = test.split(' ');
|
||||
const date = splitdate[0];
|
||||
const test1 = date.split('/');
|
||||
this.day = test1[1];
|
||||
this.year = test1[2];
|
||||
this.month = test1[0];
|
||||
|
||||
// tslint:disable-next-line: radix
|
||||
this.nameMonth = this.getMonthName(parseInt(this.month));
|
||||
this.nameDay = this.getHeaderDay(new Date(date));
|
||||
const d = new Date(date);
|
||||
this.data = {
|
||||
labels: ['percentage'],
|
||||
datasets: [
|
||||
{
|
||||
data: [this.percChart],
|
||||
backgroundColor: [
|
||||
'#22C6B3'
|
||||
],
|
||||
borderWidth: 2
|
||||
}]
|
||||
};
|
||||
}
|
||||
|
||||
slideChanged(ev) {
|
||||
this.slides.getActiveIndex().then(index => {
|
||||
const shiftDetails = this.SHIFTDETAILS[index];
|
||||
this.assignData(shiftDetails);
|
||||
});
|
||||
}
|
||||
|
||||
public getMonthName(value: number): string {
|
||||
switch (value) {
|
||||
case 1:
|
||||
return 'Jan';
|
||||
case 2:
|
||||
return 'Feb';
|
||||
case 3:
|
||||
return 'Mar';
|
||||
case 4:
|
||||
return 'Apr';
|
||||
case 5:
|
||||
return 'May';
|
||||
case 6:
|
||||
return 'Jun';
|
||||
case 7:
|
||||
return 'Jul';
|
||||
case 8:
|
||||
return 'Aug';
|
||||
case 9:
|
||||
return 'Sep';
|
||||
case 10:
|
||||
return 'Oct';
|
||||
case 11:
|
||||
return 'Nov';
|
||||
case 12:
|
||||
return 'Dec';
|
||||
}
|
||||
}
|
||||
|
||||
getHeaderDay(date: any) {
|
||||
return this.weekDaysEn[date.getDay()];
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
export class TimeSlot {
|
||||
constructor(isoTime: string, startDate: string, end: string) {
|
||||
this.isoTime = isoTime;
|
||||
this.start = startDate;
|
||||
this.end = end;
|
||||
this.allDay = true;
|
||||
this.draggable = false;
|
||||
}
|
||||
|
||||
public eventTimeLabel() {
|
||||
return new Date(this.end).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
|
||||
}
|
||||
// event time in iso format
|
||||
isoTime: string;
|
||||
// start of event day
|
||||
start: string;
|
||||
// event date time
|
||||
end: string;
|
||||
allDay: boolean;
|
||||
draggable: boolean;
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
<div class="team-member-container">
|
||||
<ion-row>
|
||||
<ion-col [size]="3">
|
||||
<div class="user-image-container">
|
||||
<div class="user-image">
|
||||
<img [src]="employeeImage" alt="Team Member Image"/>
|
||||
</div>
|
||||
</div>
|
||||
</ion-col>
|
||||
<ion-col [size]="9" style="padding: 8px 5px 0px;margin-top: 14px;">
|
||||
<div>
|
||||
<span class="employee-name">
|
||||
<h2 class="name">{{name}}</h2>
|
||||
<span class="title">{{title}}</span>
|
||||
</span>
|
||||
<span class="image-container">
|
||||
<img src="../assets/imgs/green_call_icon.png" >
|
||||
</span>
|
||||
</div>
|
||||
<!-- <div class="swipe-information">
|
||||
<span class="check-in"><strong>Check-In:</strong> {{checkIn}}</span>
|
||||
<span><strong>Check-Out:</strong> {{checkOut}}</span>
|
||||
</div> -->
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</div>
|
||||
@ -0,0 +1,84 @@
|
||||
.team-member-container{
|
||||
background: white;
|
||||
border-radius: 100px 20px 20px 100px;
|
||||
margin-top: 15px;
|
||||
font-family: WorkSans-Regular;
|
||||
}
|
||||
|
||||
.user-image-container{
|
||||
position: relative;
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
// &:before{
|
||||
// position: absolute;
|
||||
// content: "";
|
||||
// width: 20px;
|
||||
// height: 20px;
|
||||
// border-radius: 20px;
|
||||
// border: 1px solid white;
|
||||
// top: 0;
|
||||
// right: 0;
|
||||
// background-color: red;
|
||||
// z-index: 9;
|
||||
// }
|
||||
// &.present:before{
|
||||
// background-color: green !important;
|
||||
// }
|
||||
}
|
||||
.user-image{
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 80px;
|
||||
border: 1px solid #ccc;
|
||||
margin: 0px auto 6px;
|
||||
img {
|
||||
width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.employee-name{
|
||||
display: inline-block;
|
||||
width: 80%;
|
||||
.name{
|
||||
font-size: 16px;
|
||||
color: black;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
.title{
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.image-container{
|
||||
width: 20%;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
margin-top: 5px;
|
||||
}
|
||||
.swipe-information{
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
border-top: 1px solid #ccc;
|
||||
padding-top: 6px;
|
||||
margin-top: 6px;
|
||||
.check-in {
|
||||
font-size: 12px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { EmployeeInformationComponent } from './employee-information.component';
|
||||
|
||||
describe('EmployeeInformationComponent', () => {
|
||||
let component: EmployeeInformationComponent;
|
||||
let fixture: ComponentFixture<EmployeeInformationComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ EmployeeInformationComponent ],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(EmployeeInformationComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,19 @@
|
||||
import { Component, OnInit, Input } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-employee-information',
|
||||
templateUrl: './employee-information.component.html',
|
||||
styleUrls: ['./employee-information.component.scss'],
|
||||
})
|
||||
export class EmployeeInformationComponent implements OnInit {
|
||||
|
||||
public userImage: any = '../assets/imgs/profile.png';
|
||||
@Input() name: string;
|
||||
@Input() title: string;
|
||||
@Input() employeeImage: string;
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue