diff --git a/Mohem/angular.json b/Mohem/angular.json index 42b54182..eb6b8116 100644 --- a/Mohem/angular.json +++ b/Mohem/angular.json @@ -42,7 +42,7 @@ "input": "src/app/app.scss" } ], - "scripts": [], + "scripts": ["node_modules/chart.js/dist/Chart.js"], "es5BrowserSupport": true }, "configurations": { diff --git a/Mohem/package-lock.json b/Mohem/package-lock.json index 0b7b6fcf..386c5b8a 100644 --- a/Mohem/package-lock.json +++ b/Mohem/package-lock.json @@ -1535,9 +1535,9 @@ "dev": true }, "@types/webpack-sources": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", - "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.6.tgz", + "integrity": "sha512-FtAWR7wR5ocJ9+nP137DV81tveD/ZgB1sadnJ/axUGM3BUVfRPx8oQNMtv3JNfTeHx3VP7cXiyfR/jmtEsVHsQ==", "dev": true, "requires": { "@types/node": "*", @@ -2687,14 +2687,14 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.5.tgz", + "integrity": "sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001022", + "electron-to-chromium": "^1.3.338", + "node-releases": "^1.1.46" } }, "browserstack": { @@ -2881,9 +2881,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001020", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", - "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==", + "version": "1.0.30001023", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz", + "integrity": "sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA==", "dev": true }, "canonical-path": { @@ -5495,9 +5495,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.333", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.333.tgz", - "integrity": "sha512-7MJfCpa/tmhqYy2lZ1NEbkSxH7q3KiZiepiSs2ayTPAweAjdzGXotij+7OKPPb3OwJD2ZuBKPrA2HIuuSi6ahw==", + "version": "1.3.340", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz", + "integrity": "sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww==", "dev": true }, "elementtree": { @@ -7666,6 +7666,11 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ionic2-calendar": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/ionic2-calendar/-/ionic2-calendar-0.5.8.tgz", + "integrity": "sha512-+8xy/cahkCzEJTYmsqkRiAXcn7FlSSXPM72nU/BKtDj6uNKBl/5Bqu6EoKT1z4YAc1cC3uOZSdSKv9smr4GNnA==" + }, "ionicons": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.6.3.tgz", @@ -9438,6 +9443,14 @@ "tslib": "^1.9.0" } }, + "ngx-gauge": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/ngx-gauge/-/ngx-gauge-1.0.0-beta.10.tgz", + "integrity": "sha512-j/YOntC31Pe24Et0wooi1YOmkA11Xw5YzsdBUIvYtvikvO6jwQ5tKwHimP981QAWW3S6/FQ9y94Fd/auJfyGkw==", + "requires": { + "tslib": "^1.9.0" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -9542,9 +9555,9 @@ } }, "node-releases": { - "version": "1.1.45", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", - "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", + "version": "1.1.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz", + "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==", "dev": true, "requires": { "semver": "^6.3.0" @@ -15216,9 +15229,9 @@ "dev": true }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", diff --git a/Mohem/package.json b/Mohem/package.json index 409df5c5..47dbd6f4 100755 --- a/Mohem/package.json +++ b/Mohem/package.json @@ -103,10 +103,12 @@ "cordova.plugins.diagnostic": "^5.0.1", "core-js": "^2.5.4", "date-fns": "^1.30.1", + "ionic2-calendar": "^0.5.8", "mx.ferreyra.callnumber": "0.0.2", "ng-circle-progress": "^1.5.1", "ng2-file-upload": "^1.3.0", "ng2-pdf-viewer": "^5.3.2", + "ngx-gauge": "^1.0.0-beta.10", "npm": "^6.13.1", "phonegap-plugin-barcodescanner": "^8.1.0", "phonegap-plugin-multidex": "^1.0.0", diff --git a/Mohem/src/app/app.module.ts b/Mohem/src/app/app.module.ts index f6013cf6..436caf2a 100644 --- a/Mohem/src/app/app.module.ts +++ b/Mohem/src/app/app.module.ts @@ -15,6 +15,9 @@ import { FilePath } from '@ionic-native/file-path/ngx'; import { File } from '@ionic-native/file/ngx'; import { Base64 } from '@ionic-native/base64/ngx'; import { FirebaseX } from '@ionic-native/firebase-x/ngx'; +import { NgCalendarModule } from 'ionic2-calendar'; + + @NgModule({ declarations: [AppComponent], entryComponents: [], @@ -25,7 +28,8 @@ import { FirebaseX } from '@ionic-native/firebase-x/ngx'; hardwareBackButton: true, }), AppRoutingModule, - HmgCommonModule + HmgCommonModule, + NgCalendarModule ], providers: [ StatusBar, diff --git a/Mohem/src/app/attendance/attendance.module.ts b/Mohem/src/app/attendance/attendance.module.ts index 851b4691..7d5acba4 100644 --- a/Mohem/src/app/attendance/attendance.module.ts +++ b/Mohem/src/app/attendance/attendance.module.ts @@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular'; import { AttendancePage } from './attendance.page'; import { HomeComponent } from './home/home.component'; +import {MonthlyAttendanceComponent} from './monthly-attendance/monthly-attendance.component'; +import { HmgCommonModule } from '../hmg-common/hmg-common.module'; const routes: Routes = [ { @@ -16,6 +18,10 @@ const routes: Routes = [ { path: 'home', component: HomeComponent + }, + { + path: 'monthlyAttendance', + component: MonthlyAttendanceComponent } ] } @@ -26,8 +32,9 @@ const routes: Routes = [ CommonModule, FormsModule, IonicModule, + HmgCommonModule, RouterModule.forChild(routes) ], - declarations: [AttendancePage, HomeComponent] + declarations: [AttendancePage, HomeComponent, MonthlyAttendanceComponent] }) export class AttendancePageModule {} diff --git a/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.html b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.html new file mode 100644 index 00000000..d1812a7d --- /dev/null +++ b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.html @@ -0,0 +1,113 @@ + + + + + + {{ts.trPK('attendance','attendance')}} + + + + + +
+
+

{{currentMonth}}

+ + + +
+ +
+ +
+ + Open Request Analysis + +
+ +
+ +

287

+ + TOTAL
OPEN REQUEST
+ +
+ + + +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + + + +

23

+
+
+
+
+ + + + + + + +

08

+
+
+
+
+ + + +

01

+
+
+ + + +

03

+
+
+
+
+
+
+ + + +
+
\ No newline at end of file diff --git a/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.scss b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.scss new file mode 100644 index 00000000..730bfcfe --- /dev/null +++ b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.scss @@ -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; + } + } + \ No newline at end of file diff --git a/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.spec.ts b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.spec.ts new file mode 100644 index 00000000..39779b1a --- /dev/null +++ b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.spec.ts @@ -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; + + 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(); + }); +}); diff --git a/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.ts b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.ts new file mode 100644 index 00000000..13b560f4 --- /dev/null +++ b/Mohem/src/app/attendance/monthly-attendance/monthly-attendance.component.ts @@ -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") + } + + + +} diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts index 44dbe250..a3372f25 100644 --- a/Mohem/src/app/hmg-common/hmg-common.module.ts +++ b/Mohem/src/app/hmg-common/hmg-common.module.ts @@ -101,6 +101,11 @@ import {FabButtonComponent} from './ui/fab-button/fab-button.component' import { AttendScanService } from './services/attend-services/attend-scan.service'; import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx'; import { NgCircleProgressModule } from 'ng-circle-progress'; +import { CircleCalendarComponent } from './ui/circle-calendar/circle-calendar.component'; +import { NgCalendarModule } from 'ionic2-calendar'; +import { NgxGaugeModule } from 'ngx-gauge'; +import { DateInfoModalComponent } from './ui/circle-calendar/date-info-modal/date-info-modal.component'; +import { ChartModule } from 'primeng/chart'; @NgModule({ imports: [ CommonModule, @@ -111,7 +116,10 @@ import { NgCircleProgressModule } from 'ng-circle-progress'; NgxChartsModule, ListboxModule, PdfViewerModule, - NgCircleProgressModule.forRoot() + NgCircleProgressModule.forRoot(), + NgCalendarModule, + NgxGaugeModule, + ChartModule ], declarations: [ FabButtonComponent, @@ -172,7 +180,11 @@ import { NgCircleProgressModule } from 'ng-circle-progress'; AccordinCustomComponent, StatsButtonComponent, ServicesButtonComponent, - ConfirmLoginComponent + ConfirmLoginComponent, + ConfirmLoginComponent, + CircleCalendarComponent, + DateInfoModalComponent + ], exports: [ FabButtonComponent, @@ -230,7 +242,14 @@ import { NgCircleProgressModule } from 'ng-circle-progress'; StatsButtonComponent, ServicesButtonComponent, ConfirmLoginComponent, - NgCircleProgressModule + NgCircleProgressModule, + ConfirmLoginComponent, + CircleCalendarComponent, + DateInfoModalComponent, + NgCalendarModule, + NgxGaugeModule, + ChartModule + ], providers: [ AttendScanService, @@ -269,8 +288,8 @@ import { NgCircleProgressModule } from 'ng-circle-progress'; MenuService, OpenNativeSettings, BarcodeScanner, - - ] + ], + entryComponents: [DateInfoModalComponent], }) export class HmgCommonModule { } diff --git a/Mohem/src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest.ts b/Mohem/src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest.ts index 740656b8..858449b3 100644 --- a/Mohem/src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest.ts +++ b/Mohem/src/app/hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest.ts @@ -2,6 +2,9 @@ import { Request } from '../../../services/models/request' export class GetSubordinatesAttdStatusRequest extends Request{ //public static SHARED_DATA = ''; - public P_SCHEDULE_DATE_FROM :any; - public P_SCHEDULE_DATE_TO :any; + public P_SCHEDULE_DATE_FROM: any; + public P_SCHEDULE_DATE_TO: any; + public SearchMonth: string; + public SearchYear: number; + } \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.html b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.html new file mode 100644 index 00000000..a4cb0c8c --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.html @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.scss b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.scss new file mode 100644 index 00000000..f265cb6e --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.scss @@ -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; + } \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.spec.ts b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.spec.ts new file mode 100644 index 00000000..7e402bac --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.spec.ts @@ -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; + + 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(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.ts b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.ts new file mode 100644 index 00000000..18b63a04 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/circle-calendar.component.ts @@ -0,0 +1,462 @@ +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 = []; + @Output() monthTitle = new EventEmitter(); + @Output() currentYear = new EventEmitter(); + + + + /////////////////////////////////TIME AND DATE VALUES/////////////////////////////// + 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 = []; + ///////////////////////////////END////////////////////////////////////////////////// + + + eventsdata: any = []; + + calendarModes = [ + { key: 'month', value: 'Month' }, + { key: 'week', value: 'Week' }, + { key: 'day', value: 'Day' }, + ]; + + public calendar = { + mode: this.calendarModes[0].key, + currentDate: new Date(), + currentAvailableAppoDate: new Date(), + dateFormatter: { + formatMonthViewDayHeader: (date: Date) => { + return this.getHeaderDay(date); + } + + } + } + + 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; + isFirst: boolean; + 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.isFirst = false; + this.reRenderCalendar(); + } + + + ngAfterViewInit() { + setTimeout(() => { + this.reRenderCalendar(); + }, 1000); + } + + + getHeaderDay(date: any) { + return this.weekDaysEnSort[date.getDay()]; + + } + + reRenderCalendar() { + this.renderDate(this.eventsdateAbsent, 'absent'); + this.renderDate(this.eventsdateAttend, 'present'); + this.renderDate(this.eventsdateDayOff, 'dayoff'); + } + + + dayClicked(data: any): void { + + if (data.isPast) { + this.eventsInput = []; + this.selectedTime = null; + } else { + // At least one slot + if (data.events.length > 0) { + this.selectedDate = this.getDateISO(data.selectedTime); + //TODO replace later later + for (let i = 0; i < data.events.length; i++) { + + } + this.presentTimeSlots(data.events, data.selectedTime); + this.currentDate = this.getHeaderDate(data.selectedTime); + } else { + this.eventsInput = []; + this.selectedTime = null; + } + //} + } + } + + + async presentTimeSlots(events: TimeSlot[], date: Date) { + this.eventsInput = []; + let index = 1; + for (let event of events) { + // event.end = this.cs.getKSATimeZone(event.end); + this.eventsInput.push({ + name: 'radio' + index, + type: 'radio', + label: event.isoTime.substring(0, event.isoTime.length - 3), + value: event, + checked: index === 1 + }); + if (index == 1) { + this.selectedTime = event.isoTime; + this.selectedDateObject = new Date(event.end); + + } + ++index; + } + } + + + public getDateISO(date: Date): string { + return ( + date.getFullYear().toString() + + "-" + + this.trailerZero(date.getMonth() + 1) + + "-" + + this.trailerZero(date.getDate()) + ); + } + + onCurrentDateChanged(event) { + if (this.isFirst) { + const today = new Date(); + this.currentDateToSwipe = event; + if (this.calendar.mode === 'month') { + if ((event.getFullYear() === today.getFullYear() && event.getMonth() <= today.getMonth())) { + this.lockSwipeToPrev = true; + } else { + this.lockSwipeToPrev = false; + } + } + this.activeMonth = this.getHeaderMonth(event); + this.currentDate = this.getHeaderDate(event); + this.sharedData.setSharedData(this.activeMonth, "currentMonth"); + let dateData = this.currentDate.toString() + dateData = dateData.split(" ") + this.getDayHoursTypeDetails(dateData[2], dateData[3]); + this.reRenderCalendar(); + } else { + const today = new Date(); + this.currentDateToSwipe = event; + if (this.calendar.mode === 'month') { + if ((event.getFullYear() === today.getFullYear() && event.getMonth() <= today.getMonth())) { + this.lockSwipeToPrev = true; + } else { + this.lockSwipeToPrev = false; + } + } + this.activeMonth = this.getHeaderMonth(event); + this.currentDate = this.getHeaderDate(event); + this.sharedData.setSharedData(this.activeMonth, "currentMonth"); + this.isFirst = true; + } + } + + getHeaderDate(date: any) { + + return this.weekDaysEn[date.getDay()] + ", " + date.getDate() + " " + this.getMonthName(date.getMonth() + 1) + " " + date.getFullYear(); + + } + + private trailerZero(value: number): string { + const str = value.toString(); + return str.length > 1 ? str : "" + str; + } + getHeaderMonth(date: any) { + + return this.getMonthName(date.getMonth() + 1) + " " + date.getFullYear(); + + } + + public getMonthName(value: number): string { + switch (value) { + case 1: + return "January"; + case 2: + return "February"; + case 3: + return "March"; + case 4: + return "April"; + case 5: + return "May"; + case 6: + return "June"; + case 7: + return "July"; + case 8: + return "August"; + case 9: + return "September"; + case 10: + return "October"; + case 11: + return "November"; + case 12: + return "December"; + } + } + + public async dateModal(todayDate) { + const modal = await this.mod.create({ + component: DateInfoModalComponent, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + TODAYDATE: todayDate + } + }); + modal.cssClass = "advanced-search-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(x) { + // this.dateModal(this.currentDate); + let fullDate; + let arrOfFullDate; + for (let i = 0; i < this.arrOfAllList.length; i++) { + fullDate = this.arrOfAllList[i].SCHEDULE_DATE.split(" ") + if (this.common.convertISODateToJsonDate(fullDate[0]) == this.common.convertISODateToJsonDate(this.getDateISO(x.selectedTime))) { + arrOfFullDate = fullDate[0].split("/") + this.showDetails(this.arrOfAllList, fullDate[0]); + // console.log(arrOfFullDate[2]) + // this.getDayHoursTypeDetails(this.getMonthName(parseInt(arrOfFullDate[0])),parseInt(arrOfFullDate[2]),true, fullDate[0]) + } else { + console.log("NOT match"); + } + } + } + + + + + + + + getScheduleShiftDetails() { + const GetShiftDetailRequestObject = new GetShiftDetailRequest(); + GetShiftDetailRequestObject.P_RTP_ID = this.selectedShift.RTP_ID; + GetShiftDetailRequestObject.P_PAGE_NUM = 1; + GetShiftDetailRequestObject.P_PAGE_LIMIT = 10; + console.log(GetShiftDetailRequestObject); + this.timeCardService.getShiftDetail(GetShiftDetailRequestObject).subscribe((result) => { + if (this.common.validResponse(result)) { + console.log(result); + this.shiftDetailsData = result.GetScheduleShiftsDetailsList; + } + }); + } + + + getSwipesDetails() { + const GetSwipesRequestObject = new GetSwipesRequest(); + GetSwipesRequestObject.P_SELECTED_EMPLOYEE_NUMBER = this.common.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false); + GetSwipesRequestObject.P_SCHEDULE_DATE = this.common.convertISODateToJsonDate(this.selectedShift.SCHEDULE_DATE); + GetSwipesRequestObject.P_PAGE_NUM = 1; + GetSwipesRequestObject.P_PAGE_LIMIT = 10; + this.timeCardService.getSwipes(GetSwipesRequestObject).subscribe((result) => { + if (this.common.validResponse(result)) { + console.log(result); + this.swipeDetailsData = result.GetSwipesList; + } + }); + } + + + + + + + + + + + + + + + + + + + /////////////////////////this function should be in common service///////////////////////// + public getDayHoursTypeDetails(month, year) { + this.monthTitle.emit(month); + this.currentYear.emit(year); + const dayAndHoursReqObj = new GetDayAndHoursDetailsRequest(); + this.monthName = month//moment().format('MMMM'); + this.yearDate = year//moment().format('YYYY'); + this.selEmp = this.common.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false); + this.respID = this.common.sharedService.getSharedData(MenuResponse.SHARED_SEL_RESP_ID, false); + this.selMenu = this.common.sharedService.getSharedData(MenuResponse.SHARED_DATA, false); + this.menuType = this.selMenu.List_Menu.MENU_TYPE; + + dayAndHoursReqObj.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp; + dayAndHoursReqObj.P_MENU_TYPE = this.menuType; + dayAndHoursReqObj.P_SELECTED_RESP_ID = this.respID; + dayAndHoursReqObj.SearchMonth = this.monthName; + dayAndHoursReqObj.SearchYear = this.yearDate; + dayAndHoursReqObj.P_PAGE_NUM = this.dayAndHoursPageNumber; + dayAndHoursReqObj.P_PAGE_LIMIT = 100; + + if (Object.keys(this.selectedFilters).length !== 0) { + dayAndHoursReqObj.P_SHT_TYPE = this.selectedShiftFilter; + dayAndHoursReqObj.P_EXCESS_FLAG = this.selectedFilters['P_EXCESS_FLAG'.toString()].value; + dayAndHoursReqObj.P_TIMEBACK_FLAG = this.selectedFilters['P_TIMEBACK_FLAG'.toString()].value; + dayAndHoursReqObj.P_COMP_OFF_FLAG = this.selectedFilters['P_COMP_OFF_FLAG'.toString()].value; + dayAndHoursReqObj.P_NON_SCHEDULED_FLAG = this.selectedFilters['P_NON_SCHEDULED_FLAG'.toString()].value; + dayAndHoursReqObj.P_LATE_IN_FLAG = this.selectedFilters['P_LATE_IN_FLAG'.toString()].value; + dayAndHoursReqObj.P_EARLY_OUT_FLAG = this.selectedFilters['P_EARLY_OUT_FLAG'.toString()].value; + dayAndHoursReqObj.P_SHORTAGE_FLAG = this.selectedFilters['P_SHORTAGE_FLAG'.toString()].value; + dayAndHoursReqObj.P_MISSING_SWIPE_FLAG = this.selectedFilters['P_MISSING_SWIPE_FLAG'.toString()].value; + dayAndHoursReqObj.P_ACTUAL_WOB_SEC = this.selectedFilters['P_ACTUAL_WOB_SEC'.toString()].value; + dayAndHoursReqObj.P_ANALAYZED_FLAG = this.selectedFilters['P_ANALAYZED_FLAG'.toString()].value; + dayAndHoursReqObj.P_APPR_TIMEBACK_FLAG = this.selectedFilters['P_APPR_TIMEBACK_FLAG'.toString()].value; + } + + this.timeCardService.getDayHoursTypeDetails(dayAndHoursReqObj).subscribe((result) => { + if (this.common.validResponse(result)) { + this.arrOfAllList = result.GetDayHoursTypeDetailsList; + this.countAllAttendDays(result.GetDayHoursTypeDetailsList); + this.common.sharedService.setSharedData(result.GetDayHoursTypeDetailsList, 'calendarDateValue'); + // this.common.openTimeCardPage(); + } + }); + + } + + + showDetails(allData, date){ + let fullDate; + for (let i = 0; i < allData.length; i++) { + fullDate = allData[i].SCHEDULE_DATE.split(" ") + if(fullDate[0] == date){ + this.detailData = allData[i] + this.dateModal(this.detailData); + } + } + } + + + + + countAllAttendDays(allDays) { + this.eventsdateDayOff = []; + this.eventsdateAttend = []; + this.eventsdateAbsent = []; + this.arrDaysOff = []; + this.arrDaysAttendance = []; + this.arrDaysAbsent = []; + this.eventsdateFutrue = []; + this.arrFutrueDays = []; + + for (let i = 0; i < allDays.length; i++) { + if (allDays[i].DAY_TYPE == "OFF") { + //offDay + this.arrDaysOff.push({ + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE) + }); + } else if (allDays[i].DAY_TYPE == "SCHEDULED" && !allDays[i].REMARKS) { + //attendace + this.arrDaysAttendance.push({ + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE) + }); + } else if (allDays[i].DAY_TYPE == "SCHEDULED" && allDays[i].REMARKS) { + //absent + this.arrDaysAbsent.push( + { + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE), + isoTime: "09:00:00", + allDay: false + } + ); + } else { + this.arrFutrueDays.push( + { + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE), + isoTime: "09:00:00", + allDay: false + } + ); + } + } + // this.common.sharedService.setSharedData(this.arrDaysOff,'calendarDayOffDateValue'); + // this.common.sharedService.setSharedData(this.arrDaysAttendance,'calendarAttendanceDateValue'); + // this.common.sharedService.setSharedData( this.arrDaysAbsent,'calendarDaysAbsentDateValue'); + this.eventsdateDayOff = this.arrDaysOff; + this.eventsdateAttend = this.arrDaysAttendance; + this.eventsdateAbsent = this.arrDaysAbsent; + this.eventsdateFutrue = this.arrFutrueDays; + this.reRenderCalendar(); + } + +} diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.html b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.html new file mode 100644 index 00000000..cefe1f3f --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.html @@ -0,0 +1,98 @@ + + + +
+
+ +
+ + +
+ +
+ +

74%

+ + Completed



+ +
+ + + +
+
+
+ +
+

{{today}}

+

{{todayDate}}

+

{{monthDate}}

+

{{month}}

+
+

Permenent

+
+
+
+
+
+ +
+ + + +

19:00 - 07:00

+

SHIFT TIME

+
+
+
+ + +

11:30

+

REGULAR

+
+
+
+ + +

19:20

+

CHECK-IN

+
+
+
+ + +

7:50

+

CHECK-OUT

+
+
+ +
+
+
+ + + +

00:20

+

LATE-IN

+
+
+ + +

00:30

+

EXCESS

+
+
+ + +

00:00

+

SHORTAGE

+
+
+ + +

00:00

+

EARLY-OUT

+
+
+
+
diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.scss b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.scss new file mode 100644 index 00000000..5c5bea3f --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.scss @@ -0,0 +1,44 @@ +.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; + } +} + \ No newline at end of file diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.spec.ts b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.spec.ts new file mode 100644 index 00000000..ffb04f8b --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.spec.ts @@ -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; + + 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(); + }); +}); diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.ts b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.ts new file mode 100644 index 00000000..640d4f8b --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/date-info-modal/date-info-modal.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { ModalController, NavParams } 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 { + gaugeType = "full"; + gaugeValue = 28.3; + gaugeLabel = "Days"; + @Input() TODAYDATE: any; + today: any; + todayDate: any; + month: any; + monthDate: any; + + constructor(public modalController: ModalController, public navParams: NavParams) { } + + ngOnInit() { + let dateData = this.TODAYDATE.split(' '); + console.log(dateData) + this.today = dateData[0]; + this.todayDate = dateData[1]; + this.monthDate = dateData[2]; + this.month = dateData[3]; + console.log(this.todayDate); + console.log(this.today); + console.log(this.monthDate); + console.log(this.month); + } + + + public options = { + cutoutPercentage: 80, + + tooltips: { enabled: false }, + + legend: { display: false } + + }; + + + + public data = { + + datasets: [ + + { + + data: [120, 50], + + backgroundColor: [ + + '#094875' + ], + + borderWidth: 2 + + }] + + }; + + + + +} diff --git a/Mohem/src/app/hmg-common/ui/circle-calendar/time.slot.ts b/Mohem/src/app/hmg-common/ui/circle-calendar/time.slot.ts new file mode 100644 index 00000000..99760881 --- /dev/null +++ b/Mohem/src/app/hmg-common/ui/circle-calendar/time.slot.ts @@ -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; +} diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts index 643f8ec8..e3837264 100644 --- a/Mohem/src/app/home/home.page.ts +++ b/Mohem/src/app/home/home.page.ts @@ -15,24 +15,27 @@ import { attendanceSwipeScannerRequest } from './models/attendanceSwipe.Request' import { Response } from 'src/app/hmg-common/services/models/response'; import { AttendanceService } from './services/attendance.services'; import { LoginRequest } from '../hmg-common/services/authentication/models/login.request'; -import {FileUploaderComponent} from '../hmg-common/ui/file-uploader/file-uploader.component' -import { Camera} from '@ionic-native/Camera/ngx'; +import { FileUploaderComponent } from '../hmg-common/ui/file-uploader/file-uploader.component' +import { Camera } from '@ionic-native/Camera/ngx'; import { File } from '@ionic-native/file/ngx'; import { DomSanitizer } from '@angular/platform-browser'; import { SharedDataService } from '../hmg-common/services/shared-data-service/shared-data.service'; import { DevicePermissionsService } from '../hmg-common/services/device-permissions/device-permissions.service'; import { DashboredService } from '../hmg-common/services/dashbored/dashbored.service'; import { OrganizationSalariesResponse } from '../hmg-common/services/dashbored/organization-salaries.response'; -import { OpenMissingSwipesResponse} from '../hmg-common/services/dashbored/open-missing-swipes.response'; -import {PerformanceAppraisalResponse} from '../hmg-common/services/dashbored/performance-appraisal.response'; +import { OpenMissingSwipesResponse } from '../hmg-common/services/dashbored/open-missing-swipes.response'; +import { PerformanceAppraisalResponse } from '../hmg-common/services/dashbored/performance-appraisal.response'; import { AttendanceTrackingResponse } from '../hmg-common/services/dashbored/attendance-tracking.response'; import { OpenPeriodDatesResponse } from '../hmg-common/services/dashbored/models/openPeriodDatesResponse'; -import {GetSubordinatesAttdStatusRequest} from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest'; -import {GetSubordinatesLeavesRequest} from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesRequest' -import {GetOpenNotificationsResponse} from '../hmg-common/services/dashbored/models/GetOpenNotificationsResponse' -import {GetSubordinatesAttdStatusResponse} from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusResponse' -import {GetSubordinatesLeavesResponse} from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesResponse' +import { GetSubordinatesAttdStatusRequest } from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest'; +import { GetSubordinatesLeavesRequest } from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesRequest' +import { GetOpenNotificationsResponse } from '../hmg-common/services/dashbored/models/GetOpenNotificationsResponse' +import { GetSubordinatesAttdStatusResponse } from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusResponse' +import { GetSubordinatesLeavesResponse } from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesResponse' import { AccrualService } from '../accrual-balances/services/accrual.service'; +import { GetDayAndHoursDetailsRequest } from '../time-card/service/models/get-day-hours-type-details.request'; +import * as moment from 'moment'; +import { TimeCardService } from '../time-card/service/time-card.service'; @Component({ selector: 'app-home', @@ -101,8 +104,8 @@ export class HomePage implements OnInit { // ]; public slideOptsOne = { - slidesPerView: 3.5, - spaceBetween: 10 + slidesPerView: 3.5, + spaceBetween: 10 }; public slideOptsTwo = { slidesPerView: 3.2, @@ -117,7 +120,22 @@ export class HomePage implements OnInit { public displayTime: any; public menuEntries: any; public percent: any; - +/////////////////////////////////TIME AND DATE VALUES/////////////////////////////// +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 arrFutrueDays: any =[]; + +///////////////////////////////END////////////////////////////////////////////////// constructor( public ts: TranslatorService, public menu: MenuController, @@ -138,13 +156,16 @@ export class HomePage implements OnInit { private file: File, private permissions: DevicePermissionsService, public DS: DashboredService, - public accrualService: AccrualService + public accrualService: AccrualService, + ////////////////////////////////////////TIME AND DATE//////////////////////////// + public timeCardService: TimeCardService + /////////////////////END///////////////////////////////////////////////////////// ) { this.events.subscribe('img-change', displayImg => { this.userImage = this.sanitizer.bypassSecurityTrustUrl('data:Image/*;base64,' + displayImg); console.log('html saved img: ' + this.userImage); }); - } + } ngOnInit() { this.getUserDetails(); @@ -162,7 +183,7 @@ export class HomePage implements OnInit { this.percent = 100 - ((this.remainingTime / this.scheduledTime) * 100); this.displayTime = this.getSecondsAsDigitalClock(this.remainingTime); this.startTimer(); - } + } startTimer() { this.runTimer = true; @@ -202,7 +223,7 @@ export class HomePage implements OnInit { getDeviceLocation() { const isVirtual = this.device.isVirtual; - if (isVirtual === true){ + if (isVirtual === true) { alert('emulater>>>>>>>' + isVirtual); alert('You are using virtual device'); return false; @@ -237,17 +258,17 @@ export class HomePage implements OnInit { } // getCount() { - // const req: any = {}; - // this.menuService.getNotificationCount(req).subscribe((result: any) => { - // if (this.common.validResponse(result)) { - // this.notBadge = - // result.GetOpenNotificationsNumList.P_OPEN_NOTIFICATIONS_NUM; - // if (this.notBadge <= 0) { - // this.notBadge = null; - // } - // this.events.publish("getNotCount", this.notBadge); - // } - // }); + // const req: any = {}; + // this.menuService.getNotificationCount(req).subscribe((result: any) => { + // if (this.common.validResponse(result)) { + // this.notBadge = + // result.GetOpenNotificationsNumList.P_OPEN_NOTIFICATIONS_NUM; + // if (this.notBadge <= 0) { + // this.notBadge = null; + // } + // this.events.publish("getNotCount", this.notBadge); + // } + // }); // } ionViewDidLoad() { @@ -281,188 +302,188 @@ export class HomePage implements OnInit { console.log(user); } }); - } + } - callDashboardServices() { - this.getMenu(); - this.setServicesPrivilage(); - this.openNotificationsDashbored(); - this.showOpenMissingSwipes(); - this.showAttendanceTracking(); - this.getAccrualBalance(); - } + callDashboardServices() { + this.getMenu(); + this.setServicesPrivilage(); + this.openNotificationsDashbored(); + this.showOpenMissingSwipes(); + this.showAttendanceTracking(); + this.getAccrualBalance(); + } - public Vacation_Rule() { - this.common.navigateForward('/vacation-rule/home'); - } + public Vacation_Rule() { + this.common.navigateForward('/vacation-rule/home'); + } - private getMenu() { - this.menuService.getMenu().subscribe((result: MenuResponse) => { - this.handleMenuResult(result); - }); - } + private getMenu() { + this.menuService.getMenu().subscribe((result: MenuResponse) => { + this.handleMenuResult(result); + }); + } - private handleMenuResult(result) { - if (this.common.validResponse(result)) { - if (this.common.hasData(result.List_Menu)) { - console.log('list menu'); - this.menuList = result.List_Menu; - this.getMenuDetails(); - } + private handleMenuResult(result) { + if (this.common.validResponse(result)) { + if (this.common.hasData(result.List_Menu)) { + console.log('list menu'); + this.menuList = result.List_Menu; + this.getMenuDetails(); } } + } - private accrualBalance() { - this.common.openAccuralPage(); - } + private accrualBalance() { + this.common.openAccuralPage(); + } - private changeImage() { - this.common.openChangeImagePage(); - } + private changeImage() { + this.common.openChangeImagePage(); + } - public getMenuDetails() { - const item = this.menuList[0]; - const 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); - this.getMenuEntries(item); - // if (item.MENU_TYPE === 'M') { - // this.common.openMyTeamPage(); - // // this.navCtrl.push("MySubordinatePage"); - // } else if (item.MENU_TYPE === 'S') { - // this.common.sharedService.setSharedData(item, 'mySpecList'); - // this.common.openMySpecialistPage(); - // // this.navCtrl.push('MySpecialistPage',{"mySpecList":item}); - // } else { - // this.getMenuEntries(item); - // } - } + public getMenuDetails() { + const item = this.menuList[0]; + const 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); + this.getMenuEntries(item); + // if (item.MENU_TYPE === 'M') { + // this.common.openMyTeamPage(); + // // this.navCtrl.push("MySubordinatePage"); + // } else if (item.MENU_TYPE === 'S') { + // this.common.sharedService.setSharedData(item, 'mySpecList'); + // this.common.openMySpecialistPage(); + // // this.navCtrl.push('MySpecialistPage',{"mySpecList":item}); + // } else { + // this.getMenuEntries(item); + // } + } - getMenuEntries(item) { - const request: any = {}; - let selEmpNo: string = null; - let nationality: string = null; - request.P_SELECTED_RESP_ID = -999; - if (item.MENU_TYPE === 'S') { - request.P_SELECTED_RESP_ID = item.RESP_ID; - } else { - selEmpNo = this.common.sharedService.getSharedData( - LoginRequest.SHARED_DATA, - false - ); - } - nationality = this.common.sharedService.getSharedData( - LoginRequest.NATIONALITY_CODE, + getMenuEntries(item) { + const request: any = {}; + let selEmpNo: string = null; + let nationality: string = null; + request.P_SELECTED_RESP_ID = -999; + if (item.MENU_TYPE === 'S') { + request.P_SELECTED_RESP_ID = item.RESP_ID; + } else { + selEmpNo = this.common.sharedService.getSharedData( + LoginRequest.SHARED_DATA, false ); - request.P_SELECTED_EMPLOYEE_NUMBER = selEmpNo; - 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 - ); - this.common.sharedService.setSharedData( - request.P_SELECTED_RESP_ID, - MenuResponse.SHARED_SEL_RESP_ID - ); - - this.eitService - .getMenuEntries(request) - .subscribe((result: MenuResponse) => { - this.handleMenuEntiresResult(result); - }); } + nationality = this.common.sharedService.getSharedData( + LoginRequest.NATIONALITY_CODE, + false + ); + request.P_SELECTED_EMPLOYEE_NUMBER = selEmpNo; + 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 + ); + this.common.sharedService.setSharedData( + request.P_SELECTED_RESP_ID, + MenuResponse.SHARED_SEL_RESP_ID + ); + + this.eitService + .getMenuEntries(request) + .subscribe((result: MenuResponse) => { + this.handleMenuEntiresResult(result); + }); + } - sortMenuEntires(list) { - const tree = this.common.list_to_tree(list); - this.menuEntries = tree; - console.log(this.menuEntries); - this.common.sharedService.setSharedData(tree, 'menuEntries'); - // this.common.navigateForward("/eit/homepage"); - // this.common.openEITPage(); - } + sortMenuEntires(list) { + const tree = this.common.list_to_tree(list); + this.menuEntries = tree; + console.log(this.menuEntries); + this.common.sharedService.setSharedData(tree, 'menuEntries'); + // this.common.navigateForward("/eit/homepage"); + // this.common.openEITPage(); + } - private handleMenuEntiresResult(result) { - if (this.common.validResponse(result)) { - if (this.common.hasData(result.GetMenuEntriesList)) { - this.sortMenuEntires(result.GetMenuEntriesList); - } + private handleMenuEntiresResult(result) { + if (this.common.validResponse(result)) { + if (this.common.hasData(result.GetMenuEntriesList)) { + this.sortMenuEntires(result.GetMenuEntriesList); } } + } - parentFn($event: string) { - console.log($event); // this will output 'hello from child' - } + parentFn($event: string) { + console.log($event); // this will output 'hello from child' + } - private Change_password() { - this.common.openChangePassword(); - } + private Change_password() { + this.common.openChangePassword(); + } - private openPayslip() { - this.common.openPayslipPage(); - } + private openPayslip() { + this.common.openPayslipPage(); + } - private attendance() { - this.permissions.requestCameraAutherization().then(granted => { - this.camera = granted as boolean; - if (this.camera) { - this.scanCode(); - } - } - ); + private attendance() { + this.permissions.requestCameraAutherization().then(granted => { + this.camera = granted as boolean; + if (this.camera) { + this.scanCode(); + } } + ); + } - scanCode() { - this.barcodeScanner.scan().then(barcodeData => { - this.scannedResult = barcodeData; - this.deviceID = this.device.uuid; - this.swipeAttendance(); - }).catch(err => { - console.log('Error', err); - }); - } + scanCode() { + this.barcodeScanner.scan().then(barcodeData => { + this.scannedResult = barcodeData; + this.deviceID = this.device.uuid; + this.swipeAttendance(); + }).catch(err => { + console.log('Error', err); + }); + } - swipeAttendance() { - const request: attendanceSwipeScannerRequest = new attendanceSwipeScannerRequest(); - request.Latitude = this.lat; - request.Longitude = this.longt; - request.QRValue = this.scannedResult.text; - request.UID = this.deviceID; - request.UserName = this.userData.EMPLOYEE_NUMBER; - console.log(JSON.stringify(request)); - this.attendanceService - .attendanceSwipeScanner(request, () => { - console.log('Error inside in swipe attendance'); - }) - .subscribe((result: Response) => { - if (this.common.validResponse(result)) { - this.common.presentAlert(this.ts.trPK('home', 'swipeAlertSuccess')); - this.showAttendanceTracking(); - } else { - this.common.presentAlert(this.ts.trPK('home', 'swipeAlertFailed')); - } - }); - } + swipeAttendance() { + const request: attendanceSwipeScannerRequest = new attendanceSwipeScannerRequest(); + request.Latitude = this.lat; + request.Longitude = this.longt; + request.QRValue = this.scannedResult.text; + request.UID = this.deviceID; + request.UserName = this.userData.EMPLOYEE_NUMBER; + console.log(JSON.stringify(request)); + this.attendanceService + .attendanceSwipeScanner(request, () => { + console.log('Error inside in swipe attendance'); + }) + .subscribe((result: Response) => { + if (this.common.validResponse(result)) { + this.common.presentAlert(this.ts.trPK('home', 'swipeAlertSuccess')); + this.showAttendanceTracking(); + } else { + this.common.presentAlert(this.ts.trPK('home', 'swipeAlertFailed')); + } + }); + } - openPersonalInfo() { - this.common.openProfile(); - } + openPersonalInfo() { + this.common.openProfile(); + } -/*************************************Dashboards Services**********************************************************8 */ + /*************************************Dashboards Services**********************************************************8 */ showOrganizationSalaries() { - this.DS.getOrganizationSalaries() .subscribe((result: OrganizationSalariesResponse ) => { + this.DS.getOrganizationSalaries().subscribe((result: OrganizationSalariesResponse) => { }); } showOpenMissingSwipes() { - this.DS.getOpenMissingSwipes() .subscribe((result: OpenMissingSwipesResponse) => { + this.DS.getOpenMissingSwipes().subscribe((result: OpenMissingSwipesResponse) => { if (this.common.validResponse(result)) { const key = 'GetOpenMissingSwipesList'; this.statsButtons[2].statsValue = result[key].P_OPEN_MISSING_SWIPES; @@ -471,7 +492,7 @@ export class HomePage implements OnInit { } showPerformanceAppraisal() { - this.DS.getPerformanceAppraisal() .subscribe((result: PerformanceAppraisalResponse) => { + this.DS.getPerformanceAppraisal().subscribe((result: PerformanceAppraisalResponse) => { }); } @@ -495,7 +516,7 @@ export class HomePage implements OnInit { } showAttendanceTracking() { - this.DS.getAttendanceTracking() .subscribe((result: AttendanceTrackingResponse) => { + this.DS.getAttendanceTracking().subscribe((result: AttendanceTrackingResponse) => { if (this.common.validResponse(result)) { const key = 'GetAttendanceTrackingList'; this.convertAndAssignTime(result[key]); @@ -504,7 +525,7 @@ export class HomePage implements OnInit { } openPeriodDateDashbored() { - this.DS.getOpenPeriodDates( () => {console.log('Error '); } ).subscribe((result: OpenPeriodDatesResponse) => { + this.DS.getOpenPeriodDates(() => { console.log('Error '); }).subscribe((result: OpenPeriodDatesResponse) => { if (this.common.validResponse(result)) { console.log('response'); } @@ -512,7 +533,7 @@ export class HomePage implements OnInit { } openNotificationsDashbored() { // work list - this.DS.getOpenNotifications( () => { console.log('Error '); }).subscribe((result: GetOpenNotificationsResponse) => { + this.DS.getOpenNotifications(() => { console.log('Error '); }).subscribe((result: GetOpenNotificationsResponse) => { if (this.common.validResponse(result)) { const key = 'P_OPEN_NTF_NUMBER'; this.statsButtons[0].statsValue = result[key]; @@ -524,7 +545,7 @@ export class HomePage implements OnInit { const request: GetSubordinatesLeavesRequest = new GetSubordinatesLeavesRequest(); request.P_DATE_FROM = '/Date(1578603600000+0300)/'; // test request.P_DATE_TO = '/Date(1576011600000+0300)/'; // test - this.DS.getSubordinatesLeaves( request, () => {console.log('Error '); } ).subscribe((result: GetSubordinatesLeavesResponse) => { + this.DS.getSubordinatesLeaves(request, () => { console.log('Error '); }).subscribe((result: GetSubordinatesLeavesResponse) => { if (this.common.validResponse(result)) { console.log('response'); console.log(result); @@ -537,7 +558,7 @@ export class HomePage implements OnInit { const request: GetSubordinatesAttdStatusRequest = new GetSubordinatesAttdStatusRequest(); request.P_SCHEDULE_DATE_FROM = '/Date(1578603600000+0300)/'; // test request.P_SCHEDULE_DATE_TO = '/Date(1576011600000+0300)/'; // test - this.DS.getSubordinatesAttStatus( request, () => {console.log('Error '); }).subscribe((result: GetSubordinatesAttdStatusResponse) => { + this.DS.getSubordinatesAttStatus(request, () => { console.log('Error '); }).subscribe((result: GetSubordinatesAttdStatusResponse) => { if (this.common.validResponse(result)) { console.log('response'); console.log(result); @@ -559,36 +580,36 @@ export class HomePage implements OnInit { this.common.openPayslipPage(); } if (subMenu.REQUEST_TYPE === 'TIME_CARD') { - this.common.openTimeCardPage(); + this.getDayHoursTypeDetails(); } } getAccrualBalance() { - const today = new Date(); - const day = today.getDate(); - const month = today.getMonth() + 1; - const year = today.getFullYear(); - const todayDate = month + '/' + day + '/' + year; - const effectiveDate = todayDate; - const request = { - P_SELECTED_EMPLOYEE_NUMBER: this.userData.EMPLOYEE_NUMBER, - P_EFFECTIVE_DATE: effectiveDate - }; - this.accrualService - .getAccrualBalances(request) - .subscribe((result: any) => { - if (this.common.validResponse(result)) { - let totalTicketsLeft = 0; - for (const accrualBalance of result.GetAccrualBalancesList) { - if (accrualBalance.ACCURAL_PLAN_NAME === 'HMG Annual Vacation Accrual Plan') { - this.statsButtons[3].statsValue = accrualBalance.ACCRUAL_NET_ENTITLEMENT; - } else { - totalTicketsLeft = totalTicketsLeft + accrualBalance.ACCRUAL_NET_ENTITLEMENT; - } + const today = new Date(); + const day = today.getDate(); + const month = today.getMonth() + 1; + const year = today.getFullYear(); + const todayDate = month + '/' + day + '/' + year; + const effectiveDate = todayDate; + const request = { + P_SELECTED_EMPLOYEE_NUMBER: this.userData.EMPLOYEE_NUMBER, + P_EFFECTIVE_DATE: effectiveDate + }; + this.accrualService + .getAccrualBalances(request) + .subscribe((result: any) => { + if (this.common.validResponse(result)) { + let totalTicketsLeft = 0; + for (const accrualBalance of result.GetAccrualBalancesList) { + if (accrualBalance.ACCURAL_PLAN_NAME === 'HMG Annual Vacation Accrual Plan') { + this.statsButtons[3].statsValue = accrualBalance.ACCRUAL_NET_ENTITLEMENT; + } else { + totalTicketsLeft = totalTicketsLeft + accrualBalance.ACCRUAL_NET_ENTITLEMENT; } - this.statsButtons[4].statsValue = totalTicketsLeft; } - }); + this.statsButtons[4].statsValue = totalTicketsLeft; + } + }); } openattentracking() { @@ -599,6 +620,98 @@ export class HomePage implements OnInit { this.common.openProfile(); } + + + + + + + //////calling time and date to load it in calendar/////// + public getDayHoursTypeDetails() { + const dayAndHoursReqObj = new GetDayAndHoursDetailsRequest(); + this.monthName = moment().format('MMMM'); + this.yearDate = moment().format('YYYY'); + this.selEmp = this.common.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false); + this.respID = this.common.sharedService.getSharedData(MenuResponse.SHARED_SEL_RESP_ID, false); + this.selMenu = this.common.sharedService.getSharedData(MenuResponse.SHARED_DATA, false); + this.menuType = this.selMenu.List_Menu.MENU_TYPE; + + dayAndHoursReqObj.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp; + dayAndHoursReqObj.P_MENU_TYPE = this.menuType; + dayAndHoursReqObj.P_SELECTED_RESP_ID = this.respID; + dayAndHoursReqObj.SearchMonth = this.monthName; + dayAndHoursReqObj.SearchYear = this.yearDate; + dayAndHoursReqObj.P_PAGE_NUM = this.dayAndHoursPageNumber; + dayAndHoursReqObj.P_PAGE_LIMIT = 100; + + if (Object.keys(this.selectedFilters).length !== 0) { + dayAndHoursReqObj.P_SHT_TYPE = this.selectedShiftFilter; + dayAndHoursReqObj.P_EXCESS_FLAG = this.selectedFilters['P_EXCESS_FLAG'.toString()].value; + dayAndHoursReqObj.P_TIMEBACK_FLAG = this.selectedFilters['P_TIMEBACK_FLAG'.toString()].value; + dayAndHoursReqObj.P_COMP_OFF_FLAG = this.selectedFilters['P_COMP_OFF_FLAG'.toString()].value; + dayAndHoursReqObj.P_NON_SCHEDULED_FLAG = this.selectedFilters['P_NON_SCHEDULED_FLAG'.toString()].value; + dayAndHoursReqObj.P_LATE_IN_FLAG = this.selectedFilters['P_LATE_IN_FLAG'.toString()].value; + dayAndHoursReqObj.P_EARLY_OUT_FLAG = this.selectedFilters['P_EARLY_OUT_FLAG'.toString()].value; + dayAndHoursReqObj.P_SHORTAGE_FLAG = this.selectedFilters['P_SHORTAGE_FLAG'.toString()].value; + dayAndHoursReqObj.P_MISSING_SWIPE_FLAG = this.selectedFilters['P_MISSING_SWIPE_FLAG'.toString()].value; + dayAndHoursReqObj.P_ACTUAL_WOB_SEC = this.selectedFilters['P_ACTUAL_WOB_SEC'.toString()].value; + dayAndHoursReqObj.P_ANALAYZED_FLAG = this.selectedFilters['P_ANALAYZED_FLAG'.toString()].value; + dayAndHoursReqObj.P_APPR_TIMEBACK_FLAG = this.selectedFilters['P_APPR_TIMEBACK_FLAG'.toString()].value; + } + + this.timeCardService.getDayHoursTypeDetails(dayAndHoursReqObj).subscribe((result) => { + if (this.common.validResponse(result)) { + this.countAllAttendDays(result.GetDayHoursTypeDetailsList); + // this.common.sharedService.setSharedData(result.GetDayHoursTypeDetailsList, 'calendarDateValue'); + this.common.openTimeCardPage(); + } + }); + + } + + + + + countAllAttendDays(allDays) { + for (let i = 0; i < allDays.length; i++) { + if (allDays[i].DAY_TYPE == "OFF") { + //offDay + this.arrDaysOff.push({startTime:new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE)}); + } else if (allDays[i].DAY_TYPE == "SCHEDULED" && !allDays[i].REMARKS) { + //attendace + this.arrDaysAttendance.push({startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE)}); + } else if(allDays[i].DAY_TYPE == "SCHEDULED" && allDays[i].REMARKS) { + //absent + this.arrDaysAbsent.push( + { + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE), + isoTime: "09:00:00", + allDay: false + } + ); + }else{ + this.arrFutrueDays.push( + { + startTime: new Date(allDays[i].SCHEDULE_DATE), + endTime: new Date(allDays[i].SCHEDULE_DATE), + isoTime: "09:00:00", + allDay: false + } + ); + } + } + this.common.sharedService.setSharedData(this.arrDaysOff,'calendarDayOffDateValue'); + this.common.sharedService.setSharedData(this.arrDaysAttendance,'calendarAttendanceDateValue'); + this.common.sharedService.setSharedData( this.arrDaysAbsent,'calendarDaysAbsentDateValue'); + this.common.sharedService.setSharedData( this.arrFutrueDays,'calendarDaysFutrueDateValue'); + } + } + + + diff --git a/Mohem/src/app/time-card/service/models/get-day-hours-type-details.request.ts b/Mohem/src/app/time-card/service/models/get-day-hours-type-details.request.ts index 240f1b37..2bca5468 100644 --- a/Mohem/src/app/time-card/service/models/get-day-hours-type-details.request.ts +++ b/Mohem/src/app/time-card/service/models/get-day-hours-type-details.request.ts @@ -21,4 +21,6 @@ export class GetDayAndHoursDetailsRequest extends Request { public P_ACTUAL_WOB_SEC: string; public P_PAGE_NUM: number; public P_PAGE_LIMIT: number; + public SearchMonth: string; + public SearchYear: number; } diff --git a/Mohem/src/app/time-card/service/models/get-time-card-summary.request.ts b/Mohem/src/app/time-card/service/models/get-time-card-summary.request.ts index 4f845c1e..05aed6fa 100644 --- a/Mohem/src/app/time-card/service/models/get-time-card-summary.request.ts +++ b/Mohem/src/app/time-card/service/models/get-time-card-summary.request.ts @@ -19,4 +19,6 @@ export class GetTimeCardSummaryRequest extends Request { public P_APPR_TIMEBACK_FLAG: string; public P_SHT_TYPE: string; public P_ACTUAL_WOB_SEC: string; + public SearchMonth: string; + public SearchYear: number; } diff --git a/Mohem/src/app/time-card/time-card-details/time-card-details.component.html b/Mohem/src/app/time-card/time-card-details/time-card-details.component.html index 0e0123e6..167d73c6 100644 --- a/Mohem/src/app/time-card/time-card-details/time-card-details.component.html +++ b/Mohem/src/app/time-card/time-card-details/time-card-details.component.html @@ -8,7 +8,7 @@ -
+ + + + + +
+
+

{{monthTitle}}

+ + + +
+ +
+ +
+ + Open Request Analysis + +
+ +
+ +

{{totalAttendancePrecentage}} Days

+ + + +
+ + + +
+
+ +
+
+ +
+ +
+
+ +
+
+
+
+
+ + + + + + + + + +

{{timeCardSummaryData.SCHEDULE_DAYS}}

+

0

+
+
+
+
+ + + + + + + + + + +

{{timeCardSummaryData.OFF_DAYS}}

+

0

+
+
+
+
+ + + +

{{timeCardSummaryData.UNAUTHORIZED_LEAVE}}

+

0

+
+
+ + + +

{{timeCardSummaryData.SHORTAGE_HRS}}

+

0

+
+
+
+
+
+
+ + + +
-