diff --git a/lib/extensions/context_extension.dart b/lib/extensions/context_extension.dart index 37347a14..ae450626 100644 --- a/lib/extensions/context_extension.dart +++ b/lib/extensions/context_extension.dart @@ -3,6 +3,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/new_views/swipe_module/dialoge/confirm_dialog.dart'; +import '../controllers/providers/settings/setting_provider.dart'; import '../controllers/providers/settings/setting_provider.dart'; extension BuildContextExtension on BuildContext { @@ -14,6 +15,9 @@ extension BuildContextExtension on BuildContext { bool get isAr => Provider.of(this).language == "ar"; + SettingProvider get settingProvider => Provider.of(this, listen: false); + // UserProvider get userProvider => Provider.of(this, listen: false); + void showConfirmDialog(String message, {String? title, VoidCallback? onTap}) => showDialog( context: this, builder: (BuildContext cxt) => ConfirmDialog( diff --git a/lib/main.dart b/lib/main.dart index a9f0bf84..71d84aa9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -97,8 +97,16 @@ import 'new_views/pages/gas_refill_request_form.dart'; import 'providers/service_request_providers/loan_availability_provider.dart'; import 'providers/service_request_providers/reject_reason_provider.dart'; +class MyHttpOverrides extends HttpOverrides { + @override + HttpClient createHttpClient(SecurityContext? context) { + return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true; + } +} + void main() async { WidgetsFlutterBinding.ensureInitialized(); + HttpOverrides.global = MyHttpOverrides(); // for later use. _configureLocalTimeZone(); NotificationManger.initialisation((notificationDetails) {}, (id, title, body, payload) async {}); diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index 3fc360d0..2162d16b 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -99,6 +99,7 @@ class WorkOrderData { required this.workOrderHistory, required this.activities, required this.activityAssetToBeRetireds, + this.itgFormWorkOrderStatus, }); int? requestId; @@ -159,6 +160,7 @@ class WorkOrderData { List workOrderHistory; List activities; List activityAssetToBeRetireds; + String? itgFormWorkOrderStatus; factory WorkOrderData.fromJson(Map json) { return WorkOrderData( @@ -217,6 +219,7 @@ class WorkOrderData { activities: json["activities"] == null ? [] : List.from(json["activities"]!.map((x) => Activities.fromJson(x))), needAVisitDateTime: DateTime.tryParse(json["needAVisitDateTime"] ?? ""), needAVisitComment: json["needAVisitComment"], + itgFormWorkOrderStatus: json["itgFormWorkOrderStatus"], activityAssetToBeRetireds: json["activityAssetToBeRetireds"] == null ? [] : List.from(json["activityAssetToBeRetireds"]!.map((x) => x)), ); } @@ -264,6 +267,7 @@ class WorkOrderData { "workOrderHistory": workOrderHistory.map((x) => x.toJson()).toList(), "activities": activities.map((x) => x.toJson()).toList(), "activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(), + "itgFormWorkOrderStatus": itgFormWorkOrderStatus, }; } diff --git a/lib/modules/cm_module/views/components/activities_list_view.dart b/lib/modules/cm_module/views/components/activities_list_view.dart index c7fc7701..46be8029 100644 --- a/lib/modules/cm_module/views/components/activities_list_view.dart +++ b/lib/modules/cm_module/views/components/activities_list_view.dart @@ -79,7 +79,7 @@ class _ActivitiesListViewState extends State { return Column( children: [ (activities.isEmpty && reOrderActivities.isEmpty) - ? NoDataFound(message: context.translation.noDataFound).expanded + ? NoDataFound(message: context.translation.noDataFound).center.expanded : // : showReorderView // ? ReorderableListView( diff --git a/lib/modules/cm_module/views/components/service_request_detail_view.dart b/lib/modules/cm_module/views/components/service_request_detail_view.dart index 37682b51..358b0ca2 100644 --- a/lib/modules/cm_module/views/components/service_request_detail_view.dart +++ b/lib/modules/cm_module/views/components/service_request_detail_view.dart @@ -120,6 +120,16 @@ class _ServiceRequestDetailViewState extends State { ), 8.width, ], + if(workOrder.itgFormWorkOrderStatus!=null)...[ + StatusLabel( + label: workOrder.itgFormWorkOrderStatus, + id: 0, + radius: 4, + textColor: AppColor.getPriorityStatusTextColor(context, 82), + backgroundColor: AppColor.getPriorityStatusColor(context, 0), + ), + 8.width, + ], StatusLabel( radius: 4, label: workOrder.status!.name, diff --git a/lib/modules/cm_module/views/forms/asset_retired/asset_retired.dart b/lib/modules/cm_module/views/forms/asset_retired/asset_retired.dart index af051bbe..283ed269 100644 --- a/lib/modules/cm_module/views/forms/asset_retired/asset_retired.dart +++ b/lib/modules/cm_module/views/forms/asset_retired/asset_retired.dart @@ -72,7 +72,6 @@ class _AssetRetiredState extends State with TickerProviderStateMix child: Card( child: Column( children: [ - 12.height, SingleItemDropDownMenu( context: context, title: context.translation.retirementType, diff --git a/lib/new_views/common_widgets/app_bottom_nav_bar.dart b/lib/new_views/common_widgets/app_bottom_nav_bar.dart index f256478a..0d4211e6 100644 --- a/lib/new_views/common_widgets/app_bottom_nav_bar.dart +++ b/lib/new_views/common_widgets/app_bottom_nav_bar.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; @@ -17,8 +17,17 @@ class AppBottomNavigationBar extends StatelessWidget { @override Widget build(BuildContext context) { bool isEngineer = (Provider.of(context, listen: false).user?.type) == UsersTypes.engineer; + bool isUserFMS = Provider.of(context, listen: false).isUserFMS; + + List navItems = [ + NavItemModel(0, "overview", context.translation.overview), + NavItemModel(1, "request_icon", context.translation.workOrder), + if ((isEngineer && isUserFMS) || !isEngineer) NavItemModel(2, "add_icon", context.translation.calendar, showLabel: false), + NavItemModel(3, "assets", context.translation.assets), + NavItemModel(4, "contact", context.translation.contact), + ]; + return Container( - // height: 84.toScreenHeight, decoration: BoxDecoration( color: AppColor.background(context), boxShadow: [boxShadowR14], @@ -26,17 +35,12 @@ class AppBottomNavigationBar extends StatelessWidget { child: BottomNavigationBar( backgroundColor: Colors.white, items: [ - navBarItem(context, index: 0, iconName: "overview", label: context.translation.overview), - navBarItem(context, index: 1, iconName: "request_icon", label: context.translation.workOrder), - // if (!isEngineer) navBarItem(context, index: 2, iconName: "add_icon", label: context.translation.calendar, showLabel: false), - navBarItem(context, index: 2, iconName: "add_icon", label: context.translation.calendar, showLabel: false), - // navBarItem(context, index: !isEngineer ? 3 : 2, iconName: "assets", label: context.translation.assets), - navBarItem(context, index: 3, iconName: "assets", label: context.translation.assets), - // navBarItem(context, index: !isEngineer ? 4 : 3, iconName: "contact", label: context.translation.contact), - navBarItem(context, index: 4, iconName: "contact", label: context.translation.contact), + for (int i = 0; i < navItems.length; i++) navBarItem(context, index: navItems[i].index, iconName: navItems[i].iconName, label: navItems[i].label, showLabel: navItems[i].showLabel), ], currentIndex: selectedIndex, - onTap: onPressed, + onTap: (index) { + onPressed(navItems[index].index); + }, selectedLabelStyle: AppTextStyles.tinyFont2, unselectedLabelStyle: AppTextStyles.tinyFont2, selectedItemColor: Theme.of(context).bottomNavigationBarTheme.selectedItemColor, @@ -50,7 +54,7 @@ class AppBottomNavigationBar extends StatelessWidget { icon: iconName .toSvgAsset( width: showLabel ? 26 : 38, - height: showLabel ? 26 : 38, + height: showLabel ? 26 : 38, color: showLabel || (showLabel && selectedIndex != 2) ? selectedIndex == index ? Theme.of(context).bottomNavigationBarTheme.selectedItemColor @@ -62,3 +66,12 @@ class AppBottomNavigationBar extends StatelessWidget { ); } } + +class NavItemModel { + int index; + String label; + String iconName; + bool showLabel; + + NavItemModel(this.index, this.iconName, this.label, {this.showLabel = true}); +} diff --git a/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart b/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart index 7c412338..89bcbcf9 100644 --- a/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart +++ b/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart @@ -90,12 +90,12 @@ class CreateRequestModel { if (Provider.of(context, listen: false).engineerCanCreateCM) { list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id)); } - list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); + // list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); // todo enable it in NextRelease } else { list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id)); list.add(CreateRequestModel(context.translation.gasRefill, "add_icon", GasRefillRequestForm.routeName)); list.add(CreateRequestModel(context.translation.transferAsset, "add_icon", CreateDeviceTransferRequest.id)); - list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); + // list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); // todo enable it in NextRelease } return list; } diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index d1b1b92f..ecd2422a 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -15,9 +15,7 @@ import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/pages/land_page/create_request-type_bottomsheet.dart'; -import 'package:test_sa/new_views/pages/land_page/mark_attendance_widget.dart'; import 'package:test_sa/new_views/pages/land_page/my_request/my_requests_page.dart'; -import 'package:test_sa/new_views/pages/land_page/non_hmg_employee_swipe_view.dart'; import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/pages/settings_page.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; @@ -104,22 +102,22 @@ class _LandPageState extends State { Widget build(BuildContext context) { if (_userProvider == null) { _userProvider = Provider.of(context, listen: false); - if (_userProvider!.user != null && _userProvider!.user!.employeeIsHMG==false) { + if (_userProvider!.user != null && _userProvider!.user!.employeeIsHMG == false) { WidgetsBinding.instance.addPostFrameCallback((_) { _userProvider!.getSwipeLastTransaction(userId: _userProvider!.user!.userID!); }); } - _pages = [ - DashboardView(onDrawerPress: (() { - _scaffoldKey.currentState!.isDrawerOpen ? _scaffoldKey.currentState!.closeDrawer() : _scaffoldKey.currentState!.openDrawer(); - })), - // const old_page.LandPage(), - const MyRequestsPage(), - // if (_userProvider!.user!.type != UsersTypes.engineer) - const SizedBox(), - // if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(), - const MyAssetsPage(fromBottomBar: true), - ]; + _pages = [ + DashboardView(onDrawerPress: (() { + _scaffoldKey.currentState!.isDrawerOpen ? _scaffoldKey.currentState!.closeDrawer() : _scaffoldKey.currentState!.openDrawer(); + })), + // const old_page.LandPage(), + const MyRequestsPage(), + // if (_userProvider!.user!.type != UsersTypes.engineer) + const SizedBox(), + // if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(), + const MyAssetsPage(fromBottomBar: true), + ]; checkLocalAuth(); } @@ -149,19 +147,20 @@ class _LandPageState extends State { )) : null, drawer: const AppDrawer(), - body: _pages[currentPageIndex], + body: _pages[currentPageIndex], bottomNavigationBar: _pages.isEmpty ? null : AppBottomNavigationBar( selectedIndex: currentPageIndex, onPressed: (index) { bool isEngineer = _userProvider!.user!.type == UsersTypes.engineer; + print("index:$index"); if (index == 2) { showModalBottomSheet( context: context, useSafeArea: true, backgroundColor: Colors.white, - builder: (context) => CreateRequestTypeBottomSheet(isEngineer:isEngineer), + builder: (context) => CreateRequestTypeBottomSheet(isEngineer: isEngineer), ); } else if (index == 4) { showModalBottomSheet( diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index fb0d7512..d5fcbaa0 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -63,7 +63,7 @@ class _AllRequestsFilterPageState extends State { context.translation.gasRefill: 2, context.translation.transferAsset: 3, context.translation.preventiveMaintenance: 4, - context.translation.task: 6, + // context.translation.task: 6,// todo enable it in NextRelease }; if (isEngineer) { types.addAll({context.translation.recurrentWo: 5}); diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index be7231ae..19546da5 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -3,10 +3,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/search_all_requests_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/my_request/all_requests_filter_page.dart'; @@ -37,9 +39,12 @@ class _MyRequestsPageState extends State { context.translation.gasRefill, context.translation.transferAsset, context.translation.preventiveMaintenance, - context.translation.recurrentWo, - context.translation.taskRequest, ]; + if (Provider.of(context, listen: false).user!.type != UsersTypes.normal_user) { + requestsList.add(context.translation.recurrentWo); + } + // context.translation.taskRequest // todo enable it in NextRelease + _provider = Provider.of(context, listen: false); _provider!.reset(); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -135,8 +140,7 @@ class _MyRequestsPageState extends State { selectedRequest = index; }); _provider!.reset(); - _provider!.getAllRequests(context, typeTransaction: selectedRequest == 0 ? null : selectedRequest); - + _provider!.getAllRequests(context, typeTransaction: selectedRequest == 0 ? null : selectedRequest); } }), separatorBuilder: (cxt, index) => 8.width, diff --git a/lib/views/pages/device_transfer/create__device_transfer_request.dart b/lib/views/pages/device_transfer/create__device_transfer_request.dart index 18ef57a0..57beb3db 100644 --- a/lib/views/pages/device_transfer/create__device_transfer_request.dart +++ b/lib/views/pages/device_transfer/create__device_transfer_request.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; @@ -10,10 +11,9 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/asset.dart'; -import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/asset_transfer_attachment.dart'; +import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/enums/user_types.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/department.dart'; import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/models/service_request/pending_service_request_model.dart'; @@ -21,10 +21,10 @@ import 'package:test_sa/modules/cm_module/views/components/action_button/footer_ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/providers/ppm_service_provider.dart'; - import 'package:test_sa/views/pages/user/requests/pending_requests_screen.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; + import '../../../models/new_models/building.dart'; import '../../../models/new_models/site.dart'; import '../../../new_views/common_widgets/app_filled_button.dart'; @@ -144,6 +144,8 @@ class _CreateDeviceTransferRequestState extends State