import { Component, OnInit, ViewChild } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { CommonService } from 'src/app/hmg-common/services/common/common.service'; import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; import { WorkListRequest } from '../models/workListRequest'; import * as moment from 'moment'; import { WorklistService } from '../service/worklist.service'; import { IonInfiniteScroll } from '@ionic/angular'; import { WorklistMainService } from '../service/work-list.main.service'; import { WorklistAdvancedSearchComponent } from '../worklist-advanced-search/worklist-advanced-search.component'; import { DatePipe } from '@angular/common'; @Component({ selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.scss'] }) export class HomeComponent implements OnInit { public static REQUSET_NAME = 'requst_name'; public static REQUSET_INFO = 'requset_info'; public static ALL_REQUEST = 'all_request'; public static NOTIFICATION_DATA = 'notification_data'; public static NOTIFICATION_ARR = 'notification_arr'; @ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll; private WorkListObj: WorkListRequest; WorkListResObj: any; notificationType = '1'; pageNum = 1; rowsNo: number; noOfrows: number; selectedValue = ''; FromUserName = ''; ItemKeyDisplayName = ''; SentDate = ''; Subject = ''; inputSearch = ''; inputDate: string; filteredNotificationList: any; isReachEnd = false; public isAll = true; public isPR = false; public isPO = false; public isMR = false; public isHR = false; public noData = false; public isITG = false; public isSearch = false; public direction = 'ltr'; public ITGCount = 0; public ITGSegment: {name: string, code: any, data: any, style: boolean} [] = []; public ITGAllItem: any = []; public selectedITGToActive = false; public ITGItem: any = []; public activeSegment: any; public currentActiveIndex = 0; public previousActiveIndex = 0; public worklistNotifications: any; public totalRequestCount = 0; public newWorkListResponse = []; public showFormattedData = {}; public selectedFilter = 'ALL'; public showSearchButton = false; public itemType = ''; public options = { cutoutPercentage: 80, tooltips: { enabled: false }, legend: { display: false } }; public data = { datasets: [ { data: [0, 0, 0, 0, 0], backgroundColor: [ '#18a169', '#38c9b3', '#114475', '#3cb9d5', '#cc3232' ], borderWidth: 5 }] }; public filters = [ { value: 0, name: 'All', active: true, color: '#124375', key: 'ALL', disable: false }, { value: 0, name: 'HR', active: false, color: '#18a169', key: 'HRSSA', disable: false }, { value: 0, name: 'PO', active: false, color: '#38c9b3', key: 'POAPPRV', disable: false }, { value: 0, name: 'PR', active: false, color: '#114475', key: 'REQAPPRV', disable: false }, { value: 0, name: 'MR', active: false, color: '#3cb9d5', key: 'INVMOA', disable: false }, { value: 0, name: 'ITG', active: false, color: '#cc3232', key: 'ITG', disable: false } ]; public slideOptsOne = { slidesPerView: 4.3, spaceBetween: 10 }; constructor( public common: CommonService, public ts: TranslatorService, public WorklistService: WorklistService, public workListService: WorklistMainService, public modalController: ModalController ) { this.WorkListObj = new WorkListRequest(); this.WorkListObj.P_NOTIFICATION_TYPE = '1'; this.WorkListObj.P_SEARCH_FROM_USER = ''; this.WorkListObj.P_SEARCH_SUBJECT = ''; this.WorkListObj.P_SEARCH_SENT_DATE = ''; this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = ''; this.WorkListObj.P_PAGE_NUM = 0; this.WorkListObj.P_PAGE_LIMIT = 50; } ngOnInit() { this.direction = TranslatorService.getCurrentLanguageName()//TranslatorService.getCurrentDirection(); console.log(">>>>>>>>>>>>>>>>>>"+this.direction); this.worklistNotifications = this.common.sharedService.getSharedData('worklistNotifications', false); this.Details(); this.Count(); this.assignDataToFilters(); this.getAllPushNotificationFun(); this.totalRequestCount = this.worklistNotifications.P_OPEN_NTF_NUMBER; } assignDataToFilters() { this.filters[0].value = this.worklistNotifications.P_OPEN_NTF_NUMBER; const openNotificationsArray = this.worklistNotifications.GetOpenNotificationsList; for (const notification of openNotificationsArray) { if (notification.ITEM_TYPE === 'HRSSA') { this.filters[1].value = notification.OPEN_NTF_NUMBER; this.data.datasets[0].data[0] = notification.OPEN_NTF_NUMBER; } else if (notification.ITEM_TYPE === 'POAPPRV') { this.filters[2].value = notification.OPEN_NTF_NUMBER; this.data.datasets[0].data[1] = notification.OPEN_NTF_NUMBER; } else if (notification.ITEM_TYPE === 'REQAPPRV') { this.filters[3].value = notification.OPEN_NTF_NUMBER; this.data.datasets[0].data[2] = notification.OPEN_NTF_NUMBER; } else if (notification.ITEM_TYPE === 'INVMOA') { this.filters[4].value = notification.OPEN_NTF_NUMBER; this.data.datasets[0].data[3] = notification.OPEN_NTF_NUMBER; } else if (notification.ITEM_TYPE === 'ITG') { this.filters[5].value = notification.OPEN_NTF_NUMBER; this.data.datasets[0].data[4] = notification.OPEN_NTF_NUMBER; } } } activeFilter(index: number) { if (this.currentActiveIndex !== index) { this.showFormattedData = {}; this.previousActiveIndex = this.currentActiveIndex; this.currentActiveIndex = index; this.filters[this.previousActiveIndex].active = false; this.filters[this.currentActiveIndex].active = true; if (this.filters[this.currentActiveIndex].value !== 0) { const selectedKey = this.filters[this.currentActiveIndex].key; this.resetData(); this.itemType = (selectedKey !== 'ITG' && selectedKey !== 'ALL') ? this.filters[this.currentActiveIndex].key : ''; this.getAllPushNotificationFun(); } this.selectedFilter = this.filters[this.currentActiveIndex].key; } } openProfilePage() { this.common.openProfile(); } disableFilters() { for (const filter of this.filters) { if (filter.key === this.itemType) { filter.disable = false; filter.active = true; this.selectedFilter = filter.name; } else if (this.itemType === '') { filter.disable = false; filter.active = false; } else { filter.disable = true; filter.active = false; } } if (this.itemType === '') { this.filters[0].active = true; } } async openSearchModal() { const modal = await this.modalController.create({ component: WorklistAdvancedSearchComponent, cssClass: 'advanced-search-modal', backdropDismiss: false, componentProps: {} }); modal.onDidDismiss().then(result => { if (result.data) { if (result.data.notificationType !== '' || result.data.selectedValue !== '' || result.data.itemType !== '') { this.showSearchButton = true; this.itemType = result.data.itemType; this.notificationType = result.data.notificationType; this.selectedValue = result.data.selectedValue; this.inputDate = result.data.inputDate; this.inputSearch = result.data.inputSearch; this.WorkListObj.P_PAGE_NUM = 1; this.newWorkListResponse = []; this.showFormattedData = {}; this.selectedFilter = 'ALL'; this.filters[this.currentActiveIndex].active = false; this.currentActiveIndex = 0; this.previousActiveIndex = 0; this.filters[this.currentActiveIndex].active = true; if (this.itemType !== '') { this.disableFilters(); } this.getAllPushNotificationFun(); } } }); return await modal.present(); } getAllPushNotificationFun() { this.WorkListObj.P_PAGE_NUM = 1; this.isReachEnd = false; this.WorkListObj.P_SEARCH_FROM_USER = this.selectedValue === '1' ? this.inputSearch : ''; this.WorkListObj.P_SEARCH_SUBJECT = this.selectedValue === '2' ? this.inputSearch : ''; this.WorkListObj.P_SEARCH_SENT_DATE = (this.inputDate && this.selectedValue === '3') ? moment(this.inputDate).format('DD-MMM-YYYY') : ''; this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = this.selectedValue === '4' ? this.inputSearch : ''; ; this.WorkListObj.P_ITEM_TYPE = this.itemType !== '' ? this.itemType : ''; this.WorkListObj.P_NOTIFICATION_TYPE = this.notificationType !== '' ? this.notificationType : '1'; if (this.selectedValue === '5') { this.WorkListObj.P_SEARCH_FROM_USER = ''; this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = ''; this.WorkListObj.P_SEARCH_SENT_DATE = ''; this.WorkListObj.P_SEARCH_SUBJECT = ''; } this.WorklistService.getWorkList(this.WorkListObj).subscribe((result) => { if (this.common.validResponse(result)) { this.handleWorkListResult(result.GetWorkList); } } ); } categorizeData(arrayToCategorize: any) { const datePipe = new DatePipe('en-US'); const formattedData = {}; for (const workList of arrayToCategorize) { workList.FORMATTED_DATE = datePipe.transform(new Date(workList.BEGIN_DATE), 'MMMM dd, y'); if (!(workList.FORMATTED_DATE in formattedData)) { formattedData[workList.FORMATTED_DATE] = new Array(); formattedData[workList.FORMATTED_DATE].push(workList); } else { formattedData[workList.FORMATTED_DATE].push(workList); } } return formattedData; } sortArray(arrayToSort: any) { return arrayToSort.sort((a: any, b: any) => new Date(b.BEGIN_DATE).getTime() - new Date(a.BEGIN_DATE).getTime() ); } private handleWorkListResult(result: any) { const lastItemIndex = result.length - 1; const lastitem = result[lastItemIndex]; if (lastitem) { if (lastitem.NO_OF_ROWS === lastitem.ROW_NUM) { this.isReachEnd = true; if (this.infiniteScroll) { this.infiniteScroll.complete(); } } else { this.isReachEnd = false; if (this.infiniteScroll) { this.infiniteScroll.complete(); } } } if (this.common.hasData(result)) { this.WorkListObj.P_PAGE_NUM++; if (this.newWorkListResponse.length === 0) { this.newWorkListResponse = result; } else { this.newWorkListResponse = this.newWorkListResponse.concat(result); } this.newWorkListResponse = this.sortArray(this.newWorkListResponse); console.log(this.newWorkListResponse); this.showFormattedData = this.categorizeData(this.newWorkListResponse); this.common.sharedService.setSharedData(this.newWorkListResponse, HomeComponent.NOTIFICATION_ARR); } else { this.newWorkListResponse = []; } } openNotificationDetail(obj) { this.common.sharedService.setSharedData(obj[0], HomeComponent.NOTIFICATION_DATA); if (obj.REQUEST_TYPE === 'PR') { this.common.openWorklistMainPRPage(); } else if (obj[0].REQUEST_TYPE === 'PO') { this.common.openWorklistMainPOPage(); } else if (obj[0].REQUEST_TYPE === 'MO') { this.common.openWorklistMainMRPage(); } else { this.common.openWorklistMainPage(); } } isEmptyObject() { return (this.showFormattedData && (Object.keys(this.showFormattedData).length > 0) || this.ITGItem.length > 0); } resetData() { if (this.infiniteScroll) { this.infiniteScroll.complete(); } this.showSearchButton = false; this.notificationType = '1'; this.selectedValue = ''; this.inputDate = ''; this.inputSearch = ''; this.newWorkListResponse = []; this.showFormattedData = {}; this.WorkListObj.P_SEARCH_FROM_USER = ''; this.WorkListObj.P_SEARCH_ITEM_TYPE_DSP_NAME = ''; this.WorkListObj.P_SEARCH_SENT_DATE = ''; this.WorkListObj.P_SEARCH_SUBJECT = ''; } clearSearch() { this.itemType = ''; this.selectedFilter = 'ALL'; this.disableFilters(); this.resetData(); this.getAllPushNotificationFun(); } doInfinite(infiniteScroll) { if (!this.isReachEnd && this.selectedFilter !== 'ITG') { this.WorklistService.getWorkList(this.WorkListObj).subscribe((result) => { if (this.common.validResponse(result)) { this.handleWorkListResult(result.GetWorkList); } }); } else { if (this.infiniteScroll) { this.infiniteScroll.complete(); } } } Count() { this.workListService.getITGCount() .subscribe((result: any) => { for (let i = 0; i < result.RequestType.length; i++) { this.ITGSegment[i] = { name: result.RequestType[i].RequestTypeName, code: result.RequestType[i].RequestTypeCode, data: result.RequestType[i].RequestDetails, style: false }; } if(this.ITGSegment.length != 0 ){ this.setActive(this.ITGSegment[0].code); } console.log(this.ITGSegment); }); } Details() { this.workListService.getITGDetails() .subscribe((result: any) => { this.totalRequestCount = this.totalRequestCount + result.TotalCount; this.filters[5].value = result.TotalCount; }); } ITGNotification() { // this.Details(); this.isAll = false; this.isPR = false; this.isPO = false; this.isMR = false; this.isHR = false; this.isITG = true; } searchBtn() { this.isSearch = !this.isSearch; } setActive(selectedSegment) { this.ITGItem = []; let count = 0; this.activeSegment = selectedSegment; // tslint:disable-next-line: prefer-for-of for (let i = 0; i < this.ITGSegment.length; i++) { if (this.ITGSegment[i].code === selectedSegment) { this.ITGSegment[i].style = true; this.ITGItem[count] = this.ITGSegment[i].data; count++; } else { this.ITGSegment[i].style = false; } } } openITG(segmentInfo) { this.common.sharedService.setSharedData(segmentInfo, HomeComponent.REQUSET_INFO); this.common.sharedService.setSharedData(this.activeSegment, HomeComponent.REQUSET_NAME); this.common.sharedService.setSharedData(this.ITGItem, HomeComponent.ALL_REQUEST); this.common.openWorklistITGPage(); } }