Merge branch 'refs/heads/design_3.0_sdk_upgrade' into design_3.0_waseem_dev

# Conflicts:
#	lib/service_request_latest/views/components/request_detail_view.dart
design_3.0_demo_module
muhammad.abbasi 2 years ago
commit acbf33e2a2

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -393,7 +393,6 @@ class AllRequestsProvider extends ChangeNotifier {
} }
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
print('state code is $stateCode');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if (inProgressRequests == null) { if (inProgressRequests == null) {
inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]);

@ -39,6 +39,12 @@ class DashBoardProvider extends ChangeNotifier {
DD.DashboardDetail? get requestDetailList => _requestDetailList; DD.DashboardDetail? get requestDetailList => _requestDetailList;
List<CategoryTabs> tabs = [];
void setTabs(UsersTypes userType, context) {
tabs = CategoryTabs.getTabs(userType: userType, context: context);
}
set requestDetailList(DD.DashboardDetail? value) { set requestDetailList(DD.DashboardDetail? value) {
_requestDetailList = value; _requestDetailList = value;
notifyListeners(); notifyListeners();
@ -52,16 +58,30 @@ class DashBoardProvider extends ChangeNotifier {
pageNum = 1; pageNum = 1;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
_requestDetailList = null;
dashboardCount = null;
}
void resetRequestDataList() {
pageNum = 1;
nextPage = true;
stateCode = null;
_requestDetailList = null;
}
void getAllRequests(UsersTypes userTypes) {
getDashBoardCount(usersType: userTypes);
// getRequestDetail(usersType: userTypes);
} }
Future<int> getDashBoardCount({required UsersTypes usersType}) async { Future<int> getDashBoardCount({required UsersTypes usersType}) async {
isAllCountLoading = true; isAllCountLoading = true;
notifyListeners();
String url = ''; String url = '';
if (usersType == UsersTypes.engineer) {
url = URLs.engineerDashboardCountUrl;
}
if (usersType == UsersTypes.nurse) { if (usersType == UsersTypes.nurse) {
url = URLs.nurseDashboardCountUrl; url = URLs.nurseDashboardCountUrl;
} else {
url = URLs.engineerDashboardCountUrl;
} }
Response response; Response response;
try { try {
@ -70,6 +90,7 @@ class DashBoardProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
dashboardCount = DashboardCount.fromJson(json.decode(response.body)); dashboardCount = DashboardCount.fromJson(json.decode(response.body));
} }
isAllCountLoading = false; isAllCountLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
@ -81,49 +102,107 @@ class DashBoardProvider extends ChangeNotifier {
} }
} }
Future<int> getRequestDetail({bool showLoader = true, required UsersTypes usersType, required int status}) async { Future<int> getWorkOrderById(int id) async {
isDetailLoading = showLoader; isLoading = true;
notifyListeners();
Response response; Response response;
String url = ''; try {
if (usersType == UsersTypes.engineer) { response = await ApiManager.instance.get(
url = URLs.engineerDashboardDetailsUrl; URLs.getWorkOrderByIdUrl + "?workOrderId=$id",
);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
dashboardCount = DashboardCount.fromJson(json.decode(response.body));
}
isAllCountLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isAllCountLoading = false;
stateCode = -1;
notifyListeners();
return -1;
} }
}
void getHighPriorityRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, isHighPriority: true);
}
void getOverdueRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, isOverdue: true);
}
void getOpenRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 1);
}
void getInProgressRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 2);
}
void getCompletedRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 3);
}
void getAcknowledgeRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 3);
}
void getClosedRequests({bool showLoader = true, required UsersTypes usersType}) {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 4);
}
Future<int> getRequestDetail({bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false}) async {
if (showLoader) {
isDetailLoading = showLoader;
notifyListeners();
}
Response response;
String url = '';
if (usersType == UsersTypes.nurse) { if (usersType == UsersTypes.nurse) {
url = URLs.nurseDashboardDetailsUrl; url = URLs.nurseDashboardDetailsUrl;
} else {
url = URLs.engineerDashboardDetailsUrl;
} }
try { try {
Map<String, dynamic> body = { Map<String, dynamic> body = {"pageNumber": pageNum, "pageSize": pageItemNumber};
"statusValue": status, if (status != null) body["status"] = status;
"pageNumber": pageNum, if (isHighPriority) body["isHighPriority"] = true;
"pageSize": pageItemNumber, if (isOverdue) body["isOverdue"] = true;
};
response = await ApiManager.instance.post(url, body: body); response = await ApiManager.instance.post(url, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if (requestDetailList == null) { if (_requestDetailList == null) {
requestDetailList = DD.DashboardDetail.fromJson(json.decode(response.body)); _requestDetailList = DD.DashboardDetail.fromJson(json.decode(response.body));
isDetailLoading = false;
notifyListeners(); //notifyListeners();
} else { } else {
requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)["data"][0]).data??[]); _requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)["data"][0]).data ?? []);
isDetailLoading = false;
notifyListeners(); //notifyListeners();
} }
if (requestDetailList!.data!.length >= pageItemNumber) { if (_requestDetailList!.data!.length >= pageItemNumber) {
nextPage = true; nextPage = true;
} else { } else {
nextPage = false; nextPage = false;
} }
notifyListeners(); //notifyListeners();
} else { } else {
requestDetailList = null; requestDetailList = null;
} }
isDetailLoading = false; if (showLoader) {
isDetailLoading = false;
}
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
isDetailLoading = false; if (showLoader) {
isDetailLoading = false;
}
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
@ -137,3 +216,25 @@ class DashBoardProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
} }
class CategoryTabs {
String label;
int tag;
CategoryTabs(this.label, this.tag);
static List<CategoryTabs> getTabs({required UsersTypes userType, required BuildContext context}) {
List<CategoryTabs> tabs = [];
if (userType == UsersTypes.engineer) {
tabs.add(CategoryTabs('New Request', 1));
tabs.add(CategoryTabs('In Progress', 2));
tabs.add(CategoryTabs('Completed', 3));
return tabs;
}
tabs.add(CategoryTabs('Open Request', 1));
tabs.add(CategoryTabs('In Progress', 2));
tabs.add(CategoryTabs('Acknowledged', 3));
tabs.add(CategoryTabs('Rejected', 4));
return tabs;
}
}

@ -1,6 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -15,10 +14,8 @@ import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.dart';
import 'package:test_sa/dashboard_latest/widgets/progress_fragment.dart'; import 'package:test_sa/dashboard_latest/widgets/progress_fragment.dart';
import 'package:test_sa/dashboard_latest/widgets/requests_fragment.dart'; import 'package:test_sa/dashboard_latest/widgets/requests_fragment.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/utilities/request_utils.dart';
import 'widgets/request_category_fragment.dart'; import 'widgets/request_category_fragment.dart';
@ -42,6 +39,7 @@ class _DashboardViewState extends State<DashboardView> {
late DashBoardProvider dashBoardProvider; late DashBoardProvider dashBoardProvider;
late NotificationsProvider notificationsProvider; late NotificationsProvider notificationsProvider;
late ScrollController _scrollController; late ScrollController _scrollController;
late DashBoardProvider _dashBoardProvider;
@override @override
void initState() { void initState() {
@ -50,17 +48,25 @@ class _DashboardViewState extends State<DashboardView> {
getInitialData(); getInitialData();
} }
void getRequests() {
_dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!);
_dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag);
}
void getInitialData() { void getInitialData() {
scheduleMicrotask(() async { scheduleMicrotask(() async {
userProvider = Provider.of<UserProvider>(context, listen: false); userProvider = Provider.of<UserProvider>(context, listen: false);
settingProvider = Provider.of<SettingProvider>(context, listen: false); settingProvider = Provider.of<SettingProvider>(context, listen: false);
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false); RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false); allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false);
dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false); _dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
_dashBoardProvider.setTabs(userProvider.user!.type!, context);
notificationsProvider = Provider.of<NotificationsProvider>(context, listen: false); notificationsProvider = Provider.of<NotificationsProvider>(context, listen: false);
user = userProvider.user!; user = userProvider.user!;
await dashBoardProvider.getDashBoardCount(usersType: user.type!); getRequests();
await getAllRequests(); // await requestDetailProvider.engineerRejectWorkOrder(id: '3', feedBack: 'Abcdef');
// await dashBoardProvider.getDashBoardCount(usersType: user.type!);
// await getAllRequests();
if (isFCM) { if (isFCM) {
FirebaseNotificationManger.initialized(context); FirebaseNotificationManger.initialized(context);
NotificationManger.initialisation((notificationDetails) { NotificationManger.initialisation((notificationDetails) {
@ -72,23 +78,22 @@ class _DashboardViewState extends State<DashboardView> {
}); });
} }
Future<void> getAllRequests() async { // Future<void> getAllRequests() async {
allRequestsProvider.isAllLoading = true; // allRequestsProvider.isAllLoading = true;
allRequestsProvider.isFilterRequestLoading = true; // allRequestsProvider.isFilterRequestLoading = true;
allRequestsProvider.currentListIndex = 0; // allRequestsProvider.currentListIndex = 0;
allRequestsProvider.filterRequest = null; // allRequestsProvider.filterRequest = null;
// var tabs = RequestUtils.getTabs(userType: userProvider.user!.type!, context: context);
var tabs = RequestUtils.getTabs(userType: userProvider.user!.type!, context: context); // allRequestsProvider.status = tabs[0]['status'];
allRequestsProvider.status = tabs[0]['status']; // allRequestsProvider.getRequests();
allRequestsProvider.getRequests(); // allRequestsProvider.pageNum = 1;
allRequestsProvider.pageNum = 1; // dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: tabs[0]['status']);
dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: tabs[0]['status']); // allRequestsProvider.getFilterRequests(showLoader: true, status: tabs[0]['status']).whenComplete(() {
allRequestsProvider.getFilterRequests(showLoader: true, status: tabs[0]['status']).whenComplete(() { // allRequestsProvider.requestDetailList = allRequestsProvider.filterRequest;
allRequestsProvider.requestDetailList = allRequestsProvider.filterRequest; // });
}); // allRequestsProvider.isAllLoading = false;
allRequestsProvider.isAllLoading = false; // notificationsProvider.getSystemNotifications(user: userProvider.user!, resetProvider: true);
notificationsProvider.getSystemNotifications(user: userProvider.user!, resetProvider: true); // }
}
void handleScroll() async { void handleScroll() async {
_scrollController = ScrollController(); _scrollController = ScrollController();
@ -117,7 +122,7 @@ class _DashboardViewState extends State<DashboardView> {
)), )),
body: RefreshIndicator( body: RefreshIndicator(
onRefresh: () async { onRefresh: () async {
getInitialData(); getRequests();
return Future.delayed(const Duration(milliseconds: 250)); return Future.delayed(const Duration(milliseconds: 250));
}, },
child: Scrollbar( child: Scrollbar(
@ -128,8 +133,8 @@ class _DashboardViewState extends State<DashboardView> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [14.height, ProgressFragment(), 25.height, SizedBox(height: 110.toScreenHeight, child: const RequestsFragment()), 16.height, const RequestCategoryFragment()], children: [16.height, ProgressFragment(), const RequestsFragment(), const RequestCategoryFragment()],
).paddingOnly(start: 16, end: 16, top: 0, bottom: 8), ),
), ),
), ),
), ),

@ -153,8 +153,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_charts/charts.dart'; import 'package:syncfusion_flutter_charts/charts.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -171,21 +171,39 @@ class ProgressFragment extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
bool isCurrentUserNotEngineer = (_userProvider.user!.type != UsersTypes.engineer); bool isCurrentUserIsNurse = (_userProvider.user!.type == UsersTypes.normal_user);
return Consumer<DashBoardProvider>( return Consumer<DashBoardProvider>(
builder: (context, snapshot, _) { builder: (context, snapshot, _) {
int total = ((snapshot.dashboardCount?.data?.countComplete ?? 0) + (snapshot.dashboardCount?.data?.countInprogress ?? 0) + (isCurrentUserNotEngineer ? (snapshot.dashboardCount?.data?.countOpen ?? 0) : 0)); int total = 0;
List<ChartData> chartData = [];
final List<ChartData> chartData = [ if (isCurrentUserIsNurse) {
ChartData('Completed', snapshot.dashboardCount?.data?.countComplete?.toDouble() ?? 0.0, AppColor.green50), total = (snapshot.dashboardCount?.data?.countComplete ?? 0) + (snapshot.dashboardCount?.data?.countInprogress ?? 0) + (snapshot.dashboardCount?.data?.countOpen ?? 0);
// snapshot.openRequests?.total?.count!=0? ChartData('Open', snapshot.openRequests?.total?.count?.toDouble() ?? 0.0, AppColor.blueStatus(context)), chartData = [
ChartData('In Progress', snapshot.dashboardCount?.data?.countInprogress?.toDouble() ?? 0.0, AppColor.orange70), ChartData('Acknowledged', snapshot.dashboardCount?.data?.countComplete?.toDouble() ?? 0.0, AppColor.green70),
]; ChartData('Open', snapshot.dashboardCount?.data?.countOpen?.toDouble() ?? 0.0, AppColor.blueStatus(context)),
ChartData('In Progress', snapshot.dashboardCount?.data?.countInprogress?.toDouble() ?? 0.0, AppColor.orange70),
if (isCurrentUserNotEngineer) { ];
chartData.insert(1, ChartData('Open', snapshot.dashboardCount?.data?.countOpen?.toDouble() ?? 0.0, AppColor.blueStatus(context))); } else {
total = (snapshot.dashboardCount?.data?.countComplete ?? 0) + (snapshot.dashboardCount?.data?.countInprogress ?? 0) + (snapshot.dashboardCount?.data?.countOpen ?? 0);
chartData = [
ChartData('Completed', snapshot.dashboardCount?.data?.countComplete?.toDouble() ?? 0.0, AppColor.green70),
ChartData('Open', snapshot.dashboardCount?.data?.countOpen?.toDouble() ?? 0.0, AppColor.blueStatus(context)),
ChartData('In Progress', snapshot.dashboardCount?.data?.countInprogress?.toDouble() ?? 0.0, AppColor.orange70),
];
} }
//
// int total =
// (snapshot.dashboardCount?.data?.countComplete ?? 0) + (snapshot.inProgressRequests?.total?.count ?? 0) + (isCurrentUserNotEngineer ? (snapshot.openRequests?.total?.count ?? 0) : 0);
//
// final List<ChartData> chartData = [
// ChartData('Completed', snapshot.completedRequests?.total?.count?.toDouble() ?? 0.0, AppColor.green70),
// // snapshot.openRequests?.total?.count!=0? ChartData('Open', snapshot.openRequests?.total?.count?.toDouble() ?? 0.0, AppColor.blueStatus(context)),
// ChartData('In Progress', snapshot.inProgressRequests?.total?.count?.toDouble() ?? 0.0, AppColor.orange70),
// ];
//
// if (isCurrentUserIsNurse) {
// chartData.insert(1, ChartData('Open', snapshot.openRequests?.total?.count?.toDouble() ?? 0.0, AppColor.blueStatus(context)));
// }
return Column( return Column(
children: [ children: [
@ -207,20 +225,20 @@ class ProgressFragment extends StatelessWidget {
series: <CircularSeries>[ series: <CircularSeries>[
DoughnutSeries<ChartData, String>( DoughnutSeries<ChartData, String>(
dataSource: chartData, dataSource: chartData,
radius: "110%", radius: "100%",
innerRadius: "60%", innerRadius: "60%",
pointColorMapper: (ChartData data, _) => data.color, pointColorMapper: (ChartData data, _) => data.color,
xValueMapper: (ChartData data, _) => data.x, xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y, yValueMapper: (ChartData data, _) => data.y,
dataLabelMapper: (ChartData data, _) => data.x, dataLabelMapper: (ChartData data, _) => data.x,
dataLabelSettings: DataLabelSettings( dataLabelSettings: DataLabelSettings(
margin: const EdgeInsets.all(8),
isVisible: true, isVisible: true,
textStyle: TextStyle(color: context.isDark ? Colors.white : Colors.black87, fontSize: 12), textStyle: TextStyle(color: context.isDark ? Colors.white : AppColor.neutral20, fontSize: 12, fontWeight: FontWeight.w500),
labelPosition: ChartDataLabelPosition.outside, labelPosition: ChartDataLabelPosition.outside,
//useSeriesColor: true,
), ),
) )
]).toShimmer(isShow: snapshot.isAllCountLoading, radius: 250).paddingAll(12).toShadowContainer(context), ]).toShimmer(isShow: snapshot.isAllCountLoading, radius: 250).paddingAll(0).toShadowContainer(context),
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -238,7 +256,7 @@ class ProgressFragment extends StatelessWidget {
), ),
), ),
], ],
); ).paddingOnly(start: 16, end: 16);
}, },
); );
} }

