import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart'; import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/dashboard/menus.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; /// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool // ignore: prefer_mixin class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { //Attendance Tracking bool isAttendanceTrackingLoading = true; int endTime = 0, isTimeRemainingInSeconds = 0; double progress = 0.0; GetAttendanceTracking? attendanceTracking; //Work List bool isWorkListLoading = true; int workListCounter = 0; //Misssing Swipe bool isMissingSwipeLoading = true; int missingSwipeCounter = 0; //Leave and Ticket Balance bool isLeaveTicketBalanceLoading = true; double leaveBalance = 0; double ticketBalance = 0; //Menu Entries bool isServicesMenusLoading = true; List? homeMenus; List? getMenuEntriesList; //Attendance Tracking API's & Methods Future fetchAttendanceTracking(context) async { try { attendanceTracking = await DashboardApiClient().getAttendanceTracking(); print("attendanceTracking:" + (attendanceTracking!.pRemainingHours).toString()); isAttendanceTrackingLoading = false; // isTimeRemainingInSeconds = calculateSeconds( "00:00:00"); if (attendanceTracking?.pSwipeIn != null) { isTimeRemainingInSeconds = calculateSeconds(attendanceTracking!.pRemainingHours ?? "00:00:00"); int totalShiftTimeInSeconds = calculateSeconds(attendanceTracking!.pScheduledHours ?? "00:00:00"); print("totalShiftTimeInSeconds: " + totalShiftTimeInSeconds.toString()); print("isTimeRemainingInSeconds: " + isTimeRemainingInSeconds.toString()); progress = (isTimeRemainingInSeconds / totalShiftTimeInSeconds); endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds; print("endTime " + endTime.toString()); } notifyListeners(); } catch (ex) { Utils.handleException(ex, context, null); } return true; } int calculateSeconds(String time) { int hour = int.parse(time.split(":")[0]); int mints = int.parse(time.split(":")[1]); int seconds = int.parse(time.split(":")[2]); return ((hour * 60 * 60) + (mints * 60) + seconds); } void update(context) { fetchAttendanceTracking(context); // isAttendanceTrackingLoading = !isAttendanceTrackingLoading; // isWorkListLoading = !isWorkListLoading; // attendanceTracking?.pSwipeIn = "a"; // isTimeRemainingInSeconds = calculateSeconds("00:10:30"); // endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds; // notifyListeners(); } ItgFormsModel? itgFormsModel; List? getOpenNotificationsList; //Work List API's & Methods Future fetchWorkListCounter(context, {bool showLoading = false}) async { try { if (showLoading) Utils.showLoading(context); GenericResponseModel? genericResponseModel = await DashboardApiClient().getOpenNotifications(); isWorkListLoading = false; getOpenNotificationsList = genericResponseModel?.getOpenNotificationsList; workListCounter = genericResponseModel?.pOPENNTFNUMBER ?? 0; itgFormsModel = await DashboardApiClient().getItgFormsPendingTask(); workListCounter = workListCounter + (itgFormsModel?.totalCount ?? 0); if (showLoading) Utils.hideLoading(context); notifyListeners(); } catch (ex) { isWorkListLoading = false; logger.wtf(ex); if (showLoading) Utils.hideLoading(context); notifyListeners(); Utils.handleException(ex, context, null); } } //Missing Siwpe API's & Methods Future fetchMissingSwipe(context) async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getOpenMissingSwipes(); isMissingSwipeLoading = false; missingSwipeCounter = genericResponseModel!.getOpenMissingSwipesList!.pOpenMissingSwipes ?? 0; notifyListeners(); } catch (ex) { isMissingSwipeLoading = false; logger.wtf(ex); notifyListeners(); Utils.handleException(ex, context, null); } } //Leave and Ticket Balance API's & Methods Future fetchLeaveTicketBalance(context) async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getAccrualBalances(); isLeaveTicketBalanceLoading = false; leaveBalance = genericResponseModel?.getAccrualBalancesList![0].accrualNetEntitlement ?? 0.0; ticketBalance = (genericResponseModel?.getAccrualBalancesList![1].accrualNetEntitlement ?? 0.0) + (genericResponseModel?.getAccrualBalancesList![2].accrualNetEntitlement ?? 0.0); notifyListeners(); } catch (ex) { isLeaveTicketBalanceLoading = false; logger.wtf(ex); notifyListeners(); Utils.handleException(ex, context, null); } } //List Menu API's & Methods void fetchListMenu() async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu(); Map map = {}; print(jsonEncode(genericResponseModel!.listMenu)); for (int i = 0; i < genericResponseModel.listMenu!.length; i++) { print(genericResponseModel.listMenu![i].menuName ?? ""); map[genericResponseModel.listMenu![i].menuName ?? ""] = i.toString(); } logger.i(map); notifyListeners(); } catch (ex) { logger.wtf(ex); notifyListeners(); Utils.handleException(ex, null, null); } } //Menu Entries API's & Methods void fetchMenuEntries() async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries(); getMenuEntriesList = genericResponseModel!.getMenuEntriesList; homeMenus = parseMenues(getMenuEntriesList ?? []); isServicesMenusLoading = false; notifyListeners(); } catch (ex) { logger.wtf(ex); notifyListeners(); Utils.handleException(ex, null, null); } } List parseMenues(List getMenuEntriesList) { List menus = []; for (int i = 0; i < getMenuEntriesList.length; i++) { if (getMenuEntriesList[i].parentMenuName!.isEmpty) { menus.add(Menus(getMenuEntriesList[i], getMenuEntriesList.where((element) => getMenuEntriesList[i].menuName == element.parentMenuName).toList())); } } // Verify Menus by printing in log // for(int i=0;i