From 4ebba3900c9bbe728d874f380414019b96992194 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 3 Aug 2022 11:58:40 +0300 Subject: [PATCH] dashboard improvements, monthly attendance & vacation rule added. --- assets/langs/ar-SA.json | 1 + assets/langs/en-US.json | 1 + lib/config/routes.dart | 7 +++- lib/generated/codegen_loader.g.dart | 2 + lib/generated/locale_keys.g.dart | 1 + lib/provider/dashboard_provider_model.dart | 18 ++++----- ...ce.dart => monthly_attendance_screen.dart} | 10 ++--- lib/ui/attendance/vacation_rule_screen.dart | 36 +++++++++++++++++ lib/ui/landing/widget/services_widget.dart | 11 ++++- .../my_attendance/my_attendance_screen.dart | 40 ++++++------------- 10 files changed, 80 insertions(+), 47 deletions(-) rename lib/ui/attendance/{monthly_attendance.dart => monthly_attendance_screen.dart} (99%) create mode 100644 lib/ui/attendance/vacation_rule_screen.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index d3ac0ba..816708e 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -30,6 +30,7 @@ "services": "خدمات", "viewAllServices": "عرض جميع الخدمات", "monthlyAttendance": "الحضور الشهري", + "vacationRule": "حكم اجازة", "workFromHome": "العمل من المنزل", "ticketRequest": "طلب تذكرة", "viewAllOffers": "مشاهدة جميع العروض", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 838d20f..84f0c0d 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -30,6 +30,7 @@ "services": "Services", "viewAllServices": "View All Services", "monthlyAttendance": "Monthly Attendance", + "vacationRule": "Vacation Rule", "workFromHome": "Work From Home", "ticketRequest": "Ticket Request", "viewAllOffers": "View All Offers", diff --git a/lib/config/routes.dart b/lib/config/routes.dart index c18219d..4d9c390 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/ui/attendance/monthly_attendance.dart'; +import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart'; +import 'package:mohem_flutter_app/ui/attendance/vacation_rule_screen.dart'; import 'package:mohem_flutter_app/ui/bottom_sheets/attendence_details_bottom_sheet.dart'; import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; import 'package:mohem_flutter_app/ui/landing/today_attendance_screen.dart'; @@ -70,6 +71,7 @@ class AppRoutes { //Attendance static const String attendance = "/attendance"; static const String monthlyAttendance = "/monthlyAttendance"; + static const String vacationRule = "/vacationRule"; //Bottom Sheet static const String attendanceDetailsBottomSheet = "/attendanceDetailsBottomSheet"; @@ -124,7 +126,8 @@ class AppRoutes { // addWorkFromHome: (context) => AddWorkFromHomeScreen(), profile: (context) => ProfileScreen(), //Attendance - monthlyAttendance: (context) => MonthlyAttendance(), + monthlyAttendance: (context) => MonthlyAttendanceScreen(), + vacationRule: (context) => VacationRuleScreen(), //Bottom Sheet attendanceDetailsBottomSheet: (context) => AttendenceDetailsBottomSheet(), diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 5b433e7..3667ad5 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -46,6 +46,7 @@ class CodegenLoader extends AssetLoader{ "services": "خدمات", "viewAllServices": "عرض جميع الخدمات", "monthlyAttendance": "الحضور الشهري", + "vacationRule": "حكم اجازة", "workFromHome": "العمل من المنزل", "ticketRequest": "طلب تذكرة", "viewAllOffers": "مشاهدة جميع العروض", @@ -385,6 +386,7 @@ static const Map en_US = { "services": "Services", "viewAllServices": "View All Services", "monthlyAttendance": "Monthly Attendance", + "vacationRule": "Vacation Rule", "workFromHome": "Work From Home", "ticketRequest": "Ticket Request", "viewAllOffers": "View All Offers", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 6ff58d6..ca40afb 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -31,6 +31,7 @@ abstract class LocaleKeys { static const services = 'services'; static const viewAllServices = 'viewAllServices'; static const monthlyAttendance = 'monthlyAttendance'; + static const vacationRule = 'vacationRule'; static const workFromHome = 'workFromHome'; static const ticketRequest = 'ticketRequest'; static const viewAllOffers = 'viewAllOffers'; diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart index a78fd67..511fc03 100644 --- a/lib/provider/dashboard_provider_model.dart +++ b/lib/provider/dashboard_provider_model.dart @@ -1,9 +1,11 @@ import 'dart:convert'; +import 'package:easy_localization/easy_localization.dart'; 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/generated/locale_keys.g.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'; @@ -159,7 +161,11 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries(); getMenuEntriesList = genericResponseModel!.getMenuEntriesList; - homeMenus = parseMenues(getMenuEntriesList ?? []); + homeMenus = parseMenus(getMenuEntriesList ?? []); + if (homeMenus!.isNotEmpty) { + homeMenus!.first.menuEntiesList.insert(0, GetMenuEntriesList(requestType: "MONTHLY_ATTENDANCE", prompt: LocaleKeys.monthlyAttendance.tr())); + homeMenus!.first.menuEntiesList.add(GetMenuEntriesList(requestType: "VACATION_RULE", prompt: LocaleKeys.vacationRule.tr())); + } isServicesMenusLoading = false; notifyListeners(); } catch (ex) { @@ -169,21 +175,13 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } } - List parseMenues(List getMenuEntriesList) { + List parseMenus(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 { +class _MonthlyAttendanceScreenState extends State { bool isPresent = false; bool isAbsent = false; bool isMissing = false; diff --git a/lib/ui/attendance/vacation_rule_screen.dart b/lib/ui/attendance/vacation_rule_screen.dart new file mode 100644 index 0000000..e1f8745 --- /dev/null +++ b/lib/ui/attendance/vacation_rule_screen.dart @@ -0,0 +1,36 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; + +class VacationRuleScreen extends StatefulWidget { + VacationRuleScreen({Key? key}) : super(key: key); + + @override + _VacationRuleScreenState createState() { + return _VacationRuleScreenState(); + } +} + +class _VacationRuleScreenState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.vacationRule.tr(), + ), + ); + } +} diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index 9500ac4..e99205b 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -18,9 +18,9 @@ class ServicesWidget extends StatelessWidget { List namesT = [LocaleKeys.monthlyAttendance.tr(), LocaleKeys.workFromHome.tr(), LocaleKeys.ticketRequest.tr(), LocaleKeys.monthlyAttendance.tr()]; List iconT = [ "assets/images/monthly_attendance.svg", - "assets/images/dynamic_screens.svg", + "assets/images/monthly_attendance.svg", + "assets/images/ticket_request.svg", "assets/images/ticket_request.svg", - "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", @@ -109,6 +109,13 @@ class ServicesWidget extends StatelessWidget { void handleOnPress(context, GetMenuEntriesList menuEntry) { var pro = Provider.of(context, listen: false); + if (menuEntry.requestType == "MONTHLY_ATTENDANCE") { + Navigator.pushNamed(context, AppRoutes.monthlyAttendance); + return; + } else if (menuEntry.requestType == "VACATION_RULE") { + Navigator.pushNamed(context, AppRoutes.vacationRule); + return; + } List menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList() ?? []; menuEntry.icon = ""; print(menuEntry.toJson()); diff --git a/lib/ui/my_attendance/my_attendance_screen.dart b/lib/ui/my_attendance/my_attendance_screen.dart index cfa8eee..207e2c7 100644 --- a/lib/ui/my_attendance/my_attendance_screen.dart +++ b/lib/ui/my_attendance/my_attendance_screen.dart @@ -27,34 +27,18 @@ class MyAttendanceScreen extends StatelessWidget { title: LocaleKeys.myAttendance.tr(), ), body: SizedBox( - width: double.infinity, - height: double.infinity, - child: list.isEmpty - ? Utils.getNoDataWidget(context) - : Column( - children: [ - // commenting this because missing wipe coming as duplicate in the screen - itemView( - "assets/images/pdf.svg", - LocaleKeys.myAttendance.tr(), - ).onPress(() { - Navigator.pushNamed(context, AppRoutes.monthlyAttendance, arguments: DynamicListViewParams(LocaleKeys.missingSwipes.tr(), "HMG_OTL_MISSING_SWIPE_EIT_SS")); - }).paddingOnly(left: 21, right: 21), - 12.height, - ListView.separated( - padding: const EdgeInsets.all(21), - itemBuilder: (cxt, index) => itemView( - "assets/images/pdf.svg", - //LocaleKeys.missingSwipes.tr(), - list[index].prompt!, - ).onPress(() { - Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(list[index].prompt!, list[index].functionName!)); - }), - separatorBuilder: (cxt, index) => 12.height, - itemCount: list.length) - .expanded - ], - )), + width: double.infinity, + height: double.infinity, + child: list.isEmpty + ? Utils.getNoDataWidget(context) + : ListView.separated( + padding: const EdgeInsets.all(21), + itemBuilder: (cxt, index) => itemView("assets/images/pdf.svg", list[index].prompt!).onPress(() { + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(list[index].prompt!, list[index].functionName!)); + }), + separatorBuilder: (cxt, index) => 12.height, + itemCount: list.length), + ), ); }