@ -1,229 +1,65 @@
//Older code
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
// import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/notifications_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/text_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/new_views/app_style/app_color.dart';
// import 'package:test_sa/views/widgets/notifications/notification_item.dart';
//
// class RequestCategoryFragment extends StatelessWidget {
// RequestCategoryFragment({Key? key}) : super(key: key);
//
// //NotificationsProvider _notificationsProvider;
//
// @override
// Widget build(BuildContext context) {
// //_notificationsProvider ??= Provider.of<NotificationsProvider>(context, listen: false);
// return Consumer<NotificationsProvider>(builder: (context, _notificationsProvider, _) {
// return RefreshIndicator(
// onRefresh: () {
// Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
// _notificationsProvider.getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user,resetProvider: true);
// return Future.delayed(const Duration(microseconds: 250));
// },
// child: SingleChildScrollView(
// padding: const EdgeInsets.all(16),
// child: Container(
// decoration: ShapeDecoration(
// color: AppColor.background(context),
// shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
// shadows: [boxShadowR14],
// ),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// context.translation.recentActivities
// .heading5(context)
// .toShimmer(
// isShow: _notificationsProvider.isLoading,
// )
// .paddingOnly(top: 16, start: 16, end: 16),
// ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// padding: const EdgeInsets.all(16),
// itemCount: _notificationsProvider.notifications.length,
// separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 16, bottom: 16),
// itemBuilder: (context, itemIndex) {
// // todo add priority & progress tag to show chip
// return NotificationItem(
// isLoading: _notificationsProvider.isLoading,
// notification: _notificationsProvider.notifications[itemIndex],
// onPressed: (notification) {
// FirebaseNotificationManger.handleMessage(context, notification.toNotificationJson());
// },
// );
// },
// ),
// ],
// ),
// ),
// ),
// );
// });
// }
// }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/controllers/providers/api/user_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/dashboard_latest/widgets/request_category_list.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/common_widgets/tab_button.dart'; import 'package:test_sa/new_views/common_widgets/tab_button.dart';
import 'package:test_sa/dashboard_latest/widgets/request_category_list.dart';
import 'package:test_sa/utilities/request_utils.dart';
class RequestCategoryFragment extends StatelessWidget { class RequestCategoryFragment extends StatelessWidget {
const RequestCategoryFragment({ const RequestCategoryFragment({Key? key}) : super(key: key);
Key? key,
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<AllRequestsProvider>(builder: (context, allRequestProvider, child) { return Consumer<DashBoardProvider>(builder: (context, dashboardProvider, child) {
return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
context.translation.allRequests.heading4(context), context.translation.allRequests.heading4(context).paddingOnly(start: 16, end: 16),
16.height,
getTabs( getTabs(
requestsProvider: allRequestProvider, requestsProvider: dashboardProvider,
context: context, context: context,
userType: Provider.of<UserProvider>(context, listen: false).user!.type!, userType: Provider.of<UserProvider>(context, listen: false).user!.type!,
), ),
16.height, dashboardProvider.isDetailLoading || dashboardProvider.requestDetailList == null
allRequestProvider.isFilterRequestLoading || allRequestProvider.filterRequest == null
? Column( ? Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: List.generate(3, (index) { children: List.generate(3, (index) {
return Padding( return Padding(
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0), padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0),
child: const SizedBox().toRequestShimmer(context, allRequestProvider.isFilterRequestLoading), child: const SizedBox().toRequestShimmer(context, dashboardProvider.isDetailLoading),
); );
})) })).paddingOnly(start: 16, end: 16, top: 16)
: RequestCategoryList(allRequestProvider.filterRequest?.requestsDetails ?? [], allRequestProvider.isFilterRequestLoading, allRequestProvider.filterRequest?.total?.count ?? 0), : RequestCategoryList(dashboardProvider.requestDetailList?.data ?? <Data>[], dashboardProvider.isDetailLoading, dashboardProvider.requestDetailList?.totalRows ?? 0),
]); ]);
}); });
} }
Widget getTabs({required BuildContext context, required AllRequestsProvider requestsProvider, required UsersTypes userType}) { Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes userType}) {
List<dynamic> tabs = []; List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: UsersTypes.engineer, context: context);
switch (userType) { return SizedBox(
case UsersTypes.engineer: height: 44 + 16,
tabs = RequestUtils.getTabs(userType: UsersTypes.engineer, context: context); child: ListView.separated(
return Row( scrollDirection: Axis.horizontal,
children: tabs.map((item) { separatorBuilder: (cxt, index) => 12.width,
return tabWidget( padding: const EdgeInsets.only(top: 6 + 16, left: 16, right: 16),
label: item['label'], itemBuilder: (cxt, index) {
status: item['status'], return TabButton(
selectedTab: tabs.indexOf(item), label: tabs[index].label,
requestsProvider: requestsProvider, loading: requestsProvider.isDetailLoading,
); isSelected: requestsProvider.currentListIndex == index,
}).toList(), count: requestsProvider.requestDetailList != null ? requestsProvider.requestDetailList!.totalRows ?? 0 : 0,
); onPressed: () async {
case UsersTypes.normal_user: requestsProvider.currentListIndex = index;
tabs = RequestUtils.getTabs(userType: UsersTypes.normal_user, context: context); requestsProvider.resetRequestDataList();
return Row( requestsProvider.getRequestDetail(usersType: userType, showLoader: true, status: tabs[index].tag);
children: tabs.map((item) { },
return tabWidget(
label: item['label'],
status: item['status'],
selectedTab: tabs.indexOf(item),
requestsProvider: requestsProvider,
); );
}).toList(),
);
default:
return const SizedBox();
}
}
Widget tabWidget({required int selectedTab, required String label, required int status, required AllRequestsProvider requestsProvider}) {
return Padding(
padding: const EdgeInsets.only(right: 12),
child: TabButton(
label: label,
loading: requestsProvider.isFilterRequestLoading,
isSelected: requestsProvider.currentListIndex == selectedTab,
count: requestsProvider.filterRequest != null ? requestsProvider.filterRequest!.total!.count! : 0,
onPressed: () async {
requestsProvider.currentListIndex = selectedTab;
requestsProvider.filterRequest = null;
requestsProvider.pageNum = 1;
requestsProvider.status = status;
await requestsProvider.getFilterRequests(status: status);
requestsProvider.isInProgressLoading = false;
requestsProvider.pageNum = 1;
// requestsProvider.dashBoardFilterList = requestsProvider.openRequests.requestsDetails;
}, },
)); itemCount: tabs.length),
);
} }
} }
//tabs code...
//
// List<TabButtonData> _getTabButtonData({required bool isEngineer, required AllRequestsProvider allRequestsProvider, required int totalCount}) {
// List<TabButtonData> tabList = [];
// List<Map<String, dynamic>> tabs = [];
// print('dashboard filter list data is ${allRequestsProvider.dashBoardFilterList}');
//
// if (!isEngineer && allRequestsProvider.dashBoardFilterList != null && allRequestsProvider.dashBoardFilterList.isNotEmpty) {
// tabList.add(TabButtonData(
// label: 'New Request',
// isSelected: allRequestsProvider.currentListIndex == 0,
// totalCount: totalCount,
// onPressed: () {
// allRequestsProvider.currentListIndex = 0;
// allRequestsProvider.dashBoardFilterList = allRequestsProvider.openRequests.requestsDetails;
// },
// ));
// }
// tabList.add(TabButtonData(
// label: 'In Progress',
// isSelected: allRequestsProvider.currentListIndex == (isEngineer ? 0 : 1),
// totalCount: totalCount,
// onPressed: () {
// allRequestsProvider.currentListIndex = isEngineer ? 0 : 1;
// allRequestsProvider.dashBoardFilterList = allRequestsProvider.inProgressRequests.requestsDetails;
// },
// ));
// tabList.add(
// TabButtonData(
// label: 'Completed',
// isSelected: allRequestsProvider.currentListIndex == (isEngineer ? 1 : 2),
// totalCount: totalCount,
// onPressed: () {
// allRequestsProvider.currentListIndex = isEngineer ? 1 : 2;
// allRequestsProvider.dashBoardFilterList = allRequestsProvider.completedRequests.requestsDetails;
// },
// ),
// );
// return tabList;
// }
//
// List<Widget> _buildTabButtons({required bool isEngineer, required AllRequestsProvider allRequestsProvider}) {
// int totalCount = 0;
// print('build tab button called');
// if (allRequestsProvider.dashBoardFilterList != null) {
// totalCount = allRequestsProvider.dashBoardFilterList.length;
// }
// return _getTabButtonData(isEngineer: isEngineer, allRequestsProvider: allRequestsProvider, totalCount: totalCount).map((tab) {
// return Padding(
// padding: const EdgeInsets.only(left: 10.0),
// child: TabButton(
// label: tab.label,
// isSelected: tab.isSelected,
// count: totalCount,
// onPressed: tab.onPressed,
// ),
// );
// }).toList();
// }

@ -1,16 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
class RequestCategoryList extends StatelessWidget { class RequestCategoryList extends StatelessWidget {
final List<RequestsDetails> list; final List<Data> list;
final int totalCount; final int totalCount;
final bool isLoading; final bool isLoading;
const RequestCategoryList(this.list, this.isLoading, this.totalCount, {Key? key}) : super(key: key); const RequestCategoryList(this.list, this.isLoading, this.totalCount, {Key? key}) : super(key: key);
@override @override
@ -18,7 +16,8 @@ class RequestCategoryList extends StatelessWidget {
return ListView.builder( return ListView.builder(
itemCount: list.length < totalCount ? list.length + 1 : list.length, itemCount: list.length < totalCount ? list.length + 1 : list.length,
shrinkWrap: true, shrinkWrap: true,
physics:const NeverScrollableScrollPhysics(), padding: EdgeInsets.all(16),
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == list.length) { if (index == list.length) {
return const ListTile( return const ListTile(
@ -38,20 +37,20 @@ class RequestCategoryList extends StatelessWidget {
); );
} }
Widget _buildRequestItem(RequestsDetails request) { Widget _buildRequestItem(Data request) {
bool isServiceRequest = request.nameOfType == "ServiceRequest"; bool isServiceRequest = request.transactionNo == 1;
bool isGasRefill = request.nameOfType == "GasRefill"; bool isGasRefill = request.transactionNo == 2;
bool isAssetTransfer = request.nameOfType == "AssetTransfer"; bool isAssetTransfer = request.transactionNo == 3;
bool isPPMs = request.nameOfType == "PPMs"; bool isPPMs = request.transactionNo == 4;
if (isServiceRequest) { if (isServiceRequest) {
return ServiceRequestItemView(request); return ServiceRequestItemView(request);
} else if (isGasRefill) { // } else if (isGasRefill) {
return GasRefillItemView(request); // return GasRefillItemView(request);
} else if (isPPMs) { // } else if (isPPMs) {
return PpmItemView(request); // return PpmItemView(request);
} else if (isAssetTransfer) { // } else if (isAssetTransfer) {
return AssetItemView(request); // return AssetItemView(request);
} else { } else {
return Container( return Container(
height: 100, height: 100,
@ -61,16 +60,3 @@ class RequestCategoryList extends StatelessWidget {
} }
} }
} }
// return Column(
// mainAxisSize: MainAxisSize.min,
// children: List.generate(isLoading ? 6 : list.length, (index) {
// // if (isLoading) {
// // return const SizedBox().toRequestShimmer(context, isLoading);
// // }
// // else {
// return Padding(
// padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight),
// child: _buildRequestItem(list[index]));
// // }
// }));

@ -2,7 +2,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
@ -12,7 +11,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/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/custom_badge.dart'; import 'package:test_sa/new_views/common_widgets/custom_badge.dart';
import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart'; import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
class RequestsFragment extends StatelessWidget { class RequestsFragment extends StatelessWidget {
const RequestsFragment({Key? key}) : super(key: key); const RequestsFragment({Key? key}) : super(key: key);
@ -20,10 +19,10 @@ class RequestsFragment extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<DashBoardProvider>( return Consumer<DashBoardProvider>(
builder: (context, snapshot, _) => GridView( builder: (context, snapshot, _) => GridView(
// padding: const EdgeInsets.only( bottom: 16), padding: const EdgeInsets.only(top: 16, left: 16, right: 16),
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4, childAspectRatio: 75 / 84, crossAxisSpacing: 2, mainAxisSpacing: 13), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4, childAspectRatio: 72 / 84, crossAxisSpacing: 2, mainAxisSpacing: 12),
children: [ children: [
listItem( listItem(
snapshot.dashboardCount?.data?.countHighPriority ?? 0, snapshot.dashboardCount?.data?.countHighPriority ?? 0,
@ -32,58 +31,43 @@ class RequestsFragment extends StatelessWidget {
context, context,
snapshot.isAllCountLoading, snapshot.isAllCountLoading,
0, 0,
context.isDark ? AppColor.redStatus(context) : AppColor.red50, context.isDark ? AppColor.redStatus(context) : AppColor.red30,
), ),
listItem( snapshot.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, snapshot.isAllCountLoading, 1, AppColor.yellowIcon(context)), listItem(snapshot.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, snapshot.isAllCountLoading, 1, AppColor.yellowIcon(context)),
listItem( snapshot.dashboardCount?.data?.countOpen ?? 0, "new_request", ApiManager.instance.user!.type == UsersTypes.engineer ? context.translation.inProgress : context.translation.newR, context, listItem(snapshot.dashboardCount?.data?.countOpen ?? 0, "new_request", ApiManager.instance.user!.type == UsersTypes.engineer ? context.translation.inProgress : context.translation.newR,
snapshot.isAllCountLoading, 2, AppColor.primary40), context, snapshot.isAllCountLoading, 2, AppColor.primary10),
listItem( snapshot.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, snapshot.isAllCountLoading, 3, AppColor.greenStatus(context)), listItem(snapshot.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, snapshot.isAllCountLoading, 3, AppColor.greenStatus(context)),
], ],
), ),
); );
} }
Widget listItem( Widget listItem(int value, String icon, String title, BuildContext context, bool isLoading, int index, Color iconColor) {
int value,
String icon,
String title,
BuildContext context,
bool isLoading,
int index,
Color iconColor,
) {
return GestureDetector( return GestureDetector(
onTap: isLoading onTap: isLoading
? null ? null
: () { : () {
Navigator.push( Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index, title)));
context,
MaterialPageRoute(
builder: (context) => RequestsListPage(index, title),
),
);
}, },
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min,
children: [ children: [
value > 0 && !isLoading 8.height,
? CustomBadge( CustomBadge(
value: value.toString(), value: isLoading ? 0 : value,
child: Container( child: Container(
child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading),
).toShadowCircleContainer(context, padding: 18), ).toShadowCircleContainer(context, padding: 17),
) ),
: Container(
child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading),
).toShadowCircleContainer(context, padding: 18),
10.height, 10.height,
Text( Text(
title, title,
textAlign: TextAlign.center,
style: AppTextStyles.tinyFont.copyWith( style: AppTextStyles.tinyFont.copyWith(
color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, color: context.isDark ? AppColor.neutral30 : AppColor.black20,
), ),
), ).toShimmer(isShow: isLoading),
], ],
), ),
); );

