Merge remote-tracking branch 'origin/design_3.0_TM_Module_bug_fixes' into design_3.0_TM_Module_bug_fixes

design_3.0_task_module_new
WaseemAbbasi22 5 months ago
commit 330efd90be

@ -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<SettingProvider>(this).language == "ar";
SettingProvider get settingProvider => Provider.of<SettingProvider>(this, listen: false);
// UserProvider get userProvider => Provider.of<UserProvider>(this, listen: false);
void showConfirmDialog(String message, {String? title, VoidCallback? onTap}) => showDialog(
context: this,
builder: (BuildContext cxt) => ConfirmDialog(

@ -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 {});

@ -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> workOrderHistory;
List<Activities> activities;
List<dynamic> activityAssetToBeRetireds;
String? itgFormWorkOrderStatus;
factory WorkOrderData.fromJson(Map<String, dynamic> json) {
return WorkOrderData(
@ -217,6 +219,7 @@ class WorkOrderData {
activities: json["activities"] == null ? [] : List<Activities>.from(json["activities"]!.map((x) => Activities.fromJson(x))),
needAVisitDateTime: DateTime.tryParse(json["needAVisitDateTime"] ?? ""),
needAVisitComment: json["needAVisitComment"],
itgFormWorkOrderStatus: json["itgFormWorkOrderStatus"],
activityAssetToBeRetireds: json["activityAssetToBeRetireds"] == null ? [] : List<dynamic>.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,
};
}

@ -79,7 +79,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
return Column(
children: [
(activities.isEmpty && reOrderActivities.isEmpty)
? NoDataFound(message: context.translation.noDataFound).expanded
? NoDataFound(message: context.translation.noDataFound).center.expanded
:
// : showReorderView
// ? ReorderableListView(

@ -120,6 +120,16 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
),
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,

@ -72,7 +72,6 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
child: Card(
child: Column(
children: [
12.height,
SingleItemDropDownMenu<Lookup, RetirementTypeProvider>(
context: context,
title: context.translation.retirementType,

@ -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<UserProvider>(context, listen: false).user?.type) == UsersTypes.engineer;
bool isUserFMS = Provider.of<SettingProvider>(context, listen: false).isUserFMS;
List<NavItemModel> 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: <BottomNavigationBarItem>[
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});
}

@ -90,12 +90,12 @@ class CreateRequestModel {
if (Provider.of<SettingProvider>(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;
}

@ -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<LandPage> {
Widget build(BuildContext context) {
if (_userProvider == null) {
_userProvider = Provider.of<UserProvider>(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 = <Widget>[
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 = <Widget>[
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<LandPage> {
))
: 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(

@ -63,7 +63,7 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
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});

@ -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<MyRequestsPage> {
context.translation.gasRefill,
context.translation.transferAsset,
context.translation.preventiveMaintenance,
context.translation.recurrentWo,
context.translation.taskRequest,
];
if (Provider.of<UserProvider>(context, listen: false).user!.type != UsersTypes.normal_user) {
requestsList.add(context.translation.recurrentWo);
}
// context.translation.taskRequest // todo enable it in NextRelease
_provider = Provider.of<AllRequestsProvider>(context, listen: false);
_provider!.reset();
WidgetsBinding.instance.addPostFrameCallback((_) {
@ -135,8 +140,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
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,

@ -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<CreateDeviceTransferReques
21.height,
requestTypeWidget(context),
12.height,
"Destination".bodyText(context).custom(color: AppColor.white936),
12.height,
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [

Loading…
Cancel
Save