From 01312970293b9154ff4e5b72b5cdcc85b6e77e20 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 16 Sep 2024 14:49:35 +0300 Subject: [PATCH 1/3] login screen improvement --- lib/new_views/app_style/app_color.dart | 2 +- lib/new_views/pages/land_page/land_page.dart | 2 - lib/new_views/pages/login_page.dart | 43 +++++++++----------- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart index 54f74083..9b9d23a3 100644 --- a/lib/new_views/app_style/app_color.dart +++ b/lib/new_views/app_style/app_color.dart @@ -69,7 +69,7 @@ class AppColor { static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff54C166) : green50; // 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 : primary10; static Color redStatus(BuildContext context) => context.isDark ? const Color(0xffFFB6B8) : red30; diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index 090372bb..90973db9 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -1,4 +1,3 @@ -import 'dart:developer'; import 'dart:io'; 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_drawer.dart'; import 'contact_us_bottom_sheet.dart'; -import 'dashboard_page.dart'; class LandPage extends StatefulWidget { static const String routeName = "/land-page"; diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index 445f0b4d..892baf1c 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -219,18 +219,10 @@ class _LoginPageState extends State { // }, // backgroundColor: context.isDark ? AppColor.primary80 : AppColor.primary80), - context.translation.signInToYour.customHeadingText(context).custom( - color: AppColor.white20, - ), - context.translation.account.customHeadingText(context).custom( - color: AppColor.white20, - ), + context.translation.signInToYour.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), + context.translation.account.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), 25.height, - context.translation.letSignInToAccount.customHeadingText(context).custom( - color: AppColor.white20, - fontWeight: FontWeight.w500, - fontSize: 12, - ), + context.translation.letSignInToAccount.customHeadingText(context).custom(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 12), ], ), ), @@ -248,9 +240,11 @@ class _LoginPageState extends State { backgroundColor: AppColor.white20, validator: (value) => Validator.hasValue(value!) ? null : context.translation.requiredField, 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, showWithoutDecoration: true, - contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), + contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight), onSaved: (value) { _user.userName = value; }, @@ -261,7 +255,9 @@ class _LoginPageState extends State { showWithoutDecoration: true, labelText: context.translation.password, 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, validator: (value) => Validator.isValidPassword(value!) ? null @@ -272,21 +268,22 @@ class _LoginPageState extends State { _user.password = value; }, ), - 16.height, - Align( - alignment: AlignmentDirectional.centerEnd, - child: InkWell( - onTap: () { - /// TODO [zaid] : push to another screen - }, - child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500), - ), - ), + 8.height, + // Align( + // alignment: AlignmentDirectional.centerEnd, + // child: InkWell( + // onTap: () { + // /// TODO [zaid] : push to another screen + // }, + // child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500), + // ), + // ), Row( children: [ Checkbox( value: rememberMe, activeColor: AppColor.blueStatus(context), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, onChanged: (value) { setState(() { rememberMe = value!; From 0d333fa688a88c42ec00c08a1a0c584bb33c0fc7 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 19 Sep 2024 14:21:30 +0300 Subject: [PATCH 2/3] dashboard screen & service detail screen, flow changed. --- assets/images/no_data_found.png | Bin 0 -> 2630 bytes .../providers/api/all_requests_provider.dart | 1 - lib/dashboard_latest/dashboard_provider.dart | 149 +++- lib/dashboard_latest/dashboard_view.dart | 54 +- .../widgets/progress_fragment.dart | 55 +- .../widgets/request_category_fragment.dart | 228 +----- .../widgets/request_category_list.dart | 46 +- .../widgets/requests_fragment.dart | 63 +- lib/models/new_models/dashboard_detail.dart | 5 +- lib/models/new_models/workOrderDetail.dart | 751 ------------------ .../workOrderDetail_temp_delet.dart | 751 ++++++++++++++++++ .../new_models/work_order_detail_model.dart | 417 ++++++++++ lib/new_views/app_style/app_color.dart | 7 +- .../common_widgets/custom_badge.dart | 36 +- lib/new_views/common_widgets/tab_button.dart | 79 +- .../pages/land_page/calendar_page.dart | 174 ++-- .../calender_fragments/daily_fragment.dart | 164 ++-- .../calender_fragments/weekly_fragment.dart | 286 +++---- lib/new_views/pages/land_page/land_page.dart | 2 +- .../land_page/requests/asset_item_view.dart | 19 +- .../requests/gas_refill_item_view.dart | 25 +- .../land_page/requests/ppm_item_view.dart | 23 +- .../requests/request_paginated_listview.dart | 18 +- .../requests/service_request_item_view.dart | 28 +- .../pages/land_page/requests_list_page.dart | 144 +--- .../widgets/request_item_view_list.dart | 40 +- .../request_detail_provider.dart | 189 ++--- .../components/activities_list_view.dart | 4 +- .../views/components/history_log_view.dart | 64 +- .../views/components/request_detail_view.dart | 262 +++++- .../views/request_detail_main_view.dart | 58 +- lib/utilities/request_utils.dart | 18 - .../device_transfer/search_asset_page.dart | 4 +- .../pages/sub_workorder/workorder_list.dart | 2 +- .../user/gas_refill/gas_refill_comments.dart | 4 +- .../user/gas_refill/gas_refill_details.dart | 4 +- .../notifications/notifications_list.dart | 4 +- .../pages/user/ppm/ppm_details_page.dart | 4 +- lib/views/pages/user/ppm/ppm_page.dart | 4 +- .../user/requests/comments_bottom_sheet.dart | 4 +- .../work_order/work_orders_list_page.dart | 4 +- .../departments/single_department_picker.dart | 4 +- .../device_trancfer/device_transfer_list.dart | 4 +- .../equipment/single_device_picker.dart | 4 +- .../widgets/gas_refill/gas_refill_list.dart | 4 +- .../hospitals/single_hospital_picker.dart | 2 +- lib/views/widgets/loaders/no_data_found.dart | 24 + lib/views/widgets/loaders/no_item_found.dart | 21 - .../widgets/requests/request_status.dart | 4 +- .../requests/service_request_list.dart | 4 +- 50 files changed, 2400 insertions(+), 1865 deletions(-) create mode 100644 assets/images/no_data_found.png delete mode 100644 lib/models/new_models/workOrderDetail.dart create mode 100644 lib/models/new_models/workOrderDetail_temp_delet.dart create mode 100644 lib/models/new_models/work_order_detail_model.dart delete mode 100644 lib/utilities/request_utils.dart create mode 100644 lib/views/widgets/loaders/no_data_found.dart delete mode 100644 lib/views/widgets/loaders/no_item_found.dart diff --git a/assets/images/no_data_found.png b/assets/images/no_data_found.png new file mode 100644 index 0000000000000000000000000000000000000000..fc764a0526a425ec6572c8aece4deb628464a772 GIT binary patch literal 2630 zcmV-M3c2-(P)rQEvW}U5ClOGgf7wpp_H?;v(4YXfA@R6-eY{) zrvo2v-rU?|=KHWrVVS~*6FkQF`1|wc&&SYkL;w!R=vP-)1AMp#Q=@M}7`I};TNA>8OiC_KjN>+A2gwzd>B1Q7tR8-5OKF7matwL=ub1eQ$a z1@QIj*8v*j13t`3-bRKx!Q&i{e=aXC&o3@6CObPj_Xhm*=~K3`v61P%!T_dCN7-j8 zJo05X4V@K$uJ!x6*1MSCYlrxE9NL-t^5qMO;4Rknr%)gU6wGjYd;1+MiB1Xtjh|u9 z{uqD!zT@Rv!~gpAYiQQ+x}X?#Q3(6s7J|aQ!PYYR2AvZC86SK2XW%dd8vcE3!`on! zlcVtV9WO0K1f3E%CtkjM zNrrv`(~hOd?KRT1LLxfj0lt0v_5&>Algq~rUJgs7ph-B_o`8Lr*a;7CdU|>Q4KzMM z*Fe`|758a`0tsln2hhFm4^}aSW_O@LpobdapVwv?3S*0VKB3hffX4cI=w+g?&3^+8 z16@AFBa~T20V?_qz(}hFK;d1mTt7zfwm64*p-_8IBN3~Z;uUX!k=6=;deZ1ZbF+-v zTIzvAL!ps~-5)?Nu*c~IHlU?oO{WPLvq<@L`e<%|`V43YdioCg3MWtlY}=__AHsA# zVd3ZDe8Lcig51qNCv0IdCgT18{< z1Uq7`nYl_LC@?;K_Isc6U0wjsW$6sIwFwxQPw>Y(^gR(fVk3ONYnbRIf)eAuq0a_? z#@6#bM>Ehm0Z=CnX5F}|8s`rcK}6$&4gk$G1GG35BGX0>F!LkP>Rbq*st95l-#GW9 zRU`sf1ooKi&e9kH@f87w@d^Ac=hpMb5Scc{0ql0N)-*2}5Jwf@m`@-P+&{L@t809M z_8OSa(VK|}SOorPnfV;sO$9Y6^8~HeM!e>;x+F`NhRW z6ajb`|Bh%Ppw+`xk%Gvyu@gAcZa#eYu=d!wY@A;wY`h5CYGxHFh)iJ|z}PT304ug0 z5gO)<*4NiR###%H*ZdvZ;`{M3&aM9eHSh`Yl*I{Z?)|f)n*Ty%oE|{0q5oU2s2Kns z^aY18*TTn)p7}=j>P{dP5i_b;gi`=TTc;R_xgo-i{Jnwzs)l!&L|{k$qHkWA6M$ne zMJh-H$8~${u30oaL+DLtY(J(5^fhNj(S&1(_?!T+E!%_TK^r0tpeFV#8oE+%FYx*E zXL|3*@tIyho>(Hl=6Bb6{ueOdY67B9I8=eY`043stz9u_@R3#Y+SjvShjdPWRU>>Q zA{c@v_L@fgPRGDNBZq<1`K;4FOmG)u^-z8NuLJ1A;7Kp$rv|DpcV!M z8P>?Y+bpngd zb^=RK5IKo+m2Bkrf0HKe5&;yW@EFt1;?N|LI@`$8n+j>@MF7o2!E`mwc#&to-|y}& zBQ&jCIpCC90MZBWBg11CkC9F~=|sOa)bDLvw9$nKpd#eXT`P=q96!m}JtiW605FO; z=LH;b{FOii5Jn%pzt#}NT^91%dr5dm}@5kSWg0dyP@K*tdQbQ}>t z#}NT^99b0F4aR!+ld@kB56}$;MZ2Fw0Nr6zZ$Y0y1kf$!vZE|>MG$R)u9e4ECBaXDE!vDBZ{9_vHARRS-G-`!b>0e|2>=7xW3O zbg?}^4%NwlH?eXC74F&FbV5VEMZ^?9=!K-ns-5(HKwN}Q_>>V-067F;+^d%huY2~c z0*;LxwdYx4^#RU9FGSy*c?3c!I_NVn%VI38kKzFww@DWw;|lu3SXv)L0He@*>IiBLKTL2RD;U`AOxA3!}9uo3pM&HXYGs|LDx>^E|+Ruv)`RS*NP>u8 zC<+=HDWsr}bu)_SOY1{DK*)vU(9Bz@WzfJ#VNuX0c9R<_fRGDm@_qCg7b%P#@+~4n z06`a$AmSHF<06F|A>SfG`T#iuAQ3-*=w?(_5!=%Gsvbbr_%oyLO8Uwweg{lc5`d(2 z;m5JY{{$=D2{2Jb0Fu^)nSzinTkR*j1t38mUaBT`h=p$_P(r>;(DH7Ksr2<+e`dax zqS8sO;D$nx)~f3(Ly%0N&EzPB@d=jzTCsj^g*n7t|1KoLB>)=gDG*XI!J(hRXyhTb o`G27CSN2x)f*=TjAgm7m0c+jcV}BDG{r~^~07*qoM6N<$f^~ny3jhEB literal 0 HcmV?d00001 diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index 1212ba0b..dea8054b 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -393,7 +393,6 @@ class AllRequestsProvider extends ChangeNotifier { } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; - print('state code is $stateCode'); if (response.statusCode >= 200 && response.statusCode < 300) { if (inProgressRequests == null) { inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); diff --git a/lib/dashboard_latest/dashboard_provider.dart b/lib/dashboard_latest/dashboard_provider.dart index 28082d88..090a8e6e 100644 --- a/lib/dashboard_latest/dashboard_provider.dart +++ b/lib/dashboard_latest/dashboard_provider.dart @@ -39,6 +39,12 @@ class DashBoardProvider extends ChangeNotifier { DD.DashboardDetail? get requestDetailList => _requestDetailList; + List tabs = []; + + void setTabs(UsersTypes userType, context) { + tabs = CategoryTabs.getTabs(userType: userType, context: context); + } + set requestDetailList(DD.DashboardDetail? value) { _requestDetailList = value; notifyListeners(); @@ -52,16 +58,30 @@ class DashBoardProvider extends ChangeNotifier { pageNum = 1; nextPage = true; 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 getDashBoardCount({required UsersTypes usersType}) async { isAllCountLoading = true; + notifyListeners(); String url = ''; - if (usersType == UsersTypes.engineer) { - url = URLs.engineerDashboardCountUrl; - } if (usersType == UsersTypes.nurse) { url = URLs.nurseDashboardCountUrl; + } else { + url = URLs.engineerDashboardCountUrl; } Response response; try { @@ -70,7 +90,32 @@ class DashBoardProvider extends ChangeNotifier { 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; + } + } + + Future getWorkOrderById(int id) async { + isLoading = true; + notifyListeners(); + Response response; + try { + response = await ApiManager.instance.get( + 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; @@ -82,48 +127,82 @@ class DashBoardProvider extends ChangeNotifier { } } - Future getRequestDetail({bool showLoader = true, required UsersTypes usersType, required int status}) async { - isDetailLoading = showLoader; + 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 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.engineer) { - url = URLs.engineerDashboardDetailsUrl; - } if (usersType == UsersTypes.nurse) { url = URLs.nurseDashboardDetailsUrl; + } else { + url = URLs.engineerDashboardDetailsUrl; } try { - Map body = { - "statusValue": status, - "pageNumber": pageNum, - "pageSize": pageItemNumber, - }; + Map body = {"pageNumber": pageNum, "pageSize": pageItemNumber}; + if (status != null) body["status"] = status; + if (isHighPriority) body["isHighPriority"] = true; + if (isOverdue) body["isOverdue"] = true; response = await ApiManager.instance.post(url, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - if (requestDetailList == null) { - requestDetailList = DD.DashboardDetail.fromJson(json.decode(response.body)); - isDetailLoading = false; - notifyListeners(); + if (_requestDetailList == null) { + _requestDetailList = DD.DashboardDetail.fromJson(json.decode(response.body)); + + //notifyListeners(); } else { - requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)["data"][0]).data??[]); - isDetailLoading = false; - notifyListeners(); + _requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)["data"][0]).data ?? []); + + //notifyListeners(); } - if (requestDetailList!.data!.length >= pageItemNumber) { + if (_requestDetailList!.data!.length >= pageItemNumber) { nextPage = true; } else { nextPage = false; } - notifyListeners(); + //notifyListeners(); } else { requestDetailList = null; } - isDetailLoading = false; + if (showLoader) { + isDetailLoading = false; + } notifyListeners(); return response.statusCode; } catch (error) { - isDetailLoading = false; + if (showLoader) { + isDetailLoading = false; + } stateCode = -1; notifyListeners(); return -1; @@ -137,3 +216,25 @@ class DashBoardProvider extends ChangeNotifier { notifyListeners(); } } + +class CategoryTabs { + String label; + int tag; + + CategoryTabs(this.label, this.tag); + + static List getTabs({required UsersTypes userType, required BuildContext context}) { + List 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; + } +} diff --git a/lib/dashboard_latest/dashboard_view.dart b/lib/dashboard_latest/dashboard_view.dart index f6fea02a..cfac3030 100644 --- a/lib/dashboard_latest/dashboard_view.dart +++ b/lib/dashboard_latest/dashboard_view.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -10,14 +9,13 @@ 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/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; 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/requests_fragment.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/service_request_latest/request_detail_provider.dart'; -import 'package:test_sa/utilities/request_utils.dart'; import 'widgets/request_category_fragment.dart'; @@ -40,6 +38,7 @@ class _DashboardViewState extends State { late AllRequestsProvider allRequestsProvider; late NotificationsProvider notificationsProvider; late ScrollController _scrollController; + late DashBoardProvider _dashBoardProvider; @override void initState() { @@ -48,18 +47,23 @@ class _DashboardViewState extends State { getInitialData(); } + void getRequests() { + _dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!); + _dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag); + } + void getInitialData() { scheduleMicrotask(() async { userProvider = Provider.of(context, listen: false); settingProvider = Provider.of(context, listen: false); RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); allRequestsProvider = Provider.of(context, listen: false); + _dashBoardProvider = Provider.of(context, listen: false); + _dashBoardProvider.setTabs(userProvider.user!.type!, context); notificationsProvider = Provider.of(context, listen: false); user = userProvider.user!; - log('user token i got is ${user.token}'); - - await getAllRequests(); - await requestDetailProvider.engineerRejectWorkOrder(id: '3', feedBack: 'Abcdef'); + getRequests(); + // await requestDetailProvider.engineerRejectWorkOrder(id: '3', feedBack: 'Abcdef'); if (isFCM) { FirebaseNotificationManger.initialized(context); @@ -72,21 +76,21 @@ class _DashboardViewState extends State { }); } - Future getAllRequests() async { - allRequestsProvider.isAllLoading = true; - allRequestsProvider.isFilterRequestLoading = true; - allRequestsProvider.currentListIndex = 0; - allRequestsProvider.filterRequest = null; - var tabs = RequestUtils.getTabs(userType: userProvider.user!.type!, context: context); - allRequestsProvider.status = tabs[0]['status']; - allRequestsProvider.getRequests(); - allRequestsProvider.pageNum = 1; - allRequestsProvider.getFilterRequests(showLoader: true, status: tabs[0]['status']).whenComplete(() { - allRequestsProvider.requestDetailList = allRequestsProvider.filterRequest; - }); - allRequestsProvider.isAllLoading = false; - notificationsProvider.getSystemNotifications(user: userProvider.user!, resetProvider: true); - } + // Future getAllRequests() async { + // allRequestsProvider.isAllLoading = true; + // allRequestsProvider.isFilterRequestLoading = true; + // allRequestsProvider.currentListIndex = 0; + // allRequestsProvider.filterRequest = null; + // var tabs = RequestUtils.getTabs(userType: userProvider.user!.type!, context: context); + // allRequestsProvider.status = tabs[0]['status']; + // allRequestsProvider.getRequests(); + // allRequestsProvider.pageNum = 1; + // allRequestsProvider.getFilterRequests(showLoader: true, status: tabs[0]['status']).whenComplete(() { + // allRequestsProvider.requestDetailList = allRequestsProvider.filterRequest; + // }); + // allRequestsProvider.isAllLoading = false; + // notificationsProvider.getSystemNotifications(user: userProvider.user!, resetProvider: true); + // } void handleScroll() async { _scrollController = ScrollController(); @@ -115,7 +119,7 @@ class _DashboardViewState extends State { )), body: RefreshIndicator( onRefresh: () async { - getInitialData(); + getRequests(); return Future.delayed(const Duration(milliseconds: 250)); }, child: Scrollbar( @@ -126,8 +130,8 @@ class _DashboardViewState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, - children: [14.height, ProgressFragment(), 25.height, SizedBox(height: 110.toScreenHeight, child: const RequestsFragment()), 16.height, const RequestCategoryFragment()], - ).paddingOnly(start: 16, end: 16, top: 0, bottom: 8), + children: [16.height, ProgressFragment(), const RequestsFragment(), const RequestCategoryFragment()], + ), ), ), ), diff --git a/lib/dashboard_latest/widgets/progress_fragment.dart b/lib/dashboard_latest/widgets/progress_fragment.dart index d7ef7f18..e1295bf0 100644 --- a/lib/dashboard_latest/widgets/progress_fragment.dart +++ b/lib/dashboard_latest/widgets/progress_fragment.dart @@ -153,7 +153,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.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/extensions/context_extension.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; @@ -170,20 +170,39 @@ class ProgressFragment extends StatelessWidget { @override Widget build(BuildContext context) { _userProvider = Provider.of(context); - bool isCurrentUserNotEngineer = (_userProvider.user!.type != UsersTypes.engineer); - return Consumer( + bool isCurrentUserIsNurse = (_userProvider.user!.type == UsersTypes.normal_user); + return Consumer( builder: (context, snapshot, _) { - int total = (snapshot.completedRequests?.total?.count ?? 0) + (snapshot.inProgressRequests?.total?.count ?? 0) + (isCurrentUserNotEngineer ? (snapshot.openRequests?.total?.count ?? 0) : 0); - - final List chartData = [ - ChartData('Completed', snapshot.completedRequests?.total?.count?.toDouble() ?? 0.0, AppColor.green50), - // 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 (isCurrentUserNotEngineer) { - chartData.insert(1, ChartData('Open', snapshot.openRequests?.total?.count?.toDouble() ?? 0.0, AppColor.blueStatus(context))); + int total = 0; + List chartData = []; + if (isCurrentUserIsNurse) { + total = (snapshot.dashboardCount?.data?.countComplete ?? 0) + (snapshot.dashboardCount?.data?.countInprogress ?? 0) + (snapshot.dashboardCount?.data?.countOpen ?? 0); + chartData = [ + 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), + ]; + } 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('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( children: [ @@ -205,20 +224,20 @@ class ProgressFragment extends StatelessWidget { series: [ DoughnutSeries( dataSource: chartData, - radius: "110%", + radius: "100%", innerRadius: "60%", pointColorMapper: (ChartData data, _) => data.color, xValueMapper: (ChartData data, _) => data.x, yValueMapper: (ChartData data, _) => data.y, dataLabelMapper: (ChartData data, _) => data.x, dataLabelSettings: DataLabelSettings( + margin: const EdgeInsets.all(8), 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, - //useSeriesColor: true, ), ) - ]).toShimmer(isShow: snapshot.isInProgressLoading || snapshot.isCompleteLoading || snapshot.isOpenLoading, radius: 250).paddingAll(12).toShadowContainer(context), + ]).toShimmer(isShow: snapshot.isAllCountLoading, radius: 250).paddingAll(0).toShadowContainer(context), Column( mainAxisSize: MainAxisSize.min, children: [ @@ -236,7 +255,7 @@ class ProgressFragment extends StatelessWidget { ), ), ], - ); + ).paddingOnly(start: 16, end: 16); }, ); } diff --git a/lib/dashboard_latest/widgets/request_category_fragment.dart b/lib/dashboard_latest/widgets/request_category_fragment.dart index 8576b8cb..4f3ffe72 100644 --- a/lib/dashboard_latest/widgets/request_category_fragment.dart +++ b/lib/dashboard_latest/widgets/request_category_fragment.dart @@ -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(context, listen: false); -// return Consumer(builder: (context, _notificationsProvider, _) { -// return RefreshIndicator( -// onRefresh: () { -// Provider.of(context, listen: false).getRequests(); -// _notificationsProvider.getSystemNotifications(user: Provider.of(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: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/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/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/new_models/dashboard_detail.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 { - const RequestCategoryFragment({ - Key? key, - }) : super(key: key); + const RequestCategoryFragment({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - return Consumer(builder: (context, allRequestProvider, child) { + return Consumer(builder: (context, dashboardProvider, child) { return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - context.translation.allRequests.heading4(context), - 16.height, + context.translation.allRequests.heading4(context).paddingOnly(start: 16, end: 16), getTabs( - requestsProvider: allRequestProvider, + requestsProvider: dashboardProvider, context: context, userType: Provider.of(context, listen: false).user!.type!, ), - 16.height, - allRequestProvider.isFilterRequestLoading || allRequestProvider.filterRequest == null + dashboardProvider.isDetailLoading || dashboardProvider.requestDetailList == null ? Column( mainAxisSize: MainAxisSize.max, children: List.generate(3, (index) { return Padding( padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0), - child: const SizedBox().toRequestShimmer(context, allRequestProvider.isFilterRequestLoading), + child: const SizedBox().toRequestShimmer(context, dashboardProvider.isDetailLoading), ); - })) - : RequestCategoryList(allRequestProvider.filterRequest?.requestsDetails ?? [], allRequestProvider.isFilterRequestLoading, allRequestProvider.filterRequest?.total?.count ?? 0), + })).paddingOnly(start: 16, end: 16, top: 16) + : RequestCategoryList(dashboardProvider.requestDetailList?.data ?? [], dashboardProvider.isDetailLoading, dashboardProvider.requestDetailList?.totalRows ?? 0), ]); }); } - Widget getTabs({required BuildContext context, required AllRequestsProvider requestsProvider, required UsersTypes userType}) { - List tabs = []; - switch (userType) { - case UsersTypes.engineer: - tabs = RequestUtils.getTabs(userType: UsersTypes.engineer, context: context); - return Row( - children: tabs.map((item) { - return tabWidget( - label: item['label'], - status: item['status'], - selectedTab: tabs.indexOf(item), - requestsProvider: requestsProvider, - ); - }).toList(), - ); - case UsersTypes.normal_user: - tabs = RequestUtils.getTabs(userType: UsersTypes.normal_user, context: context); - return Row( - children: tabs.map((item) { - return tabWidget( - label: item['label'], - status: item['status'], - selectedTab: tabs.indexOf(item), - requestsProvider: requestsProvider, + Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes userType}) { + List tabs = CategoryTabs.getTabs(userType: UsersTypes.engineer, context: context); + return SizedBox( + height: 44 + 16, + child: ListView.separated( + scrollDirection: Axis.horizontal, + separatorBuilder: (cxt, index) => 12.width, + padding: const EdgeInsets.only(top: 6 + 16, left: 16, right: 16), + itemBuilder: (cxt, index) { + return TabButton( + label: tabs[index].label, + loading: requestsProvider.isDetailLoading, + isSelected: requestsProvider.currentListIndex == index, + count: requestsProvider.requestDetailList != null ? requestsProvider.requestDetailList!.totalRows ?? 0 : 0, + onPressed: () async { + requestsProvider.currentListIndex = index; + requestsProvider.resetRequestDataList(); + requestsProvider.getRequestDetail(usersType: userType, showLoader: true, status: tabs[index].tag); + }, ); - }).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 _getTabButtonData({required bool isEngineer, required AllRequestsProvider allRequestsProvider, required int totalCount}) { -// List tabList = []; -// List> 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 _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(); -// } diff --git a/lib/dashboard_latest/widgets/request_category_list.dart b/lib/dashboard_latest/widgets/request_category_list.dart index 0dddf321..ceaa11c4 100644 --- a/lib/dashboard_latest/widgets/request_category_list.dart +++ b/lib/dashboard_latest/widgets/request_category_list.dart @@ -1,16 +1,14 @@ import 'package:flutter/material.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/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'; class RequestCategoryList extends StatelessWidget { - final List list; + final List list; final int totalCount; final bool isLoading; + const RequestCategoryList(this.list, this.isLoading, this.totalCount, {Key? key}) : super(key: key); @override @@ -18,7 +16,8 @@ class RequestCategoryList extends StatelessWidget { return ListView.builder( itemCount: list.length < totalCount ? list.length + 1 : list.length, shrinkWrap: true, - physics:const NeverScrollableScrollPhysics(), + padding: EdgeInsets.all(16), + physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { if (index == list.length) { return const ListTile( @@ -38,20 +37,20 @@ class RequestCategoryList extends StatelessWidget { ); } - Widget _buildRequestItem(RequestsDetails request) { - bool isServiceRequest = request.nameOfType == "ServiceRequest"; - bool isGasRefill = request.nameOfType == "GasRefill"; - bool isAssetTransfer = request.nameOfType == "AssetTransfer"; - bool isPPMs = request.nameOfType == "PPMs"; + Widget _buildRequestItem(Data request) { + bool isServiceRequest = request.transactionNo == 1; + bool isGasRefill = request.transactionNo == 2; + bool isAssetTransfer = request.transactionNo == 3; + bool isPPMs = request.transactionNo == 4; if (isServiceRequest) { return ServiceRequestItemView(request); - } else if (isGasRefill) { - return GasRefillItemView(request); - } else if (isPPMs) { - return PpmItemView(request); - } else if (isAssetTransfer) { - return AssetItemView(request); + // } else if (isGasRefill) { + // return GasRefillItemView(request); + // } else if (isPPMs) { + // return PpmItemView(request); + // } else if (isAssetTransfer) { + // return AssetItemView(request); } else { return Container( 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])); -// // } -// })); diff --git a/lib/dashboard_latest/widgets/requests_fragment.dart b/lib/dashboard_latest/widgets/requests_fragment.dart index e24fafeb..1e8e37f4 100644 --- a/lib/dashboard_latest/widgets/requests_fragment.dart +++ b/lib/dashboard_latest/widgets/requests_fragment.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.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/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; @@ -17,72 +17,57 @@ class RequestsFragment extends StatelessWidget { @override Widget build(BuildContext context) { - return Consumer( + return Consumer( builder: (context, snapshot, _) => GridView( - // padding: const EdgeInsets.only( bottom: 16), + padding: const EdgeInsets.only(top: 16, left: 16, right: 16), physics: const NeverScrollableScrollPhysics(), 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: [ listItem( - snapshot.highPriorityRequests?.total?.count ?? 0, + snapshot.dashboardCount?.data?.countHighPriority ?? 0, "high_priority", context.translation.highPriority, context, - snapshot.isHighPriorityLoading, + snapshot.isAllCountLoading, 0, - context.isDark ? AppColor.redStatus(context) : AppColor.red50, + context.isDark ? AppColor.redStatus(context) : AppColor.red30, ), - listItem(snapshot.overdueRequests?.total?.count ?? 0, "overdue", context.translation.overdue, context, snapshot.isOverdueLoading, 1, AppColor.yellowIcon(context)), - listItem(snapshot.openRequests?.total?.count ?? 0, "new_request", ApiManager.instance.user!.type == UsersTypes.engineer ? context.translation.inProgress : context.translation.newR, context, - snapshot.isOpenLoading, 2, AppColor.primary40), - listItem(snapshot.completedRequests?.total?.count ?? 0, "complete_request", context.translation.completed, context, snapshot.isCompleteLoading, 3, AppColor.greenStatus(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, snapshot.isAllCountLoading, 2, AppColor.primary10), + listItem(snapshot.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, snapshot.isAllCountLoading, 3, AppColor.greenStatus(context)), ], ), ); } - Widget listItem( - int value, - String icon, - String title, - BuildContext context, - bool isLoading, - int index, - Color iconColor, - ) { + Widget listItem(int value, String icon, String title, BuildContext context, bool isLoading, int index, Color iconColor) { return GestureDetector( onTap: isLoading ? null : () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => RequestsListPage(index, title), - ), - ); + Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index, title))); }, child: Column( crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, children: [ - value > 0 && !isLoading - ? CustomBadge( - value: value.toString(), - child: Container( - child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), - ).toShadowCircleContainer(context, padding: 18), - ) - : Container( - child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), - ).toShadowCircleContainer(context, padding: 18), + 8.height, + CustomBadge( + value: isLoading ? 0 : value, + child: Container( + child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), + ).toShadowCircleContainer(context, padding: 17), + ), 10.height, Text( title, + textAlign: TextAlign.center, style: AppTextStyles.tinyFont.copyWith( - color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, + color: context.isDark ? AppColor.neutral30 : AppColor.black20, ), - ), + ).toShimmer(isShow: isLoading), ], ), ); diff --git a/lib/models/new_models/dashboard_detail.dart b/lib/models/new_models/dashboard_detail.dart index 36126766..aa507823 100644 --- a/lib/models/new_models/dashboard_detail.dart +++ b/lib/models/new_models/dashboard_detail.dart @@ -50,8 +50,9 @@ class Data { String? assetNumber; String? requestTypeName; 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 json) { id = json['id']; @@ -64,6 +65,7 @@ class Data { assetNumber = json['assetNumber']; requestTypeName = json['requestTypeName']; requestNo = json['requestNo']; + transactionNo = json['transactionNo']; } Map toJson() { @@ -78,6 +80,7 @@ class Data { data['assetNumber'] = assetNumber; data['requestTypeName'] = requestTypeName; data['requestNo'] = requestNo; + data['transactionNo'] = transactionNo; return data; } } diff --git a/lib/models/new_models/workOrderDetail.dart b/lib/models/new_models/workOrderDetail.dart deleted file mode 100644 index f17c3d78..00000000 --- a/lib/models/new_models/workOrderDetail.dart +++ /dev/null @@ -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 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 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; - EquipmentStatus? equipmentStatus; - Priority? priority; - RequestedThrough? requestedThrough; - TypeOfRequest? typeofRequest; - dynamic loanAvailablity; - dynamic assetLoan; - dynamic safety; - ProblemDescription? problemDescription; - String? comments; - String? voiceNote; - List? workOrderAttachments; - dynamic returnToService; - dynamic serviceType; - dynamic failureReasone; - dynamic solution; - dynamic totalWorkingHours; - List? workOrderHistory; - List? activityMaintenances; - List? activitySpareParts; - List? 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 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 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 json) { - return WorkOrderCreatedBy(id: json['id'], userName: json['userName']); - } - - Map toJson() { - return {'id': id, 'userName': userName}; - } -} - -class Asset { - int? id; - String? assetNumber; - - Asset({this.id, this.assetNumber}); - - factory Asset.fromJson(Map json) { - return Asset(id: json['id'], assetNumber: json['assetNumber']); - } - - Map 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 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 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 json) { - return ContactUser(id: json['id'], userName: json['userName']); - } - - Map toJson() { - return {'id': id, 'userName': userName}; - } -} - -class AssignedEmployee { - String? id; - String? userName; - - AssignedEmployee({this.id, this.userName}); - - factory AssignedEmployee.fromJson(Map json) { - return AssignedEmployee(id: json['id'], userName: json['userName']); - } - - Map toJson() { - return {'id': id, 'userName': userName}; - } -} - -class Site { - int? id; - String? siteName; - - Site({this.id, this.siteName}); - - factory Site.fromJson(Map json) { - return Site(id: json['id'], siteName: json['siteName']); - } - - Map toJson() { - return {'id': id, 'siteName': siteName}; - } -} - -/// - -// class AssetGroup { -// int id; -// String name; -// -// AssetGroup({this.id, this.name}); -// -// factory AssetGroup.fromJson(Map json) { -// return AssetGroup( -// id: json['id'], -// name: json['name'], -// ); -// } -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// }; -// } -// -// } -// -// class Manufacturer { -// int id; -// String name; -// -// Manufacturer({this.id, this.name}); -// -// factory Manufacturer.fromJson(Map json) { -// return Manufacturer( -// id: json['id'], -// name: json['name'], -// ); -// } -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// }; -// } -// } -// -// class Model { -// int id; -// String name; -// -// Model({this.id, this.name}); -// -// factory Model.fromJson(Map json) { -// return Model( -// id: json['id'], -// name: json['name'], -// ); -// } -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// }; -// } -// } -// -// class AssetNDModel { -// int id; -// String name; -// -// AssetNDModel({this.id, this.name}); -// -// factory AssetNDModel.fromJson(Map json) { -// return AssetNDModel( -// id: json['id'], -// name: json['name'], -// ); -// } -// Map 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 json) { -// return Building( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// Map 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 json) { -// return Floor( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// 'value': value, -// }; -// } -// } -// -// class Department { -// int id; -// String name; -// -// Department({this.id, this.name}); -// -// factory Department.fromJson(Map json) { -// return Department( -// id: json['id'], -// name: json['name'], -// ); -// } -// Map 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 json) { -// return AssetType( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// Map 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 json) { -// return Status( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// Map 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 json) { -// return NextStep( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// Map 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 json) { - return EquipmentStatus(id: json['id'], name: json['name'], value: json['value']); - } - - Map 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 json) { - return Priority(id: json['id'], name: json['name'], value: json['value']); - } - - Map toJson() { - return {'id': id, 'name': name, 'value': value}; - } -} - -class RequestedThrough { - int? id; - String? name; - - RequestedThrough({this.id, this.name}); - - factory RequestedThrough.fromJson(Map json) { - return RequestedThrough(id: json['id'], name: json['name']); - } - - Map toJson() { - return {'id': id, 'name': name}; - } -} - -class TypeOfRequest { - int? id; - String? name; - - TypeOfRequest({this.id, this.name}); - - factory TypeOfRequest.fromJson(Map json) { - return TypeOfRequest(id: json['id'], name: json['name']); - } - - Map toJson() { - return {'id': id, 'name': name}; - } -} - -class ProblemDescription { - int? id; - String? name; - - ProblemDescription({this.id, this.name}); - - factory ProblemDescription.fromJson(Map json) { - return ProblemDescription(id: json['id'], name: json['name']); - } - - Map 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 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 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 json) { -// return WorkOrderStatus( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// 'value': value, -// }; -// } -// } - -class HistoryUser { - String? id; - String? userName; - - HistoryUser({this.id, this.userName}); - - factory HistoryUser.fromJson(Map json) { - return HistoryUser(id: json['id'], userName: json['userName']); - } - - Map 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 json) { -// return Step( -// id: json['id'], -// name: json['name'], -// value: json['value'], -// ); -// } -// -// Map toJson() { -// return { -// 'id': id, -// 'name': name, -// 'value': value, -// }; -// } -// } diff --git a/lib/models/new_models/workOrderDetail_temp_delet.dart b/lib/models/new_models/workOrderDetail_temp_delet.dart new file mode 100644 index 00000000..b5b1a570 --- /dev/null +++ b/lib/models/new_models/workOrderDetail_temp_delet.dart @@ -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 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 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; +// EquipmentStatus? equipmentStatus; +// Priority? priority; +// RequestedThrough? requestedThrough; +// TypeOfRequest? typeofRequest; +// dynamic loanAvailablity; +// dynamic assetLoan; +// dynamic safety; +// ProblemDescription? problemDescription; +// String? comments; +// String? voiceNote; +// List? workOrderAttachments; +// dynamic returnToService; +// dynamic serviceType; +// dynamic failureReasone; +// dynamic solution; +// dynamic totalWorkingHours; +// List? workOrderHistory; +// List? activityMaintenances; +// List? activitySpareParts; +// List? 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 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 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 json) { +// return WorkOrderCreatedBy(id: json['id'], userName: json['userName']); +// } +// +// Map toJson() { +// return {'id': id, 'userName': userName}; +// } +// } +// +// class Asset { +// int? id; +// String? assetNumber; +// +// Asset({this.id, this.assetNumber}); +// +// factory Asset.fromJson(Map json) { +// return Asset(id: json['id'], assetNumber: json['assetNumber']); +// } +// +// Map 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 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 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 json) { +// return ContactUser(id: json['id'], userName: json['userName']); +// } +// +// Map toJson() { +// return {'id': id, 'userName': userName}; +// } +// } +// +// class AssignedEmployee { +// String? id; +// String? userName; +// +// AssignedEmployee({this.id, this.userName}); +// +// factory AssignedEmployee.fromJson(Map json) { +// return AssignedEmployee(id: json['id'], userName: json['userName']); +// } +// +// Map toJson() { +// return {'id': id, 'userName': userName}; +// } +// } +// +// class Site { +// int? id; +// String? siteName; +// +// Site({this.id, this.siteName}); +// +// factory Site.fromJson(Map json) { +// return Site(id: json['id'], siteName: json['siteName']); +// } +// +// Map toJson() { +// return {'id': id, 'siteName': siteName}; +// } +// } +// +// /// +// +// // class AssetGroup { +// // int id; +// // String name; +// // +// // AssetGroup({this.id, this.name}); +// // +// // factory AssetGroup.fromJson(Map json) { +// // return AssetGroup( +// // id: json['id'], +// // name: json['name'], +// // ); +// // } +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // }; +// // } +// // +// // } +// // +// // class Manufacturer { +// // int id; +// // String name; +// // +// // Manufacturer({this.id, this.name}); +// // +// // factory Manufacturer.fromJson(Map json) { +// // return Manufacturer( +// // id: json['id'], +// // name: json['name'], +// // ); +// // } +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // }; +// // } +// // } +// // +// // class Model { +// // int id; +// // String name; +// // +// // Model({this.id, this.name}); +// // +// // factory Model.fromJson(Map json) { +// // return Model( +// // id: json['id'], +// // name: json['name'], +// // ); +// // } +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // }; +// // } +// // } +// // +// // class AssetNDModel { +// // int id; +// // String name; +// // +// // AssetNDModel({this.id, this.name}); +// // +// // factory AssetNDModel.fromJson(Map json) { +// // return AssetNDModel( +// // id: json['id'], +// // name: json['name'], +// // ); +// // } +// // Map 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 json) { +// // return Building( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // Map 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 json) { +// // return Floor( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // 'value': value, +// // }; +// // } +// // } +// // +// // class Department { +// // int id; +// // String name; +// // +// // Department({this.id, this.name}); +// // +// // factory Department.fromJson(Map json) { +// // return Department( +// // id: json['id'], +// // name: json['name'], +// // ); +// // } +// // Map 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 json) { +// // return AssetType( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // Map 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 json) { +// // return Status( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // Map 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 json) { +// // return NextStep( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // Map 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 json) { +// return EquipmentStatus(id: json['id'], name: json['name'], value: json['value']); +// } +// +// Map 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 json) { +// return Priority(id: json['id'], name: json['name'], value: json['value']); +// } +// +// Map toJson() { +// return {'id': id, 'name': name, 'value': value}; +// } +// } +// +// class RequestedThrough { +// int? id; +// String? name; +// +// RequestedThrough({this.id, this.name}); +// +// factory RequestedThrough.fromJson(Map json) { +// return RequestedThrough(id: json['id'], name: json['name']); +// } +// +// Map toJson() { +// return {'id': id, 'name': name}; +// } +// } +// +// class TypeOfRequest { +// int? id; +// String? name; +// +// TypeOfRequest({this.id, this.name}); +// +// factory TypeOfRequest.fromJson(Map json) { +// return TypeOfRequest(id: json['id'], name: json['name']); +// } +// +// Map toJson() { +// return {'id': id, 'name': name}; +// } +// } +// +// class ProblemDescription { +// int? id; +// String? name; +// +// ProblemDescription({this.id, this.name}); +// +// factory ProblemDescription.fromJson(Map json) { +// return ProblemDescription(id: json['id'], name: json['name']); +// } +// +// Map 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 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 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 json) { +// // return WorkOrderStatus( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // 'value': value, +// // }; +// // } +// // } +// +// class HistoryUser { +// String? id; +// String? userName; +// +// HistoryUser({this.id, this.userName}); +// +// factory HistoryUser.fromJson(Map json) { +// return HistoryUser(id: json['id'], userName: json['userName']); +// } +// +// Map 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 json) { +// // return Step( +// // id: json['id'], +// // name: json['name'], +// // value: json['value'], +// // ); +// // } +// // +// // Map toJson() { +// // return { +// // 'id': id, +// // 'name': name, +// // 'value': value, +// // }; +// // } +// // } diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart new file mode 100644 index 00000000..5a50a960 --- /dev/null +++ b/lib/models/new_models/work_order_detail_model.dart @@ -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 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 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; + 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 workOrderAttachments; + final String? returnToService; + final Lookup? serviceType; + final Lookup? failureReasone; + final Lookup? solution; + final String? totalWorkingHours; + final List workOrderHistory; + final List activities; + final List activityAssetToBeRetireds; + + factory WorkOrderData.fromJson(Map 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.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.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.from(json["workOrderHistory"]!.map((x) => WorkOrderHistory.fromJson(x))), + activities: json["activities"] == null ? [] : List.from(json["activities"]!.map((x) => x)), + activityAssetToBeRetireds: json["activityAssetToBeRetireds"] == null ? [] : List.from(json["activityAssetToBeRetireds"]!.map((x) => x)), + ); + } + + Map 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 json) { + return Asset( + id: json["id"], + assetNumber: json["assetNumber"], + ); + } + + Map toJson() => + { + "id": id, + "assetNumber": assetNumber, + }; +} + +class AssetGroup { + AssetGroup({ + required this.id, + required this.name, + }); + + final int? id; + final String? name; + + factory AssetGroup.fromJson(Map json) { + return AssetGroup( + id: json["id"], + name: json["name"], + ); + } + + Map 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 json) { + return AssignedEmployee( + userId: json["userId"], + userName: json["userName"], + email: json["email"], + languageId: json["languageId"], + ); + } + + Map 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 json) { + return Site( + id: json["id"], + siteName: json["siteName"], + ); + } + + Map 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 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 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 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 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(), + }; +} diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart index 9b9d23a3..6904f7a4 100644 --- a/lib/new_views/app_style/app_color.dart +++ b/lib/new_views/app_style/app_color.dart @@ -40,10 +40,12 @@ class AppColor { static const Color white40 = Color(0xffE4EBEE); static const Color white50 = Color(0xffECECEC); static const Color white60 = Color(0xffEFEFEF); + static const Color white936 = Color(0xff212936); //black static const Color black10 = Color(0xff3B3D4A); static const Color black20 = Color(0xff212936); + static const Color black35 = Color(0xff222A36); //red static const Color red30 = Color(0xffF63939); @@ -58,6 +60,7 @@ class AppColor { static const Color green60 = Color(0xff065E38); static const Color green70 = Color(0xff54C166); + //orange static const Color orange30 = Color(0xffFDE19B); static const Color orange40 = Color(0xffFFEDBC); @@ -66,10 +69,10 @@ class AppColor { 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(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 : primary10; + static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary90; static Color redStatus(BuildContext context) => context.isDark ? const Color(0xffFFB6B8) : red30; diff --git a/lib/new_views/common_widgets/custom_badge.dart b/lib/new_views/common_widgets/custom_badge.dart index ccfe2a10..6970afd5 100644 --- a/lib/new_views/common_widgets/custom_badge.dart +++ b/lib/new_views/common_widgets/custom_badge.dart @@ -3,14 +3,14 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; class CustomBadge extends StatelessWidget { 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. const CustomBadge({ Key? key, required this.child, required this.value, - this.color =AppColor.red30, // Default color is red + this.color = AppColor.red30, // Default color is red }) : super(key: key); @override @@ -19,27 +19,23 @@ class CustomBadge extends StatelessWidget { clipBehavior: Clip.none, // Allows the badge to overflow its container. children: [ child, // The main widget - Positioned( - right: -6, - top: -6, - child: Container( - padding: const EdgeInsets.all(6), - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, // Makes the badge circular - ), - child: Text( - value, - style: const TextStyle( - color: AppColor.white10, - fontFamily: 'Poppins', - fontSize: 10, - fontWeight: FontWeight.w700, + if (value > 0) + Positioned( + right: -6, + top: -6, + child: Container( + height: 23, + constraints: const BoxConstraints(minWidth: 23), + padding: const EdgeInsets.all(3), + alignment: Alignment.center, + decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(30)), + child: Text( + value.toString(), + style: const TextStyle(color: AppColor.white10, fontFamily: 'Poppins', fontSize: 10, fontWeight: FontWeight.w700), ), ), ), - ), ], ); } -} \ No newline at end of file +} diff --git a/lib/new_views/common_widgets/tab_button.dart b/lib/new_views/common_widgets/tab_button.dart index f3f8986d..1203029f 100644 --- a/lib/new_views/common_widgets/tab_button.dart +++ b/lib/new_views/common_widgets/tab_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.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/common_widgets/custom_badge.dart'; @@ -10,66 +11,34 @@ class TabButton extends StatelessWidget { final bool loading; final VoidCallback onPressed; - const TabButton({ - Key? key, - required this.label, - this.isSelected = false, - required this.count, - this.loading = false, - required this.onPressed, - }) : super(key: key); + const TabButton({Key? key, required this.label, this.isSelected = false, required this.count, this.loading = false, required this.onPressed}) : super(key: key); @override Widget build(BuildContext context) { return InkWell( onTap: onPressed, - child: count > 0 && isSelected && !loading - ? CustomBadge( - value: count.toString(), - child: 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: Colors.white54, width: 1) : null, - ), - child: Center( - child: Text( - label, - style: AppTextStyles.bodyText.copyWith( - color: isSelected ? Colors.white : Colors.black, - ), - )), - )) - : 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, - ), - )), + child: CustomBadge( + value: loading + ? 0 + : !isSelected + ? 0 + : count, + child: 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.white936.withOpacity(.03), width: 1) : null, + ), + alignment: Alignment.center, + child: Text( + label, + style: AppTextStyles.bodyText2.copyWith( + color: isSelected ? Colors.white : AppColor.black35, ), - ); + ), + ), + ), + ).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, - }); -} diff --git a/lib/new_views/pages/land_page/calendar_page.dart b/lib/new_views/pages/land_page/calendar_page.dart index 1a2c9cd2..f3ca7eec 100644 --- a/lib/new_views/pages/land_page/calendar_page.dart +++ b/lib/new_views/pages/land_page/calendar_page.dart @@ -1,87 +1,87 @@ -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/extensions/widget_extensions.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/weekly_fragment.dart'; - -import 'calender_fragments/monthly_fragment.dart'; - -class CalendarPage extends StatefulWidget { - const CalendarPage({Key? key}) : super(key: key); - - @override - State createState() => _CalendarPageState(); -} - -class _CalendarPageState extends State with SingleTickerProviderStateMixin { - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(length: 3, vsync: this) - ..addListener(() { - setState(() {}); - }); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - body: SafeArea( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // todo @sikander, hiding My shift view, later when they add data, then will us it. - // SizedBox( - // width: double.infinity, - // child: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // context.translation.myShift.heading5(context), - // 8.height, - // context.translation.sunToThurs.bodyText(context), - // "09:00 to 18:00".bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), - // ], - // ).toShadowContainer(context), - // ).paddingOnly(start: 16, end: 16), - 16.height, - Container( - margin: const EdgeInsets.only(left: 16, right: 16), - decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)), - child: TabBar( - controller: _tabController, - padding: EdgeInsets.zero, - labelColor: context.isDark ? AppColor.neutral30 : AppColor.neutral60, - unselectedLabelColor: context.isDark ? AppColor.neutral10 : AppColor.neutral20, - unselectedLabelStyle: AppTextStyles.bodyText, - labelStyle: AppTextStyles.bodyText, - indicatorPadding: const EdgeInsets.all(4), - indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), - tabs: [ - Tab(text: context.translation.monthly, height: 57.toScreenHeight), - Tab(text: context.translation.weekly, height: 57.toScreenHeight), - Tab(text: context.translation.daily, height: 57.toScreenHeight), - ], - ), - ), - 8.height, - TabBarView( - //physics: const NeverScrollableScrollPhysics(), - controller: _tabController, - children: const [ - MonthlyFragment(), - WeeklyFragment(), - DailyFragment(), - ], - ).expanded, - ], - ), - ), - ); - } -} +// 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/extensions/widget_extensions.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/weekly_fragment.dart'; +// +// import 'calender_fragments/monthly_fragment.dart'; +// todo delete +// class CalendarPage extends StatefulWidget { +// const CalendarPage({Key? key}) : super(key: key); +// +// @override +// State createState() => _CalendarPageState(); +// } +// +// class _CalendarPageState extends State with SingleTickerProviderStateMixin { +// late TabController _tabController; +// +// @override +// void initState() { +// super.initState(); +// _tabController = TabController(length: 3, vsync: this) +// ..addListener(() { +// setState(() {}); +// }); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// body: SafeArea( +// child: Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// // todo @sikander, hiding My shift view, later when they add data, then will us it. +// // SizedBox( +// // width: double.infinity, +// // child: Column( +// // crossAxisAlignment: CrossAxisAlignment.start, +// // children: [ +// // context.translation.myShift.heading5(context), +// // 8.height, +// // context.translation.sunToThurs.bodyText(context), +// // "09:00 to 18:00".bodyText(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), +// // ], +// // ).toShadowContainer(context), +// // ).paddingOnly(start: 16, end: 16), +// 16.height, +// Container( +// margin: const EdgeInsets.only(left: 16, right: 16), +// decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)), +// child: TabBar( +// controller: _tabController, +// padding: EdgeInsets.zero, +// labelColor: context.isDark ? AppColor.neutral30 : AppColor.neutral60, +// unselectedLabelColor: context.isDark ? AppColor.neutral10 : AppColor.neutral20, +// unselectedLabelStyle: AppTextStyles.bodyText, +// labelStyle: AppTextStyles.bodyText, +// indicatorPadding: const EdgeInsets.all(4), +// indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), +// tabs: [ +// Tab(text: context.translation.monthly, height: 57.toScreenHeight), +// Tab(text: context.translation.weekly, height: 57.toScreenHeight), +// Tab(text: context.translation.daily, height: 57.toScreenHeight), +// ], +// ), +// ), +// 8.height, +// TabBarView( +// //physics: const NeverScrollableScrollPhysics(), +// controller: _tabController, +// children: const [ +// MonthlyFragment(), +// WeeklyFragment(), +// DailyFragment(), +// ], +// ).expanded, +// ], +// ), +// ), +// ); +// } +// } diff --git a/lib/new_views/pages/land_page/calender_fragments/daily_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/daily_fragment.dart index 3f0777f8..7d3d826d 100644 --- a/lib/new_views/pages/land_page/calender_fragments/daily_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/daily_fragment.dart @@ -1,82 +1,82 @@ -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; -import 'package:test_sa/extensions/text_extensions.dart'; -import 'package:test_sa/extensions/widget_extensions.dart'; - -import '../../../../controllers/providers/api/all_requests_provider.dart'; -import '../../../app_style/app_color.dart'; -import '../requests/asset_item_view.dart'; -import '../requests/gas_refill_item_view.dart'; -import '../requests/ppm_item_view.dart'; -import '../requests/service_request_item_view.dart'; - -class DailyFragment extends StatefulWidget { - const DailyFragment({Key? key}) : super(key: key); - - @override - _DailyFragmentState createState() { - return _DailyFragmentState(); - } -} - -class _DailyFragmentState extends State { - @override - void initState() { - super.initState(); - Provider.of(context, listen: false).getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day)); - } - - @override - Widget build(BuildContext context) { - return SingleChildScrollView( - padding: const EdgeInsets.only(left: 16, right: 16), - child: Consumer(builder: (context, snapshot, _) { - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(DateTime.now()).heading5(context), - const Divider().defaultStyle(context), - if (snapshot.calendarRequests?.requestsDetails?.isEmpty ?? true) - Center( - child: context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), - ).paddingOnly(top: 16, bottom: 16), - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (cxt, index) { - final list = snapshot.calendarRequests!.requestsDetails!; - if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); - bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; - bool isGasRefill = list[index].nameOfType == "GasRefill"; - bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; - bool isPPMs = list[index].nameOfType == "PPMs"; - - return isServiceRequest - ? ServiceRequestItemView(list[index]) - : isGasRefill - ? GasRefillItemView(list[index]) - : isPPMs - ? PpmItemView(list[index]) - : isAssetTransfer - ? AssetItemView(list[index]) - : Container( - height: 100, - width: double.infinity, - color: Colors.grey, - ); - }, - separatorBuilder: (cxt, index) => 8.height, - itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, - ), - ], - ).toShadowContainer(context); - }), - ); - } - - BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); -} +// import 'package:flutter/material.dart'; +// import 'package:intl/intl.dart'; +// import 'package:provider/provider.dart'; +// import 'package:test_sa/extensions/context_extension.dart'; +// import 'package:test_sa/extensions/int_extensions.dart'; +// import 'package:test_sa/extensions/text_extensions.dart'; +// import 'package:test_sa/extensions/widget_extensions.dart'; +// +// import '../../../../controllers/providers/api/all_requests_provider.dart'; +// import '../../../app_style/app_color.dart'; +// import '../requests/asset_item_view.dart'; +// import '../requests/gas_refill_item_view.dart'; +// import '../requests/ppm_item_view.dart'; +// import '../requests/service_request_item_view.dart'; +// todo delete +// class DailyFragment extends StatefulWidget { +// const DailyFragment({Key? key}) : super(key: key); +// +// @override +// _DailyFragmentState createState() { +// return _DailyFragmentState(); +// } +// } +// +// class _DailyFragmentState extends State { +// @override +// void initState() { +// super.initState(); +// Provider.of(context, listen: false).getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day)); +// } +// +// @override +// Widget build(BuildContext context) { +// return SingleChildScrollView( +// padding: const EdgeInsets.only(left: 16, right: 16), +// child: Consumer(builder: (context, snapshot, _) { +// return Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.stretch, +// children: [ +// DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(DateTime.now()).heading5(context), +// const Divider().defaultStyle(context), +// if (snapshot.calendarRequests?.requestsDetails?.isEmpty ?? true) +// Center( +// child: context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), +// ).paddingOnly(top: 16, bottom: 16), +// ListView.separated( +// shrinkWrap: true, +// physics: const NeverScrollableScrollPhysics(), +// itemBuilder: (cxt, index) { +// final list = snapshot.calendarRequests!.requestsDetails!; +// if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); +// bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; +// bool isGasRefill = list[index].nameOfType == "GasRefill"; +// bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; +// bool isPPMs = list[index].nameOfType == "PPMs"; +// +// return isServiceRequest +// ? ServiceRequestItemView(list[index]) +// : isGasRefill +// ? GasRefillItemView(list[index]) +// : isPPMs +// ? PpmItemView(list[index]) +// : isAssetTransfer +// ? AssetItemView(list[index]) +// : Container( +// height: 100, +// width: double.infinity, +// color: Colors.grey, +// ); +// }, +// separatorBuilder: (cxt, index) => 8.height, +// itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, +// ), +// ], +// ).toShadowContainer(context); +// }), +// ); +// } +// +// BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); +// } diff --git a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart index 0c6ad5b0..1dce8d0d 100644 --- a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart @@ -1,143 +1,143 @@ -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; -import 'package:table_calendar/table_calendar.dart'; -import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; -import 'package:test_sa/extensions/text_extensions.dart'; -import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/new_views/app_style/app_color.dart'; - -import '../../../../controllers/providers/api/all_requests_provider.dart'; -import '../requests/asset_item_view.dart'; -import '../requests/gas_refill_item_view.dart'; -import '../requests/ppm_item_view.dart'; -import '../requests/service_request_item_view.dart'; -import 'calender_days_card.dart'; - -class WeeklyFragment extends StatefulWidget { - const WeeklyFragment({Key? key}) : super(key: key); - - @override - _WeeklyFragmentState createState() { - return _WeeklyFragmentState(); - } -} - -class _WeeklyFragmentState extends State { - late DateTime _initialDate, _firstDate, _lastDate; - - @override - void initState() { - super.initState(); - _initialDate = DateTime.now(); - _firstDate = DateTime.utc(2010, 10, 16); - _lastDate = DateTime.utc(2030, 3, 14); - Provider.of(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))); - } - - @override - Widget build(BuildContext context) { - return SingleChildScrollView( - padding: const EdgeInsets.only(left: 16, right: 16), - child: Consumer(builder: (context, snapshot, _) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - TableCalendar( - firstDay: _firstDate, - lastDay: _lastDate, - focusedDay: _initialDate, - calendarFormat: CalendarFormat.week, - weekendDays: const [], - onCalendarCreated: (controller) {}, - onPageChanged: (date) { - if (!snapshot.isCalendarLoading) { - _initialDate = date; - - Provider.of(context, listen: false) - .getCalendarRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1))); - } - }, - calendarBuilders: CalendarBuilders( - headerTitleBuilder: (context, dateTime) => Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(dateTime).heading5(context), - 8.height, - const Divider().defaultStyle(context), - ], - ), - dowBuilder: (context, dateTime) { - 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)); - }, - defaultBuilder: (context, dateTime, _) { - final day = DateFormat("d").format(dateTime); - return CalendarDaysCard( - day: day, - fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( - (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), - orElse: null, - ) != - null, - ).toShimmer(isShow: snapshot.isCalendarLoading); - }, - outsideBuilder: (context, dateTime, _) { - final day = DateFormat("d").format(dateTime); - return CalendarDaysCard( - day: day, - fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( - (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), - orElse: null, - ) != - null, - ).toShimmer(isShow: snapshot.isCalendarLoading); - }, - ), - daysOfWeekHeight: 35.toScreenHeight, - headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false), - calendarStyle: CalendarStyle( - isTodayHighlighted: false, - defaultTextStyle: AppTextStyles.bodyText, - defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), - ), - ), - if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context), - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (cxt, index) { - final list = snapshot.calendarRequests!.requestsDetails!; - if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); - bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; - bool isGasRefill = list[index].nameOfType == "GasRefill"; - bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; - bool isPPMs = list[index].nameOfType == "PPMs"; - - return isServiceRequest - ? ServiceRequestItemView(list[index], showShadow: false) - : isGasRefill - ? GasRefillItemView(list[index], showShadow: false) - : isPPMs - ? PpmItemView(list[index], showShadow: false) - : isAssetTransfer - ? AssetItemView(list[index], showShadow: false) - : Container( - height: 100, - width: double.infinity, - color: Colors.grey, - ); - }, - separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), - itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, - ), - ], - ).toShadowContainer(context); - }), - ); - } - - BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); -} +// import 'package:flutter/material.dart'; +// import 'package:intl/intl.dart'; +// import 'package:provider/provider.dart'; +// import 'package:table_calendar/table_calendar.dart'; +// import 'package:test_sa/extensions/context_extension.dart'; +// import 'package:test_sa/extensions/int_extensions.dart'; +// import 'package:test_sa/extensions/text_extensions.dart'; +// import 'package:test_sa/extensions/widget_extensions.dart'; +// import 'package:test_sa/new_views/app_style/app_color.dart'; +// todo delete +// import '../../../../controllers/providers/api/all_requests_provider.dart'; +// import '../requests/asset_item_view.dart'; +// import '../requests/gas_refill_item_view.dart'; +// import '../requests/ppm_item_view.dart'; +// import '../requests/service_request_item_view.dart'; +// import 'calender_days_card.dart'; +// +// class WeeklyFragment extends StatefulWidget { +// const WeeklyFragment({Key? key}) : super(key: key); +// +// @override +// _WeeklyFragmentState createState() { +// return _WeeklyFragmentState(); +// } +// } +// +// class _WeeklyFragmentState extends State { +// late DateTime _initialDate, _firstDate, _lastDate; +// +// @override +// void initState() { +// super.initState(); +// _initialDate = DateTime.now(); +// _firstDate = DateTime.utc(2010, 10, 16); +// _lastDate = DateTime.utc(2030, 3, 14); +// Provider.of(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))); +// } +// +// @override +// Widget build(BuildContext context) { +// return SingleChildScrollView( +// padding: const EdgeInsets.only(left: 16, right: 16), +// child: Consumer(builder: (context, snapshot, _) { +// return Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// TableCalendar( +// firstDay: _firstDate, +// lastDay: _lastDate, +// focusedDay: _initialDate, +// calendarFormat: CalendarFormat.week, +// weekendDays: const [], +// onCalendarCreated: (controller) {}, +// onPageChanged: (date) { +// if (!snapshot.isCalendarLoading) { +// _initialDate = date; +// +// Provider.of(context, listen: false) +// .getCalendarRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1))); +// } +// }, +// calendarBuilders: CalendarBuilders( +// headerTitleBuilder: (context, dateTime) => Column( +// crossAxisAlignment: CrossAxisAlignment.stretch, +// children: [ +// DateFormat("EEEE, d MMMM, yyyy", context.isAr ? "ar" : "en").format(dateTime).heading5(context), +// 8.height, +// const Divider().defaultStyle(context), +// ], +// ), +// dowBuilder: (context, dateTime) { +// 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)); +// }, +// defaultBuilder: (context, dateTime, _) { +// final day = DateFormat("d").format(dateTime); +// return CalendarDaysCard( +// day: day, +// fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( +// (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), +// orElse: null, +// ) != +// null, +// ).toShimmer(isShow: snapshot.isCalendarLoading); +// }, +// outsideBuilder: (context, dateTime, _) { +// final day = DateFormat("d").format(dateTime); +// return CalendarDaysCard( +// day: day, +// fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( +// (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), +// orElse: null, +// ) != +// null, +// ).toShimmer(isShow: snapshot.isCalendarLoading); +// }, +// ), +// daysOfWeekHeight: 35.toScreenHeight, +// headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false), +// calendarStyle: CalendarStyle( +// isTodayHighlighted: false, +// defaultTextStyle: AppTextStyles.bodyText, +// defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), +// ), +// ), +// if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context), +// ListView.separated( +// shrinkWrap: true, +// physics: const NeverScrollableScrollPhysics(), +// itemBuilder: (cxt, index) { +// final list = snapshot.calendarRequests!.requestsDetails!; +// if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading); +// bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; +// bool isGasRefill = list[index].nameOfType == "GasRefill"; +// bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; +// bool isPPMs = list[index].nameOfType == "PPMs"; +// +// return isServiceRequest +// ? ServiceRequestItemView(list[index], showShadow: false) +// : isGasRefill +// ? GasRefillItemView(list[index], showShadow: false) +// : isPPMs +// ? PpmItemView(list[index], showShadow: false) +// : isAssetTransfer +// ? AssetItemView(list[index], showShadow: false) +// : Container( +// height: 100, +// width: double.infinity, +// color: Colors.grey, +// ); +// }, +// separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), +// itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests!.requestsDetails!.length, +// ), +// ], +// ).toShadowContainer(context); +// }), +// ); +// } +// +// BoxDecoration cellDecoration({Color? color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); +// } diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index 90973db9..cbf1df7b 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -106,7 +106,7 @@ class _LandPageState extends State { })), // const old_page.LandPage(), const MyRequestsPage(), - if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(), + // if (_userProvider!.user!.type != UsersTypes.engineer) const CalendarPage(), const MyAssetsPage(fromBottomBar: true), ]; checkLocalAuth(); diff --git a/lib/new_views/pages/land_page/requests/asset_item_view.dart b/lib/new_views/pages/land_page/requests/asset_item_view.dart index 4ea6901f..2a256de5 100644 --- a/lib/new_views/pages/land_page/requests/asset_item_view.dart +++ b/lib/new_views/pages/land_page/requests/asset_item_view.dart @@ -6,13 +6,14 @@ import 'package:test_sa/extensions/text_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/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 '../../../../views/widgets/requests/request_status.dart'; import '../../../app_style/app_color.dart'; class AssetItemView extends StatelessWidget { - final RequestsDetails request; + final Data request; final bool showShadow; const AssetItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); @@ -26,11 +27,11 @@ class AssetItemView extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (request.priority != null) + if (request.priorityName != null) StatusLabel( - label: request.priority ?? "", - textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), + label: request.priorityName ?? "", + textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!), ), // 8.width, // if (request.status != null) @@ -40,7 +41,7 @@ class AssetItemView extends StatelessWidget { // backgroundColor: AppColor.getRequestStatusColorByName(context, request.status), // ), 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, @@ -49,9 +50,9 @@ class AssetItemView extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ context.translation.deviceTransferRequest.heading5(context), - "${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), - "${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), - request.status!.replaceAll("=", ":").bodyText(context), + // "${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), // todo ask ahmed + // "${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context),// todo ask ahmed + request.statusName!.replaceAll("=", ":").bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), ], ), diff --git a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart index ea69ebb9..5aa8e949 100644 --- a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart +++ b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart @@ -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/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/models/new_models/gas_refill_model.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'; class GasRefillItemView extends StatelessWidget { - final RequestsDetails request; + final Data request; final bool showShadow; const GasRefillItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); @@ -26,24 +27,24 @@ class GasRefillItemView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ StatusLabel( - label: request.priority!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), + label: request.priorityName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!), ), 8.width, StatusLabel( - label: request.status!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), + label: request.statusName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!), ), 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, context.translation.gasRefillRequest.heading5(context), - '${context.translation.gasType}: ${request.gasType}'.bodyText(context), - '${context.translation.site}: ${request.site?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + // '${context.translation.gasType}: ${request.gasType}'.bodyText(context), // todo ask ahmed + // '${context.translation.site}: ${request.site?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),// todo ask ahmed '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), 8.height, Row( @@ -68,8 +69,8 @@ class GasRefillItemView extends StatelessWidget { Navigator.of(context).push( MaterialPageRoute( builder: (_) => GasRefillDetailsPage( - priority: request.priority, - date: request.date!, + priority: request.priorityName, + date: request.transactionDate!, model: GasRefillModel(id: request.id), ), ), diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart index 21002783..330037ff 100644 --- a/lib/new_views/pages/land_page/requests/ppm_item_view.dart +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -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/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/new_views/app_style/app_color.dart'; import '../../../../views/pages/user/ppm/ppm_details_page.dart'; import '../../../../views/widgets/requests/request_status.dart'; class PpmItemView extends StatelessWidget { - final RequestsDetails request; + final Data request; final bool showShadow; const PpmItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); @@ -25,19 +26,19 @@ class PpmItemView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ StatusLabel( - label: request.priority!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), + label: request.priorityName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!), ), 8.width, StatusLabel( - label: request.status!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), + label: request.statusName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!), ), 1.width.expanded, Text( - request.date?.toServiceRequestCardFormat ?? "", + request.transactionDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), ), @@ -46,8 +47,8 @@ class PpmItemView extends StatelessWidget { 8.height, context.translation.ppmRequest.heading5(context), 8.height, - '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), - '${context.translation.assetSN}: ${request.assetSN}'.bodyText(context), + '${context.translation.assetNumber}: ${request.assetNumber}'.bodyText(context), + // '${context.translation.assetSN}: ${request.assetSN}'.bodyText(context),//todo ask ahmed // '${context.translation.code}: ${request.code}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), 16.height, @@ -64,7 +65,7 @@ class PpmItemView extends StatelessWidget { ), ], ).toShadowContainer(context, showShadow: showShadow).onPress(() { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request))); + //Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request))); }); } } diff --git a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart index 2ef2ea8d..229cdde2 100644 --- a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart +++ b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart @@ -1,18 +1,20 @@ import 'package:flutter/material.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/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'; -class RequestPaginatedList extends StatelessWidget { - final List list; +class RequestPaginatedListview extends StatelessWidget { + final List list; final int totalCount; final bool isLoading; 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 Widget build(BuildContext context) { @@ -41,11 +43,11 @@ class RequestPaginatedList extends StatelessWidget { ); } - Widget _buildRequestItem(RequestsDetails request) { - bool isServiceRequest = request.nameOfType == "ServiceRequest"; - bool isGasRefill = request.nameOfType == "GasRefill"; - bool isAssetTransfer = request.nameOfType == "AssetTransfer"; - bool isPPMs = request.nameOfType == "PPMs"; + Widget _buildRequestItem(Data request) { + bool isServiceRequest = request.transactionNo == 1; + bool isGasRefill = request.transactionNo == 2; + bool isAssetTransfer = request.transactionNo == 3; + bool isPPMs = request.transactionNo == 4; if (isServiceRequest) { return ServiceRequestItemView(request); diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index a5c3eec2..dac6439a 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -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/text_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 '../../../../views/widgets/requests/request_status.dart'; import '../../../app_style/app_color.dart'; class ServiceRequestItemView extends StatelessWidget { - final RequestsDetails request; + final Data request; final bool showShadow; const ServiceRequestItemView(this.request, {Key? key, this.showShadow = true}) : super(key: key); @@ -27,25 +27,26 @@ class ServiceRequestItemView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ StatusLabel( - label: request.priority!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.priority!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.priority!), + label: request.priorityName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.priorityName!), ), 8.width, StatusLabel( - label: request.status!, - textColor: AppColor.getRequestStatusTextColorByName(context, request.status!), - backgroundColor: AppColor.getRequestStatusColorByName(context, request.status!), + label: request.statusName!, + textColor: AppColor.getRequestStatusTextColorByName(context, request.statusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, request.statusName!), ), 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, context.translation.serviceRequest.heading5(context), '${context.translation.assetName}: ${request.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), - '${context.translation.requestType}: ${request.requestType}'.bodyText(context), + // '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), + '${context.translation.requestType}: ${request.requestTypeName}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), 8.height, Row( @@ -68,10 +69,7 @@ class ServiceRequestItemView extends StatelessWidget { ).toShadowContainer(context, showShadow: showShadow).onPress(() { //Older code... - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => RequestDetailMain( - requestId: request.id!, - ))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => RequestDetailMain(requestId: request.id!))); // Navigator.of(context).push(MaterialPageRoute( // builder: (_) => const HistoryLogView())); }); diff --git a/lib/new_views/pages/land_page/requests_list_page.dart b/lib/new_views/pages/land_page/requests_list_page.dart index a79b6a6e..9f06dace 100644 --- a/lib/new_views/pages/land_page/requests_list_page.dart +++ b/lib/new_views/pages/land_page/requests_list_page.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_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/new_models/dashboard_detail.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'; @@ -22,24 +22,21 @@ class RequestsListPage extends StatefulWidget { } class _RequestsListPageState extends State { - late AllRequestsProvider _provider; + // late AllRequestsProvider _provider; + late DashBoardProvider _dashBoardProvider; late ScrollController _scrollController; @override void initState() { - // TODO: implement initState - _provider = Provider.of(context, listen: false); - _provider.pageNum = 1; - _provider.selectedRequestCategory = null; - _provider.isRequestCategoryLoading = true; + super.initState(); + _dashBoardProvider = Provider.of(context, listen: false); + _dashBoardProvider.resetRequestDataList(); callRequestApis(); handleScroll(); - super.initState(); } @override void dispose() { - // TODO: implement dispose _scrollController.dispose(); super.dispose(); } @@ -48,7 +45,7 @@ class _RequestsListPageState extends State { _scrollController = ScrollController(); int pageNo = 1; _scrollController.addListener(() async { - if (_scrollController?.position?.pixels == _scrollController?.position?.maxScrollExtent && !_provider.isRequestCategoryLoading) { + if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !_dashBoardProvider.isDetailLoading) { pageNo = pageNo + 1; callRequestApis(showLoader: false, pageNo: pageNo); } @@ -59,111 +56,56 @@ class _RequestsListPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: DefaultAppBar(title: "${widget.title} ${context.translation.requests}"), - body: Consumer(builder: (context, snapshot, _) { - if (snapshot.isRequestCategoryLoading || snapshot.selectedRequestCategory == null) { + body: Consumer(builder: (context, snapshot, _) { + if (snapshot.isDetailLoading || snapshot.requestDetailList == null) { return ListView.builder( itemCount: 6, itemBuilder: (context, index) { return Padding( padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0), - child: const SizedBox().toRequestShimmer(context, snapshot.isRequestCategoryLoading), + child: const SizedBox().toRequestShimmer(context, snapshot.isDetailLoading), ); }, ); } else { - WidgetsBinding.instance.addPostFrameCallback((_) { - snapshot.requestDetailList = snapshot.selectedRequestCategory; - }); - return RequestPaginatedList( - snapshot.selectedRequestCategory!.requestsDetails ?? [], snapshot.isRequestCategoryLoading, snapshot.selectedRequestCategory?.total?.count ?? 0, _scrollController); + return RequestPaginatedListview(snapshot.requestDetailList?.data ?? [], snapshot.isDetailLoading, snapshot.requestDetailList?.totalRows ?? 0, _scrollController); } - bool isLoading = widget.index == 0 - ? snapshot.isHighPriorityLoading - : widget.index == 1 - ? snapshot.isOverdueLoading - : widget.index == 2 - ? snapshot.isOpenLoading - : widget.index == 3 - ? snapshot.isCompleteLoading - : false; - - List list = widget.index == 0 - ? snapshot.highPriorityRequests?.requestsDetails ?? [] - : widget.index == 1 - ? snapshot.overdueRequests?.requestsDetails ?? [] - : widget.index == 2 - ? snapshot.openRequests?.requestsDetails ?? [] - : widget.index == 3 - ? snapshot.completedRequests?.requestsDetails ?? [] - : []; + // bool isLoading = widget.index == 0 + // ? snapshot.isHighPriorityLoading + // : widget.index == 1 + // ? snapshot.isOverdueLoading + // : widget.index == 2 + // ? snapshot.isOpenLoading + // : widget.index == 3 + // ? snapshot.isCompleteLoading + // : false; + // + // List list = widget.index == 0 + // ? snapshot.highPriorityRequests?.requestsDetails ?? [] + // : widget.index == 1 + // ? snapshot.overdueRequests?.requestsDetails ?? [] + // : widget.index == 2 + // ? snapshot.openRequests?.requestsDetails ?? [] + // : widget.index == 3 + // ? snapshot.completedRequests?.requestsDetails ?? [] + // : []; })); } - Future callRequestApis({ - bool showLoader = true, - int pageNo = 1, - int pageSize = 10, - }) async { + Future callRequestApis({bool showLoader = true, int pageNo = 1, int pageSize = 12}) async { UsersTypes usersTypes = Provider.of(context, listen: false).user!.type!; - print('i am here at ${widget.index}'); - if (widget.index == 0) { - await _provider.getSelectedRequestCategory( - requestQueryModel: RequestQueryModel( - typeTransaction: [1], - statusTransaction: [1, 2, 4], - priority: [1], - displayData: [], - pageNumber: pageNo, - pageSize: pageSize, - showLoader: showLoader, - )); - return; - } - 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(); + // high priority + _dashBoardProvider.getHighPriorityRequests(usersType: usersTypes, showLoader: showLoader); + } else if (widget.index == 1) { + // overdue + _dashBoardProvider.getOverdueRequests(usersType: usersTypes, showLoader: showLoader); + } else if (widget.index == 2) { + //in progress + _dashBoardProvider.getInProgressRequests(usersType: usersTypes, showLoader: showLoader); + } else { + // completed + _dashBoardProvider.getCompletedRequests(usersType: usersTypes, showLoader: showLoader); } } } diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index d4892723..68a5d48b 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -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/widget_extensions.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/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'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; class RequestItemViewList extends StatelessWidget { List list; @@ -19,7 +15,7 @@ class RequestItemViewList extends StatelessWidget { @override Widget build(BuildContext context) { return (list.isEmpty && !isLoading) - ? NoItemFound(message: context.translation.noDataFound) + ? NoDataFound(message: context.translation.noDataFound) : ListView.separated( padding: const EdgeInsets.all(16), shrinkWrap: true, @@ -29,19 +25,25 @@ class RequestItemViewList extends StatelessWidget { bool isGasRefill = list[index].nameOfType == "GasRefill"; bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; bool isPPMs = list[index].nameOfType == "PPMs"; - return isServiceRequest - ? ServiceRequestItemView(list[index]) - : isGasRefill - ? GasRefillItemView(list[index]) - : isPPMs - ? PpmItemView(list[index]) - : isAssetTransfer - ? AssetItemView(list[index]) - : Container( - height: 100, - width: double.infinity, - color: Colors.grey, - ); + + return Container( + height: 100, + width: double.infinity, + color: Colors.grey, + ); + // return isServiceRequest + // ? ServiceRequestItemView(list[index]) + // : isGasRefill + // ? GasRefillItemView(list[index]) + // : isPPMs + // ? PpmItemView(list[index]) + // : isAssetTransfer + // ? AssetItemView(list[index]) + // : Container( + // height: 100, + // width: double.infinity, + // color: Colors.grey, + // ); }, separatorBuilder: (cxt, index) => 8.height, itemCount: isLoading ? 6 : list.length); diff --git a/lib/service_request_latest/request_detail_provider.dart b/lib/service_request_latest/request_detail_provider.dart index 675d4f8d..04c25b90 100644 --- a/lib/service_request_latest/request_detail_provider.dart +++ b/lib/service_request_latest/request_detail_provider.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; @@ -10,10 +11,11 @@ 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/nurse_action_model.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 { final pageItemNumber = 10; + void reset() { nextPage = true; stateCode = null; @@ -56,28 +58,27 @@ class RequestDetailProvider extends ChangeNotifier { notifyListeners(); } - WorkOrderDetail ?_currentWorkOrder; - FixRemotely ?_fixRemotelyModel=FixRemotely(); - NeedVisit ?_needVisitModel=NeedVisit(); - MarkAsFixed ?_markAsFixed=MarkAsFixed(); - ActivitySparePartModel ?_activitySparePartModel= ActivitySparePartModel(); + WorkOrderDetail? _currentWorkOrder; + FixRemotely? _fixRemotelyModel = FixRemotely(); + NeedVisit? _needVisitModel = NeedVisit(); + MarkAsFixed? _markAsFixed = MarkAsFixed(); + ActivitySparePartModel? _activitySparePartModel = ActivitySparePartModel(); - ActivitySparePartModel ?get activitySparePartModel => _activitySparePartModel; + ActivitySparePartModel? get activitySparePartModel => _activitySparePartModel; - set activitySparePartModel(ActivitySparePartModel ? value) { + set activitySparePartModel(ActivitySparePartModel? value) { _activitySparePartModel = value; notifyListeners(); } - MarkAsFixed ? get markAsFixed => _markAsFixed; + MarkAsFixed? get markAsFixed => _markAsFixed; - set markAsFixed(MarkAsFixed ? value) { + set markAsFixed(MarkAsFixed? value) { _markAsFixed = value; notifyListeners(); } - NurseActionModel ?_nurseActionModel; - + NurseActionModel? _nurseActionModel; NurseActionModel? get nurseActionModel => _nurseActionModel; @@ -86,31 +87,32 @@ class RequestDetailProvider extends ChangeNotifier { notifyListeners(); } - NeedVisit ?get needVisitModel => _needVisitModel; + NeedVisit? get needVisitModel => _needVisitModel; set needVisitModel(NeedVisit? value) { _needVisitModel = value; notifyListeners(); } - FixRemotely ?get fixRemotelyModel => _fixRemotelyModel; + FixRemotely? get fixRemotelyModel => _fixRemotelyModel; set fixRemotelyModel(FixRemotely? value) { _fixRemotelyModel = value; notifyListeners(); } - WorkOrderDetail ?get currentWorkOrder => _currentWorkOrder; + WorkOrderDetail? get currentWorkOrder => _currentWorkOrder; set currentWorkOrder(WorkOrderDetail? value) { _currentWorkOrder = value; notifyListeners(); } - int ?stateCode; + int? stateCode; + // true if there is next page in product list and false if not bool nextPage = true; - TimeOfDay? _selectedTime ; + TimeOfDay? _selectedTime; TimeOfDay? get selectedTime => _selectedTime; @@ -118,6 +120,7 @@ class RequestDetailProvider extends ChangeNotifier { _selectedTime = value; notifyListeners(); } // list of user requests + int _selectedListIndex = 0; int get selectedListIndex => _selectedListIndex; @@ -126,226 +129,223 @@ class RequestDetailProvider extends ChangeNotifier { _selectedListIndex = value; notifyListeners(); } + //getWorkOrderById...... - Future getWorkOrderById({required String id}) async { - try { - isLoading = true; - final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl+"?workOrderId=$id"); + Future getWorkOrderById({required int id}) async { + //try { + isLoading = true; + notifyListeners(); + final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl + "?workOrderId=$id"); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - notifyListeners(); - isLoading = false; - return currentWorkOrder; + _currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); } - isLoading= false; - notifyListeners(); - return null; - } - catch (e) { - log("getSubWorkOrderDetails [error] : $e"); isLoading = false; notifyListeners(); - return null; - } + // } catch (e) { + // log("getSubWorkOrderDetails [error] : $e"); + // isLoading = false; + // notifyListeners(); + // return null; + // } } + //engineerAcceptWorkOrder...... Future engineerAcceptWorkOrder({required String id}) async { try { final body = { "workOrderId": id, }; - isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerAcceptUrl,body: body); + isLoading = true; + final response = await ApiManager.instance.post(URLs.engineerAcceptUrl, body: body); stateCode = response.statusCode; 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 accept workorder ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; - notifyListeners(); + isLoading = false; + notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //engineerRejectWorkOrder...... - Future engineerRejectWorkOrder({required String id,String? feedBack}) async { + Future engineerRejectWorkOrder({required String id, String? feedBack}) async { try { final body = { "workOrderId": id, - "feedback": feedBack??'', + "feedback": feedBack ?? '', }; - isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerRejectUrl,body: body); + isLoading = true; + final response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: body); stateCode = response.statusCode; 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 reject workorder ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; - notifyListeners(); + isLoading = false; + notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //engineerFixRemotelyWorkOrder...... Future engineerFixRemotely() async { try { isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl,body: fixRemotelyModel!.toJson()); + final response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyModel!.toJson()); stateCode = response.statusCode; 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(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //engineerNeedAVisitWorkOrder...... Future engineerNeedVisit() async { try { isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl,body: needVisitModel!.toJson()); + final response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl, body: needVisitModel!.toJson()); stateCode = response.statusCode; 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(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //engineerMarkAsFixed...... Future engineerMarkAsFixed() async { try { isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl,body: markAsFixed!.toJson()); + final response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: markAsFixed!.toJson()); stateCode = response.statusCode; 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 mark as fixed ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //assignEngineerToWorkOrder...... - Future assignEngineerWorkOrder({required String workOrderId,required String engineerId}) async { + Future assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async { try { final body = { "workOrderId": workOrderId, "assignedEngineerId": engineerId, }; isLoading = true; - final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl,body: body); + final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); stateCode = response.statusCode; 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 assignEngineer workorder ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //Nurse confirm reopen Future nurseReopen() async { try { isLoading = true; - final response = await ApiManager.instance.post(URLs.nurseConfirmReopenUrl,body: nurseActionModel!.toJson()); + final response = await ApiManager.instance.post(URLs.nurseConfirmReopenUrl, body: nurseActionModel!.toJson()); stateCode = response.statusCode; 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 nurse confirmreopen workorder ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } + //Nurse confirm close Future nurseClose() async { try { isLoading = true; - final response = await ApiManager.instance.post(URLs.nurseConfirmCloseUrl,body: nurseActionModel!.toJson()); + final response = await ApiManager.instance.post(URLs.nurseConfirmCloseUrl, body: nurseActionModel!.toJson()); stateCode = response.statusCode; 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 nurse confirmreopen workorder ${commonResponseModel.toJson()}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return commonResponseModel; } - isLoading= false; + isLoading = false; notifyListeners(); return CommonResponseModel(); - } - catch (e) { + } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); @@ -353,11 +353,10 @@ class RequestDetailProvider extends ChangeNotifier { } } - Future updateActivitySparePart({required ActivitySparePartModel activitySparePartModel}) async { isLoading = true; try { - final response = await ApiManager.instance.put( + final response = await ApiManager.instance.put( URLs.updateActivitySparePartUrl, body: activitySparePartModel.toJson(), ); @@ -375,11 +374,12 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } - Future deleteActivitySparePart({required int id,required int workOrderId}) async { + + Future deleteActivitySparePart({required int id, required int workOrderId}) async { isLoading = true; var body = { - 'id':id, - 'workOrderId':workOrderId, + 'id': id, + 'workOrderId': workOrderId, }; try { final response = await ApiManager.instance.post( @@ -400,10 +400,11 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + Future createActivitySparePart({required ActivitySparePartModel activitySparePartModel}) async { isLoading = true; try { - final response = await ApiManager.instance.put( + final response = await ApiManager.instance.put( URLs.createActivitySparePartUrl, body: activitySparePartModel.toJson(), ); diff --git a/lib/service_request_latest/views/components/activities_list_view.dart b/lib/service_request_latest/views/components/activities_list_view.dart index 0dc0fa43..d251e14e 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -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/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/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'; class ActivitiesListView extends StatelessWidget { @@ -42,7 +42,7 @@ class ActivitiesListView extends StatelessWidget { return Column( children: [ (workOrders.isEmpty) - ? NoItemFound(message: context.translation.noDataFound).expanded + ? NoDataFound(message: context.translation.noDataFound).expanded : ListView.separated( padding: const EdgeInsets.all(16), itemCount: workOrders.length, diff --git a/lib/service_request_latest/views/components/history_log_view.dart b/lib/service_request_latest/views/components/history_log_view.dart index 34f72658..e3d8710c 100644 --- a/lib/service_request_latest/views/components/history_log_view.dart +++ b/lib/service_request_latest/views/components/history_log_view.dart @@ -1,10 +1,13 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_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/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'; 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), ]; - 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( - // color: Colors.red, - // ), - ListView.builder( - itemCount: dummyList.length, - padding: EdgeInsets.zero, - itemBuilder: (context, index) { - return historyLogCard(context: context, historyLogModel: dummyList[index]); - }, - ), - ], - ), - ), - ); + return Consumer(builder: (context, requestProvider, _) { + return requestProvider.isLoading + ? const CircularProgressIndicator(color: AppColor.primary10).center + : (requestProvider.currentWorkOrder == null || (requestProvider.currentWorkOrder?.data?.workOrderHistory.isEmpty ?? true) + ? const NoDataFound() + : Stack( + children: [ + 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}) { diff --git a/lib/service_request_latest/views/components/request_detail_view.dart b/lib/service_request_latest/views/components/request_detail_view.dart index dfa6b61b..366a428c 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -10,10 +10,12 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/new_models/work_order_detail_model.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/common_widgets/app_filled_button.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/initial_visit_card.dart'; import 'package:test_sa/service_request_latest/views/components/timer_widget.dart'; @@ -22,15 +24,270 @@ 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/widgets/images/files_list.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/sound/sound_player.dart'; +class WorkOrderDetailView extends StatelessWidget { + WorkOrderDetailView({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + UserProvider _userProvider = Provider.of(context, listen: false); + return Consumer(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.footerWidget(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 { static const String id = "/call-details"; ServiceRequest serviceRequest; 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 State createState() => _RequestDetailViewState(); @@ -40,7 +297,6 @@ class _RequestDetailViewState extends State { @override void initState() { super.initState(); - getServiceRequest(requestId: widget.serviceRequest.id); } void getServiceRequest({@required dynamic requestId}) { @@ -333,7 +589,7 @@ class _RequestDetailViewState extends State { showBorder: true, onPressed: () async { // ServiceRequestBottomSheet.nurseTakeActionBottomSheet(context: context); - Navigator.push(context, MaterialPageRoute(builder: (context) => AssetRetired())); + Navigator.push(context, MaterialPageRoute(builder: (context) => AssetRetired())); }), ); } diff --git a/lib/service_request_latest/views/request_detail_main_view.dart b/lib/service_request_latest/views/request_detail_main_view.dart index aaefa7c7..0c242b85 100644 --- a/lib/service_request_latest/views/request_detail_main_view.dart +++ b/lib/service_request_latest/views/request_detail_main_view.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; @@ -6,36 +8,63 @@ 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/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/initial_visit_card.dart'; import 'components/request_detail_view.dart'; -class RequestDetailMain extends StatelessWidget { +class RequestDetailMain extends StatefulWidget { 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 { + late RequestDetailProvider _requestProvider; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _requestProvider = Provider.of(context, listen: false); + _requestProvider.getWorkOrderById(id: widget.requestId); + }); + } + + @override + void dispose() { + super.dispose(); + } @override Widget build(BuildContext context) { - return Scaffold( + return Scaffold( backgroundColor: AppColor.neutral100, appBar: DefaultAppBar(title: context.translation.serviceDetails), body: DefaultTabController( - length: 2, + length: 2, child: Column( mainAxisSize: MainAxisSize.min, children: [ 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)), child: TabBar( //controller: _tabController, - padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight,horizontal: 4.toScreenWidth), + padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, unselectedLabelStyle: AppTextStyles.bodyText, labelStyle: AppTextStyles.bodyText, - indicatorPadding: EdgeInsets.zero, + indicatorPadding: EdgeInsets.zero, + indicatorSize: TabBarIndicatorSize.tab, + dividerColor: Colors.transparent, indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)), onTap: (index) { // setState(() {}); @@ -47,14 +76,15 @@ class RequestDetailMain extends StatelessWidget { ), ), 12.height, - TabBarView( + TabBarView( children: [ - RequestDetailView( - serviceRequest: ServiceRequest(id: requestId.toString()), - fromTabView: true, - ), - const HistoryLogView(), - ], + WorkOrderDetailView(), + // RequestDetailView( + // serviceRequest: ServiceRequest(id: requestId.toString()), + // fromTabView: true, + // ), + const HistoryLogView(), + ], ).expanded, ], ), diff --git a/lib/utilities/request_utils.dart b/lib/utilities/request_utils.dart deleted file mode 100644 index 3fa84eb1..00000000 --- a/lib/utilities/request_utils.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:test_sa/models/enums/user_types.dart'; - -class RequestUtils{ - static List> getTabs({required UsersTypes userType,required BuildContext context}) { - List> 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; - - } -} \ No newline at end of file diff --git a/lib/views/pages/device_transfer/search_asset_page.dart b/lib/views/pages/device_transfer/search_asset_page.dart index 49d47b32..4522992c 100644 --- a/lib/views/pages/device_transfer/search_asset_page.dart +++ b/lib/views/pages/device_transfer/search_asset_page.dart @@ -15,7 +15,7 @@ import '../../../new_views/common_widgets/custom_app_bar.dart'; import '../../widgets/equipment/asset_item_listview.dart'; import '../../widgets/horizontal_list_widget.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 { /// add on route @@ -123,7 +123,7 @@ class _SearchAssetPageState extends State { child: _searchableList.isEmpty ? _isFirst ? const SizedBox() - : NoItemFound(message: context.translation.noDeviceFound) + : NoDataFound(message: context.translation.noDeviceFound) : LazyLoading( nextPage: _deviceProvider.nextPage, onLazyLoad: () async { diff --git a/lib/views/pages/sub_workorder/workorder_list.dart b/lib/views/pages/sub_workorder/workorder_list.dart index 3be48a19..18b71565 100644 --- a/lib/views/pages/sub_workorder/workorder_list.dart +++ b/lib/views/pages/sub_workorder/workorder_list.dart @@ -8,7 +8,7 @@ // import '../../../models/service_request/search_work_order.dart'; // import '../../widgets/buttons/app_back_button.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'; //// todo remove this class after work // class WorkOrderList extends StatefulWidget { diff --git a/lib/views/pages/user/gas_refill/gas_refill_comments.dart b/lib/views/pages/user/gas_refill/gas_refill_comments.dart index b20b498a..6697c88a 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_comments.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_comments.dart @@ -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/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/no_item_found.dart'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../../../new_views/app_style/app_color.dart'; import '../../../widgets/loaders/loading_manager.dart'; @@ -79,7 +79,7 @@ class _GasRefillCommentsBottomSheetState extends State { ], ); } - return NoItemFound(message: context.translation.noDataFound); + return NoDataFound(message: context.translation.noDataFound); }, ), ), diff --git a/lib/views/pages/user/notifications/notifications_list.dart b/lib/views/pages/user/notifications/notifications_list.dart index 04145836..bfa96a8e 100644 --- a/lib/views/pages/user/notifications/notifications_list.dart +++ b/lib/views/pages/user/notifications/notifications_list.dart @@ -4,7 +4,7 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/widget_extensions.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/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'; class NotificationsList extends StatelessWidget { @@ -17,7 +17,7 @@ class NotificationsList extends StatelessWidget { @override Widget build(BuildContext context) { if (notifications.isEmpty) { - return NoItemFound(message: context.translation.notificationsNotFound); + return NoDataFound(message: context.translation.notificationsNotFound); } return LazyLoading( nextPage: nextPage, diff --git a/lib/views/pages/user/ppm/ppm_details_page.dart b/lib/views/pages/user/ppm/ppm_details_page.dart index 77160dea..b1751e35 100644 --- a/lib/views/pages/user/ppm/ppm_details_page.dart +++ b/lib/views/pages/user/ppm/ppm_details_page.dart @@ -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/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/no_item_found.dart'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../models/enums/user_types.dart'; @@ -115,7 +115,7 @@ class _PpmDetailsPageState extends State { ).paddingAll(16) ]); } - return NoItemFound(message: context.translation.noDataFound); + return NoDataFound(message: context.translation.noDataFound); }), ), ); diff --git a/lib/views/pages/user/ppm/ppm_page.dart b/lib/views/pages/user/ppm/ppm_page.dart index 04a40945..6acdae32 100644 --- a/lib/views/pages/user/ppm/ppm_page.dart +++ b/lib/views/pages/user/ppm/ppm_page.dart @@ -9,7 +9,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import '../../../../models/ppm/ppm.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'; class PpmPage extends StatefulWidget { @@ -44,7 +44,7 @@ class _PpmPageState extends State with TickerProviderStateMixin { await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!); }, child: _visitsProvider.ppms?.isEmpty ?? true - ? NoItemFound(message: context.translation.noVisitsFound) + ? NoDataFound(message: context.translation.noVisitsFound) : LazyLoading( nextPage: _visitsProvider.nextPage, onLazyLoad: () async { diff --git a/lib/views/pages/user/requests/comments_bottom_sheet.dart b/lib/views/pages/user/requests/comments_bottom_sheet.dart index 8e6427db..bc484621 100644 --- a/lib/views/pages/user/requests/comments_bottom_sheet.dart +++ b/lib/views/pages/user/requests/comments_bottom_sheet.dart @@ -12,7 +12,7 @@ import 'package:test_sa/models/comment.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/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 '../../../widgets/loaders/loading_manager.dart'; @@ -78,7 +78,7 @@ class _CommentsBottomSheetState extends State { commentsProvider.comments.isEmpty ? SizedBox( height: MediaQuery.of(context).size.height * 0.25, - child: NoItemFound(message: context.translation.noDataFound), + child: NoDataFound(message: context.translation.noDataFound), ) : LazyLoading( nextPage: commentsProvider.nextPage, diff --git a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart index 5e962503..a292ec70 100644 --- a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart +++ b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart @@ -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/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/widgets/loaders/no_item_found.dart'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; class WorkOrderListPage extends StatelessWidget { static const String id = "/work-order-list"; @@ -40,7 +40,7 @@ class WorkOrderListPage extends StatelessWidget { return Column( children: [ (workOrders.isEmpty) - ? NoItemFound(message: context.translation.noDataFound).expanded + ? NoDataFound(message: context.translation.noDataFound).expanded : ListView.separated( padding: const EdgeInsets.all(16), itemCount: workOrders.length, diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index cea687dd..66325924 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -6,7 +6,7 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/department.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/no_item_found.dart'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../app_text_form_field.dart'; @@ -62,7 +62,7 @@ class _SingleDepartmentPickerState extends State { ), Expanded( child: _searchableList.isEmpty - ? NoItemFound( + ? NoDataFound( message: context.translation.noUniteFound, ) : ListView.builder( diff --git a/lib/views/widgets/device_trancfer/device_transfer_list.dart b/lib/views/widgets/device_trancfer/device_transfer_list.dart index 1c287d2c..8f6d061f 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_list.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_list.dart @@ -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/widgets/device_trancfer/device_transfer_item.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 { final List items; @@ -16,7 +16,7 @@ class DeviceTransferList extends StatelessWidget { @override Widget build(BuildContext context) { if (items.isEmpty) { - return NoItemFound( + return NoDataFound( message: context.translation.noServiceRequestFound, ); } diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index beabe8df..4433a938 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -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/loaders/lazy_loading.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 '../../../models/device/asset.dart'; @@ -155,7 +155,7 @@ class _MyAssetsPageState extends State { children: [ Expanded( child: _searchableList.isEmpty - ? NoItemFound(message: context.translation.noDeviceFound) + ? NoDataFound(message: context.translation.noDeviceFound) : LazyLoading( nextPage: _devicesProvider.nextPage, onLazyLoad: () async { diff --git a/lib/views/widgets/gas_refill/gas_refill_list.dart b/lib/views/widgets/gas_refill/gas_refill_list.dart index 1bd20761..d9022a49 100644 --- a/lib/views/widgets/gas_refill/gas_refill_list.dart +++ b/lib/views/widgets/gas_refill/gas_refill_list.dart @@ -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/widgets/gas_refill/gas_refill_item.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'; @@ -22,7 +22,7 @@ class _GasRefillListState extends State { @override Widget build(BuildContext context) { if (widget.items.isEmpty) { - return NoItemFound( + return NoDataFound( message: context.translation.noServiceRequestFound, ); } diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index 98368c20..8ed0837f 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -6,7 +6,7 @@ // import 'package:test_sa/models/hospital.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/no_item_found.dart'; +// import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; // // import '../app_text_form_field.dart'; // diff --git a/lib/views/widgets/loaders/no_data_found.dart b/lib/views/widgets/loaders/no_data_found.dart new file mode 100644 index 00000000..9f77dc77 --- /dev/null +++ b/lib/views/widgets/loaders/no_data_found.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)), + ], + ); + } +} diff --git a/lib/views/widgets/loaders/no_item_found.dart b/lib/views/widgets/loaders/no_item_found.dart deleted file mode 100644 index 68523534..00000000 --- a/lib/views/widgets/loaders/no_item_found.dart +++ /dev/null @@ -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(), - ], - ); - } -} diff --git a/lib/views/widgets/requests/request_status.dart b/lib/views/widgets/requests/request_status.dart index 9816b72b..db2e33cd 100644 --- a/lib/views/widgets/requests/request_status.dart +++ b/lib/views/widgets/requests/request_status.dart @@ -17,9 +17,11 @@ class StatusLabel extends StatelessWidget { if (id == 82) label = context.translation.highPriority; if (id == 81) label = context.translation.lowPriority; 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() == '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; return Container( diff --git a/lib/views/widgets/requests/service_request_list.dart b/lib/views/widgets/requests/service_request_list.dart index 5bc1d9af..5f6551ae 100644 --- a/lib/views/widgets/requests/service_request_list.dart +++ b/lib/views/widgets/requests/service_request_list.dart @@ -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/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/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'; class ServiceRequestsList extends StatelessWidget { @@ -19,7 +19,7 @@ class ServiceRequestsList extends StatelessWidget { Widget build(BuildContext context) { print('servies request page'); if (requests.isEmpty) { - return NoItemFound( + return NoDataFound( message: context.translation.noServiceRequestFound, ); } From c6d8c299f70222ccbf8222d29098c8e57d843c28 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 19 Sep 2024 14:55:27 +0300 Subject: [PATCH 3/3] merge conflict resolve. --- .../request_detail_provider.dart | 1 - .../action_button/footer_action_button.dart | 218 ++++++++---------- .../views/components/request_detail_view.dart | 12 +- .../views/request_detail_main_view.dart | 6 +- 4 files changed, 101 insertions(+), 136 deletions(-) diff --git a/lib/service_request_latest/request_detail_provider.dart b/lib/service_request_latest/request_detail_provider.dart index b4114a9c..3dd8281b 100644 --- a/lib/service_request_latest/request_detail_provider.dart +++ b/lib/service_request_latest/request_detail_provider.dart @@ -353,7 +353,6 @@ class RequestDetailProvider extends ChangeNotifier { }; isLoading = true; final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); - final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); diff --git a/lib/service_request_latest/views/components/action_button/footer_action_button.dart b/lib/service_request_latest/views/components/action_button/footer_action_button.dart index 0df361f6..633a7d10 100644 --- a/lib/service_request_latest/views/components/action_button/footer_action_button.dart +++ b/lib/service_request_latest/views/components/action_button/footer_action_button.dart @@ -1,165 +1,141 @@ 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/extensions/widget_extensions.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/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; -class FooterActionButton { - - static Widget footerContainer({required Widget child}){ +class FooterActionButton { + static Widget footerContainer({required Widget child}) { return Align( alignment: Alignment.bottomCenter, child: Container( - padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth,vertical: 16.toScreenHeight), + padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), color: AppColor.white10, child: child, ), ); } - static Widget requestDetailsFooterWidget({required int status,required BuildContext context}){ - switch(status){ + static Widget requestDetailsFooterWidget({required int status, required BuildContext context}) { + switch (status) { //accept reject... case 1: return footerContainer( - child: - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - mainAxisSize: MainAxisSize.min, - 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: + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.min, + children: [ AppFilledButton( - label: context.translation.verify_asset_details, - // maxWidth: true, - buttonColor: AppColor.primary10, + 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; - //Activities - case 4: + //need visit fixed remotely + case 2: return footerContainer( - child: + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.min, + children: [ AppFilledButton( - label: context.translation.activities, - // maxWidth: true, + label: context.translation.needAVisit, + maxWidth: true, buttonColor: AppColor.neutral50, onPressed: () async { - ServiceRequestBottomSheet.activityTypeBottomSheet(context: context); + ServiceRequestBottomSheet.initialVisitBottomSheet(context: context); }, - ) - ); - break; - //I have arrived... - case 5: - return footerContainer( - child: + ).expanded, + const SizedBox( + width: 20, + ), AppFilledButton( - label: context.translation.iHaveArrived, - //showIcon: true, - // icon: 'arrived_icon'.toSvgAsset(), + label: context.translation.fixedRemotely, + maxWidth: true, buttonColor: AppColor.green70, onPressed: () async { - + ServiceRequestBottomSheet.fixRemotelyBottomSheet(context: context); }, - ) - ); + ).expanded, + ], + )); break; - //Close.. - case 6: + //verify Asset Details + case 3: return footerContainer( - child: - AppFilledButton( - label: context.translation.close, - // maxWidth: true, - buttonColor: AppColor.primary10, - onPressed: () async { - - }, - ) - ); + child: AppFilledButton( + label: context.translation.verify_asset_details, + // maxWidth: true, + buttonColor: AppColor.primary10, + onPressed: () async {}, + )); break; - //for nurse to take action... - case 7: + //Activities + case 4: return footerContainer( - child: - AppFilledButton( - label: context.translation.takeAction, - // maxWidth: true, - buttonColor: AppColor.primary10, - onPressed: () async { - ServiceRequestBottomSheet.nurseTakeActionBottomSheet(context: context); - }, - ) - ); + child: AppFilledButton( + label: context.translation.activities, + // maxWidth: true, + buttonColor: AppColor.neutral50, + onPressed: () async { + ServiceRequestBottomSheet.activityTypeBottomSheet(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; default: return const SizedBox(); } - } } diff --git a/lib/service_request_latest/views/components/request_detail_view.dart b/lib/service_request_latest/views/components/request_detail_view.dart index 2787211b..d3c7e5d5 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -19,9 +19,6 @@ 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/initial_visit_card.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/views/pages/user/requests/comments_bottom_sheet.dart'; import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart'; @@ -30,7 +27,7 @@ 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/sound/sound_player.dart'; -import '../forms/spare_part/spare_part_request.dart'; + class WorkOrderDetailView extends StatelessWidget { WorkOrderDetailView({Key? key}) : super(key: key); @@ -63,7 +60,7 @@ class WorkOrderDetailView extends StatelessWidget { ], ), ).expanded, - FooterActionButton.footerWidget(status: 1, context: context), + FooterActionButton.requestDetailsFooterWidget(status: 1, context: context), ], ), const TimerWidget(), @@ -312,8 +309,6 @@ class _RequestDetailViewState extends State { }); } - - @override Widget build(BuildContext context) { UserProvider _userProvider = Provider.of(context, listen: false); @@ -334,7 +329,6 @@ class _RequestDetailViewState extends State { } Widget requestDetailCard({required ServiceRequestsProvider serviceRequestsProvider, required UserProvider userProvider}) { - return SafeArea( child: serviceRequestsProvider.isDetialLoading ? const ALoading().center @@ -584,7 +578,7 @@ class _RequestDetailViewState extends State { showBorder: true, onPressed: () async { // Navigator.push(context, MaterialPageRoute(builder: (context) => AssetRetired())); - Navigator.push(context, MaterialPageRoute(builder: (context) => const CreateNewRequest())); + Navigator.push(context, MaterialPageRoute(builder: (context) => CreateNewRequest())); }), ); } diff --git a/lib/service_request_latest/views/request_detail_main_view.dart b/lib/service_request_latest/views/request_detail_main_view.dart index 5e6a7249..c7e3578f 100644 --- a/lib/service_request_latest/views/request_detail_main_view.dart +++ b/lib/service_request_latest/views/request_detail_main_view.dart @@ -1,22 +1,18 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/models/service_request/service_request.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/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/initial_visit_card.dart'; import 'components/request_detail_view.dart'; class RequestDetailMain extends StatefulWidget { final int requestId; - const RequestDetailMain({Key? key, required this.requestId}) : super(key: key); RequestDetailMain({Key? key, required this.requestId}) : super(key: key); @@ -77,7 +73,7 @@ class _RequestDetailMainState extends State { ), ), 12.height, - TabBarView( + TabBarView( children: [ WorkOrderDetailView(), // RequestDetailView(