@ -50,8 +50,9 @@ class Data {
String? assetNumber; String? assetNumber;
String? requestTypeName; String? requestTypeName;
String? requestNo; String? requestNo;
int? transactionNo;
Data({this.id, this.typeTransaction, this.transactionDate, this.statusName, this.priorityName, this.isHighPriority, this.assetName, this.assetNumber, this.requestTypeName, this.requestNo}); Data({this.id, this.typeTransaction, this.transactionDate, this.statusName, this.priorityName, this.isHighPriority, this.assetName, this.assetNumber, this.requestTypeName, this.requestNo,this.transactionNo});
Data.fromJson(Map<String, dynamic> json) { Data.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -64,6 +65,7 @@ class Data {
assetNumber = json['assetNumber']; assetNumber = json['assetNumber'];
requestTypeName = json['requestTypeName']; requestTypeName = json['requestTypeName'];
requestNo = json['requestNo']; requestNo = json['requestNo'];
transactionNo = json['transactionNo'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -78,6 +80,7 @@ class Data {
data['assetNumber'] = assetNumber; data['assetNumber'] = assetNumber;
data['requestTypeName'] = requestTypeName; data['requestTypeName'] = requestTypeName;
data['requestNo'] = requestNo; data['requestNo'] = requestNo;
data['transactionNo'] = transactionNo;
return data; return data;
} }
} }

@ -1,751 +0,0 @@
import 'package:test_sa/models/lookup.dart';
class WorkOrderDetail {
WorkOrder? data;
String? message;
String? title;
String? innerMessage;
int? responseCode;
bool? isSuccess;
WorkOrderDetail({this.data, this.message, this.title, this.innerMessage, this.responseCode, this.isSuccess});
factory WorkOrderDetail.fromJson(Map<String, dynamic> json) {
return WorkOrderDetail(
data: json['data'] == null ? null : WorkOrder.fromJson(json['data']),
message: json['message'],
title: json['title'],
innerMessage: json['innerMessage'],
responseCode: json['responseCode'],
isSuccess: json['isSuccess'],
);
}
Map<String, dynamic> toJson() {
return {
'data': data?.toJson(),
'message': message,
'title': title,
'innerMessage': innerMessage,
'responseCode': responseCode,
'isSuccess': isSuccess,
};
}
}
class WorkOrder {
String? workOrderNo;
WorkOrderCreatedBy? workOrderCreatedBy;
DateTime? requestedDate;
Asset? asset;
Lookup? assetGroup;
Lookup? manufacturer;
Lookup? model;
Lookup? assetNDModel;
Site? site;
Lookup? building;
Lookup? floor;
Lookup? department;
dynamic room;
Lookup? assetType;
AssignedEmployee? assignedEmployee;
dynamic lastActivityStatus;
Lookup? status;
Lookup? nextStep;
dynamic assetVerificationType;
List<WorkOrderContactPerson>? workOrderContactPerson;
EquipmentStatus? equipmentStatus;
Priority? priority;
RequestedThrough? requestedThrough;
TypeOfRequest? typeofRequest;
dynamic loanAvailablity;
dynamic assetLoan;
dynamic safety;
ProblemDescription? problemDescription;
String? comments;
String? voiceNote;
List<dynamic>? workOrderAttachments;
dynamic returnToService;
dynamic serviceType;
dynamic failureReasone;
dynamic solution;
dynamic totalWorkingHours;
List<WorkOrderHistory>? workOrderHistory;
List<dynamic>? activityMaintenances;
List<dynamic>? activitySpareParts;
List<dynamic>? activityAssetToBeRetireds;
WorkOrder({
this.workOrderNo,
this.workOrderCreatedBy,
this.requestedDate,
this.asset,
this.assetGroup,
this.manufacturer,
this.model,
this.assetNDModel,
this.site,
this.building,
this.floor,
this.department,
this.room,
this.assetType,
this.assignedEmployee,
this.lastActivityStatus,
this.status,
this.nextStep,
this.assetVerificationType,
this.workOrderContactPerson,
this.equipmentStatus,
this.priority,
this.requestedThrough,
this.typeofRequest,
this.loanAvailablity,
this.assetLoan,
this.safety,
this.problemDescription,
this.comments,
this.voiceNote,
this.workOrderAttachments,
this.returnToService,
this.serviceType,
this.failureReasone,
this.solution,
this.totalWorkingHours,
this.workOrderHistory,
this.activityMaintenances,
this.activitySpareParts,
this.activityAssetToBeRetireds,
});
factory WorkOrder.fromJson(Map<String, dynamic> json) {
return WorkOrder(
workOrderNo: json['workOrderNo'],
workOrderCreatedBy: WorkOrderCreatedBy.fromJson(json['workOrderCreatedBy']),
requestedDate: DateTime.parse(json['requestedDate']),
asset: Asset.fromJson(json['asset']),
assetGroup: json['assetGroup'] ?? Lookup.fromJson(json['assetGroup']),
manufacturer: json['manufacturer'] ?? Lookup.fromJson(json['manufacturer']),
model: json['model'] ?? Lookup.fromJson(json['model']),
assetNDModel: json['assetNDModel'] ?? Lookup.fromJson(json['assetNDModel']),
site: Site.fromJson(json['site']),
building: json['building'] ?? Lookup.fromJson(json['building']),
floor: json['floor'] ?? Lookup.fromJson(json['floor']),
department: json['department'] ?? Lookup.fromJson(json['department']),
room: json['room'],
assetType: json['assetType'] ?? Lookup.fromJson(json['assetType']),
assignedEmployee: AssignedEmployee.fromJson(json['assignedEmployee']),
lastActivityStatus: json['lastActivityStatus'],
status: json['status'] ?? Lookup.fromJson(json['status']),
nextStep: json['nextStep'] ?? Lookup.fromJson(json['nextStep']),
assetVerificationType: json['assetVerificationType'],
workOrderContactPerson: (json['workOrderContactPerson'] as List).map((i) => WorkOrderContactPerson.fromJson(i)).toList(),
equipmentStatus: EquipmentStatus.fromJson(json['equipmentStatus']),
priority: Priority.fromJson(json['priority']),
requestedThrough: RequestedThrough.fromJson(json['requestedThrough']),
typeofRequest: TypeOfRequest.fromJson(json['typeofRequest']),
loanAvailablity: json['loanAvailablity'],
assetLoan: json['assetLoan'],
safety: json['safety'],
problemDescription: ProblemDescription.fromJson(json['problemDescription']),
comments: json['comments'],
voiceNote: json['voiceNote'],
workOrderAttachments: json['workOrderAttachments'] as List,
returnToService: json['returnToService'],
serviceType: json['serviceType'],
failureReasone: json['failureReasone'],
solution: json['solution'],
totalWorkingHours: json['totalWorkingHours'],
workOrderHistory: (json['workOrderHistory'] as List).map((i) => WorkOrderHistory.fromJson(i)).toList(),
activityMaintenances: json['activityMaintenances'] as List,
activitySpareParts: json['activitySpareParts'] as List,
activityAssetToBeRetireds: json['activityAssetToBeRetireds'] as List,
);
}
Map<String, dynamic> toJson() {
return {
'workOrderNo': workOrderNo,
'workOrderCreatedBy': workOrderCreatedBy?.toJson(),
'requestedDate': requestedDate?.toIso8601String(),
'asset': asset?.toJson(),
'assetGroup': assetGroup?.toJson(),
'manufacturer': manufacturer?.toJson(),
'model': model?.toJson(),
'assetNDModel': assetNDModel?.toJson(),
'site': site?.toJson(),
'building': building?.toJson(),
'floor': floor?.toJson(),
'department': department?.toJson(),
'room': room,
'assetType': assetType?.toJson(),
'assignedEmployee': assignedEmployee?.toJson(),
'lastActivityStatus': lastActivityStatus,
'status': status?.toJson(),
'nextStep': nextStep?.toJson(),
'assetVerificationType': assetVerificationType,
'workOrderContactPerson': workOrderContactPerson?.map((i) => i.toJson()).toList(),
'equipmentStatus': equipmentStatus?.toJson(),
'priority': priority?.toJson(),
'requestedThrough': requestedThrough?.toJson(),
'typeofRequest': typeofRequest?.toJson(),
'loanAvailablity': loanAvailablity,
'assetLoan': assetLoan,
'safety': safety,
'problemDescription': problemDescription?.toJson(),
'comments': comments,
'voiceNote': voiceNote,
'workOrderAttachments': workOrderAttachments,
'returnToService': returnToService,
'serviceType': serviceType,
'failureReasone': failureReasone,
'solution': solution,
'totalWorkingHours': totalWorkingHours,
'workOrderHistory': workOrderHistory?.map((i) => i.toJson()).toList(),
'activityMaintenances': activityMaintenances,
'activitySpareParts': activitySpareParts,
'activityAssetToBeRetireds': activityAssetToBeRetireds,
};
}
}
class WorkOrderCreatedBy {
String? id;
String? userName;
WorkOrderCreatedBy({this.id, this.userName});
factory WorkOrderCreatedBy.fromJson(Map<String, dynamic> json) {
return WorkOrderCreatedBy(id: json['id'], userName: json['userName']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'userName': userName};
}
}
class Asset {
int? id;
String? assetNumber;
Asset({this.id, this.assetNumber});
factory Asset.fromJson(Map<String, dynamic> json) {
return Asset(id: json['id'], assetNumber: json['assetNumber']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'assetNumber': assetNumber};
}
}
class WorkOrderContactPerson {
int? id;
String? name;
String? employeeId;
String? position;
String? extension;
String? email;
String? mobilePhone;
ContactUser? contactUser;
WorkOrderContactPerson({this.id, this.name, this.employeeId, this.position, this.extension, this.email, this.mobilePhone, this.contactUser});
factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) {
return WorkOrderContactPerson(
id: json['id'],
name: json['name'],
employeeId: json['employeeId'],
position: json['position'],
extension: json['extension'],
email: json['email'],
mobilePhone: json['mobilePhone'],
contactUser: json['contactUser'] == null ? null : ContactUser.fromJson(json['contactUser']),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'employeeId': employeeId,
'position': position,
'extension': extension,
'email': email,
'mobilePhone': mobilePhone,
'contactUser': contactUser?.toJson(),
};
}
}
class ContactUser {
String? id;
String? userName;
ContactUser({this.id, this.userName});
factory ContactUser.fromJson(Map<String, dynamic> json) {
return ContactUser(id: json['id'], userName: json['userName']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'userName': userName};
}
}
class AssignedEmployee {
String? id;
String? userName;
AssignedEmployee({this.id, this.userName});
factory AssignedEmployee.fromJson(Map<String, dynamic> json) {
return AssignedEmployee(id: json['id'], userName: json['userName']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'userName': userName};
}
}
class Site {
int? id;
String? siteName;
Site({this.id, this.siteName});
factory Site.fromJson(Map<String, dynamic> json) {
return Site(id: json['id'], siteName: json['siteName']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'siteName': siteName};
}
}
///
// class AssetGroup {
// int id;
// String name;
//
// AssetGroup({this.id, this.name});
//
// factory AssetGroup.fromJson(Map<String, dynamic> json) {
// return AssetGroup(
// id: json['id'],
// name: json['name'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// };
// }
//
// }
//
// class Manufacturer {
// int id;
// String name;
//
// Manufacturer({this.id, this.name});
//
// factory Manufacturer.fromJson(Map<String, dynamic> json) {
// return Manufacturer(
// id: json['id'],
// name: json['name'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// };
// }
// }
//
// class Model {
// int id;
// String name;
//
// Model({this.id, this.name});
//
// factory Model.fromJson(Map<String, dynamic> json) {
// return Model(
// id: json['id'],
// name: json['name'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// };
// }
// }
//
// class AssetNDModel {
// int id;
// String name;
//
// AssetNDModel({this.id, this.name});
//
// factory AssetNDModel.fromJson(Map<String, dynamic> json) {
// return AssetNDModel(
// id: json['id'],
// name: json['name'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// };
// }
// }
//
// class Building {
// int id;
// String name;
// int value;
//
// Building({this.id, this.name, this.value});
//
// factory Building.fromJson(Map<String, dynamic> json) {
// return Building(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
//
// class Floor {
// int id;
// String name;
// int value;
//
// Floor({this.id, this.name, this.value});
//
// factory Floor.fromJson(Map<String, dynamic> json) {
// return Floor(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
//
// class Department {
// int id;
// String name;
//
// Department({this.id, this.name});
//
// factory Department.fromJson(Map<String, dynamic> json) {
// return Department(
// id: json['id'],
// name: json['name'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// };
// }
// }
//
// class AssetType {
// int id;
// String name;
// int value;
//
// AssetType({this.id, this.name, this.value});
//
// factory AssetType.fromJson(Map<String, dynamic> json) {
// return AssetType(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
//
// class Status {
// int id;
// String name;
// int value;
//
// Status({this.id, this.name, this.value});
//
// factory Status.fromJson(Map<String, dynamic> json) {
// return Status(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
//
// class NextStep {
// int id;
// String name;
// int value;
//
// NextStep({this.id, this.name, this.value});
//
// factory NextStep.fromJson(Map<String, dynamic> json) {
// return NextStep(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
class EquipmentStatus {
int? id;
String? name;
int? value;
EquipmentStatus({this.id, this.name, this.value});
factory EquipmentStatus.fromJson(Map<String, dynamic> json) {
return EquipmentStatus(id: json['id'], name: json['name'], value: json['value']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'name': name, 'value': value};
}
}
class Priority {
int? id;
String? name;
int? value;
Priority({this.id, this.name, this.value});
factory Priority.fromJson(Map<String, dynamic> json) {
return Priority(id: json['id'], name: json['name'], value: json['value']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'name': name, 'value': value};
}
}
class RequestedThrough {
int? id;
String? name;
RequestedThrough({this.id, this.name});
factory RequestedThrough.fromJson(Map<String, dynamic> json) {
return RequestedThrough(id: json['id'], name: json['name']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'name': name};
}
}
class TypeOfRequest {
int? id;
String? name;
TypeOfRequest({this.id, this.name});
factory TypeOfRequest.fromJson(Map<String, dynamic> json) {
return TypeOfRequest(id: json['id'], name: json['name']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'name': name};
}
}
class ProblemDescription {
int? id;
String? name;
ProblemDescription({this.id, this.name});
factory ProblemDescription.fromJson(Map<String, dynamic> json) {
return ProblemDescription(id: json['id'], name: json['name']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'name': name};
}
}
class WorkOrderHistory {
int? id;
Lookup? workOrderStatus;
dynamic activityStatus; // Since activityStatus is null, it's dynamic
String? date;
HistoryUser? user;
Lookup? step;
dynamic fixRemotelyStartTime; // Since it's null, it's dynamic
dynamic fixRemotelyEndTime; // Since it's null, it's dynamic
dynamic fixRemotelyWorkingHours; // Since it's null, it's dynamic
String? comments;
dynamic needAVisitDateTime; // Since it's null, it's dynamic
WorkOrderHistory(
{this.id,
this.workOrderStatus,
this.activityStatus,
this.date,
this.user,
this.step,
this.fixRemotelyStartTime,
this.fixRemotelyEndTime,
this.fixRemotelyWorkingHours,
this.comments,
this.needAVisitDateTime});
factory WorkOrderHistory.fromJson(Map<String, dynamic> json) {
return WorkOrderHistory(
id: json['id'],
//json['assetType'] != null ? Lookup.fromJson(json['assetType']) : null;
workOrderStatus: json['workorderStatus'] ?? Lookup.fromJson(json['workorderStatus']),
activityStatus: json['activityStatus'],
date: json['date'],
user: HistoryUser.fromJson(json['user']),
step: json['step'] ?? Lookup.fromJson(json['step']),
fixRemotelyStartTime: json['fixRemotlyStartTime'],
fixRemotelyEndTime: json['fixRemotlyEndTime'],
fixRemotelyWorkingHours: json['fixRemotlyWorkingHours'],
comments: json['comments'] ?? "",
needAVisitDateTime: json['needAVisitDateTime'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
// Lookup.fromJson(json['workorderStatus'])
'workorderStatus': workOrderStatus?.toJson(),
'activityStatus': activityStatus,
'date': date,
'user': user?.toJson(),
'step': step?.toJson(),
'fixRemotelyStartTime': fixRemotelyStartTime,
'fixRemotelyEndTime': fixRemotelyEndTime,
'fixRemotelyWorkingHours': fixRemotelyWorkingHours,
'comments': comments,
'needAVisitDateTime': needAVisitDateTime,
};
}
}
// class WorkOrderStatus {
// int id;
// String name;
// int value;
//
// WorkOrderStatus({
// this.id,
// this.name,
// this.value,
// });
//
// factory WorkOrderStatus.fromJson(Map<String, dynamic> json) {
// return WorkOrderStatus(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }
class HistoryUser {
String? id;
String? userName;
HistoryUser({this.id, this.userName});
factory HistoryUser.fromJson(Map<String, dynamic> json) {
return HistoryUser(id: json['id'], userName: json['userName']);
}
Map<String, dynamic> toJson() {
return {'id': id, 'userName': userName};
}
}
// class Step {
// int id;
// String name;
// int value;
//
// Step({
// this.id,
// this.name,
// this.value,
// });
//
// factory Step.fromJson(Map<String, dynamic> json) {
// return Step(
// id: json['id'],
// name: json['name'],
// value: json['value'],
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'value': value,
// };
// }
// }

@ -0,0 +1,751 @@
// import 'package:test_sa/models/lookup.dart';
//
// class WorkOrderDetail {
// WorkOrder? data;
// String? message;
// String? title;
// String? innerMessage;
// int? responseCode;
// bool? isSuccess;
//
// WorkOrderDetail({this.data, this.message, this.title, this.innerMessage, this.responseCode, this.isSuccess});
//
// factory WorkOrderDetail.fromJson(Map<String, dynamic> json) {
// return WorkOrderDetail(
// data: json['data'] == null ? null : WorkOrder.fromJson(json['data']),
// message: json['message'],
// title: json['title'],
// innerMessage: json['innerMessage'],
// responseCode: json['responseCode'],
// isSuccess: json['isSuccess'],
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'data': data?.toJson(),
// 'message': message,
// 'title': title,
// 'innerMessage': innerMessage,
// 'responseCode': responseCode,
// 'isSuccess': isSuccess,
// };
// }
// }
//
// class WorkOrder {
// String? workOrderNo;
// WorkOrderCreatedBy? workOrderCreatedBy;
// DateTime? requestedDate;
// Asset? asset;
// Lookup? assetGroup;
// Lookup? manufacturer;
// Lookup? model;
// Lookup? assetNDModel;
// Site? site;
// Lookup? building;
// Lookup? floor;
// Lookup? department;
// dynamic room;
// Lookup? assetType;
// AssignedEmployee? assignedEmployee;
// dynamic lastActivityStatus;
// Lookup? status;
// Lookup? nextStep;
// dynamic assetVerificationType;
// List<WorkOrderContactPerson>? workOrderContactPerson;
// EquipmentStatus? equipmentStatus;
// Priority? priority;
// RequestedThrough? requestedThrough;
// TypeOfRequest? typeofRequest;
// dynamic loanAvailablity;
// dynamic assetLoan;
// dynamic safety;
// ProblemDescription? problemDescription;
// String? comments;
// String? voiceNote;
// List<dynamic>? workOrderAttachments;
// dynamic returnToService;
// dynamic serviceType;
// dynamic failureReasone;
// dynamic solution;
// dynamic totalWorkingHours;
// List<WorkOrderHistory>? workOrderHistory;
// List<dynamic>? activityMaintenances;
// List<dynamic>? activitySpareParts;
// List<dynamic>? activityAssetToBeRetireds;
//
// WorkOrder({
// this.workOrderNo,
// this.workOrderCreatedBy,
// this.requestedDate,
// this.asset,
// this.assetGroup,
// this.manufacturer,
// this.model,
// this.assetNDModel,
// this.site,
// this.building,
// this.floor,
// this.department,
// this.room,
// this.assetType,
// this.assignedEmployee,
// this.lastActivityStatus,
// this.status,
// this.nextStep,
// this.assetVerificationType,
// this.workOrderContactPerson,
// this.equipmentStatus,
// this.priority,
// this.requestedThrough,
// this.typeofRequest,
// this.loanAvailablity,
// this.assetLoan,
// this.safety,
// this.problemDescription,
// this.comments,
// this.voiceNote,
// this.workOrderAttachments,
// this.returnToService,
// this.serviceType,
// this.failureReasone,
// this.solution,
// this.totalWorkingHours,
// this.workOrderHistory,
// this.activityMaintenances,
// this.activitySpareParts,
// this.activityAssetToBeRetireds,
// });
//
// factory WorkOrder.fromJson(Map<String, dynamic> json) {
// return WorkOrder(
// workOrderNo: json['workOrderNo'],
// workOrderCreatedBy: WorkOrderCreatedBy.fromJson(json['workOrderCreatedBy']),
// requestedDate: DateTime.parse(json['requestedDate']),
// asset: Asset.fromJson(json['asset']),
// assetGroup: json['assetGroup'] ?? Lookup.fromJson(json['assetGroup']),
// manufacturer: json['manufacturer'] ?? Lookup.fromJson(json['manufacturer']),
// model: json['model'] ?? Lookup.fromJson(json['model']),
// assetNDModel: json['assetNDModel'] ?? Lookup.fromJson(json['assetNDModel']),
// site: Site.fromJson(json['site']),
// building: json['building'] ?? Lookup.fromJson(json['building']),
// floor: json['floor'] ?? Lookup.fromJson(json['floor']),
// department: json['department'] ?? Lookup.fromJson(json['department']),
// room: json['room'],
// assetType: json['assetType'] ?? Lookup.fromJson(json['assetType']),
// assignedEmployee: AssignedEmployee.fromJson(json['assignedEmployee']),
// lastActivityStatus: json['lastActivityStatus'],
// status: json['status'] ?? Lookup.fromJson(json['status']),
// nextStep: json['nextStep'] ?? Lookup.fromJson(json['nextStep']),
// assetVerificationType: json['assetVerificationType'],
// workOrderContactPerson: (json['workOrderContactPerson'] as List).map((i) => WorkOrderContactPerson.fromJson(i)).toList(),
// equipmentStatus: EquipmentStatus.fromJson(json['equipmentStatus']),
// priority: Priority.fromJson(json['priority']),
// requestedThrough: RequestedThrough.fromJson(json['requestedThrough']),
// typeofRequest: TypeOfRequest.fromJson(json['typeofRequest']),
// loanAvailablity: json['loanAvailablity'],
// assetLoan: json['assetLoan'],
// safety: json['safety'],
// problemDescription: ProblemDescription.fromJson(json['problemDescription']),
// comments: json['comments'],
// voiceNote: json['voiceNote'],
// workOrderAttachments: json['workOrderAttachments'] as List,
// returnToService: json['returnToService'],
// serviceType: json['serviceType'],
// failureReasone: json['failureReasone'],
// solution: json['solution'],
// totalWorkingHours: json['totalWorkingHours'],
// workOrderHistory: (json['workOrderHistory'] as List).map((i) => WorkOrderHistory.fromJson(i)).toList(),
// activityMaintenances: json['activityMaintenances'] as List,
// activitySpareParts: json['activitySpareParts'] as List,
// activityAssetToBeRetireds: json['activityAssetToBeRetireds'] as List,
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'workOrderNo': workOrderNo,
// 'workOrderCreatedBy': workOrderCreatedBy?.toJson(),
// 'requestedDate': requestedDate?.toIso8601String(),
// 'asset': asset?.toJson(),
// 'assetGroup': assetGroup?.toJson(),
// 'manufacturer': manufacturer?.toJson(),
// 'model': model?.toJson(),
// 'assetNDModel': assetNDModel?.toJson(),
// 'site': site?.toJson(),
// 'building': building?.toJson(),
// 'floor': floor?.toJson(),
// 'department': department?.toJson(),
// 'room': room,
// 'assetType': assetType?.toJson(),
// 'assignedEmployee': assignedEmployee?.toJson(),
// 'lastActivityStatus': lastActivityStatus,
// 'status': status?.toJson(),
// 'nextStep': nextStep?.toJson(),
// 'assetVerificationType': assetVerificationType,
// 'workOrderContactPerson': workOrderContactPerson?.map((i) => i.toJson()).toList(),
// 'equipmentStatus': equipmentStatus?.toJson(),
// 'priority': priority?.toJson(),
// 'requestedThrough': requestedThrough?.toJson(),
// 'typeofRequest': typeofRequest?.toJson(),
// 'loanAvailablity': loanAvailablity,
// 'assetLoan': assetLoan,
// 'safety': safety,
// 'problemDescription': problemDescription?.toJson(),
// 'comments': comments,
// 'voiceNote': voiceNote,
// 'workOrderAttachments': workOrderAttachments,
// 'returnToService': returnToService,
// 'serviceType': serviceType,
// 'failureReasone': failureReasone,
// 'solution': solution,
// 'totalWorkingHours': totalWorkingHours,
// 'workOrderHistory': workOrderHistory?.map((i) => i.toJson()).toList(),
// 'activityMaintenances': activityMaintenances,
// 'activitySpareParts': activitySpareParts,
// 'activityAssetToBeRetireds': activityAssetToBeRetireds,
// };
// }
// }
//
// class WorkOrderCreatedBy {
// String? id;
// String? userName;
//
// WorkOrderCreatedBy({this.id, this.userName});
//
// factory WorkOrderCreatedBy.fromJson(Map<String, dynamic> json) {
// return WorkOrderCreatedBy(id: json['id'], userName: json['userName']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'userName': userName};
// }
// }
//
// class Asset {
// int? id;
// String? assetNumber;
//
// Asset({this.id, this.assetNumber});
//
// factory Asset.fromJson(Map<String, dynamic> json) {
// return Asset(id: json['id'], assetNumber: json['assetNumber']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'assetNumber': assetNumber};
// }
// }
//
// class WorkOrderContactPerson {
// int? id;
// String? name;
// String? employeeId;
// String? position;
// String? extension;
// String? email;
// String? mobilePhone;
// ContactUser? contactUser;
//
// WorkOrderContactPerson({this.id, this.name, this.employeeId, this.position, this.extension, this.email, this.mobilePhone, this.contactUser});
//
// factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) {
// return WorkOrderContactPerson(
// id: json['id'],
// name: json['name'],
// employeeId: json['employeeId'],
// position: json['position'],
// extension: json['extension'],
// email: json['email'],
// mobilePhone: json['mobilePhone'],
// contactUser: json['contactUser'] == null ? null : ContactUser.fromJson(json['contactUser']),
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// 'name': name,
// 'employeeId': employeeId,
// 'position': position,
// 'extension': extension,
// 'email': email,
// 'mobilePhone': mobilePhone,
// 'contactUser': contactUser?.toJson(),
// };
// }
// }
//
// class ContactUser {
// String? id;
// String? userName;
//
// ContactUser({this.id, this.userName});
//
// factory ContactUser.fromJson(Map<String, dynamic> json) {
// return ContactUser(id: json['id'], userName: json['userName']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'userName': userName};
// }
// }
//
// class AssignedEmployee {
// String? id;
// String? userName;
//
// AssignedEmployee({this.id, this.userName});
//
// factory AssignedEmployee.fromJson(Map<String, dynamic> json) {
// return AssignedEmployee(id: json['id'], userName: json['userName']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'userName': userName};
// }
// }
//
// class Site {
// int? id;
// String? siteName;
//
// Site({this.id, this.siteName});
//
// factory Site.fromJson(Map<String, dynamic> json) {
// return Site(id: json['id'], siteName: json['siteName']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'siteName': siteName};
// }
// }
//
// ///
//
// // class AssetGroup {
// // int id;
// // String name;
// //
// // AssetGroup({this.id, this.name});
// //
// // factory AssetGroup.fromJson(Map<String, dynamic> json) {
// // return AssetGroup(
// // id: json['id'],
// // name: json['name'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // };
// // }
// //
// // }
// //
// // class Manufacturer {
// // int id;
// // String name;
// //
// // Manufacturer({this.id, this.name});
// //
// // factory Manufacturer.fromJson(Map<String, dynamic> json) {
// // return Manufacturer(
// // id: json['id'],
// // name: json['name'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // };
// // }
// // }
// //
// // class Model {
// // int id;
// // String name;
// //
// // Model({this.id, this.name});
// //
// // factory Model.fromJson(Map<String, dynamic> json) {
// // return Model(
// // id: json['id'],
// // name: json['name'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // };
// // }
// // }
// //
// // class AssetNDModel {
// // int id;
// // String name;
// //
// // AssetNDModel({this.id, this.name});
// //
// // factory AssetNDModel.fromJson(Map<String, dynamic> json) {
// // return AssetNDModel(
// // id: json['id'],
// // name: json['name'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // };
// // }
// // }
// //
// // class Building {
// // int id;
// // String name;
// // int value;
// //
// // Building({this.id, this.name, this.value});
// //
// // factory Building.fromJson(Map<String, dynamic> json) {
// // return Building(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
// //
// // class Floor {
// // int id;
// // String name;
// // int value;
// //
// // Floor({this.id, this.name, this.value});
// //
// // factory Floor.fromJson(Map<String, dynamic> json) {
// // return Floor(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
// //
// // class Department {
// // int id;
// // String name;
// //
// // Department({this.id, this.name});
// //
// // factory Department.fromJson(Map<String, dynamic> json) {
// // return Department(
// // id: json['id'],
// // name: json['name'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // };
// // }
// // }
// //
// // class AssetType {
// // int id;
// // String name;
// // int value;
// //
// // AssetType({this.id, this.name, this.value});
// //
// // factory AssetType.fromJson(Map<String, dynamic> json) {
// // return AssetType(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
// //
// // class Status {
// // int id;
// // String name;
// // int value;
// //
// // Status({this.id, this.name, this.value});
// //
// // factory Status.fromJson(Map<String, dynamic> json) {
// // return Status(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
// //
// // class NextStep {
// // int id;
// // String name;
// // int value;
// //
// // NextStep({this.id, this.name, this.value});
// //
// // factory NextStep.fromJson(Map<String, dynamic> json) {
// // return NextStep(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
//
// class EquipmentStatus {
// int? id;
// String? name;
// int? value;
//
// EquipmentStatus({this.id, this.name, this.value});
//
// factory EquipmentStatus.fromJson(Map<String, dynamic> json) {
// return EquipmentStatus(id: json['id'], name: json['name'], value: json['value']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'name': name, 'value': value};
// }
// }
//
// class Priority {
// int? id;
// String? name;
// int? value;
//
// Priority({this.id, this.name, this.value});
//
// factory Priority.fromJson(Map<String, dynamic> json) {
// return Priority(id: json['id'], name: json['name'], value: json['value']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'name': name, 'value': value};
// }
// }
//
// class RequestedThrough {
// int? id;
// String? name;
//
// RequestedThrough({this.id, this.name});
//
// factory RequestedThrough.fromJson(Map<String, dynamic> json) {
// return RequestedThrough(id: json['id'], name: json['name']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'name': name};
// }
// }
//
// class TypeOfRequest {
// int? id;
// String? name;
//
// TypeOfRequest({this.id, this.name});
//
// factory TypeOfRequest.fromJson(Map<String, dynamic> json) {
// return TypeOfRequest(id: json['id'], name: json['name']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'name': name};
// }
// }
//
// class ProblemDescription {
// int? id;
// String? name;
//
// ProblemDescription({this.id, this.name});
//
// factory ProblemDescription.fromJson(Map<String, dynamic> json) {
// return ProblemDescription(id: json['id'], name: json['name']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'name': name};
// }
// }
//
// class WorkOrderHistory {
// int? id;
// Lookup? workOrderStatus;
// dynamic activityStatus; // Since activityStatus is null, it's dynamic
// String? date;
// HistoryUser? user;
// Lookup? step;
// dynamic fixRemotelyStartTime; // Since it's null, it's dynamic
// dynamic fixRemotelyEndTime; // Since it's null, it's dynamic
// dynamic fixRemotelyWorkingHours; // Since it's null, it's dynamic
// String? comments;
// dynamic needAVisitDateTime; // Since it's null, it's dynamic
//
// WorkOrderHistory(
// {this.id,
// this.workOrderStatus,
// this.activityStatus,
// this.date,
// this.user,
// this.step,
// this.fixRemotelyStartTime,
// this.fixRemotelyEndTime,
// this.fixRemotelyWorkingHours,
// this.comments,
// this.needAVisitDateTime});
//
// factory WorkOrderHistory.fromJson(Map<String, dynamic> json) {
// return WorkOrderHistory(
// id: json['id'],
// //json['assetType'] != null ? Lookup.fromJson(json['assetType']) : null;
// workOrderStatus: json['workorderStatus'] ?? Lookup.fromJson(json['workorderStatus']),
// activityStatus: json['activityStatus'],
// date: json['date'],
// user: HistoryUser.fromJson(json['user']),
// step: json['step'] ?? Lookup.fromJson(json['step']),
// fixRemotelyStartTime: json['fixRemotlyStartTime'],
// fixRemotelyEndTime: json['fixRemotlyEndTime'],
// fixRemotelyWorkingHours: json['fixRemotlyWorkingHours'],
// comments: json['comments'] ?? "",
// needAVisitDateTime: json['needAVisitDateTime'],
// );
// }
//
// Map<String, dynamic> toJson() {
// return {
// 'id': id,
// // Lookup.fromJson(json['workorderStatus'])
// 'workorderStatus': workOrderStatus?.toJson(),
// 'activityStatus': activityStatus,
// 'date': date,
// 'user': user?.toJson(),
// 'step': step?.toJson(),
// 'fixRemotelyStartTime': fixRemotelyStartTime,
// 'fixRemotelyEndTime': fixRemotelyEndTime,
// 'fixRemotelyWorkingHours': fixRemotelyWorkingHours,
// 'comments': comments,
// 'needAVisitDateTime': needAVisitDateTime,
// };
// }
// }
//
// // class WorkOrderStatus {
// // int id;
// // String name;
// // int value;
// //
// // WorkOrderStatus({
// // this.id,
// // this.name,
// // this.value,
// // });
// //
// // factory WorkOrderStatus.fromJson(Map<String, dynamic> json) {
// // return WorkOrderStatus(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// //
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }
//
// class HistoryUser {
// String? id;
// String? userName;
//
// HistoryUser({this.id, this.userName});
//
// factory HistoryUser.fromJson(Map<String, dynamic> json) {
// return HistoryUser(id: json['id'], userName: json['userName']);
// }
//
// Map<String, dynamic> toJson() {
// return {'id': id, 'userName': userName};
// }
// }
//
// // class Step {
// // int id;
// // String name;
// // int value;
// //
// // Step({
// // this.id,
// // this.name,
// // this.value,
// // });
// //
// // factory Step.fromJson(Map<String, dynamic> json) {
// // return Step(
// // id: json['id'],
// // name: json['name'],
// // value: json['value'],
// // );
// // }
// //
// // Map<String, dynamic> toJson() {
// // return {
// // 'id': id,
// // 'name': name,
// // 'value': value,
// // };
// // }
// // }

@ -0,0 +1,417 @@
import 'package:test_sa/models/lookup.dart';
class WorkOrderDetail {
WorkOrderDetail({
required this.data,
required this.message,
required this.title,
required this.innerMessage,
required this.responseCode,
required this.isSuccess,
});
final WorkOrderData? data;
final String? message;
final dynamic title;
final dynamic innerMessage;
final int? responseCode;
final bool? isSuccess;
factory WorkOrderDetail.fromJson(Map<String, dynamic> json) {
return WorkOrderDetail(
data: json["data"] == null ? null : WorkOrderData.fromJson(json["data"]),
message: json["message"],
title: json["title"],
innerMessage: json["innerMessage"],
responseCode: json["responseCode"],
isSuccess: json["isSuccess"],
);
}
Map<String, dynamic> toJson() =>
{
"data": data?.toJson(),
"message": message,
"title": title,
"innerMessage": innerMessage,
"responseCode": responseCode,
"isSuccess": isSuccess,
};
}
class WorkOrderData {
WorkOrderData({
required this.workOrderNo,
required this.workOrderCreatedBy,
required this.requestedDate,
required this.asset,
required this.assetGroup,
required this.manufacturer,
required this.model,
required this.assetNdModel,
required this.site,
required this.building,
required this.floor,
required this.department,
required this.room,
required this.assetType,
required this.assignedEmployee,
required this.lastActivityStatus,
required this.status,
required this.nextStep,
required this.assetVerificationType,
required this.workOrderContactPerson,
required this.equipmentStatus,
required this.priority,
required this.requestedThrough,
required this.typeofRequest,
required this.loanAvailablity,
required this.assetLoan,
required this.safety,
required this.problemDescription,
required this.comments,
required this.voiceNote,
required this.workOrderAttachments,
required this.returnToService,
required this.serviceType,
required this.failureReasone,
required this.solution,
required this.totalWorkingHours,
required this.workOrderHistory,
required this.activities,
required this.activityAssetToBeRetireds,
});
final String? workOrderNo;
final AssignedEmployee? workOrderCreatedBy;
final DateTime? requestedDate;
final Asset? asset;
final Lookup? assetGroup;
final Lookup? manufacturer;
final Lookup? model;
final Lookup? assetNdModel;
final Site? site;
final Lookup? building;
final Lookup? floor;
final AssetGroup? department;
final int? room;
final Lookup? assetType;
final AssignedEmployee? assignedEmployee;
final String? lastActivityStatus;
final Lookup? status;
final Lookup? nextStep;
final int? assetVerificationType;
final List<WorkOrderContactPerson> workOrderContactPerson;
final Lookup? equipmentStatus;
final Lookup? priority;
final Lookup? requestedThrough;
final Lookup? typeofRequest;
final Lookup? loanAvailablity;
final Lookup? assetLoan;
final Lookup? safety;
final Lookup? problemDescription;
final String? comments;
final String? voiceNote;
final List<String> workOrderAttachments;
final String? returnToService;
final Lookup? serviceType;
final Lookup? failureReasone;
final Lookup? solution;
final String? totalWorkingHours;
final List<WorkOrderHistory> workOrderHistory;
final List<dynamic> activities;
final List<dynamic> activityAssetToBeRetireds;
factory WorkOrderData.fromJson(Map<String, dynamic> json) {
return WorkOrderData(
workOrderNo: json["workOrderNo"],
workOrderCreatedBy: json["workOrderCreatedBy"] == null ? null : AssignedEmployee.fromJson(json["workOrderCreatedBy"]),
requestedDate: DateTime.tryParse(json["requestedDate"] ?? ""),
asset: json["asset"] == null ? null : Asset.fromJson(json["asset"]),
assetGroup: json["assetGroup"] == null ? null : Lookup.fromJson(json["assetGroup"]),
manufacturer: json["manufacturer"] == null ? null : Lookup.fromJson(json["manufacturer"]),
model: json["model"] == null ? null : Lookup.fromJson(json["model"]),
assetNdModel: json["assetNDModel"] == null ? null : Lookup.fromJson(json["assetNDModel"]),
site: json["site"] == null ? null : Site.fromJson(json["site"]),
building: json["building"] == null ? null : Lookup.fromJson(json["building"]),
floor: json["floor"] == null ? null : Lookup.fromJson(json["floor"]),
department: json["department"] == null ? null : AssetGroup.fromJson(json["department"]),
room: json["room"],
assetType: json["assetType"] == null ? null : Lookup.fromJson(json["assetType"]),
assignedEmployee: json["assignedEmployee"] == null ? null : AssignedEmployee.fromJson(json["assignedEmployee"]),
lastActivityStatus: json["lastActivityStatus"],
status: json["status"] == null ? null : Lookup.fromJson(json["status"]),
nextStep: json["nextStep"] == null ? null : Lookup.fromJson(json["nextStep"]),
assetVerificationType: json["assetVerificationType"],
workOrderContactPerson: json["workOrderContactPerson"] == null ? [] : List<WorkOrderContactPerson>.from(json["workOrderContactPerson"]!.map((x) => WorkOrderContactPerson.fromJson(x))),
equipmentStatus: json["equipmentStatus"] == null ? null : Lookup.fromJson(json["equipmentStatus"]),
priority: json["priority"] == null ? null : Lookup.fromJson(json["priority"]),
requestedThrough: json["requestedThrough"] == null ? null : Lookup.fromJson(json["requestedThrough"]),
typeofRequest: json["typeofRequest"] == null ? null : Lookup.fromJson(json["typeofRequest"]),
loanAvailablity: json["loanAvailablity"] == null ? null : Lookup.fromJson(json["loanAvailablity"]),
assetLoan: json["assetLoan"] == null ? null : Lookup.fromJson(json["assetLoan"]),
safety: json["safety"] == null ? null : Lookup.fromJson(json["safety"]),
problemDescription: json["problemDescription"] == null ? null : Lookup.fromJson(json["problemDescription"]),
comments: json["comments"],
voiceNote: json["voiceNote"],
workOrderAttachments: json["workOrderAttachments"] == null ? [] : List<String>.from(json["workOrderAttachments"]!.map((x) => x)),
returnToService: json["returnToService"],
serviceType: json["serviceType"] == null ? null : Lookup.fromJson(json["serviceType"]),
failureReasone: json["failureReasone"] == null ? null : Lookup.fromJson(json["failureReasone"]),
solution: json["solution"] == null ? null : Lookup.fromJson(json["solution"]),
totalWorkingHours: json["totalWorkingHours"],
workOrderHistory: json["workOrderHistory"] == null ? [] : List<WorkOrderHistory>.from(json["workOrderHistory"]!.map((x) => WorkOrderHistory.fromJson(x))),
activities: json["activities"] == null ? [] : List<dynamic>.from(json["activities"]!.map((x) => x)),
activityAssetToBeRetireds: json["activityAssetToBeRetireds"] == null ? [] : List<dynamic>.from(json["activityAssetToBeRetireds"]!.map((x) => x)),
);
}
Map<String, dynamic> toJson() =>
{
"workOrderNo": workOrderNo,
"workOrderCreatedBy": workOrderCreatedBy?.toJson(),
"requestedDate": requestedDate?.toIso8601String(),
"asset": asset?.toJson(),
"assetGroup": assetGroup?.toJson(),
"manufacturer": manufacturer?.toJson(),
"model": model?.toJson(),
"assetNDModel": assetNdModel?.toJson(),
"site": site?.toJson(),
"building": building?.toJson(),
"floor": floor?.toJson(),
"department": department?.toJson(),
"room": room,
"assetType": assetType?.toJson(),
"assignedEmployee": assignedEmployee?.toJson(),
"lastActivityStatus": lastActivityStatus,
"status": status?.toJson(),
"nextStep": nextStep?.toJson(),
"assetVerificationType": assetVerificationType,
"workOrderContactPerson": workOrderContactPerson.map((x) => x?.toJson()).toList(),
"equipmentStatus": equipmentStatus?.toJson(),
"priority": priority?.toJson(),
"requestedThrough": requestedThrough?.toJson(),
"typeofRequest": typeofRequest?.toJson(),
"loanAvailablity": loanAvailablity?.toJson(),
"assetLoan": assetLoan?.toJson(),
"safety": safety?.toJson(),
"problemDescription": problemDescription?.toJson(),
"comments": comments,
"voiceNote": voiceNote,
"workOrderAttachments": workOrderAttachments.map((x) => x).toList(),
"returnToService": returnToService,
"serviceType": serviceType?.toJson(),
"failureReasone": failureReasone?.toJson(),
"solution": solution?.toJson(),
"totalWorkingHours": totalWorkingHours,
"workOrderHistory": workOrderHistory.map((x) => x?.toJson()).toList(),
"activities": activities.map((x) => x).toList(),
"activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(),
};
}
class Asset {
Asset({
required this.id,
required this.assetNumber,
});
final int? id;
final String? assetNumber;
factory Asset.fromJson(Map<String, dynamic> json) {
return Asset(
id: json["id"],
assetNumber: json["assetNumber"],
);
}
Map<String, dynamic> toJson() =>
{
"id": id,
"assetNumber": assetNumber,
};
}
class AssetGroup {
AssetGroup({
required this.id,
required this.name,
});
final int? id;
final String? name;
factory AssetGroup.fromJson(Map<String, dynamic> json) {
return AssetGroup(
id: json["id"],
name: json["name"],
);
}
Map<String, dynamic> toJson() =>
{
"id": id,
"name": name,
};
}
class AssignedEmployee {
AssignedEmployee({
required this.userId,
required this.userName,
required this.email,
required this.languageId,
});
final dynamic userId;
final String? userName;
final String? email;
final int? languageId;
factory AssignedEmployee.fromJson(Map<String, dynamic> json) {
return AssignedEmployee(
userId: json["userId"],
userName: json["userName"],
email: json["email"],
languageId: json["languageId"],
);
}
Map<String, dynamic> toJson() =>
{
"userId": userId,
"userName": userName,
"email": email,
"languageId": languageId,
};
}
class Site {
Site({
required this.id,
required this.siteName,
});
final int? id;
final String? siteName;
factory Site.fromJson(Map<String, dynamic> json) {
return Site(
id: json["id"],
siteName: json["siteName"],
);
}
Map<String, dynamic> toJson() =>
{
"id": id,
"siteName": siteName,
};
}
class WorkOrderContactPerson {
WorkOrderContactPerson({
required this.id,
required this.name,
required this.employeeId,
required this.position,
required this.extension,
required this.email,
required this.mobilePhone,
required this.contactUser,
});
final int? id;
final String? name;
final String? employeeId;
final String? position;
final dynamic extension;
final String? email;
final dynamic mobilePhone;
final AssignedEmployee? contactUser;
factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) {
return WorkOrderContactPerson(
id: json["id"],
name: json["name"],
employeeId: json["employeeId"],
position: json["position"],
extension: json["extension"],
email: json["email"],
mobilePhone: json["mobilePhone"],
contactUser: json["contactUser"] == null ? null : AssignedEmployee.fromJson(json["contactUser"]),
);
}
Map<String, dynamic> toJson() =>
{
"id": id,
"name": name,
"employeeId": employeeId,
"position": position,
"extension": extension,
"email": email,
"mobilePhone": mobilePhone,
"contactUser": contactUser?.toJson(),
};
}
class WorkOrderHistory {
WorkOrderHistory({
required this.id,
required this.workorderStatus,
required this.activityStatus,
required this.date,
required this.user,
required this.step,
required this.fixRemotlyStartTime,
required this.fixRemotlyEndTime,
required this.fixRemotlyWorkingHours,
required this.comments,
required this.needAVisitDateTime,
});
final int? id;
final Lookup? workorderStatus;
final dynamic activityStatus;
final DateTime? date;
final AssignedEmployee? user;
final Lookup? step;
final DateTime? fixRemotlyStartTime;
final DateTime? fixRemotlyEndTime;
final num? fixRemotlyWorkingHours;
final String? comments;
final DateTime? needAVisitDateTime;
factory WorkOrderHistory.fromJson(Map<String, dynamic> json) {
return WorkOrderHistory(
id: json["id"],
workorderStatus: json["workorderStatus"] == null ? null : Lookup.fromJson(json["workorderStatus"]),
activityStatus: json["activityStatus"],
date: DateTime.tryParse(json["date"] ?? ""),
user: json["user"] == null ? null : AssignedEmployee.fromJson(json["user"]),
step: json["step"] == null ? null : Lookup.fromJson(json["step"]),
fixRemotlyStartTime: DateTime.tryParse(json["fixRemotlyStartTime"] ?? ""),
fixRemotlyEndTime: DateTime.tryParse(json["fixRemotlyEndTime"] ?? ""),
fixRemotlyWorkingHours: json["fixRemotlyWorkingHours"],
comments: json["comments"],
needAVisitDateTime: DateTime.tryParse(json["needAVisitDateTime"] ?? ""),
);
}
Map<String, dynamic> toJson() =>
{
"id": id,
"workorderStatus": workorderStatus?.toJson(),
"activityStatus": activityStatus,
"date": date?.toIso8601String(),
"user": user?.toJson(),
"step": step?.toJson(),
"fixRemotlyStartTime": fixRemotlyStartTime?.toIso8601String(),
"fixRemotlyEndTime": fixRemotlyEndTime?.toIso8601String(),
"fixRemotlyWorkingHours": fixRemotlyWorkingHours,
"comments": comments,
"needAVisitDateTime": needAVisitDateTime?.toIso8601String(),
};
}

@ -42,10 +42,11 @@ class AppColor {
static const Color white50 = Color(0xffECECEC); static const Color white50 = Color(0xffECECEC);
static const Color white60 = Color(0xffEFEFEF); static const Color white60 = Color(0xffEFEFEF);
static const Color white70 = Color(0xffF1F1F1); static const Color white70 = Color(0xffF1F1F1);
static const Color white936 = Color(0xff212936);
//black //black
static const Color black10 = Color(0xff3B3D4A); static const Color black10 = Color(0xff3B3D4A);
static const Color black20 = Color(0xff212936); static const Color black20 = Color(0xff212936);
static const Color black35 = Color(0xff222A36);
//red //red
static const Color red30 = Color(0xffF63939); static const Color red30 = Color(0xffF63939);
@ -60,6 +61,7 @@ class AppColor {
static const Color green60 = Color(0xff065E38); static const Color green60 = Color(0xff065E38);
static const Color green70 = Color(0xff54C166); static const Color green70 = Color(0xff54C166);
//orange //orange
static const Color orange30 = Color(0xffFDE19B); static const Color orange30 = Color(0xffFDE19B);
static const Color orange40 = Color(0xffFFEDBC); static const Color orange40 = Color(0xffFFEDBC);
@ -68,10 +70,10 @@ class AppColor {
static const Color orange70 = Color(0xffFFC945); static const Color orange70 = Color(0xffFFC945);
// static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff1FA269) : green50; // static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff1FA269) : green50;
static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff54C166) : green50; static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff54C166) : green70;
// static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary50; // static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary50;
static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary50; static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary90;
static Color redStatus(BuildContext context) => context.isDark ? const Color(0xffFFB6B8) : red30; static Color redStatus(BuildContext context) => context.isDark ? const Color(0xffFFB6B8) : red30;

@ -3,14 +3,14 @@ import 'package:test_sa/new_views/app_style/app_color.dart';
class CustomBadge extends StatelessWidget { class CustomBadge extends StatelessWidget {
final Widget child; // The widget that the badge will be overlaid on. final Widget child; // The widget that the badge will be overlaid on.
final String value; // The value or text to be displayed in the badge. final int value; // The value or text to be displayed in the badge.
final Color color; // The background color of the badge. final Color color; // The background color of the badge.
const CustomBadge({ const CustomBadge({
Key? key, Key? key,
required this.child, required this.child,
required this.value, required this.value,
this.color =AppColor.red30, // Default color is red this.color = AppColor.red30, // Default color is red
}) : super(key: key); }) : super(key: key);
@override @override
@ -19,26 +19,22 @@ class CustomBadge extends StatelessWidget {
clipBehavior: Clip.none, // Allows the badge to overflow its container. clipBehavior: Clip.none, // Allows the badge to overflow its container.
children: [ children: [
child, // The main widget child, // The main widget
Positioned( if (value > 0)
right: -6, Positioned(
top: -6, right: -6,
child: Container( top: -6,
padding: const EdgeInsets.all(6), child: Container(
decoration: BoxDecoration( height: 23,
color: color, constraints: const BoxConstraints(minWidth: 23),
shape: BoxShape.circle, // Makes the badge circular padding: const EdgeInsets.all(3),
), alignment: Alignment.center,
child: Text( decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(30)),
value, child: Text(
style: const TextStyle( value.toString(),
color: AppColor.white10, style: const TextStyle(color: AppColor.white10, fontFamily: 'Poppins', fontSize: 10, fontWeight: FontWeight.w700),
fontFamily: 'Poppins',
fontSize: 10,
fontWeight: FontWeight.w700,
), ),
), ),
), ),
),
], ],
); );
} }

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/custom_badge.dart'; import 'package:test_sa/new_views/common_widgets/custom_badge.dart';
@ -10,66 +11,34 @@ class TabButton extends StatelessWidget {
final bool loading; final bool loading;
final VoidCallback onPressed; final VoidCallback onPressed;
const TabButton({ const TabButton({Key? key, required this.label, this.isSelected = false, required this.count, this.loading = false, required this.onPressed}) : super(key: key);
Key? key,
required this.label,
this.isSelected = false,
required this.count,
this.loading = false,
required this.onPressed,
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InkWell( return InkWell(
onTap: onPressed, onTap: onPressed,
child: count > 0 && isSelected && !loading child: CustomBadge(
? CustomBadge( value: loading
value: count.toString(), ? 0
child: Container( : !isSelected
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 8), ? 0
decoration: BoxDecoration( : count,
borderRadius: BorderRadius.circular(7), child: Container(
color: isSelected ? AppColor.primary10 : AppColor.white30, padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 8),
border: !isSelected ? Border.all(color: Colors.white54, width: 1) : null, decoration: BoxDecoration(
), borderRadius: BorderRadius.circular(7),
child: Center( color: isSelected ? AppColor.primary10 : AppColor.white30,
child: Text( border: !isSelected ? Border.all(color: AppColor.white936.withOpacity(.03), width: 1) : null,
label, ),
style: AppTextStyles.bodyText.copyWith( alignment: Alignment.center,
color: isSelected ? Colors.white : Colors.black, child: Text(
), label,
)), style: AppTextStyles.bodyText2.copyWith(
)) color: isSelected ? Colors.white : AppColor.black35,
: Container(
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(7),
color: isSelected ? AppColor.primary10 : AppColor.white30,
border: !isSelected ? Border.all(color: AppColor.white30, width: 1) : null,
),
child: Center(
child: Text(
label,
style: AppTextStyles.bodyText.copyWith(
color: isSelected ? Colors.white : Colors.black,
),
)),
), ),
); ),
),
),
).toShimmer(isShow: loading && isSelected, radius: 7);
} }
} }
class TabButtonData {
final String label;
final bool isSelected;
final int totalCount;
final VoidCallback onPressed;
TabButtonData({
required this.label,
required this.isSelected,
required this.totalCount,
required this.onPressed,
});
}

@ -1,87 +1,87 @@
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; // import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; // import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; // import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; // import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; // import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/calender_fragments/daily_fragment.dart'; // import 'package:test_sa/new_views/pages/land_page/calender_fragments/daily_fragment.dart';
import 'package:test_sa/new_views/pages/land_page/calender_fragments/weekly_fragment.dart'; // import 'package:test_sa/new_views/pages/land_page/calender_fragments/weekly_fragment.dart';
//
import 'calender_fragments/monthly_fragment.dart'; // import 'calender_fragments/monthly_fragment.dart';
// todo delete
class CalendarPage extends StatefulWidget { // class CalendarPage extends StatefulWidget {
const CalendarPage({Key? key}) : super(key: key); // const CalendarPage({Key? key}) : super(key: key);
//
@override // @override
State<CalendarPage> createState() => _CalendarPageState(); // State<CalendarPage> createState() => _CalendarPageState();
} // }
//
class _CalendarPageState extends State<CalendarPage> with SingleTickerProviderStateMixin { // class _CalendarPageState extends State<CalendarPage> with SingleTickerProviderStateMixin {
late TabController _tabController; // late TabController _tabController;
//
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
_tabController = TabController(length: 3, vsync: this) // _tabController = TabController(length: 3, vsync: this)
..addListener(() { // ..addListener(() {
setState(() {}); // setState(() {});
}); // });
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Scaffold( // return Scaffold(
body: SafeArea( // body: SafeArea(
child: Column( // child: Column(
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
children: [ // children: [
// todo @sikander, hiding My shift view, later when they add data, then will us it. // // todo @sikander, hiding My shift view, later when they add data, then will us it.
// SizedBox( // // SizedBox(
// width: double.infinity, // // width: double.infinity,
// child: Column( // // child: Column(
// crossAxisAlignment: CrossAxisAlignment.start, // // crossAxisAlignment: CrossAxisAlignment.start,
// children: [ // // children: [
// context.translation.myShift.heading5(context), // // context.translation.myShift.heading5(context),
// 8.height, // // 8.height,
// context.translation.sunToThurs.bodyText(context), // // context.translation.sunToThurs.bodyText(context),
// "09:00 to 18:00".bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), // // "09:00 to 18:00".bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
// ], // // ],
// ).toShadowContainer(context), // // ).toShadowContainer(context),
// ).paddingOnly(start: 16, end: 16), // // ).paddingOnly(start: 16, end: 16),
16.height, // 16.height,
Container( // Container(
margin: const EdgeInsets.only(left: 16, right: 16), // margin: const EdgeInsets.only(left: 16, right: 16),
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)), // decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)),
child: TabBar( // child: TabBar(
controller: _tabController, // controller: _tabController,
padding: EdgeInsets.zero, // padding: EdgeInsets.zero,
labelColor: context.isDark ? AppColor.neutral30 : AppColor.neutral60, // labelColor: context.isDark ? AppColor.neutral30 : AppColor.neutral60,
unselectedLabelColor: context.isDark ? AppColor.neutral10 : AppColor.neutral20, // unselectedLabelColor: context.isDark ? AppColor.neutral10 : AppColor.neutral20,
unselectedLabelStyle: AppTextStyles.bodyText, // unselectedLabelStyle: AppTextStyles.bodyText,
labelStyle: AppTextStyles.bodyText, // labelStyle: AppTextStyles.bodyText,
indicatorPadding: const EdgeInsets.all(4), // indicatorPadding: const EdgeInsets.all(4),
indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), // indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)),
tabs: [ // tabs: [
Tab(text: context.translation.monthly, height: 57.toScreenHeight), // Tab(text: context.translation.monthly, height: 57.toScreenHeight),
Tab(text: context.translation.weekly, height: 57.toScreenHeight), // Tab(text: context.translation.weekly, height: 57.toScreenHeight),
Tab(text: context.translation.daily, height: 57.toScreenHeight), // Tab(text: context.translation.daily, height: 57.toScreenHeight),
], // ],
), // ),
), // ),
8.height, // 8.height,
TabBarView( // TabBarView(
//physics: const NeverScrollableScrollPhysics(), // //physics: const NeverScrollableScrollPhysics(),
controller: _tabController, // controller: _tabController,
children: const [ // children: const [
MonthlyFragment(), // MonthlyFragment(),
WeeklyFragment(), // WeeklyFragment(),
DailyFragment(), // DailyFragment(),
], // ],
).expanded, // ).expanded,
], // ],
), // ),
), // ),
); // );
} // }
} // }

@ -1,82 +1,82 @@
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; // import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; // import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; // import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; // import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; // import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; // import 'package:test_sa/extensions/widget_extensions.dart';
//
import '../../../../controllers/providers/api/all_requests_provider.dart'; // import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../../../app_style/app_color.dart'; // import '../../../app_style/app_color.dart';
import '../requests/asset_item_view.dart'; // import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart'; // import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart'; // import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart'; // import '../requests/service_request_item_view.dart';
// todo delete
class DailyFragment extends StatefulWidget { // class DailyFragment extends StatefulWidget {
const DailyFragment({Key? key}) : super(key: key); // const DailyFragment({Key? key}) : super(key: key);
//
@override // @override
_DailyFragmentState createState() { // _DailyFragmentState createState() {
return _DailyFragmentState(); // return _DailyFragmentState();
} // }
} // }
//
class _DailyFragmentState extends State<DailyFragment> { // class _DailyFragmentState extends State<DailyFragment> {
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day)); // Provider.of<AllRequestsProvider>(context, listen: false).getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return SingleChildScrollView( // return SingleChildScrollView(
padding: const EdgeInsets.only(left: 16, right: 16), // padding: const EdgeInsets.only(left: 16, right: 16),
child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) { // child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return Column( // return Column(
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch, // crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ // children: [
DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(DateTime.now()).heading5(context), // DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(DateTime.now()).heading5(context),
const Divider().defaultStyle(context), // const Divider().defaultStyle(context),
if (snapshot.calendarRequests?.requestsDetails?.isEmpty ?? true) // if (snapshot.calendarRequests?.requestsDetails?.isEmpty ?? true)
Center( // Center(
child: context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), // child: context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
).paddingOnly(top: 16, bottom: 16), // ).paddingOnly(top: 16, bottom: 16),
ListView.separated( // ListView.separated(
shrinkWrap: true, // shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(), // physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) { // itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests!.requestsDetails!; // final list = snapshot.calendarRequests!.requestsDetails!;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); // if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; // bool isServiceRequest = list[index].nameOfType == "ServiceRequest";
bool isGasRefill = list[index].nameOfType == "GasRefill"; // bool isGasRefill = list[index].nameOfType == "GasRefill";
bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; // bool isAssetTransfer = list[index].nameOfType == "AssetTransfer";
bool isPPMs = list[index].nameOfType == "PPMs"; // bool isPPMs = list[index].nameOfType == "PPMs";
//
return isServiceRequest // return isServiceRequest
? ServiceRequestItemView(list[index]) // ? ServiceRequestItemView(list[index])
: isGasRefill // : isGasRefill
? GasRefillItemView(list[index]) // ? GasRefillItemView(list[index])
: isPPMs // : isPPMs
? PpmItemView(list[index]) // ? PpmItemView(list[index])
: isAssetTransfer // : isAssetTransfer
? AssetItemView(list[index]) // ? AssetItemView(list[index])
: Container( // : Container(
height: 100, // height: 100,
width: double.infinity, // width: double.infinity,
color: Colors.grey, // color: Colors.grey,
); // );
}, // },
separatorBuilder: (cxt, index) => 8.height, // separatorBuilder: (cxt, index) => 8.height,
itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, // itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length,
), // ),
], // ],
).toShadowContainer(context); // ).toShadowContainer(context);
}), // }),
); // );
} // }
//
BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); // BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);
} // }

@ -1,143 +1,143 @@
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; // import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; // import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart'; // import 'package:table_calendar/table_calendar.dart';
import 'package:test_sa/extensions/context_extension.dart'; // import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; // import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; // import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; // import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; // import 'package:test_sa/new_views/app_style/app_color.dart';
// todo delete
import '../../../../controllers/providers/api/all_requests_provider.dart'; // import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../requests/asset_item_view.dart'; // import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart'; // import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart'; // import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart'; // import '../requests/service_request_item_view.dart';
import 'calender_days_card.dart'; // import 'calender_days_card.dart';
//
class WeeklyFragment extends StatefulWidget { // class WeeklyFragment extends StatefulWidget {
const WeeklyFragment({Key? key}) : super(key: key); // const WeeklyFragment({Key? key}) : super(key: key);
//
@override // @override
_WeeklyFragmentState createState() { // _WeeklyFragmentState createState() {
return _WeeklyFragmentState(); // return _WeeklyFragmentState();
} // }
} // }
//
class _WeeklyFragmentState extends State<WeeklyFragment> { // class _WeeklyFragmentState extends State<WeeklyFragment> {
late DateTime _initialDate, _firstDate, _lastDate; // late DateTime _initialDate, _firstDate, _lastDate;
//
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
_initialDate = DateTime.now(); // _initialDate = DateTime.now();
_firstDate = DateTime.utc(2010, 10, 16); // _firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14); // _lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false) // Provider.of<AllRequestsProvider>(context, listen: false)
.getCalendarRequests(from: DateTime.now().subtract(Duration(days: DateTime.now().weekday)), to: DateTime.now().add(Duration(days: DateTime.daysPerWeek - DateTime.now().weekday - 1))); // .getCalendarRequests(from: DateTime.now().subtract(Duration(days: DateTime.now().weekday)), to: DateTime.now().add(Duration(days: DateTime.daysPerWeek - DateTime.now().weekday - 1)));
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return SingleChildScrollView( // return SingleChildScrollView(
padding: const EdgeInsets.only(left: 16, right: 16), // padding: const EdgeInsets.only(left: 16, right: 16),
child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) { // child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return Column( // return Column(
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
children: [ // children: [
TableCalendar( // TableCalendar(
firstDay: _firstDate, // firstDay: _firstDate,
lastDay: _lastDate, // lastDay: _lastDate,
focusedDay: _initialDate, // focusedDay: _initialDate,
calendarFormat: CalendarFormat.week, // calendarFormat: CalendarFormat.week,
weekendDays: const [], // weekendDays: const [],
onCalendarCreated: (controller) {}, // onCalendarCreated: (controller) {},
onPageChanged: (date) { // onPageChanged: (date) {
if (!snapshot.isCalendarLoading) { // if (!snapshot.isCalendarLoading) {
_initialDate = date; // _initialDate = date;
//
Provider.of<AllRequestsProvider>(context, listen: false) // Provider.of<AllRequestsProvider>(context, listen: false)
.getCalendarRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1))); // .getCalendarRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1)));
} // }
}, // },
calendarBuilders: CalendarBuilders( // calendarBuilders: CalendarBuilders(
headerTitleBuilder: (context, dateTime) => Column( // headerTitleBuilder: (context, dateTime) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch, // crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ // children: [
DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(dateTime).heading5(context), // DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(dateTime).heading5(context),
8.height, // 8.height,
const Divider().defaultStyle(context), // const Divider().defaultStyle(context),
], // ],
), // ),
dowBuilder: (context, dateTime) { // dowBuilder: (context, dateTime) {
final day = DateFormat("EE", context.isAr ? "ar" : "en").format(dateTime).toUpperCase(); // final day = DateFormat("EE", context.isAr ? "ar" : "en").format(dateTime).toUpperCase();
return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)); // return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50));
}, // },
defaultBuilder: (context, dateTime, _) { // defaultBuilder: (context, dateTime, _) {
final day = DateFormat("d").format(dateTime); // final day = DateFormat("d").format(dateTime);
return CalendarDaysCard( // return CalendarDaysCard(
day: day, // day: day,
fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( // fill: snapshot.calendarRequests!.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), // (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day),
orElse: null, // orElse: null,
) != // ) !=
null, // null,
).toShimmer(isShow: snapshot.isCalendarLoading); // ).toShimmer(isShow: snapshot.isCalendarLoading);
}, // },
outsideBuilder: (context, dateTime, _) { // outsideBuilder: (context, dateTime, _) {
final day = DateFormat("d").format(dateTime); // final day = DateFormat("d").format(dateTime);
return CalendarDaysCard( // return CalendarDaysCard(
day: day, // day: day,
fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( // fill: snapshot.calendarRequests!.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), // (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day),
orElse: null, // orElse: null,
) != // ) !=
null, // null,
).toShimmer(isShow: snapshot.isCalendarLoading); // ).toShimmer(isShow: snapshot.isCalendarLoading);
}, // },
), // ),
daysOfWeekHeight: 35.toScreenHeight, // daysOfWeekHeight: 35.toScreenHeight,
headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false), // headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false),
calendarStyle: CalendarStyle( // calendarStyle: CalendarStyle(
isTodayHighlighted: false, // isTodayHighlighted: false,
defaultTextStyle: AppTextStyles.bodyText, // defaultTextStyle: AppTextStyles.bodyText,
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), // defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
), // ),
), // ),
if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context), // if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context),
ListView.separated( // ListView.separated(
shrinkWrap: true, // shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(), // physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) { // itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests!.requestsDetails!; // final list = snapshot.calendarRequests!.requestsDetails!;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); // if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; // bool isServiceRequest = list[index].nameOfType == "ServiceRequest";
bool isGasRefill = list[index].nameOfType == "GasRefill"; // bool isGasRefill = list[index].nameOfType == "GasRefill";
bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; // bool isAssetTransfer = list[index].nameOfType == "AssetTransfer";
bool isPPMs = list[index].nameOfType == "PPMs"; // bool isPPMs = list[index].nameOfType == "PPMs";
//
return isServiceRequest // return isServiceRequest
? ServiceRequestItemView(list[index], showShadow: false) // ? ServiceRequestItemView(list[index], showShadow: false)
: isGasRefill // : isGasRefill
? GasRefillItemView(list[index], showShadow: false) // ? GasRefillItemView(list[index], showShadow: false)
: isPPMs // : isPPMs
? PpmItemView(list[index], showShadow: false) // ? PpmItemView(list[index], showShadow: false)
: isAssetTransfer // : isAssetTransfer
? AssetItemView(list[index], showShadow: false) // ? AssetItemView(list[index], showShadow: false)
: Container( // : Container(
height: 100, // height: 100,
width: double.infinity, // width: double.infinity,
color: Colors.grey, // color: Colors.grey,
); // );
}, // },
separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), // separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, // itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length,
), // ),
], // ],
).toShadowContainer(context); // ).toShadowContainer(context);
}), // }),
); // );
} // }
//
BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); // BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);
} // }

@ -1,4 +1,3 @@
import 'dart:developer';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -24,7 +23,6 @@ import '../../../views/widgets/dialogs/dialog.dart';
import '../../common_widgets/app_bottom_nav_bar.dart'; import '../../common_widgets/app_bottom_nav_bar.dart';
import '../../common_widgets/app_drawer.dart'; import '../../common_widgets/app_drawer.dart';
import 'contact_us_bottom_sheet.dart'; import 'contact_us_bottom_sheet.dart';
import 'dashboard_page.dart';
class LandPage extends StatefulWidget { class LandPage extends StatefulWidget {
static const String routeName = "/land-page"; static const String routeName = "/land-page";
@ -108,7 +106,7 @@ class _LandPageState extends State<LandPage> {
})), })),
// const old_page.LandPage(), // const old_page.LandPage(),
const MyRequestsPage(), const MyRequestsPage(),
if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(), // if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(),
const MyAssetsPage(fromBottomBar: true), const MyAssetsPage(fromBottomBar: true),
]; ];
checkLocalAuth(); checkLocalAuth();

@ -6,13 +6,14 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/asset_transfer.dart'; import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import '../../../../views/widgets/requests/request_status.dart'; import '../../../../views/widgets/requests/request_status.dart';
import '../../../app_style/app_color.dart'; import '../../../app_style/app_color.dart';
class AssetItemView extends StatelessWidget { class AssetItemView extends StatelessWidget {
final RequestsDetails request; final Data request;
final bool showShadow; final bool showShadow;
const AssetItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); const AssetItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key);
@ -26,11 +27,11 @@ class AssetItemView extends StatelessWidget {
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (request.priority != null) if (request.priorityName != null)
StatusLabel( StatusLabel(
label: request.priority ?? "", label: request.priorityName ?? "",
textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!),
), ),
// 8.width, // 8.width,
// if (request.status != null) // if (request.status != null)
@ -40,7 +41,7 @@ class AssetItemView extends StatelessWidget {
// backgroundColor: AppColor.getRequestStatusColorByName(context, request.status), // backgroundColor: AppColor.getRequestStatusColorByName(context, request.status),
// ), // ),
1.width.expanded, 1.width.expanded,
Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)), Text(request.transactionDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
], ],
), ),
8.height, 8.height,
@ -49,9 +50,9 @@ class AssetItemView extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
context.translation.deviceTransferRequest.heading5(context), context.translation.deviceTransferRequest.heading5(context),
"${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), // "${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), // todo ask ahmed
"${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), // "${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context),// todo ask ahmed
request.status!.replaceAll("=", ":").bodyText(context), request.statusName!.replaceAll("=", ":").bodyText(context),
'${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context),
], ],
), ),

@ -5,6 +5,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart'; import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
@ -12,7 +13,7 @@ import '../../../../views/widgets/requests/request_status.dart';
import '../../../app_style/app_color.dart'; import '../../../app_style/app_color.dart';
class GasRefillItemView extends StatelessWidget { class GasRefillItemView extends StatelessWidget {
final RequestsDetails request; final Data request;
final bool showShadow; final bool showShadow;
const GasRefillItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); const GasRefillItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key);
@ -26,24 +27,24 @@ class GasRefillItemView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
StatusLabel( StatusLabel(
label: request.priority!, label: request.priorityName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!),
), ),
8.width, 8.width,
StatusLabel( StatusLabel(
label: request.status!, label: request.statusName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!),
), ),
1.width.expanded, 1.width.expanded,
Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)), Text(request.transactionDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
], ],
), ),
8.height, 8.height,
context.translation.gasRefillRequest.heading5(context), context.translation.gasRefillRequest.heading5(context),
'${context.translation.gasType}: ${request.gasType}'.bodyText(context), // '${context.translation.gasType}: ${request.gasType}'.bodyText(context), // todo ask ahmed
'${context.translation.site}: ${request.site?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), // '${context.translation.site}: ${request.site?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),// todo ask ahmed
'${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context),
8.height, 8.height,
Row( Row(
@ -68,8 +69,8 @@ class GasRefillItemView extends StatelessWidget {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (_) => GasRefillDetailsPage( builder: (_) => GasRefillDetailsPage(
priority: request.priority, priority: request.priorityName,
date: request.date!, date: request.transactionDate!,
model: GasRefillModel(id: request.id), model: GasRefillModel(id: request.id),
), ),
), ),

@ -5,13 +5,14 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import '../../../../views/pages/user/ppm/ppm_details_page.dart'; import '../../../../views/pages/user/ppm/ppm_details_page.dart';
import '../../../../views/widgets/requests/request_status.dart'; import '../../../../views/widgets/requests/request_status.dart';
class PpmItemView extends StatelessWidget { class PpmItemView extends StatelessWidget {
final RequestsDetails request; final Data request;
final bool showShadow; final bool showShadow;
const PpmItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); const PpmItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key);
@ -25,19 +26,19 @@ class PpmItemView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
StatusLabel( StatusLabel(
label: request.priority!, label: request.priorityName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!),
), ),
8.width, 8.width,
StatusLabel( StatusLabel(
label: request.status!, label: request.statusName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!),
), ),
1.width.expanded, 1.width.expanded,
Text( Text(
request.date?.toServiceRequestCardFormat ?? "", request.transactionDate?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end, textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
), ),
@ -46,8 +47,8 @@ class PpmItemView extends StatelessWidget {
8.height, 8.height,
context.translation.ppmRequest.heading5(context), context.translation.ppmRequest.heading5(context),
8.height, 8.height,
'${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), '${context.translation.assetNumber}: ${request.assetNumber}'.bodyText(context),
'${context.translation.assetSN}: ${request.assetSN}'.bodyText(context), // '${context.translation.assetSN}: ${request.assetSN}'.bodyText(context),//todo ask ahmed
// '${context.translation.code}: ${request.code}'.bodyText(context), // '${context.translation.code}: ${request.code}'.bodyText(context),
'${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context),
16.height, 16.height,
@ -64,7 +65,7 @@ class PpmItemView extends StatelessWidget {
), ),
], ],
).toShadowContainer(context, showShadow: showShadow).onPress(() { ).toShadowContainer(context, showShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request))); //Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request)));
}); });
} }
} }

@ -1,18 +1,20 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
class RequestPaginatedList extends StatelessWidget { class RequestPaginatedListview extends StatelessWidget {
final List<RequestsDetails> list; final List<Data> list;
final int totalCount; final int totalCount;
final bool isLoading; final bool isLoading;
ScrollController scrollController; ScrollController scrollController;
RequestPaginatedList(this.list, this.isLoading, this.totalCount,this.scrollController, {Key? key}) : super(key: key);
RequestPaginatedListview(this.list, this.isLoading, this.totalCount, this.scrollController, {Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -41,11 +43,11 @@ class RequestPaginatedList extends StatelessWidget {
); );
} }
Widget _buildRequestItem(RequestsDetails request) { Widget _buildRequestItem(Data request) {
bool isServiceRequest = request.nameOfType == "ServiceRequest"; bool isServiceRequest = request.transactionNo == 1;
bool isGasRefill = request.nameOfType == "GasRefill"; bool isGasRefill = request.transactionNo == 2;
bool isAssetTransfer = request.nameOfType == "AssetTransfer"; bool isAssetTransfer = request.transactionNo == 3;
bool isPPMs = request.nameOfType == "PPMs"; bool isPPMs = request.transactionNo == 4;
if (isServiceRequest) { if (isServiceRequest) {
return ServiceRequestItemView(request); return ServiceRequestItemView(request);

@ -5,14 +5,14 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/service_request_latest/views/request_detail_main_view.dart'; import 'package:test_sa/service_request_latest/views/request_detail_main_view.dart';
import '../../../../views/widgets/requests/request_status.dart'; import '../../../../views/widgets/requests/request_status.dart';
import '../../../app_style/app_color.dart'; import '../../../app_style/app_color.dart';
class ServiceRequestItemView extends StatelessWidget { class ServiceRequestItemView extends StatelessWidget {
final RequestsDetails request; final Data request;
final bool showShadow; final bool showShadow;
const ServiceRequestItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); const ServiceRequestItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key);
@ -27,25 +27,26 @@ class ServiceRequestItemView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
StatusLabel( StatusLabel(
label: request.priority!, label: request.priorityName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!),
), ),
8.width, 8.width,
StatusLabel( StatusLabel(
label: request.status!, label: request.statusName!,
textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!),
), ),
1.width.expanded, 1.width.expanded,
Text(request.date!.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)), Text(request.transactionDate!.toServiceRequestCardFormat,
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
], ],
), ),
8.height, 8.height,
context.translation.serviceRequest.heading5(context), context.translation.serviceRequest.heading5(context),
'${context.translation.assetName}: ${request.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), '${context.translation.assetName}: ${request.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), // '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context),
'${context.translation.requestType}: ${request.requestType}'.bodyText(context), '${context.translation.requestType}: ${request.requestTypeName}'.bodyText(context),
'${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context),
8.height, 8.height,
Row( Row(
@ -68,10 +69,7 @@ class ServiceRequestItemView extends StatelessWidget {
).toShadowContainer(context, showShadow: showShadow).onPress(() { ).toShadowContainer(context, showShadow: showShadow).onPress(() {
//Older code... //Older code...
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(builder: (_) => RequestDetailMain(requestId: request.id!)));
builder: (_) => RequestDetailMain(
requestId: request.id!,
)));
// Navigator.of(context).push(MaterialPageRoute( // Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => const HistoryLogView())); // builder: (_) => const HistoryLogView()));
}); });

@ -1,12 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/controllers/providers/api/user_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/pages/land_page/requests/request_paginated_listview.dart'; import 'package:test_sa/new_views/pages/land_page/requests/request_paginated_listview.dart';
@ -22,24 +22,21 @@ class RequestsListPage extends StatefulWidget {
} }
class _RequestsListPageState extends State<RequestsListPage> { class _RequestsListPageState extends State<RequestsListPage> {
late AllRequestsProvider _provider; // late AllRequestsProvider _provider;
late DashBoardProvider _dashBoardProvider;
late ScrollController _scrollController; late ScrollController _scrollController;
@override @override
void initState() { void initState() {
// TODO: implement initState super.initState();
_provider = Provider.of<AllRequestsProvider>(context, listen: false); _dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
_provider.pageNum = 1; _dashBoardProvider.resetRequestDataList();
_provider.selectedRequestCategory = null;
_provider.isRequestCategoryLoading = true;
callRequestApis(); callRequestApis();
handleScroll(); handleScroll();
super.initState();
} }
@override @override
void dispose() { void dispose() {
// TODO: implement dispose
_scrollController.dispose(); _scrollController.dispose();
super.dispose(); super.dispose();
} }
@ -48,7 +45,7 @@ class _RequestsListPageState extends State<RequestsListPage> {
_scrollController = ScrollController(); _scrollController = ScrollController();
int pageNo = 1; int pageNo = 1;
_scrollController.addListener(() async { _scrollController.addListener(() async {
if (_scrollController?.position?.pixels == _scrollController?.position?.maxScrollExtent && !_provider.isRequestCategoryLoading) { if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !_dashBoardProvider.isDetailLoading) {
pageNo = pageNo + 1; pageNo = pageNo + 1;
callRequestApis(showLoader: false, pageNo: pageNo); callRequestApis(showLoader: false, pageNo: pageNo);
} }
@ -59,111 +56,56 @@ class _RequestsListPageState extends State<RequestsListPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: DefaultAppBar(title: "${widget.title} ${context.translation.requests}"), appBar: DefaultAppBar(title: "${widget.title} ${context.translation.requests}"),
body: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) { body: Consumer<DashBoardProvider>(builder: (context, snapshot, _) {
if (snapshot.isRequestCategoryLoading || snapshot.selectedRequestCategory == null) { if (snapshot.isDetailLoading || snapshot.requestDetailList == null) {
return ListView.builder( return ListView.builder(
itemCount: 6, itemCount: 6,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Padding( return Padding(
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0), padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0),
child: const SizedBox().toRequestShimmer(context, snapshot.isRequestCategoryLoading), child: const SizedBox().toRequestShimmer(context, snapshot.isDetailLoading),
); );
}, },
); );
} else { } else {
WidgetsBinding.instance.addPostFrameCallback((_) { return RequestPaginatedListview(snapshot.requestDetailList?.data ?? <Data>[], snapshot.isDetailLoading, snapshot.requestDetailList?.totalRows ?? 0, _scrollController);
snapshot.requestDetailList = snapshot.selectedRequestCategory;
});
return RequestPaginatedList(
snapshot.selectedRequestCategory!.requestsDetails ?? [], snapshot.isRequestCategoryLoading, snapshot.selectedRequestCategory?.total?.count ?? 0, _scrollController);
} }
bool isLoading = widget.index == 0 // bool isLoading = widget.index == 0
? snapshot.isHighPriorityLoading // ? snapshot.isHighPriorityLoading
: widget.index == 1 // : widget.index == 1
? snapshot.isOverdueLoading // ? snapshot.isOverdueLoading
: widget.index == 2 // : widget.index == 2
? snapshot.isOpenLoading // ? snapshot.isOpenLoading
: widget.index == 3 // : widget.index == 3
? snapshot.isCompleteLoading // ? snapshot.isCompleteLoading
: false; // : false;
//
List<RequestsDetails> list = widget.index == 0 // List<RequestsDetails> list = widget.index == 0
? snapshot.highPriorityRequests?.requestsDetails ?? [] // ? snapshot.highPriorityRequests?.requestsDetails ?? []
: widget.index == 1 // : widget.index == 1
? snapshot.overdueRequests?.requestsDetails ?? [] // ? snapshot.overdueRequests?.requestsDetails ?? []
: widget.index == 2 // : widget.index == 2
? snapshot.openRequests?.requestsDetails ?? [] // ? snapshot.openRequests?.requestsDetails ?? []
: widget.index == 3 // : widget.index == 3
? snapshot.completedRequests?.requestsDetails ?? [] // ? snapshot.completedRequests?.requestsDetails ?? []
: []; // : [];
})); }));
} }
Future<void> callRequestApis({ Future<void> callRequestApis({bool showLoader = true, int pageNo = 1, int pageSize = 12}) async {
bool showLoader = true,
int pageNo = 1,
int pageSize = 10,
}) async {
UsersTypes usersTypes = Provider.of<UserProvider>(context, listen: false).user!.type!; UsersTypes usersTypes = Provider.of<UserProvider>(context, listen: false).user!.type!;
print('i am here at ${widget.index}');
if (widget.index == 0) { if (widget.index == 0) {
await _provider.getSelectedRequestCategory( // high priority
requestQueryModel: RequestQueryModel( _dashBoardProvider.getHighPriorityRequests(usersType: usersTypes, showLoader: showLoader);
typeTransaction: [1], } else if (widget.index == 1) {
statusTransaction: [1, 2, 4], // overdue
priority: [1], _dashBoardProvider.getOverdueRequests(usersType: usersTypes, showLoader: showLoader);
displayData: [], } else if (widget.index == 2) {
pageNumber: pageNo, //in progress
pageSize: pageSize, _dashBoardProvider.getInProgressRequests(usersType: usersTypes, showLoader: showLoader);
showLoader: showLoader, } else {
)); // completed
return; _dashBoardProvider.getCompletedRequests(usersType: usersTypes, showLoader: showLoader);
}
if (widget.index == 1) {
await _provider.getSelectedRequestCategory(
requestQueryModel: RequestQueryModel(
typeTransaction: [1, 2, 3, 4],
statusTransaction: [1, 2, 4],
displayData: [1],
pageNumber: pageNo,
pageSize: pageSize,
priority: [],
showLoader: showLoader,
));
return;
// _provider.overdueRequests = null;
// _provider.getOverdueRequests();
}
if (widget.index == 2) {
await _provider.getSelectedRequestCategory(
requestQueryModel: RequestQueryModel(
typeTransaction: [1, 2, 3, 4],
statusTransaction: [usersTypes == UsersTypes.engineer ? 2 : 1],
displayData: [],
pageNumber: pageNo,
pageSize: pageSize,
priority: [],
showLoader: showLoader,
));
return;
// _provider.openRequests = null;
// _provider.getOpenRequests();
}
if (widget.index == 3) {
await _provider.getSelectedRequestCategory(
requestQueryModel: RequestQueryModel(
typeTransaction: [1, 2, 3, 4],
statusTransaction: [4],
displayData: [],
pageNumber: pageNo,
pageSize: pageSize,
priority: [],
showLoader: showLoader,
));
return;
// _provider.completedRequests = null;
// _provider.getCompletedRequests();
} }
} }
} }

@ -4,11 +4,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
class RequestItemViewList extends StatelessWidget { class RequestItemViewList extends StatelessWidget {
List<RequestsDetails> list; List<RequestsDetails> list;
@ -19,7 +15,7 @@ class RequestItemViewList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return (list.isEmpty && !isLoading) return (list.isEmpty && !isLoading)
? NoItemFound(message: context.translation.noDataFound) ? NoDataFound(message: context.translation.noDataFound)
: ListView.separated( : ListView.separated(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
shrinkWrap: true, shrinkWrap: true,
@ -29,19 +25,25 @@ class RequestItemViewList extends StatelessWidget {
bool isGasRefill = list[index].nameOfType == "GasRefill"; bool isGasRefill = list[index].nameOfType == "GasRefill";
bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; bool isAssetTransfer = list[index].nameOfType == "AssetTransfer";
bool isPPMs = list[index].nameOfType == "PPMs"; bool isPPMs = list[index].nameOfType == "PPMs";
return isServiceRequest
? ServiceRequestItemView(list[index]) return Container(
: isGasRefill height: 100,
? GasRefillItemView(list[index]) width: double.infinity,
: isPPMs color: Colors.grey,
? PpmItemView(list[index]) );
: isAssetTransfer // return isServiceRequest
? AssetItemView(list[index]) // ? ServiceRequestItemView(list[index])
: Container( // : isGasRefill
height: 100, // ? GasRefillItemView(list[index])
width: double.infinity, // : isPPMs
color: Colors.grey, // ? PpmItemView(list[index])
); // : isAssetTransfer
// ? AssetItemView(list[index])
// : Container(
// height: 100,
// width: double.infinity,
// color: Colors.grey,
// );
}, },
separatorBuilder: (cxt, index) => 8.height, separatorBuilder: (cxt, index) => 8.height,
itemCount: isLoading ? 6 : list.length); itemCount: isLoading ? 6 : list.length);

@ -219,18 +219,10 @@ class _LoginPageState extends State<LoginPage> {
// }, // },
// backgroundColor: context.isDark ? AppColor.primary80 : AppColor.primary80), // backgroundColor: context.isDark ? AppColor.primary80 : AppColor.primary80),
context.translation.signInToYour.customHeadingText(context).custom( context.translation.signInToYour.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500),
color: AppColor.white20, context.translation.account.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500),
),
context.translation.account.customHeadingText(context).custom(
color: AppColor.white20,
),
25.height, 25.height,
context.translation.letSignInToAccount.customHeadingText(context).custom( context.translation.letSignInToAccount.customHeadingText(context).custom(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 12),
color: AppColor.white20,
fontWeight: FontWeight.w500,
fontSize: 12,
),
], ],
), ),
), ),
@ -248,9 +240,11 @@ class _LoginPageState extends State<LoginPage> {
backgroundColor: AppColor.white20, backgroundColor: AppColor.white20,
validator: (value) => Validator.hasValue(value!) ? null : context.translation.requiredField, validator: (value) => Validator.hasValue(value!) ? null : context.translation.requiredField,
labelText: context.translation.username, labelText: context.translation.username,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 12, color: Color(0xff3B3D4A)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: 11, color: Color(0xff767676)),
textInputType: TextInputType.text, textInputType: TextInputType.text,
showWithoutDecoration: true, showWithoutDecoration: true,
contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight),
onSaved: (value) { onSaved: (value) {
_user.userName = value; _user.userName = value;
}, },
@ -261,7 +255,9 @@ class _LoginPageState extends State<LoginPage> {
showWithoutDecoration: true, showWithoutDecoration: true,
labelText: context.translation.password, labelText: context.translation.password,
backgroundColor: AppColor.white20, backgroundColor: AppColor.white20,
contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), style: TextStyle(fontWeight: FontWeight.w500, fontSize: 12, color: Color(0xff3B3D4A)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: 11, color: Color(0xff767676)),
contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight),
obscureText: true, obscureText: true,
validator: (value) => Validator.isValidPassword(value!) validator: (value) => Validator.isValidPassword(value!)
? null ? null
@ -272,21 +268,22 @@ class _LoginPageState extends State<LoginPage> {
_user.password = value; _user.password = value;
}, },
), ),
16.height, 8.height,
Align( // Align(
alignment: AlignmentDirectional.centerEnd, // alignment: AlignmentDirectional.centerEnd,
child: InkWell( // child: InkWell(
onTap: () { // onTap: () {
/// TODO [zaid] : push to another screen // /// TODO [zaid] : push to another screen
}, // },
child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500), // child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500),
), // ),
), // ),
Row( Row(
children: [ children: [
Checkbox( Checkbox(
value: rememberMe, value: rememberMe,
activeColor: AppColor.blueStatus(context), activeColor: AppColor.blueStatus(context),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
rememberMe = value!; rememberMe = value!;

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
@ -12,7 +13,7 @@ import 'package:test_sa/models/helper_data_models/workorder/mark_as_fixed_model.
import 'package:test_sa/models/helper_data_models/workorder/need_visit_model.dart'; import 'package:test_sa/models/helper_data_models/workorder/need_visit_model.dart';
import 'package:test_sa/models/helper_data_models/workorder/nurse_action_model.dart'; import 'package:test_sa/models/helper_data_models/workorder/nurse_action_model.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart'; import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/models/new_models/workOrderDetail.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart';
class RequestDetailProvider extends ChangeNotifier { class RequestDetailProvider extends ChangeNotifier {
final pageItemNumber = 10; final pageItemNumber = 10;
@ -64,6 +65,7 @@ class RequestDetailProvider extends ChangeNotifier {
NeedVisit? _needVisitModel = NeedVisit(); NeedVisit? _needVisitModel = NeedVisit();
MarkAsFixed? _markAsFixed = MarkAsFixed(); MarkAsFixed? _markAsFixed = MarkAsFixed();
ActivitySparePartModel? _activitySparePartModel = ActivitySparePartModel(); ActivitySparePartModel? _activitySparePartModel = ActivitySparePartModel();
ActivityAssetRetiredModel? _activityAssetRetiredModel = ActivityAssetRetiredModel(); ActivityAssetRetiredModel? _activityAssetRetiredModel = ActivityAssetRetiredModel();
WorkOrderHModel _workOrderHModel = WorkOrderHModel(); WorkOrderHModel _workOrderHModel = WorkOrderHModel();
@ -95,6 +97,14 @@ class RequestDetailProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
NurseActionModel? _nurseActionModel;
NurseActionModel? get nurseActionModel => _nurseActionModel;
set nurseActionModel(NurseActionModel? value) {
_nurseActionModel = value;
notifyListeners();
}
NeedVisit? get needVisitModel => _needVisitModel; NeedVisit? get needVisitModel => _needVisitModel;
@ -163,20 +173,17 @@ class RequestDetailProvider extends ChangeNotifier {
} }
//getWorkOrderById...... //getWorkOrderById......
Future<WorkOrderDetail?> getWorkOrderById({required String id}) async { Future getWorkOrderById({required int id}) async {
try { try {
isLoading = true; isLoading = true;
notifyListeners();
final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl + "?workOrderId=$id"); final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl + "?workOrderId=$id");
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); _currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
notifyListeners();
isLoading = false;
return currentWorkOrder;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return null;
} catch (e) { } catch (e) {
log("getSubWorkOrderDetails [error] : $e"); log("getSubWorkOrderDetails [error] : $e");
isLoading = false; isLoading = false;
@ -248,6 +255,7 @@ class RequestDetailProvider extends ChangeNotifier {
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
print('response of Engineer fixremotely workorder ${commonResponseModel.toJson()}');
notifyListeners(); notifyListeners();
isLoading = false; isLoading = false;
return commonResponseModel; return commonResponseModel;
@ -335,6 +343,7 @@ class RequestDetailProvider extends ChangeNotifier {
return CommonResponseModel(); return CommonResponseModel();
} }
} }
//assignEngineerToWorkOrder...... //assignEngineerToWorkOrder......
Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async { Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async {
try { try {

@ -1,165 +1,141 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.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/common_widgets/app_filled_button.dart';
import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart';
class FooterActionButton { class FooterActionButton {
static Widget footerContainer({required Widget child}) {
static Widget footerContainer({required Widget child}){
return Align( return Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth,vertical: 16.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10, color: AppColor.white10,
child: child, child: child,
), ),
); );
} }
static Widget requestDetailsFooterWidget({required int status,required BuildContext context}){ static Widget requestDetailsFooterWidget({required int status, required BuildContext context}) {
switch(status){ switch (status) {
//accept reject... //accept reject...
case 1: case 1:
return footerContainer( return footerContainer(
child: child: Row(
Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisSize: MainAxisSize.min,
mainAxisSize: MainAxisSize.min, children: [
children: [
AppFilledButton(
label: context.translation.reject,
maxWidth: true,
buttonColor: Colors.white54,
textColor: AppColor.red30,
showBorder: true,
onPressed: () async {
ServiceRequestBottomSheet.rejectRequestBottomSheet(context: context);
},
).expanded,
const SizedBox(
width: 20,
),
AppFilledButton(
label: context.translation.accept,
maxWidth: true,
buttonColor: AppColor.green70,
onPressed: () async {
},
).expanded,
],
)
);
break;
//need visit fixed remotely
case 2:
return footerContainer(
child:
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
children: [
AppFilledButton(
label: context.translation.needAVisit,
maxWidth: true,
buttonColor: AppColor.neutral50,
onPressed: () async {
ServiceRequestBottomSheet.initialVisitBottomSheet(context: context);
},
).expanded,
const SizedBox(
width: 20,
),
AppFilledButton(
label: context.translation.fixedRemotely,
maxWidth: true,
buttonColor: AppColor.green70,
onPressed: () async {
ServiceRequestBottomSheet.fixRemotelyBottomSheet(context: context);
},
).expanded,
],
)
);
break;
//verify Asset Details
case 3:
return footerContainer(
child:
AppFilledButton( AppFilledButton(
label: context.translation.verify_asset_details, label: context.translation.reject,
// maxWidth: true, maxWidth: true,
buttonColor: AppColor.primary10, buttonColor: Colors.white54,
textColor: AppColor.red30,
showBorder: true,
onPressed: () async { onPressed: () async {
ServiceRequestBottomSheet.rejectRequestBottomSheet(context: context);
}, },
) ).expanded,
); const SizedBox(
width: 20,
),
AppFilledButton(
label: context.translation.accept,
maxWidth: true,
buttonColor: AppColor.green70,
onPressed: () async {},
).expanded,
],
));
break; break;
//Activities //need visit fixed remotely
case 4: case 2:
return footerContainer( return footerContainer(
child: child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
children: [
AppFilledButton( AppFilledButton(
label: context.translation.activities, label: context.translation.needAVisit,
// maxWidth: true, maxWidth: true,
buttonColor: AppColor.neutral50, buttonColor: AppColor.neutral50,
onPressed: () async { onPressed: () async {
ServiceRequestBottomSheet.activityTypeBottomSheet(context: context); ServiceRequestBottomSheet.initialVisitBottomSheet(context: context);
}, },
) ).expanded,
); const SizedBox(
break; width: 20,
//I have arrived... ),
case 5:
return footerContainer(
child:
AppFilledButton( AppFilledButton(
label: context.translation.iHaveArrived, label: context.translation.fixedRemotely,
//showIcon: true, maxWidth: true,
// icon: 'arrived_icon'.toSvgAsset(),
buttonColor: AppColor.green70, buttonColor: AppColor.green70,
onPressed: () async { onPressed: () async {
ServiceRequestBottomSheet.fixRemotelyBottomSheet(context: context);
}, },
) ).expanded,
); ],
));
break; break;
//Close.. //verify Asset Details
case 6: case 3:
return footerContainer( return footerContainer(
child: child: AppFilledButton(
AppFilledButton( label: context.translation.verify_asset_details,
label: context.translation.close, // maxWidth: true,
// maxWidth: true, buttonColor: AppColor.primary10,
buttonColor: AppColor.primary10, onPressed: () async {},
onPressed: () async { ));
},
)
);
break; break;
//for nurse to take action... //Activities
case 7: case 4:
return footerContainer( return footerContainer(
child: child: AppFilledButton(
AppFilledButton( label: context.translation.activities,
label: context.translation.takeAction, // maxWidth: true,
// maxWidth: true, buttonColor: AppColor.neutral50,
buttonColor: AppColor.primary10, onPressed: () async {
onPressed: () async { ServiceRequestBottomSheet.activityTypeBottomSheet(context: context);
ServiceRequestBottomSheet.nurseTakeActionBottomSheet(context: context); },
}, ));
) break;
); //I have arrived...
case 5:
return footerContainer(
child: AppFilledButton(
label: context.translation.iHaveArrived,
//showIcon: true,
// icon: 'arrived_icon'.toSvgAsset(),
buttonColor: AppColor.green70,
onPressed: () async {},
));
break;
//Close..
case 6:
return footerContainer(
child: AppFilledButton(
label: context.translation.close,
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {},
));
break;
//for nurse to take action...
case 7:
return footerContainer(
child: AppFilledButton(
label: context.translation.takeAction,
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
ServiceRequestBottomSheet.nurseTakeActionBottomSheet(context: context);
},
));
break; break;
default: default:
return const SizedBox(); return const SizedBox();
} }
} }
} }

@ -15,7 +15,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart'; import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
class ActivitiesListView extends StatelessWidget { class ActivitiesListView extends StatelessWidget {
@ -42,7 +42,7 @@ class ActivitiesListView extends StatelessWidget {
return Column( return Column(
children: [ children: [
(workOrders.isEmpty) (workOrders.isEmpty)
? NoItemFound(message: context.translation.noDataFound).expanded ? NoDataFound(message: context.translation.noDataFound).expanded
: ListView.separated( : ListView.separated(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
itemCount: workOrders.length, itemCount: workOrders.length,

@ -1,10 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
class HistoryLogView extends StatelessWidget { class HistoryLogView extends StatelessWidget {
@ -23,41 +26,34 @@ class HistoryLogView extends StatelessWidget {
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
]; ];
return Scaffold(
backgroundColor: AppColor.neutral100,
body: Padding(
padding: EdgeInsets.only(
left: 16.toScreenWidth,
right: 16.toScreenWidth,
bottom: 12.toScreenHeight,
),
child: Stack(
children: [
Padding(
padding: EdgeInsets.only(left: 122.toScreenWidth),
child: const VerticalDivider(
color: AppColor.white40,
thickness: 2,
width: 20,
indent: 10,
endIndent: 10,
),
),
// Container( return Consumer<RequestDetailProvider>(builder: (context, requestProvider, _) {
// color: Colors.red, return requestProvider.isLoading
// ), ? const CircularProgressIndicator(color: AppColor.primary10).center
ListView.builder( : (requestProvider.currentWorkOrder == null || (requestProvider.currentWorkOrder?.data?.workOrderHistory.isEmpty ?? true)
itemCount: dummyList.length, ? const NoDataFound()
padding: EdgeInsets.zero, : Stack(
itemBuilder: (context, index) { children: [
return historyLogCard(context: context, historyLogModel: dummyList[index]); Padding(
}, padding: EdgeInsets.only(left: 122.toScreenWidth),
), child: const VerticalDivider(
], color: AppColor.white40,
), thickness: 2,
), width: 20,
); indent: 10,
endIndent: 10,
),
),
ListView.builder(
itemCount: dummyList.length,
padding: EdgeInsets.zero,
itemBuilder: (context, index) {
return historyLogCard(context: context, historyLogModel: dummyList[index]);
},
),
],
));
});
} }
Widget historyLogCard({required BuildContext context, required HistoryLogModel historyLogModel}) { Widget historyLogCard({required BuildContext context, required HistoryLogModel historyLogModel}) {

@ -10,34 +10,284 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/app_style/app_color.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/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/service_request_latest/views/components/initial_visit_card.dart'; import 'package:test_sa/service_request_latest/views/components/initial_visit_card.dart';
import 'package:test_sa/service_request_latest/views/components/timer_widget.dart'; import 'package:test_sa/service_request_latest/views/components/timer_widget.dart';
import 'package:test_sa/service_request_latest/views/forms/asset_retired/asset_retired.dart';
import 'package:test_sa/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/service_request_latest/views/nurse/create_new_request_view.dart'; import 'package:test_sa/service_request_latest/views/nurse/create_new_request_view.dart';
import 'package:test_sa/views/pages/user/requests/comments_bottom_sheet.dart'; import 'package:test_sa/views/pages/user/requests/comments_bottom_sheet.dart';
import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart'; import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart';
import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/views/widgets/sound/sound_player.dart'; import 'package:test_sa/views/widgets/sound/sound_player.dart';
import '../forms/spare_part/spare_part_request.dart'; class WorkOrderDetailView extends StatelessWidget {
WorkOrderDetailView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
return Consumer<RequestDetailProvider>(builder: (pContext, requestProvider, _) {
print(requestProvider?.currentWorkOrder?.toJson());
return requestProvider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center
: requestProvider.currentWorkOrder == null
? NoDataFound()
: Stack(
children: [
Column(
children: [
SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
WorkOrderDetailCard(context, requestProvider.currentWorkOrder!.data!, _userProvider),
40.height,
// skipForLater(serviceRequestsProvider.currentSelectedRequest),
// 20.height,
const InitialVisitCard(),
20.height,
],
),
).expanded,
FooterActionButton.requestDetailsFooterWidget(status: 1, context: context),
],
),
const TimerWidget(),
],
);
});
}
Widget WorkOrderDetailCard(BuildContext context, WorkOrderData workOrder, UserProvider userProvider) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
StatusLabel(
label: workOrder.priority?.name,
id: workOrder.priority!.id!,
radius: 4,
textColor: AppColor.getPriorityStatusTextColor(context, workOrder.priority!.id!),
backgroundColor: AppColor.getPriorityStatusColor(context, workOrder.priority!.id!),
),
8.width,
StatusLabel(
radius: 4,
label: workOrder.status!.name,
textColor: AppColor.getRequestStatusTextColor(context, workOrder.status!.id!),
backgroundColor: AppColor.getRequestStatusColor(context, workOrder.status!.id!),
),
1.width.expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (userProvider.user!.type == UsersTypes.normal_user)
context.translation.code.toSvgAsset(width: 48).onPress(() {
// Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: serviceRequest)));
}),
if (userProvider.user!.type == UsersTypes.engineer) 16.height,
Text(
workOrder.requestedDate!.toString().toServiceRequestCardFormat,
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
],
)
],
),
Text(
context.translation.assetDetails,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
8.height,
Text(
'${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
// 8.height,
Text(
'${context.translation.assetNumber}: ${workOrder.asset!.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
// Text(
// '${context.translation.equipmentStatus}: ${workOrder.defectType?.name}', // todo ask ahmed
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
Text(
'${context.translation.manufacture}: ${workOrder.manufacturer?.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.model}: ${workOrder.model?.name!.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.site}: ${workOrder.site?.siteName?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.building}: ${workOrder.building?.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.floor}: ${workOrder.floor?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.department}: ${workOrder.department?.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.room}: ${(workOrder.room?.toString() ?? "").cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
],
).expanded,
],
),
8.height,
const Divider().defaultStyle(context),
//... request details starts here....
Text(
context.translation.requestDetail,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
8.height,
Text(
'${context.translation.requestType}: ${workOrder.typeofRequest?.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
// Text(
// '${context.translation.requestNo}: ${workOrder.requestCode}', // todo ask ahmed
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
Text(
'${context.translation.requesterName}: ${workOrder.workOrderCreatedBy?.userName ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.requesterName}: ${workOrder.requestedDate!.toString().toServiceRequestDetailsFormat}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
),
8.height,
if ((workOrder.comments ?? "").isNotEmpty) ...[
const Divider().defaultStyle(context),
8.height,
Text(
workOrder.comments!,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
],
if (workOrder.workOrderAttachments.isNotEmpty ?? false) ...[
8.height,
const Divider().defaultStyle(context),
FilesList(images: workOrder.workOrderAttachments),
],
if (workOrder.voiceNote?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context),
16.height,
ASoundPlayer(audio: workOrder.voiceNote!),
8.height,
],
],
).paddingOnly(start: 16, end: 16, top: 16, bottom: 8),
(userProvider.user!.type == UsersTypes.normal_user
? Container(
height: 50,
padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
width: double.infinity,
decoration: ShapeDecoration(
color: context.isDark ? AppColor.neutral50 : AppColor.neutral30,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
),
),
),
child: Row(
children: [
Text(
'${context.translation.commentHere}...',
style: AppTextStyles.heading6.copyWith(
color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(.6),
),
).expanded,
"comment_send".toSvgAsset(width: 24, color: context.isDark ? AppColor.primary50 : AppColor.primary70),
],
),
)
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider().defaultStyle(context),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewComments,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
),
4.width,
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
),
],
).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() {
// showModalBottomSheet(
// context: context,
// useSafeArea: true,
// isScrollControlled: true,
// useRootNavigator: true,
// backgroundColor: Colors.transparent,
// builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id!),
// );
}),
//set condition for show asset detail button...
if (true) ...[
//assetRetiredButton(serviceRequest: serviceRequest),
]
],
).toShadowContainer(context, padding: 0);
}
}
class RequestDetailView extends StatefulWidget { class RequestDetailView extends StatefulWidget {
static const String id = "/call-details"; static const String id = "/call-details";
ServiceRequest serviceRequest; ServiceRequest serviceRequest;
bool fromTabView = false; bool fromTabView = false;
RequestDetailView({Key? key,required this.serviceRequest, this.fromTabView = false}) : super(key: key); RequestDetailView({Key? key, required this.serviceRequest, this.fromTabView = false}) : super(key: key);
@override @override
State<RequestDetailView> createState() => _RequestDetailViewState(); State<RequestDetailView> createState() => _RequestDetailViewState();
@ -47,7 +297,6 @@ class _RequestDetailViewState extends State<RequestDetailView> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
getServiceRequest(requestId: widget.serviceRequest.id);
} }
void getServiceRequest({@required dynamic requestId}) { void getServiceRequest({@required dynamic requestId}) {
@ -60,8 +309,6 @@ class _RequestDetailViewState extends State<RequestDetailView> {
}); });
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false); UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
@ -82,7 +329,6 @@ class _RequestDetailViewState extends State<RequestDetailView> {
} }
Widget requestDetailCard({required ServiceRequestsProvider serviceRequestsProvider, required UserProvider userProvider}) { Widget requestDetailCard({required ServiceRequestsProvider serviceRequestsProvider, required UserProvider userProvider}) {
return SafeArea( return SafeArea(
child: serviceRequestsProvider.isDetialLoading child: serviceRequestsProvider.isDetialLoading
? const ALoading().center ? const ALoading().center
@ -110,7 +356,7 @@ class _RequestDetailViewState extends State<RequestDetailView> {
), ),
), ),
FooterActionButton.requestDetailsFooterWidget(status: 7, context: context), FooterActionButton.requestDetailsFooterWidget(status: 7, context: context),
const TimerWidget(), TimerWidget(),
], ],
), ),
); );
@ -332,7 +578,7 @@ class _RequestDetailViewState extends State<RequestDetailView> {
showBorder: true, showBorder: true,
onPressed: () async { onPressed: () async {
// Navigator.push(context, MaterialPageRoute(builder: (context) => AssetRetired())); // Navigator.push(context, MaterialPageRoute(builder: (context) => AssetRetired()));
ServiceRequestBottomSheet.initialVisitBottomSheet(context: context); Navigator.push(context, MaterialPageRoute(builder: (context) => CreateNewRequest()));
}), }),
); );
} }

@ -1,38 +1,65 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/history_log_view.dart'; import 'package:test_sa/service_request_latest/views/components/history_log_view.dart';
import 'components/request_detail_view.dart'; import 'components/request_detail_view.dart';
class RequestDetailMain extends StatelessWidget { class RequestDetailMain extends StatefulWidget {
final int requestId; final int requestId;
const RequestDetailMain({Key? key, required this.requestId}) : super(key: key);
RequestDetailMain({Key? key, required this.requestId}) : super(key: key);
@override
_RequestDetailMainState createState() {
return _RequestDetailMainState();
}
}
class _RequestDetailMainState extends State<RequestDetailMain> {
late RequestDetailProvider _requestProvider;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_requestProvider = Provider.of<RequestDetailProvider>(context, listen: false);
_requestProvider.getWorkOrderById(id: widget.requestId);
});
}
@override
void dispose() {
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
appBar: DefaultAppBar(title: context.translation.serviceDetails), appBar: DefaultAppBar(title: context.translation.serviceDetails),
body: DefaultTabController( body: DefaultTabController(
length: 2, length: 2,
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth,top: 12.toScreenHeight), margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight),
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)), decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)),
child: TabBar( child: TabBar(
padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight,horizontal: 4.toScreenWidth), //controller: _tabController,
padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth),
labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelStyle: AppTextStyles.bodyText, unselectedLabelStyle: AppTextStyles.bodyText,
labelStyle: AppTextStyles.bodyText, labelStyle: AppTextStyles.bodyText,
indicatorPadding: EdgeInsets.zero,
indicatorSize: TabBarIndicatorSize.tab, indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent, dividerColor: Colors.transparent,
indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)), indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)),
@ -48,10 +75,11 @@ class RequestDetailMain extends StatelessWidget {
12.height, 12.height,
TabBarView( TabBarView(
children: [ children: [
RequestDetailView( WorkOrderDetailView(),
serviceRequest: ServiceRequest(id: requestId.toString()), // RequestDetailView(
fromTabView: true, // serviceRequest: ServiceRequest(id: requestId.toString()),
), // fromTabView: true,
// ),
const HistoryLogView(), const HistoryLogView(),
], ],
).expanded, ).expanded,

@ -1,18 +0,0 @@
import 'package:flutter/material.dart';
import 'package:test_sa/models/enums/user_types.dart';
class RequestUtils{
static List<Map<String, dynamic>> getTabs({required UsersTypes userType,required BuildContext context}) {
List<Map<String, dynamic>> tabs = [];
if(userType==UsersTypes.engineer){
tabs.add({'label':'In Progress','status':2});
tabs.add({'label':'Completed','status':4});
return tabs;
}
tabs.add({'label':'New Request','status':1});
tabs.add({'label':'In Progress','status':2});
tabs.add({'label':'Completed','status':4});
return tabs;
}
}

@ -15,7 +15,7 @@ import '../../../new_views/common_widgets/custom_app_bar.dart';
import '../../widgets/equipment/asset_item_listview.dart'; import '../../widgets/equipment/asset_item_listview.dart';
import '../../widgets/horizontal_list_widget.dart'; import '../../widgets/horizontal_list_widget.dart';
import '../../widgets/loaders/lazy_loading.dart'; import '../../widgets/loaders/lazy_loading.dart';
import '../../widgets/loaders/no_item_found.dart'; import '../../widgets/loaders/no_data_found.dart';
class SearchAssetPage extends StatefulWidget { class SearchAssetPage extends StatefulWidget {
/// add on route /// add on route
@ -123,7 +123,7 @@ class _SearchAssetPageState extends State<SearchAssetPage> {
child: _searchableList.isEmpty child: _searchableList.isEmpty
? _isFirst ? _isFirst
? const SizedBox() ? const SizedBox()
: NoItemFound(message: context.translation.noDeviceFound) : NoDataFound(message: context.translation.noDeviceFound)
: LazyLoading( : LazyLoading(
nextPage: _deviceProvider.nextPage, nextPage: _deviceProvider.nextPage,
onLazyLoad: () async { onLazyLoad: () async {

@ -8,7 +8,7 @@
// import '../../../models/service_request/search_work_order.dart'; // import '../../../models/service_request/search_work_order.dart';
// import '../../widgets/buttons/app_back_button.dart'; // import '../../widgets/buttons/app_back_button.dart';
// import '../../widgets/loaders/lazy_loading.dart'; // import '../../widgets/loaders/lazy_loading.dart';
// import '../../widgets/loaders/no_item_found.dart'; // import '../../widgets/loaders/no_data_found.dart';
// import 'create_sub_workorder_page.dart'; // import 'create_sub_workorder_page.dart';
//// todo remove this class after work //// todo remove this class after work
// class WorkOrderList extends StatefulWidget { // class WorkOrderList extends StatefulWidget {

@ -11,7 +11,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/app_style/app_color.dart';
import '../../../widgets/loaders/loading_manager.dart'; import '../../../widgets/loaders/loading_manager.dart';
@ -79,7 +79,7 @@ class _GasRefillCommentsBottomSheetState extends State<GasRefillCommentsBottomSh
child: commentsProvider.comments.isEmpty child: commentsProvider.comments.isEmpty
? SizedBox( ? SizedBox(
height: MediaQuery.of(context).size.height * 0.25, height: MediaQuery.of(context).size.height * 0.25,
child: NoItemFound(message: context.translation.noDataFound), child: NoDataFound(message: context.translation.noDataFound),
) )
: LazyLoading( : LazyLoading(
nextPage: commentsProvider.nextPage, nextPage: commentsProvider.nextPage,

@ -9,7 +9,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../extensions/text_extensions.dart'; import '../../../../extensions/text_extensions.dart';
import '../../../../models/enums/user_types.dart'; import '../../../../models/enums/user_types.dart';
@ -70,7 +70,7 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
], ],
); );
} }
return NoItemFound(message: context.translation.noDataFound); return NoDataFound(message: context.translation.noDataFound);
}, },
), ),
), ),

@ -4,7 +4,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/system_notification_model.dart'; import 'package:test_sa/models/system_notification_model.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/notifications/notification_item.dart'; import 'package:test_sa/views/widgets/notifications/notification_item.dart';
class NotificationsList extends StatelessWidget { class NotificationsList extends StatelessWidget {
@ -17,7 +17,7 @@ class NotificationsList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (notifications.isEmpty) { if (notifications.isEmpty) {
return NoItemFound(message: context.translation.notificationsNotFound); return NoDataFound(message: context.translation.notificationsNotFound);
} }
return LazyLoading( return LazyLoading(
nextPage: nextPage, nextPage: nextPage,

@ -10,7 +10,7 @@ import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/user/ppm/update_ppm/edit_ppm.dart'; import 'package:test_sa/views/pages/user/ppm/update_ppm/edit_ppm.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../controllers/providers/api/user_provider.dart';
import '../../../../models/enums/user_types.dart'; import '../../../../models/enums/user_types.dart';
@ -115,7 +115,7 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
).paddingAll(16) ).paddingAll(16)
]); ]);
} }
return NoItemFound(message: context.translation.noDataFound); return NoDataFound(message: context.translation.noDataFound);
}), }),
), ),
); );

@ -9,7 +9,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../models/ppm/ppm.dart'; import '../../../../models/ppm/ppm.dart';
import '../../../widgets/loaders/lazy_loading.dart'; import '../../../widgets/loaders/lazy_loading.dart';
import '../../../widgets/loaders/no_item_found.dart'; import '../../../widgets/loaders/no_data_found.dart';
import '../../../widgets/ppm/ppm_item.dart'; import '../../../widgets/ppm/ppm_item.dart';
class PpmPage extends StatefulWidget { class PpmPage extends StatefulWidget {
@ -44,7 +44,7 @@ class _PpmPageState extends State<PpmPage> with TickerProviderStateMixin {
await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!); await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!);
}, },
child: _visitsProvider.ppms?.isEmpty ?? true child: _visitsProvider.ppms?.isEmpty ?? true
? NoItemFound(message: context.translation.noVisitsFound) ? NoDataFound(message: context.translation.noVisitsFound)
: LazyLoading( : LazyLoading(
nextPage: _visitsProvider.nextPage, nextPage: _visitsProvider.nextPage,
onLazyLoad: () async { onLazyLoad: () async {

@ -12,7 +12,7 @@ import 'package:test_sa/models/comment.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/app_style/app_color.dart';
import '../../../widgets/loaders/loading_manager.dart'; import '../../../widgets/loaders/loading_manager.dart';
@ -78,7 +78,7 @@ class _CommentsBottomSheetState extends State<CommentsBottomSheet> {
commentsProvider.comments.isEmpty commentsProvider.comments.isEmpty
? SizedBox( ? SizedBox(
height: MediaQuery.of(context).size.height * 0.25, height: MediaQuery.of(context).size.height * 0.25,
child: NoItemFound(message: context.translation.noDataFound), child: NoDataFound(message: context.translation.noDataFound),
) )
: LazyLoading( : LazyLoading(
nextPage: commentsProvider.nextPage, nextPage: commentsProvider.nextPage,

@ -12,7 +12,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/views/components/activity_card_view.dart'; import 'package:test_sa/service_request_latest/views/components/activity_card_view.dart';
import 'package:test_sa/views/pages/user/requests/work_order/create_service_report.dart'; import 'package:test_sa/views/pages/user/requests/work_order/create_service_report.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class WorkOrderListPage extends StatelessWidget { class WorkOrderListPage extends StatelessWidget {
static const String id = "/work-order-list"; static const String id = "/work-order-list";
@ -40,7 +40,7 @@ class WorkOrderListPage extends StatelessWidget {
return Column( return Column(
children: [ children: [
(workOrders.isEmpty) (workOrders.isEmpty)
? NoItemFound(message: context.translation.noDataFound).expanded ? NoDataFound(message: context.translation.noDataFound).expanded
: ListView.separated( : ListView.separated(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
itemCount: workOrders.length, itemCount: workOrders.length,

@ -6,7 +6,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:test_sa/views/widgets/departments/department_item.dart'; import 'package:test_sa/views/widgets/departments/department_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
@ -62,7 +62,7 @@ class _SingleDepartmentPickerState extends State<SingleDepartmentPicker> {
), ),
Expanded( Expanded(
child: _searchableList.isEmpty child: _searchableList.isEmpty
? NoItemFound( ? NoDataFound(
message: context.translation.noUniteFound, message: context.translation.noUniteFound,
) )
: ListView.builder( : ListView.builder(

@ -4,7 +4,7 @@ import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class DeviceTransferList extends StatelessWidget { class DeviceTransferList extends StatelessWidget {
final List<AssetTransfer> items; final List<AssetTransfer> items;
@ -16,7 +16,7 @@ class DeviceTransferList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (items.isEmpty) { if (items.isEmpty) {
return NoItemFound( return NoDataFound(
message: context.translation.noServiceRequestFound, message: context.translation.noServiceRequestFound,
); );
} }

@ -13,7 +13,7 @@ import 'package:test_sa/views/widgets/equipment/asset_item_gridview.dart';
import 'package:test_sa/views/widgets/equipment/asset_item_listview.dart'; import 'package:test_sa/views/widgets/equipment/asset_item_listview.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/qr/scan_qr.dart'; import 'package:test_sa/views/widgets/qr/scan_qr.dart';
import '../../../models/device/asset.dart'; import '../../../models/device/asset.dart';
@ -155,7 +155,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
children: [ children: [
Expanded( Expanded(
child: _searchableList.isEmpty child: _searchableList.isEmpty
? NoItemFound(message: context.translation.noDeviceFound) ? NoDataFound(message: context.translation.noDeviceFound)
: LazyLoading( : LazyLoading(
nextPage: _devicesProvider.nextPage, nextPage: _devicesProvider.nextPage,
onLazyLoad: () async { onLazyLoad: () async {

@ -3,7 +3,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../models/new_models/gas_refill_model.dart'; import '../../../models/new_models/gas_refill_model.dart';
@ -22,7 +22,7 @@ class _GasRefillListState extends State<GasRefillList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (widget.items.isEmpty) { if (widget.items.isEmpty) {
return NoItemFound( return NoDataFound(
message: context.translation.noServiceRequestFound, message: context.translation.noServiceRequestFound,
); );
} }

@ -6,7 +6,7 @@
// import 'package:test_sa/models/hospital.dart'; // import 'package:test_sa/models/hospital.dart';
// import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; // import 'package:test_sa/views/widgets/hospitals/hospital_item.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; // import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
// import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; // import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
// //
// import '../app_text_form_field.dart'; // import '../app_text_form_field.dart';
// //

@ -0,0 +1,24 @@
import 'package:flutter/material.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/new_views/app_style/app_color.dart';
class NoDataFound extends StatelessWidget {
final String? message;
const NoDataFound({Key? key, this.message}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/images/no_data_found.png", height: 64, width: 64),
16.height,
Text(message ?? "no Data found", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
);
}
}

@ -1,21 +0,0 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class NoItemFound extends StatelessWidget {
final String? message;
const NoItemFound({Key? key, this.message}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Center(
child: Text(message ?? "no item found", style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
),
ListView(),
],
);
}
}

@ -17,9 +17,11 @@ class StatusLabel extends StatelessWidget {
if (id == 82) label = context.translation.highPriority; if (id == 82) label = context.translation.highPriority;
if (id == 81) label = context.translation.lowPriority; if (id == 81) label = context.translation.lowPriority;
if (label?.toLowerCase() == 'In progress'.toLowerCase()) label = context.translation.inProgress; if (label?.toLowerCase() == 'In progress'.toLowerCase()) label = context.translation.inProgress;
if (label?.toLowerCase() == 'Complete'.toLowerCase()) label = context.translation.completed; if (label?.toLowerCase() == 'Completed'.toLowerCase()) label = context.translation.completed;
if (label?.toLowerCase() == 'Open'.toLowerCase()) label = context.translation.open; if (label?.toLowerCase() == 'Open'.toLowerCase()) label = context.translation.open;
if (label?.toLowerCase() == 'Closed'.toLowerCase()) label = context.translation.closed; if (label?.toLowerCase() == 'Closed'.toLowerCase()) label = context.translation.closed;
if (label?.toLowerCase() == 'Low'.toLowerCase()) label = context.translation.lowPriority;
if (label?.toLowerCase() == 'High'.toLowerCase()) label = context.translation.highPriority;
if (label?.toLowerCase() == 'Waiting for quotation'.toLowerCase()) label = context.translation.waitingForQuotation; if (label?.toLowerCase() == 'Waiting for quotation'.toLowerCase()) label = context.translation.waitingForQuotation;
return Container( return Container(

@ -5,7 +5,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/views/pages/user/requests/service_request_details.dart'; import 'package:test_sa/views/pages/user/requests/service_request_details.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/service_request_item.dart'; import 'package:test_sa/views/widgets/requests/service_request_item.dart';
class ServiceRequestsList extends StatelessWidget { class ServiceRequestsList extends StatelessWidget {
@ -19,7 +19,7 @@ class ServiceRequestsList extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
print('servies request page'); print('servies request page');
if (requests.isEmpty) { if (requests.isEmpty) {
return NoItemFound( return NoDataFound(
message: context.translation.noServiceRequestFound, message: context.translation.noServiceRequestFound,
); );
} }

Loading…
Cancel
Save