code restructured and improvements.

design_3.0_task_module_new
Sikander Saleem 6 months ago
parent 16a0f20fbb
commit 5169894dc4

@ -1,87 +0,0 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/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/service_request/search_work_order.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/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 '../../../../views/widgets/requests/request_status.dart';
class ActivityCardView extends StatelessWidget {
final SearchWorkOrder workOrder;
final ServiceRequest serviceRequest;
final bool showShadow;
const ActivityCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key);
@override
Widget build(BuildContext context) {
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: workOrder.currentSituation!.name,
textColor: AppColor.getRequestStatusTextColorByName(context, workOrder.currentSituation!.name!),
backgroundColor: AppColor.getRequestStatusColorByName(context, workOrder.currentSituation!.name!),
),
8.height,
Text(serviceRequest.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text(
'${context.translation.assetName}: ${workOrder.callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.currentSituation}: ${workOrder.currentSituation!.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.readCompleteThread,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline),
),
// 4.width,
// Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
),
],
).onPress(() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrder, serviceRequest: serviceRequest)),
);
}).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: [
if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrder)),
);
}),
if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
],
)
],
).toShadowContainer(context);
}
}

@ -1,183 +0,0 @@
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/text_extensions.dart';
import 'package:test_sa/models/size_config.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
class TimerWidget extends StatefulWidget {
const TimerWidget({Key? key}) : super(key: key);
@override
_TimerWidgetState createState() => _TimerWidgetState();
}
class _TimerWidgetState extends State<TimerWidget> {
Offset position = Offset(SizeConfig.screenWidth! - 100, SizeConfig.screenHeight! / 2 - 50);
@override
void initState() {
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
//dispose the timer...
super.dispose();
}
@override
Widget build(BuildContext context) {
return Consumer<ServiceRequestDetailProvider>(
builder: (context, provider, child) {
return Positioned(
left: position.dx,
top: position.dy,
child: GestureDetector(
onPanEnd: (details){},
onPanUpdate: (details) {
setState(() {
if (position.dy + details.delta.dy > 0 && position.dy + details.delta.dy < 560) {
position = Offset(
position.dx + details.delta.dx, // Update the X position
position.dy + details.delta.dy, // Update the Y position
);
}
});
},
child: buildTimerWidget(provider),
),
);
},
);
}
Widget buildTimerWidget(ServiceRequestDetailProvider provider) {
return Container(
padding: EdgeInsets.all(8.toScreenHeight),
width: 80.toScreenWidth,
decoration: BoxDecoration(
color: AppColor.black10,
borderRadius: BorderRadius.circular(10),
),
child:
Column(
children: [
'drag_icon'.toSvgAsset(),
12.height,
provider.currentTime.toString().toDragAbleTimerFormat.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
2.height,
context.translation.hours.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
],
),
);
}
}
//older code...
// DateTime startTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00
// Timer timer;
// bool isRunning = false;
//
// @override
// void initState() {
// super.initState();
// startTimer();
// }
//
// void startTimer() {
// if (isRunning) return;
// timer = Timer.periodic(const Duration(seconds: 1), (Timer t) {
// setState(() {
// startTime = startTime.add(const Duration(seconds: 1));
// });
// });
// setState(() {
// isRunning = true;
// });
// }
//
// void stopTimer() {
// timer?.cancel();
// setState(() {
// isRunning = false;
// });
// }
// @override
// void dispose() {
// timer?.cancel();
// super.dispose();
// }
//
// @override
// Widget build(BuildContext context) {
// return Positioned(
// left: position.dx,
// top: position.dy,
// child: GestureDetector(
// onPanUpdate: (details) {
// setState(() {
// //calculate the exact bonds to be restrict the drag..
// if(position.dy + details.delta.dy>0&&position.dy + details.delta.dy<560){
// position = Offset(
// position.dx + details.delta.dx, // Update the X position
// position.dy + details.delta.dy, // Update the Y position
// );
// }
// });
// },
// child: buildTimerWidget(),
// ),
// );
// // return Positioned(
// // left: position.dx,
// // top: position.dy,
// // child: Draggable(
// // feedback: buildTimerWidget(),
// // childWhenDragging: Container(),
// // onDragEnd: (dragDetails) {
// // setState(() {
// // // Get the RenderBox of the parent widget (Stack)
// // final renderBox = context.findRenderObject() as RenderBox;
// //
// // // Convert the global position to a local position inside the Stack
// // position = dragDetails.offset;
// // });
// // },
// // child: buildTimerWidget(),
// // ),
// // );
// }
//
// Widget buildTimerWidget() {
// return GestureDetector(
// onTap: (){
// if(isRunning){
// stopTimer();
// }else{
// startTimer();
// }
// },
// child: Container(
// padding: EdgeInsets.all(8.toScreenHeight),
// width: 80.toScreenWidth,
// decoration: BoxDecoration(
// color: AppColor.black10,
// borderRadius: BorderRadius.circular(10),
// ),
// child: Column(
// children: [
// 'drag_icon'.toSvgAsset(),
// 12.height,
// startTime.toString().toDragAbleTimerFormat.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
// 2.height,
// context.translation.hours.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
// ],
// ),
// ),
// );
// }

@ -1,87 +0,0 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/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/service_request/search_work_order.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/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 '../../../../views/widgets/requests/request_status.dart';
class WorkOrderCardView extends StatelessWidget {
final SearchWorkOrder workOrder;
final ServiceRequest serviceRequest;
final bool showShadow;
WorkOrderCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key);
@override
Widget build(BuildContext context) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: workOrder.currentSituation!.name,
textColor: AppColor.getRequestStatusTextColorByName(context, workOrder.currentSituation?.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, workOrder.currentSituation?.name),
),
8.height,
Text(serviceRequest.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text(
'${context.translation.assetName}: ${workOrder.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.currentSituation}: ${workOrder.currentSituation?.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.readCompleteThread,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline),
),
// 4.width,
// Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
),
],
).onPress(() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrder, serviceRequest: serviceRequest)),
);
}).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: [
if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrder)),
);
}),
if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
],
)
],
).toShadowContainer(context);
}
}

@ -8,10 +8,10 @@ import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:test_sa/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/modules/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/modules/pm_module/ppm_wo/ppm_details_page.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_details_page.dart';
@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {}

@ -10,8 +10,8 @@ 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/modules/cm_module/views/components/weekly_calendar_fragment.dart';
import 'package:test_sa/new_views/common_widgets/tab_button.dart';
import 'package:test_sa/cm_module/views/components/weekly_calendar_fragment.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class RequestCategoryFragment extends StatelessWidget {
@ -63,7 +63,7 @@ class RequestCategoryFragment extends StatelessWidget {
child: const SizedBox().toRequestShimmer(context, dashboardProvider.isDetailLoading),
);
})).paddingOnly(start: 16, end: 16, top: 16)
: (dashboardProvider.requestDetailList==null||dashboardProvider.requestDetailList?.data?.isEmpty==true)
: (dashboardProvider.requestDetailList == null || dashboardProvider.requestDetailList?.data?.isEmpty == true)
? const NoDataFound().paddingOnly(top: 80).center
: RequestCategoryList(dashboardProvider.requestDetailList?.data ?? <Data>[], dashboardProvider.isDetailLoading, dashboardProvider.requestDetailList?.totalRows ?? 0),
]);

@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/task_request_item_view.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/device_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/recurrent_wo_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/task_request_item_view.dart';
class RequestCategoryList extends StatelessWidget {
final List<Data> list;
@ -35,12 +35,7 @@ class RequestCategoryList extends StatelessWidget {
}
Widget _buildRequestItem(Data request) {
// bool isServiceRequest = request.transactionNo == 1;
// bool isGasRefill = request.transactionNo == 2;
// bool isAssetTransfer = request.transactionNo == 3;
// bool isPPMs = request.transactionNo == 4;
// bool isRecurrentTask = request.transactionNo == 5;
switch(request.transactionNo){
switch (request.transactionNo) {
case 1:
return ServiceRequestItemView(requestData: request);
case 2:
@ -48,36 +43,17 @@ class RequestCategoryList extends StatelessWidget {
case 3:
return DeviceItemView(requestData: request);
case 4:
return PpmItemView(requestData: request);
return PpmItemView(requestData: request);
case 5:
return RecurrentWoItemView(requestData: request);
case 6:
return TaskRequestItemView(requestData: request,);
return TaskRequestItemView(requestData: request);
default:
return Container(
height: 100,
width: double.infinity,
color: Colors.grey,
);
}
// if (isServiceRequest) {
// return ServiceRequestItemView(requestData: request);
// } else if (isGasRefill) {
// return GasRefillItemView(requestData: request);
// } else if (isPPMs) {
// return PpmItemView(requestData: request);
// } else if (isAssetTransfer) {
// return AssetItemView(requestData: request);
// } else if (isRecurrentTask) {
// return RecurrentWoItemView(requestData: request);
// } else {
// return Container(
// height: 100,
// width: double.infinity,
// color: Colors.grey,
// );
// }
}
}

@ -1,15 +1,17 @@
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_timezone/flutter_timezone.dart';
import 'package:localization/localization.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/comments_provider.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
@ -23,6 +25,9 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/nurse/create_new_request_view.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/create_task_view.dart';
import 'package:test_sa/new_views/app_style/app_themes.dart';
import 'package:test_sa/new_views/pages/help_center_page.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
@ -66,48 +71,36 @@ import 'package:test_sa/providers/work_order/retirement_type_provider.dart';
import 'package:test_sa/providers/work_order/service_type_provider.dart';
import 'package:test_sa/providers/work_order/supplier_engineer_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/nurse/create_new_request_view.dart';
import 'package:test_sa/views/pages/device_transfer/create__device_transfer_request.dart';
import 'package:test_sa/views/pages/device_transfer/device_filter_screen.dart';
import 'package:test_sa/views/pages/device_transfer/device_search_screen.dart';
import 'package:test_sa/views/pages/device_transfer/create__device_transfer_request.dart';
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/gas_refill/update_gas_refill_request.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/update_gas_refill_request.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_page.dart';
import 'package:test_sa/views/pages/user/profile_page.dart';
import 'package:test_sa/views/pages/user/requests/create_service_request_page.dart';
import 'package:test_sa/views/pages/user/requests/requests_page.dart';
import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_page.dart';
import 'package:test_sa/views/update_available_screen.dart';
import 'package:test_sa/views/widgets/departments/single_department_picker.dart';
import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'controllers/notification/notification_manger.dart';
import 'controllers/providers/api/gas_refill_comments.dart';
import 'controllers/providers/api/user_provider.dart';
import 'controllers/providers/settings/setting_provider.dart';
import 'dashboard_latest/dashboard_provider.dart';
import 'new_views/pages/gas_refill_request_form.dart';
import 'providers/service_request_providers/loan_availability_provider.dart';
import 'providers/service_request_providers/reject_reason_provider.dart';
import 'package:flutter_timezone/flutter_timezone.dart';
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'package:test_sa/views/update_available_screen.dart';
import 'views/pages/user/tasks_request/create_task_view.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
_configureLocalTimeZone();
NotificationManger.initialisation((notificationDetails) {
}, (id, title, body, payload) async {});
NotificationManger.initialisation((notificationDetails) {}, (id, title, body, payload) async {});
if (Platform.isIOS) {
await Firebase.initializeApp(
@ -131,19 +124,19 @@ void main() async {
runApp(ChangeNotifierProvider(create: (_) => SettingProvider(), child: const MyApp()));
}
//this function is used for schedule notifications
Future<void> _configureLocalTimeZone() async {
try{
try {
if (kIsWeb || Platform.isLinux) {
return;
}
tz.initializeTimeZones();
final String timeZoneName = await FlutterTimezone.getLocalTimezone();
tz.setLocalLocation(tz.getLocation(timeZoneName));
}catch(e){
return ;
} catch (e) {
return;
}
}
final navigatorKey = GlobalKey<NavigatorState>();
@ -272,7 +265,6 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => CommentsProvider()),
ChangeNotifierProvider(create: (_) => GasRefillCommentsProvider()),
///todo deleted
//ChangeNotifierProvider(create: (_) => RequestStatusProvider()),
ChangeNotifierProvider(create: (_) => VendorProvider()),
@ -299,14 +291,15 @@ class MyApp extends StatelessWidget {
LoginPage.routeName: (_) => const LoginPage(),
UnsafeDeviceScreen.routeName: (_) => const UnsafeDeviceScreen(),
SwipeSuccessView.routeName: (_) => const SwipeSuccessView(),
SwipeHistoryView.routeName: (_) => SwipeHistoryView(),
SwipeHistoryView.routeName: (_) => const SwipeHistoryView(),
SwipeView.routeName: (_) => const SwipeView(),
UpdateAvailableScreen.routeName: (_) => UpdateAvailableScreen(),
///todo deleted
//old.LandPage.id: (_) => const old.LandPage(),
LandPage.routeName: (_) => const LandPage(),
GasRefillRequestForm.routeName: (_) => const GasRefillRequestForm(),
ServiceRequestsPage.id: (_) => const ServiceRequestsPage(),
// ServiceRequestsPage.id: (_) => const ServiceRequestsPage(),
CreateTaskView.id: (_) => const CreateTaskView(),
//ReportIssuesPage.id: (_) => ReportIssuesPage(),
RequestGasRefill.id: (_) => const RequestGasRefill(),
@ -319,26 +312,26 @@ class MyApp extends StatelessWidget {
NotificationsPage.id: (_) => const NotificationsPage(),
// FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(),
// PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(),
PpmPage.id: (_) => const PpmPage(),
TrackGasRefillPage.id: (_) => const TrackGasRefillPage(),
// PpmPage.id: (_) => const PpmPage(),
// TrackGasRefillPage.id: (_) => const TrackGasRefillPage(),
CreateDeviceTransferRequest.id: (_) => const CreateDeviceTransferRequest(),
TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(),
// TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(),
// todo remove this class after work
// SearchSubWorkOrderPage.id: (_) => const SearchSubWorkOrderPage(),
CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(),
WorkOrderListPage.id: (_) => WorkOrderListPage(),
// CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(),
// WorkOrderListPage.id: (_) => WorkOrderListPage(),
AssetDetailPage.id: (_) => const AssetDetailPage(),
DeviceSearchScreen.id: (_) => const DeviceSearchScreen(),
DeviceFilterScreen.id: (_) => const DeviceFilterScreen(),
WorkOrderDetailsPage.id: (_) => const WorkOrderDetailsPage(),
UpdateServiceRequestPage.id: (_) => const UpdateServiceRequestPage(),
// WorkOrderDetailsPage.id: (_) => const WorkOrderDetailsPage(),
// UpdateServiceRequestPage.id: (_) => const UpdateServiceRequestPage(),
SettingsPage.id: (_) => const SettingsPage(),
ProfilePage.id: (_) => const ProfilePage(),
ReportBugPage.id: (_) => const ReportBugPage(),
HelpCenterPage.id: (_) => const HelpCenterPage(),
SwipeSuccessView.routeName: (_) => const SwipeSuccessView(),
SwipeHistoryView.routeName: (_) => const SwipeHistoryView(),
// SwipeSuccessView.routeName: (_) => const SwipeSuccessView(),
// SwipeHistoryView.routeName: (_) => const SwipeHistoryView(),
},
),
),

@ -5,7 +5,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:http/src/response.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/helper_data_models/asset_retired/asset_retired_model.dart';
@ -18,6 +17,8 @@ import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/models/service_request/spare_parts.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'utilities/service_request_utils.dart';
class ServiceRequestDetailProvider extends ChangeNotifier {
final pageItemNumber = 10;

@ -1,24 +1,24 @@
import 'dart:async';
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'dart:async';
import 'package:device_calendar/device_calendar.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_timezone/flutter_timezone.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_api_availability/google_api_availability.dart';
import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.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/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:huawei_push/huawei_push.dart' as h_push;
import '../service_request_detail_provider.dart';
class ServiceRequestUtils {
static double calculateAndAssignWorkingHours({
@ -37,7 +37,8 @@ class ServiceRequestUtils {
return -1; // Indicating invalid input
}
}
static bool isLocalUrl(String url) {
static bool isLocalUrl(String url) {
if (url.isEmpty != false) return false;
return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
}
@ -113,10 +114,10 @@ class ServiceRequestUtils {
}
}
static void scheduleOrUpdateNotification({required BuildContext context, required DateTime scheduleDateTime, required String workOrderId}) async{
static void scheduleOrUpdateNotification({required BuildContext context, required DateTime scheduleDateTime, required String workOrderId}) async {
DateTime scheduleTime = scheduleDateTime;
await NotificationManger.cancelNotificationById(workOrderId.hashCode);
NotificationManger.scheduleNotification(id: workOrderId.hashCode,title: 'Scheduled Notification', body: '$scheduleTime', scheduledNotificationDateTime: scheduleTime);
await NotificationManger.cancelNotificationById(workOrderId.hashCode);
NotificationManger.scheduleNotification(id: workOrderId.hashCode, title: 'Scheduled Notification', body: '$scheduleTime', scheduledNotificationDateTime: scheduleTime);
}
//steps:
@ -145,30 +146,29 @@ class ServiceRequestUtils {
// Select a write able calendar
final writableCalendar = calendarsResult.data?.firstWhere(
(calendar) => calendar.isReadOnly == false,
(calendar) => calendar.isReadOnly == false,
orElse: () => Calendar(id: '', name: 'Default', isReadOnly: true),
);
if (writableCalendar == null || writableCalendar.isReadOnly==true) {
if (writableCalendar == null || writableCalendar.isReadOnly == true) {
log('No writable calendar found.');
'No writable calendar found.'.showToast;
return; // Handle the case where no writable calendar exists
}
final eventsResult = await deviceCalendarPlugin.retrieveEvents(
writableCalendar.id!,
RetrieveEventsParams(startDate: start.subtract(Duration(days: 7)), endDate: end.add(Duration(days: 30))),
);
if (!(eventsResult.isSuccess && eventsResult.data != null)) {
"Failed to retrieve reminders.".showToast;
"Failed to retrieve reminders.".showToast;
return;
}
// Find an event with the matching workOrderNumber in the description
final matchingEvent = eventsResult.data!.firstWhere(
(event) => event.description?.contains('$workOrderNumber') ?? false,
orElse: () => Event('0',eventId: null),
(event) => event.description?.contains('$workOrderNumber') ?? false,
orElse: () => Event('0', eventId: null),
);
if (matchingEvent.eventId != null) {
@ -210,7 +210,6 @@ class ServiceRequestUtils {
}
}
// static void addEventToCalendar({
// required BuildContext context,
// required DateTime start,
@ -327,7 +326,6 @@ class ServiceRequestUtils {
// }
// }
// static void addEventToCalendar({required BuildContext context, required DateTime start, required DateTime end,required String title,required int ? requestId}) async {
//
//

@ -10,14 +10,14 @@ import 'package:test_sa/models/enums/work_order_next_step.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/activities_list_view.dart';
import 'package:test_sa/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/modules/cm_module/views/components/verify_arrival_view.dart';
import 'package:test_sa/modules/cm_module/views/forms/asset_retired/verify_asset_detail.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/providers/service_request_providers/reject_reason_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/activities_list_view.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/cm_module/views/components/verify_arrival_view.dart';
import 'package:test_sa/cm_module/views/forms/asset_retired/verify_asset_detail.dart';
class FooterActionButton {
static Widget footerContainer({required Widget child}) {
@ -71,13 +71,13 @@ class FooterActionButton {
}
return footerContainer(
child: AppFilledButton(
label: context.translation.close,
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
Navigator.pop(context);
},
));
label: context.translation.close,
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
Navigator.pop(context);
},
));
case WorkOrderNextStepEnum.nTakeAction:
if (requestDetailProvider.isReadOnlyRequest) {
return footerContainer(
@ -181,12 +181,7 @@ class FooterActionButton {
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => VerifyAssetDetails(
isEdit: false,
)));
Navigator.push(context, MaterialPageRoute(builder: (context) => VerifyAssetDetails(isEdit: false)));
},
));
case WorkOrderNextStepEnum.activity:

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
@ -15,20 +14,21 @@ import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/models/service_request/spare_parts.dart';
import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/cm_module/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/modules/cm_module/views/forms/spare_part/spare_part_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/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/cm_module/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/cm_module/views/forms/spare_part/spare_part_request.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'bottom_sheets/service_request_bottomsheet.dart';
class ActivitiesListView extends StatefulWidget {
static const String id = "/activities-list";
@ -289,8 +289,8 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
StatusLabel(
label: activity.activityMaintenance?.activityType,
// textColor: AppColor.white10,
textColor: AppColor.getActivityTypeTextColor(activity.activityMaintenance?.activityType??''),
backgroundColor: AppColor.getActivityTypeBgColor(activity.activityMaintenance?.activityType??''),
textColor: AppColor.getActivityTypeTextColor(activity.activityMaintenance?.activityType ?? ''),
backgroundColor: AppColor.getActivityTypeBgColor(activity.activityMaintenance?.activityType ?? ''),
// backgroundColor: AppColor.primary10,
),
],
@ -365,7 +365,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
if (requestDetailProvider.isReadOnlyRequest) {
onEditMaintenanceRequestPress(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
onEditMaintenanceRequestPress(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
}
});
}
@ -426,10 +426,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
} catch (e) {
print("Edit error $e");
}
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => MaintenanceRequestForm(),
));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => MaintenanceRequestForm()));
}
}
@ -447,6 +444,7 @@ class ReorderWidget extends StatelessWidget {
);
}
}
class DummyClass extends StatelessWidget {
const DummyClass({super.key});
@ -455,6 +453,3 @@ class DummyClass extends StatelessWidget {
return const Placeholder();
}
}

@ -0,0 +1,87 @@
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/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/service_request/search_work_order.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/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 '../../../../views/widgets/requests/request_status.dart';
//// //todo @delete
// class ActivityCardView extends StatelessWidget {
// final SearchWorkOrder workOrder;
// final ServiceRequest serviceRequest;
// final bool showShadow;
//
// const ActivityCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
// return Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// StatusLabel(
// label: workOrder.currentSituation!.name,
// textColor: AppColor.getRequestStatusTextColorByName(context, workOrder.currentSituation!.name!),
// backgroundColor: AppColor.getRequestStatusColorByName(context, workOrder.currentSituation!.name!),
// ),
// 8.height,
// Text(serviceRequest.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// Text(
// '${context.translation.assetName}: ${workOrder.callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.currentSituation}: ${workOrder.currentSituation!.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// 16.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// context.translation.readCompleteThread,
// style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline),
// ),
// // 4.width,
// // Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
// ],
// ),
// ],
// ).onPress(() {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrder, serviceRequest: serviceRequest)),
// );
// }).expanded,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
// "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrder)),
// );
// }),
// if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "",
// textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
// ],
// )
// ],
// ).toShadowContainer(context);
// }
// }

@ -3,13 +3,13 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/forms/asset_retired/verify_asset_detail.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/extensions/string_extensions.dart';
class AssetDetailCard extends StatelessWidget {
const AssetDetailCard({Key? key}) : super(key: key);

@ -6,7 +6,8 @@ import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/app_strings/app_asset.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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';
@ -18,23 +19,22 @@ import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/modules/cm_module/views/forms/spare_part/spare_part_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/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart';
import 'package:test_sa/providers/work_order/need_visit_reminder_time_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/cm_module/views/forms/spare_part/spare_part_request.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import '../../../../controllers/providers/api/service_requests_provider.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/app_text_form_field.dart';
class ServiceRequestBottomSheet {
static buildBottomSheetParent({required BuildContext context, required Widget childWidget, bool? isDismissible}) {
return showModalBottomSheet(

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
@ -10,8 +10,10 @@ 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/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';

@ -7,9 +7,10 @@ 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/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'bottom_sheets/service_request_bottomsheet.dart';
class InitialVisitCard extends StatefulWidget {
const InitialVisitCard({Key? key}) : super(key: key);

@ -2,12 +2,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/cm_module/views/components/asset_detail_card.dart';
import 'package:test_sa/cm_module/views/components/initial_visit_card.dart';
import 'package:test_sa/cm_module/views/forms/asset_retired/asset_retired.dart';
import 'package:test_sa/cm_module/views/forms/cost/cost_detail_form_screen.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
@ -20,6 +14,9 @@ import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/enums/work_order_next_step.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/forms/asset_retired/asset_retired.dart';
import 'package:test_sa/modules/cm_module/views/forms/cost/cost_detail_form_screen.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/views/widgets/images/multi_image_picker.dart';
@ -27,6 +24,10 @@ 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 'action_button/footer_action_button.dart';
import 'asset_detail_card.dart';
import 'initial_visit_card.dart';
class ServiceRequestDetailView extends StatefulWidget {
ServiceRequestDetailView({Key? key}) : super(key: key);

@ -0,0 +1,66 @@
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/models/size_config.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class TimerWidget extends StatefulWidget {
const TimerWidget({Key? key}) : super(key: key);
@override
_TimerWidgetState createState() => _TimerWidgetState();
}
class _TimerWidgetState extends State<TimerWidget> {
Offset position = Offset(SizeConfig.screenWidth! - 100, SizeConfig.screenHeight! / 2 - 50);
@override
Widget build(BuildContext context) {
return Consumer<ServiceRequestDetailProvider>(
builder: (context, provider, child) {
return Positioned(
left: position.dx,
top: position.dy,
child: GestureDetector(
onPanEnd: (details) {},
onPanUpdate: (details) {
setState(() {
if (position.dy + details.delta.dy > 0 && position.dy + details.delta.dy < 560) {
position = Offset(
position.dx + details.delta.dx, // Update the X position
position.dy + details.delta.dy, // Update the Y position
);
}
});
},
child: buildTimerWidget(provider),
),
);
},
);
}
Widget buildTimerWidget(ServiceRequestDetailProvider provider) {
return Container(
padding: EdgeInsets.all(8.toScreenHeight),
width: 80.toScreenWidth,
decoration: BoxDecoration(
color: AppColor.black10,
borderRadius: BorderRadius.circular(10),
),
child: Column(
children: [
'drag_icon'.toSvgAsset(),
12.height,
provider.currentTime.toString().toDragAbleTimerFormat.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
2.height,
context.translation.hours.tinyFont(context).custom(color: AppColor.white10, fontWeight: FontWeight.w600),
],
),
);
}
}

@ -5,22 +5,22 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.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/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/cm_module/views/components/verify_otp_view.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/qr/scan_qr.dart';
import 'bottom_sheets/service_request_bottomsheet.dart';
import 'verify_otp_view.dart';
class VerifyArrivalView extends StatefulWidget {
const VerifyArrivalView({Key? key}) : super(key: key);
@ -211,7 +211,6 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
Future<File?> onFilePicker() async {
File? fileImage;
final pickedFile = await ImagePicker().pickImage(source: ImageSource.camera, imageQuality: 70, maxWidth: 800, maxHeight: 800);
if (pickedFile != null) {
fileImage = File(pickedFile.path);
}
@ -219,30 +218,28 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
}
void showWaitingBottomSheet({required ServiceRequestDetailProvider requestDetailProvider, int? verificationTypeId}) async {
await requestDetailProvider.engineerConfirmArrival(
workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, verificationTypeId: verificationTypeId ?? 2, photoInfo: '', otp: '');
await requestDetailProvider.engineerConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, verificationTypeId: verificationTypeId ?? 2, photoInfo: '', otp: '');
requestDetailProvider.isVerifyArrivalBottomSheetOpen = true;
ServiceRequestBottomSheet.waitingForApprovalBottomSheet(context: context).then((value){
requestDetailProvider.isVerifyArrivalBottomSheetOpen=false;
ServiceRequestBottomSheet.waitingForApprovalBottomSheet(context: context).then((value) {
requestDetailProvider.isVerifyArrivalBottomSheetOpen = false;
});
bool? isArrived = await ServiceRequestUtils.listenForApproval();
bool? isArrived = await ServiceRequestUtils.listenForApproval();
if (requestDetailProvider.isVerifyArrivalBottomSheetOpen) {
if (isArrived == null) {
"Requester not confirmed you arrival".showToast;
Navigator.pop(context);
} else if (isArrived) {
requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
Navigator.pop(context);
Navigator.pop(context);
requestDetailProvider.startTimer();
requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
Navigator.pop(context);
Navigator.pop(context);
requestDetailProvider.startTimer();
} else {
requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
"Requester not confirmed you arrival".showToast;
Navigator.pop(context);
Navigator.pop(context);
}
}
else{
} else {
log('bottomsheet closed ...');
}
}

@ -5,10 +5,10 @@ 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/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
class VerifyOtpView extends StatelessWidget {
const VerifyOtpView({Key? key}) : super(key: key);
@ -50,21 +50,18 @@ class VerifyOtpView extends StatelessWidget {
),
),
onCompleted: (pin) async {
debugPrint('pin i got is $pin');
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
int? status;
//TODO add loader..
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
status = await requestDetailProvider.verifyOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, otpCode: pin);
if (status == 200) {
await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
await requestDetailProvider.engineerConfirmArrival(
workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, verificationTypeId: 3, photoInfo: '', otp: pin, assetNo: '');
Navigator.pop(context);
Navigator.pop(context);
requestDetailProvider.startTimer();
Navigator.pop(context);
}
else{
} else {
Navigator.pop(context);
}
},

@ -0,0 +1,87 @@
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/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/service_request/search_work_order.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/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 '../../../../views/widgets/requests/request_status.dart';
//// //todo @delete
// class WorkOrderCardView extends StatelessWidget {
// final SearchWorkOrder workOrder;
// final ServiceRequest serviceRequest;
// final bool showShadow;
//
// WorkOrderCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
// return Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// StatusLabel(
// label: workOrder.currentSituation!.name,
// textColor: AppColor.getRequestStatusTextColorByName(context, workOrder.currentSituation?.name),
// backgroundColor: AppColor.getRequestStatusColorByName(context, workOrder.currentSituation?.name),
// ),
// 8.height,
// Text(serviceRequest.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// Text(
// '${context.translation.assetName}: ${workOrder.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.currentSituation}: ${workOrder.currentSituation?.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// 16.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// context.translation.readCompleteThread,
// style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline),
// ),
// // 4.width,
// // Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
// ],
// ),
// ],
// ).onPress(() {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrder, serviceRequest: serviceRequest)),
// );
// }).expanded,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
// "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrder)),
// );
// }),
// if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "",
// textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
// ],
// )
// ],
// ).toShadowContainer(context);
// }
// }

@ -1,5 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
@ -7,17 +8,17 @@ 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/helper_data_models/asset_retired/asset_retired_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/work_order/retirement_type_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../../../models/lookup.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class AssetRetired extends StatefulWidget {
static const String id = "/asset-tobe-retired";
@ -83,9 +84,7 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
onSelect: (value) {
if (value != null) {
requestDetailProvider.assetRetiredHelperModel?.retirmentReason = value;
setState(() {
});
setState(() {});
}
},
),

@ -10,24 +10,23 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/fault_description.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
import 'package:test_sa/providers/work_order/fault_description_provider.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import '../../../../../../models/lookup.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class VerifyAssetDetails extends StatefulWidget {
static const String id = "/verify-asset-detail";
bool isEdit = false;

@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/service_request_detail_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/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';

@ -1,7 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
@ -9,6 +7,8 @@ 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/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.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';
@ -9,15 +8,15 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import '../../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
class ExternalMaintenanceRequest extends StatefulWidget {
static const String id = "/add-external-activity";

@ -2,22 +2,23 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_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/lookup.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/service_request_providers/last_situation_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/forms/maintenance_request/components/assistant_employee_card.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart';
import '../../../../../models/lookup.dart';
import '../../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import 'assistant_employee_card.dart';
class InternalMaintenanceRequest extends StatefulWidget {
static const String id = "/add-internal-activity";

@ -8,14 +8,14 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/cm_module/views/forms/maintenance_request/components/external_request.dart';
import 'package:test_sa/cm_module/views/forms/maintenance_request/components/internal_request.dart';
import 'components/external_request.dart';
import 'components/internal_request.dart';
class MaintenanceRequestForm extends StatefulWidget {
MaintenanceRequestForm({Key? key}) : super(key: key);

@ -4,30 +4,29 @@ import 'dart:io';
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/parts_provider.dart';
import 'package:test_sa/controllers/validator/validator.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/helper_data_models/spare_part/activity_spare_part_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/spare_parts.dart';
import 'package:test_sa/models/size_config.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/views/widgets/images/new_multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../../../models/service_request/spare_parts.dart';
import '../../../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart';
import '../../../../controllers/validator/validator.dart';
import '../../../../new_views/common_widgets/app_lazy_loading.dart';
class SparePartRequest extends StatefulWidget {
static const String id = "/spare-part-request";
@ -122,7 +121,6 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.sparePartRequest),
body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) {
print('data i got is ${requestDetailProvider.sparePartHelperModel?.sparePart?.toJson()}');
return SafeArea(
child: Form(
key: _formKey,

@ -10,12 +10,12 @@ 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/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/views/forms/work_order/components/asset_conditon_view.dart';
import 'package:test_sa/cm_module/views/forms/work_order/components/attachments_view.dart';
import 'package:test_sa/cm_module/views/forms/work_order/components/time_duration_view.dart';
class WorkOrderFormView extends StatefulWidget {
import 'components/asset_conditon_view.dart';
import 'components/attachments_view.dart';
import 'components/time_duration_view.dart';
class WorkOrderFormView extends StatefulWidget {
const WorkOrderFormView({Key? key}) : super(key: key);
@override
@ -31,71 +31,9 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
getInitialData();
});
super.initState();
}
Future<void> getInitialData() async {
// ListingVm listingVm = Provider.of<ListingVm>(context, listen: false);
// listingVm.listingPropertyType = widget.arguments['listingType'];
// if (widget.arguments['formType'] == AppConstants.addListing) {
// listingVm.landLordModel = LandLordModel();
// listingVm.listing['propertyType'] = widget.arguments['listingType'];
// if (listingVm.listing['propertyType'] == AppConstants.sell) {
// listingVm.listingParameter = 'sellParameter';
// listingVm.listing[listingVm.listingParameter] =
// SellParameter().toJson();
// listingVm.listing[listingVm.listingParameter]?['ownerDocs'] = [];
// }
// if (listingVm.listing['propertyType'] == AppConstants.rent) {
// listingVm.listingParameter = 'rentParameter';
// listingVm.listing[listingVm.listingParameter] =
// RentParameter().toJson();
// listingVm.listing[listingVm.listingParameter]?['ownerDocs'] = [];
// }
// } else if (widget.arguments['formType'] == AppConstants.editListing) {
// if (listingVm.listing['propertyType'] == AppConstants.sell) {
// listingVm.listingParameter = 'sellParameter';
// }
// if (listingVm.listing['propertyType'] == AppConstants.rent) {
// listingVm.listingParameter = 'rentParameter';
// }
// if (widget.arguments['isDuplicate'] == true) {
// FormUtils.setDuplicateValues(
// listingVm: listingVm, listType: widget.arguments['listingType']);
// }
// listingVm.formLocationController.clear();
// listingVm.formCommunityInitialValue =
// await FormUtils.setLocation(listingVm.listing, context);
// listingVm.formLocationController.text =
// listingVm.formCommunityInitialValue ?? '';
//
// listingVm.formAvailabilityDate =
// listingVm.listing[listingVm.listingParameter]['availabilityDate'] ??
// '';
// listingVm.formBuildYearDate =
// listingVm.listing[listingVm.listingParameter]['buildYear'] ?? '';
//
// listingVm.listing['photos'] ??= [];
// listingVm.listing[listingVm.listingParameter]['ownerDocs'] ??= [];
// }
// GeneralUtil.initilizePortalsSwitch(listingVm: listingVm);
// listingVm.getTenantExtent();
// await listingVm.getRegion();
// if (listingVm.listing[listingVm.listingParameter]
// ['propertyFinderLocation'] !=
// null) {
// await listingVm.getPropertyFinderLocationList(
// searchQuery: listingVm.listing[listingVm.listingParameter]
// ['propertyFinderLocation']);
// }
// await listingVm.getWaterMarkImage();
// await listingVm.getDeveloper();
// await GeneralUtil.loadPortalsLocationsData(listingVm);
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -135,7 +73,7 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
Widget bottomContainerWidget() {
return Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth,vertical: 16.toScreenHeight),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -230,11 +168,11 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
Widget getStepWidget() {
switch (activeStep) {
case 0:
return const TimeDurationView();
return const TimeDurationView();
case 1:
return AssetConditionView();
return AssetConditionView();
case 2:
return AttachmentView();
return AttachmentView();
default:
return const SizedBox();
}

@ -17,6 +17,8 @@ import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_mo
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/pending_service_request_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
@ -24,8 +26,6 @@ import 'package:test_sa/providers/service_request_providers/equipment_status_pro
import 'package:test_sa/providers/service_request_providers/priority_provider.dart';
import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart';
import 'package:test_sa/providers/service_request_providers/type_of_request_provider.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/pages/user/requests/pending_requests_screen.dart';
import 'package:test_sa/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart';
import 'package:test_sa/views/widgets/equipment/asset_picker.dart';

@ -8,11 +8,11 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/enums/work_order_next_step.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/modules/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.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/cm_module/service_request_detail_provider.dart';
import 'package:test_sa/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/cm_module/views/components/history_log_view.dart';
import 'components/history_log_view.dart';
import 'components/service_request_detail_view.dart';
class ServiceRequestDetailMain extends StatefulWidget {

@ -8,14 +8,14 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/user/ppm/update_ppm/update_ppm.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../../controllers/providers/api/user_provider.dart';
import '../../../../models/enums/user_types.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../widgets/requests/request_status.dart';
import '../../../../../controllers/providers/api/user_provider.dart';
import '../../../../../models/enums/user_types.dart';
import '../../../../../new_views/app_style/app_color.dart';
import '../../../../../new_views/common_widgets/app_filled_button.dart';
import 'update_ppm/update_ppm.dart';
class PpmDetailsPage extends StatefulWidget {
static const String id = "/visit-details";

@ -0,0 +1,65 @@
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/models/ppm/ppm.dart';
// import 'package:test_sa/new_views/common_widgets/default_app_bar.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_data_found.dart';
// import 'package:test_sa/views/widgets/ppm/ppm_item.dart';
////todo @delete
// class PpmPage extends StatefulWidget {
// static const String id = "/ppm_page";
//
// const PpmPage({Key? key}) : super(key: key);
//
// @override
// _PpmPageState createState() => _PpmPageState();
// }
//
// class _PpmPageState extends State<PpmPage> with TickerProviderStateMixin {
// late PpmProvider _visitsProvider;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
//
// @override
// Widget build(BuildContext context) {
// _visitsProvider = Provider.of<PpmProvider>(context);
// _settingProvider = Provider.of<SettingProvider>(context);
// _userProvider = Provider.of<UserProvider>(context);
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.preventiveMaintenance),
// body: SafeArea(
// child: LoadingManager(
// isLoading: _visitsProvider.isLoading,
// isFailedLoading: _visitsProvider.ppms == null,
// stateCode: _visitsProvider.stateCode,
// onRefresh: () async {
// _visitsProvider.reset();
// await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!);
// },
// child: _visitsProvider.ppms?.isEmpty ?? true
// ? NoDataFound(message: context.translation.noVisitsFound)
// : LazyLoading(
// nextPage: _visitsProvider.nextPage,
// onLazyLoad: () async {
// await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!);
// },
// child: ListView.builder(
// itemCount: _visitsProvider.ppms!.length,
// padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
// itemBuilder: (context, itemIndex) {
// Ppm ppm = _visitsProvider.ppms![itemIndex];
// return Padding(padding: const EdgeInsets.only(bottom: 8.0), child: PpmItem(ppm: ppm));
// },
// ),
// ),
// ),
// ),
// );
// }
// }

@ -11,12 +11,11 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.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/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/pentry/calibration_tool_asset_picker.dart';
import '../../../../../new_views/app_style/app_color.dart';
import '../../../../widgets/date_and_time/date_picker.dart';
class PpmCalibrationToolsForm extends StatefulWidget {
List<PreventiveVisitCalibrations>? models;

@ -0,0 +1,273 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/ppm_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/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
class PpmExternalDetailsForm extends StatefulWidget {
final List<PreventiveVisitSuppliers>? models;
const PpmExternalDetailsForm({Key? key, this.models = const <PreventiveVisitSuppliers>[]}) : super(key: key);
@override
State<PpmExternalDetailsForm> createState() => _PpmExternalDetailsFormState();
}
class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
bool isLoading = false;
//TODO add loader when adding or deleting item..
void _addNewEntry() {
setState(() {
// isLoading = true;
widget.models!.add(PreventiveVisitSuppliers(id: 0));
// Future.delayed(Duration(seconds: 1)).whenComplete(() {
// setState(() {
// isLoading = false;
// });
// });
});
}
void _removeEntry(int index) {
setState(() {
isLoading = true;
widget.models!.removeAt(index);
// isLoading = false;
});
}
@override
Widget build(BuildContext context) {
final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
return ListView.builder(
itemCount: widget.models!.length + 1,
padding: const EdgeInsets.all(16),
itemBuilder: (context, index) {
if (index == widget.models!.length) {
return Visibility(
visible: !ppmProvider.isReadOnly,
child: AppFilledButton(
label: "Add More External Details".addTranslation,
maxWidth: true,
textColor: AppColor.black10,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.white10,
icon: Icon(Icons.add_circle, color: AppColor.blueStatus(context)),
showIcon: true,
onPressed: _addNewEntry,
),
);
}
// return !isLoading
// ?
return ExternalDetailItem(
model: widget.models![index],
index: index,
onRemove: () => _removeEntry(index),
);
// : const ALoading();
},
);
}
}
class ExternalDetailItem extends StatefulWidget {
final PreventiveVisitSuppliers model;
final VoidCallback onRemove;
final int index;
const ExternalDetailItem({
Key? key,
required this.model,
required this.onRemove,
required this.index,
}) : super(key: key);
@override
State<ExternalDetailItem> createState() => _ExternalDetailItemState();
}
class _ExternalDetailItemState extends State<ExternalDetailItem> {
TextEditingController? controller;
PpmProvider? _ppmProvider;
@override
void initState() {
controller = TextEditingController(text: widget.model.workingHours != null ? widget.model.workingHours.toString() : '');
_ppmProvider = Provider.of<PpmProvider>(context, listen: false);
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
margin: EdgeInsets.only(bottom: 16.toScreenHeight),
decoration: BoxDecoration(
color: AppColor.background(context),
borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
),
child: IgnorePointer(
ignoring: _ppmProvider!.isReadOnly,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
(widget.index == 0 ? "1 /4 . External Details" : "").heading5(context),
Container(
height: 32,
width: 32,
padding: const EdgeInsets.all(6),
child: "trash".toSvgAsset(height: 20, width: 20),
).onPress(() {
widget.onRemove();
}),
],
),
16.height,
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
context: context,
title: context.translation.supplier,
initialValue: widget.model.supplier,
backgroundColor: AppColor.neutral100,
showAsBottomSheet: true,
showShadow: false,
onSelect: (supplier) {
if (supplier != null) {
setState(() {
widget.model.supplier = supplier;
});
}
},
),
8.height,
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.supplierEngineer,
enabled: widget.model.supplier != null,
backgroundColor: AppColor.neutral100,
initialValue: widget.model.suppPerson,
staticData: widget.model.supplier?.suppPersons,
showAsBottomSheet: true,
showShadow: false,
onSelect: (suppPerson) {
if (suppPerson != null) {
widget.model.suppPerson = suppPerson;
}
},
),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
ADatePicker(
label: context.translation.startTime,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: widget.model.startDateTime,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
setState(() {
widget.model.startDateTime = selectedDateTime;
});
widget.model.endDateTime = null;
controller?.clear();
ServiceRequestUtils.calculateAndAssignWorkingHours(
startTime: widget.model.startDateTime,
endTime: widget.model.endDateTime,
workingHoursController: controller!,
updateModel: (hours) {
widget.model.workingHours = hours;
},
);
}
});
},
).expanded,
8.width,
ADatePicker(
label: context.translation.endTime,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: widget.model.endDateTime,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
if (widget.model.startDateTime != null && selectedDateTime.isBefore(widget.model.startDateTime!)) {
"End Date time must be greater than start date".showToast;
return;
}
setState(() {
widget.model.endDateTime = selectedDateTime;
});
ServiceRequestUtils.calculateAndAssignWorkingHours(
startTime: widget.model.startDateTime,
endTime: widget.model.endDateTime,
workingHoursController: controller!,
updateModel: (hours) {
widget.model.workingHours = hours;
},
);
}
});
},
).expanded,
],
),
8.height,
AppTextFormField(
labelText: context.translation.workingHours,
backgroundColor: AppColor.neutral80,
controller: controller,
textAlign: TextAlign.center,
enable: false,
showShadow: false,
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
],
),
),
);
}
}

@ -8,10 +8,10 @@ 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/plan_preventive_visit/plan_preventive_visit_model.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/views/widgets/parts/auto_complete_parts_field.dart';
import '../../../../../new_views/app_style/app_color.dart';
import '../../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../widgets/parts/auto_complete_parts_field.dart';
class PpmPMKitsForm extends StatefulWidget {
final List<PreventiveVisitKits>? models;

@ -2,24 +2,22 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/ppm_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/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/models/ppm/ppm.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/user/ppm/update_ppm/ppm_external_details_form.dart';
import '../../../../../extensions/text_extensions.dart';
import 'ppm_calibration_tools_form.dart';
import 'ppm_external_details_form.dart';
import 'ppm_pm_check_list_form.dart';
import 'ppm_pm_kits_form.dart';
import 'wo_info_form.dart';

@ -2,7 +2,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
@ -11,13 +10,17 @@ import 'package:test_sa/models/device/model_definition.dart';
import 'package:test_sa/models/device/supplier.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/room_model.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/ppm_asset_availability_provider.dart';
import 'package:test_sa/providers/ppm_electrical_safety_provider.dart';
import 'package:test_sa/providers/ppm_service_provider.dart';
@ -28,11 +31,7 @@ import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/models/device/asset.dart';
import '../../../../../models/lookup.dart';
import '../../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../../widgets/timer/app_timer.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart';
class WoInfoForm extends StatefulWidget {
// final Ppm model;

@ -5,9 +5,10 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/ppm/recurrent_wo.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/room_inspection_card.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'room_inspection_card.dart';
class RoomTabsWidget extends StatefulWidget {
final RecurrentWoData? model;

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
@ -8,6 +7,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/ppm/recurrent_wo.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';

@ -5,17 +5,17 @@ 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/ppm/recurrent_wo.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../../../../../controllers/providers/api/all_requests_provider.dart';
import 'components/room_tabs_widget.dart';
import 'components/task_info_widget.dart';
class RecurrentWorkOrderView extends StatefulWidget {
static const String routeName = "/recurrent_wo";

@ -16,6 +16,7 @@ import 'package:test_sa/models/new_models/room_model.dart';
import 'package:test_sa/models/new_models/task_request/task_request_model.dart';
import 'package:test_sa/models/new_models/task_request/task_type_model.dart';
import 'package:test_sa/models/service_request/pending_service_request_model.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
@ -24,7 +25,6 @@ import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/task_request_provider/task_job_provider.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/equipment/asset_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';

@ -10,15 +10,15 @@ import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/task_request/task_request_model.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
import 'package:test_sa/views/pages/user/tasks_request/update_task_request_view.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/requests/request_status.dart';
import '../../../../controllers/providers/api/user_provider.dart';
import '../../../../models/enums/user_types.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../widgets/requests/request_status.dart';
import 'update_task_request_view.dart';
class TaskRequestDetailsView extends StatefulWidget {
static const String id = "/task-request-detail";

@ -5,16 +5,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/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/task_request_detail_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/update_task_request_view.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'task_request_detail_view.dart';
class TaskRequestItemView extends StatelessWidget {
final Data? requestData;
final RequestsDetails? requestDetails;

@ -3,7 +3,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
@ -15,6 +14,8 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/task_request/task_request_model.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
@ -25,8 +26,6 @@ import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/task_request_provider/task_job_provider.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
@ -186,11 +185,11 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
taskModel?.statusValue = status;
if (validate(model: taskModel)) {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
List<TaskJobAttachment> attachement = [];
List<TaskJobAttachment> attachment = [];
for (var item in _files) {
attachement.add(TaskJobAttachment(id: 0, name: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path));
attachment.add(TaskJobAttachment(id: 0, name: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path));
}
taskModel?.taskJobAttachments = attachement;
taskModel?.taskJobAttachments = attachment;
taskModel?.timerModelList?.forEach((timer) {
int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
taskModel.taskJobActivityEngineerTimers?.add(

@ -1,9 +1,10 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_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';
@ -13,20 +14,19 @@ import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:test_sa/models/new_models/mapped_sites.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/gas_request_providers/cylinder_size_provider.dart';
import 'package:test_sa/providers/gas_request_providers/cylinder_type_provider.dart';
import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart';
import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import '../../controllers/providers/api/gas_refill_provider.dart';
import '../common_widgets/default_app_bar.dart';
class GasRefillRequestForm extends StatefulWidget {
static const String routeName = "/gas_refill_request_form";

@ -4,11 +4,12 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/modules/cm_module/views/nurse/create_new_request_view.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/create_task_view.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/gas_refill_request_form.dart';
import 'package:test_sa/cm_module/views/nurse/create_new_request_view.dart';
import 'package:test_sa/views/pages/device_transfer/create__device_transfer_request.dart';
import 'package:test_sa/views/pages/user/tasks_request/create_task_view.dart';
class CreateRequestTypeBottomSheet extends StatelessWidget {
final bool isEngineer;

@ -6,10 +6,9 @@ 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/modules/pm_module/ppm_wo/ppm_details_page.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';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class PpmItemView extends StatelessWidget {
final Data? requestData;

@ -6,10 +6,10 @@ 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/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../../views/widgets/requests/request_status.dart';
class RecurrentWoItemView extends StatelessWidget {
final Data? requestData;

@ -1,14 +1,13 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/task_request_item_view.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/device_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/recurrent_wo_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/task_request_detail_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/task_request_item_view.dart';
class RequestPaginatedListview extends StatelessWidget {
final List<Data> list;

@ -10,10 +10,9 @@ 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/cm_module/views/service_request_detail_main_view.dart';
import '../../../../views/widgets/requests/request_status.dart';
import '../../../app_style/app_color.dart';
import 'package:test_sa/modules/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class ServiceRequestItemView extends StatelessWidget {
final Data? requestData;

@ -4,12 +4,12 @@ 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/modules/tm_module/tasks_wo/task_request_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/device_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/recurrent_wo_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
import 'package:test_sa/views/pages/user/tasks_request/task_request_item_view.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class RequestItemViewList extends StatelessWidget {
@ -27,18 +27,18 @@ class RequestItemViewList extends StatelessWidget {
shrinkWrap: true,
itemBuilder: (cxt, index) {
if (isLoading) return const SizedBox().toRequestShimmer(cxt, isLoading);
switch(list[index].transactionType){
switch (list[index].transactionType) {
case 1:
return ServiceRequestItemView(requestDetails: list[index]);
case 2:
return GasRefillItemView(requestDetails: list[index]);
return GasRefillItemView(requestDetails: list[index]);
case 3:
return DeviceItemView(requestDetails: list[index]);
case 4:
return PpmItemView(requestDetails: list[index]);
case 5:
return RecurrentWoItemView(requestDetails: list[index]);
case 6:
case 6:
return TaskRequestItemView(requestDetails: list[index]);
default:
Container(
@ -46,26 +46,7 @@ class RequestItemViewList extends StatelessWidget {
width: double.infinity,
color: Colors.grey,
);
}
// bool isServiceRequest = list[index].transactionType == 1;
// bool isGasRefill = list[index].transactionType == 2;
// bool isAssetTransfer = list[index].transactionType == 3;
// bool isPPMs = list[index].transactionType == 4;
//
// return isServiceRequest
// ? ServiceRequestItemView(requestDetails: list[index])
// : isGasRefill
// ? GasRefillItemView(requestDetails: list[index])
// : isPPMs
// ? PpmItemView(requestDetails: list[index])
// : isAssetTransfer
// ? AssetItemView(requestDetails: list[index])
// : Container(
// height: 100,
// width: double.infinity,
// color: Colors.grey,
// );
},
separatorBuilder: (cxt, index) => 16.height,
itemCount: isLoading ? 6 : list.length);

@ -17,12 +17,12 @@ import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/service_request/pending_service_request_model.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/providers/ppm_service_provider.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/pages/user/requests/pending_requests_screen.dart';
import 'package:test_sa/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart';
import 'package:test_sa/views/widgets/equipment/asset_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import '../../../models/new_models/building.dart';

@ -1,64 +1,64 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
class TrackDeviceTransferPage extends StatefulWidget {
static const String id = "/track-device-transfer";
const TrackDeviceTransferPage({Key? key}) : super(key: key);
@override
State<TrackDeviceTransferPage> createState() => _TrackDeviceTransferPageState();
}
class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with TickerProviderStateMixin {
late DeviceTransferProvider _deviceTransferProvider;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
@override
Widget build(BuildContext context) {
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.deviceTransfer),
body: SafeArea(
child: LoadingManager(
isLoading: _deviceTransferProvider.isLoading,
isFailedLoading: _deviceTransferProvider.items == null,
stateCode: _deviceTransferProvider.stateCode,
onRefresh: () async {
_deviceTransferProvider.reset();
await _deviceTransferProvider.getRequests(user: _userProvider.user!, host: _settingProvider.host!);
},
child: Stack(
children: [
Column(
children: [
Expanded(
child: DeviceTransferList(
nextPage: _deviceTransferProvider.nextPage,
onLazyLoad: () async {
await _deviceTransferProvider.getRequests(user: _userProvider.user!, host: _settingProvider.host!);
},
items: _deviceTransferProvider.items!,
),
),
],
),
],
),
),
),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
//
// import '../../../new_views/common_widgets/default_app_bar.dart';
//
// class TrackDeviceTransferPage extends StatefulWidget {
// static const String id = "/track-device-transfer";
//
// const TrackDeviceTransferPage({Key? key}) : super(key: key);
//
// @override
// State<TrackDeviceTransferPage> createState() => _TrackDeviceTransferPageState();
// }
//
// class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with TickerProviderStateMixin {
// late DeviceTransferProvider _deviceTransferProvider;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
//// //todo @delete
// @override
// Widget build(BuildContext context) {
// _deviceTransferProvider = Provider.of<DeviceTransferProvider>(context);
// _userProvider = Provider.of<UserProvider>(context);
// _settingProvider = Provider.of<SettingProvider>(context);
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.deviceTransfer),
// body: SafeArea(
// child: LoadingManager(
// isLoading: _deviceTransferProvider.isLoading,
// isFailedLoading: _deviceTransferProvider.items == null,
// stateCode: _deviceTransferProvider.stateCode,
// onRefresh: () async {
// _deviceTransferProvider.reset();
// await _deviceTransferProvider.getRequests(user: _userProvider.user!, host: _settingProvider.host!);
// },
// child: Stack(
// children: [
// Column(
// children: [
// Expanded(
// child: DeviceTransferList(
// nextPage: _deviceTransferProvider.nextPage,
// onLazyLoad: () async {
// await _deviceTransferProvider.getRequests(user: _userProvider.user!, host: _settingProvider.host!);
// },
// items: _deviceTransferProvider.items!,
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// ),
// );
// }
// }

@ -1,356 +1,22 @@
//older code.
// import 'dart:convert';
// import 'dart:io';
//
// import 'package:flutter/foundation.dart';
// import 'package:flutter/material.dart';
// import 'package:fluttertoast/fluttertoast.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/string_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/device/device_transfer.dart';
// import 'package:test_sa/models/device/asset_transfer_attachment.dart';
// import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
// import 'package:test_sa/providers/asset_transfer/asset_transfer_status_provider.dart';
// import 'package:test_sa/views/app_style/sizing.dart';
// import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
//
// import '../../../extensions/text_extensions.dart';
// import '../../../models/lookup.dart';
// import '../../../models/ppm/ppm.dart';
// import '../../../new_views/app_style/app_color.dart';
// import '../../../new_views/common_widgets/app_text_form_field.dart';
// import '../../../new_views/common_widgets/default_app_bar.dart';
// import '../../../new_views/common_widgets/single_item_drop_down_menu.dart';
// import '../../widgets/e_signature/e_signature.dart';
// import '../../widgets/timer/app_timer.dart';
//
// class UpdateDeviceTransfer extends StatefulWidget {
// final AssetTransfer model;
// final bool isSender;
//
// const UpdateDeviceTransfer({Key? key, required this.model, required this.isSender}) : super(key: key);
//
// @override
// State<UpdateDeviceTransfer> createState() => _UpdateDeviceTransferState();
// }
//
// class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
// final bool _isLoading = false;
// bool _validate = false;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
// Uint8List? _signature;
// late AssetTransferProvider _deviceTransferProvider;
// final TextEditingController _requestedQuantityController = TextEditingController();
// final AssetTransfer _formModel = AssetTransfer();
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
// final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
//
// List<File> _files = [];
//
// _update() async {
// if (widget.isSender) {
// _formModel.senderVisitTimers?.add(
// VisitTimers(
// id: 0,
// startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(),
// endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(),
// workingHours: ((_formModel.tbsTimer?.durationInSecond ?? 0) / 60 / 60),
// ),
// );
// } else {
// _formModel.receiverVisitTimers?.add(
// VisitTimers(
// id: 0,
// startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(),
// endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(),
// workingHours: ((_formModel.tbsTimer?.durationInSecond ?? 0) / 60 / 60),
// ),
// );
// }
//
// if (_formModel.tbsTimer?.startAt == null) {
// await Fluttertoast.showToast(msg: "Working Hours Required");
// return false;
// }
// if (_formModel.tbsTimer?.endAt == null || isTimerRunning) {
// await Fluttertoast.showToast(msg: "Please Stop The Timer");
// return false;
// }
// _validate = true;
// if (!(_formKey.currentState!.validate())) {
// setState(() {});
// return false;
// }
// _formKey.currentState!.save();
//
// if (widget.isSender) {
// _formModel.senderAttachments = [];
// } else {
// _formModel.receiverAttachments = [];
// }
//
// try {
// for (var file in _files) {
// String attachmentName = file.path;
// if (attachmentName.contains("/")) {
// attachmentName = file.path.split("/").last;
// attachmentName = "$attachmentName|${base64Encode(file.readAsBytesSync())}";
// }
//
// if (widget.isSender) {
// _formModel.senderAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName));
// } else {
// _formModel.receiverAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName));
// }
// }
// } catch (error) {
// print(error);
// }
// await _deviceTransferProvider.updateRequest(context, assetTransfer: _formModel, isSender: widget.isSender);
// }
//
// @override
// void initState() {
// _formModel.fromDetails(widget.model);
//
// if (widget.isSender) {
// _files = widget.model.senderAttachments?.map((e) => File(e.attachmentName!)).toList() ?? [];
// } else {
// _files = widget.model.receiverAttachments?.map((e) => File(e.attachmentName!)).toList() ?? [];
// }
//
// super.initState();
// }
//
// @override
// void dispose() {
// _requestedQuantityController.dispose();
// super.dispose();
// }
//
// bool isTimerRunning = false;
//
// @override
// Widget build(BuildContext context) {
// _userProvider = Provider.of<UserProvider>(context);
// _settingProvider = Provider.of<SettingProvider>(context);
// _deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false);
//
// double totalWorkingHours = widget.isSender
// ? (widget.model.senderVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0)
// : (widget.model.receiverVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0);
//
// bool isTimerEnable = widget.isSender
// ? (!(_formModel.senderMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.senderMachineStatusName?.toLowerCase().contains("complete") ?? false))
// : (!(_formModel.receiverMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.receiverMachineStatusName?.toLowerCase().contains("complete") ?? false));
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.updateRequest),
// key: _scaffoldKey,
// body: SafeArea(
// child: LoadingManager(
// isLoading: _isLoading,
// isFailedLoading: false,
// stateCode: 200,
// onRefresh: () async {},
// child: Form(
// key: _formKey,
// child: Column(
// children: [
// SingleChildScrollView(
// padding: EdgeInsets.all(12 * AppStyle.getScaleFactor(context)),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.stretch,
// children: [
// _buildCard(),
// 8.height,
// AppTextFormField(
// initialValue: widget.isSender ? _formModel.senderTravelingHours ?? "" : _formModel.receiverTravelingHours ?? "",
// labelText: context.translation.travelingHours,
// onChange: (text) {
// widget.isSender ? _formModel.senderTravelingHours = text : _formModel.receiverTravelingHours = text;
// },
// onSaved: (value) {
// widget.isSender ? _formModel.senderTravelingHours = value : _formModel.receiverTravelingHours = value;
// //_formModel?.workingHours = double.tryParse(value);
// // _formModel.travelingHours = value;
// },
// textInputType: TextInputType.number,
// //validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
// ),
// 8.height,
// if (totalWorkingHours > 0.0) ...[
// Container(
// height: 50.toScreenHeight,
// padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
// alignment: Alignment.centerLeft,
// decoration: BoxDecoration(
// color: context.isDark ? AppColor.neutral40 : AppColor.background(context),
// borderRadius: BorderRadius.circular(10),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
// ),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(
// "Total Working Time",
// style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
// ),
// Text(
// " ${formatDuration(totalWorkingHours.round())}",
// style: Theme.of(context).textTheme.bodyLarge,
// ),
// ],
// ),
// ),
// 8.height,
// ],
// AppTimer(
// label: context.translation.workingHours,
// timer: _formModel.tbsTimer,
// enabled: isTimerEnable,
// // enabled: widget.isSender ? _formModel.senderEndDate == null : (_formModel?.receiverMachineStatusName?.toLowerCase()?.contains("close") ?? false),
// timerProgress: (isRunning) {
// isTimerRunning = isRunning;
// },
// onChange: (timer) async {
// _formModel.tbsTimer = timer;
// return true;
// },
// ),
// 8.height,
// Consumer<AssetTransferStatusProvider>(builder: (context, snapshot, _) {
// return SingleItemDropDownMenu<Lookup, AssetTransferStatusProvider>(
// context: context,
// title: widget.isSender ? "Status Sender" : "Status Receiver", //,context.translation.reportStatus,
// initialValue:
// snapshot.items.firstWhere((element) => element.name == (widget.isSender ? _formModel.senderMachineStatusName : _formModel.receiverMachineStatusName), orElse: null),
// onSelect: (value) {
// if (value?.value == 4) {
// "Status cannot be change to ${value?.name}.".addTranslation.showToast;
// setState(() {});
// return;
// }
// if (widget.isSender) {
// _formModel.senderMachineStatusName = value?.name;
// _formModel.senderMachineStatusId = value?.id;
// } else {
// _formModel.receiverMachineStatusName = value?.name;
// _formModel.receiverMachineStatusId = value?.id;
// }
// setState(() {});
// },
// );
// }),
// 8.height,
// MultiFilesPicker(label: context.translation.attachImage, files: _files),
// 8.height,
// AppTextFormField(
// initialValue: widget.isSender ? _formModel.senderComment ?? "" : _formModel.receiverComment ?? "",
// labelText: context.translation.comments,
// textInputType: TextInputType.multiline,
// alignLabelWithHint: true,
// onSaved: (value) {
// widget.isSender ? _formModel.senderComment = value : _formModel.receiverComment = value;
// },
// ),
// 8.height,
// ESignature(
// title: "Signature",
// oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature,
// newSignature: _signature,
// onSaved: (signature) {
// _signature = signature;
// if (signature == null || signature.isEmpty) return;
// widget.isSender
// ? _formModel.senderEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"
// : _formModel.receiverEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
// },
// ),
// ],
// ),
// ).expanded,
// Padding(
// padding: const EdgeInsets.all(16.0),
// child: AppFilledButton(
// label: context.translation.update,
// onPressed: _update,
// ),
// ),
// ],
// ),
// ),
// ),
// ),
// );
// }
//
// _buildCard() {
// return Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// context.translation.transferDetails.heading5(context),
// 8.height,
// '${context.translation.assetName}: ${_formModel.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),
// '${context.translation.requesterName}: ${_formModel.receiverEndUserName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}'.bodyText(context),
// ],
// ).toShadowContainer(context);
// }
//
// String formatDuration(int seconds) {
// int hours = seconds ~/ 3600;
// int minutes = (seconds % 3600) ~/ 60;
// int remainingSeconds = seconds % 60;
//
// String formattedDuration = '';
// if (hours > 0) {
// formattedDuration += '$hours hour${hours > 1 ? 's' : ''} ';
// }
// if (minutes > 0) {
// formattedDuration += '$minutes minute${minutes > 1 ? 's' : ''} ';
// }
// if (remainingSeconds > 0) {
// formattedDuration += '$remainingSeconds second${remainingSeconds > 1 ? 's' : ''} ';
// }
// if (formattedDuration.isEmpty) {
// formattedDuration = 'Less than a second';
// }
//
// return formattedDuration.trim();
// }
// }
//.....new design..
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_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/widget_extensions.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/asset_transfer_attachment.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/new_models/assigned_employee.dart';
import 'package:test_sa/models/new_models/assistant_employee.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
@ -403,7 +69,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_formModel.statusValue = status;
_formModel.isSender = widget.isSender;
_formModel.assetTransferAttachments = [];
int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds?? 0;
int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0;
if (widget.isSender) {
_formModel.senderVisitTimers?.add(
@ -473,10 +139,12 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
: (widget.model.receiverVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0);
bool isTimerEnable = widget.isSender ? (!(_formModel.senderMachineStatusValue == 3)) : (!(_formModel.receiverMachineStatusValue == 3));
return Scaffold(
appBar: DefaultAppBar(title: context.translation.transferAsset,
appBar: DefaultAppBar(
title: context.translation.transferAsset,
onWillPopScope: () {
_update(status: 0);
},),
},
),
key: _scaffoldKey,
body: SafeArea(
child: LoadingManager(

File diff suppressed because it is too large Load Diff

@ -1,68 +1,68 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart';
class TrackGasRefillPage extends StatefulWidget {
static const String id = "/track-gas-refill";
const TrackGasRefillPage({Key? key}) : super(key: key);
@override
State<TrackGasRefillPage> createState() => _TrackGasRefillPageState();
}
class _TrackGasRefillPageState extends State<TrackGasRefillPage> with TickerProviderStateMixin {
GasRefillProvider? _gasRefillProvider;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
bool mostRecent = true;
@override
Widget build(BuildContext context) {
if (_gasRefillProvider == null) {
_gasRefillProvider = Provider.of<GasRefillProvider>(context);
_gasRefillProvider!.reset();
}
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.gasRefillRequest),
body: SafeArea(
child: LoadingManager(
isLoading: _gasRefillProvider!.isLoading,
isFailedLoading: _gasRefillProvider!.items == null,
stateCode: _gasRefillProvider!.stateCode,
onRefresh: () async {
_gasRefillProvider!.reset();
await _gasRefillProvider!.getRequests(user: _userProvider.user!, host: _settingProvider.host!, mostRecent: mostRecent);
},
child: Stack(
children: [
Column(
children: [
Expanded(
child: GasRefillList(
nextPage: _gasRefillProvider!.nextPage,
onLazyLoad: () async {
await _gasRefillProvider!.getRequests(user: _userProvider.user!, host: _settingProvider.host!, mostRecent: mostRecent);
},
items: _gasRefillProvider?.items ?? [],
),
),
],
),
],
),
),
),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
//
// import '../../../../new_views/common_widgets/default_app_bar.dart';
//
// class TrackGasRefillPage extends StatefulWidget {
// static const String id = "/track-gas-refill";
//// //todo @delete
// const TrackGasRefillPage({Key? key}) : super(key: key);
//
// @override
// State<TrackGasRefillPage> createState() => _TrackGasRefillPageState();
// }
//
// class _TrackGasRefillPageState extends State<TrackGasRefillPage> with TickerProviderStateMixin {
// GasRefillProvider? _gasRefillProvider;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
// bool mostRecent = true;
//
// @override
// Widget build(BuildContext context) {
// if (_gasRefillProvider == null) {
// _gasRefillProvider = Provider.of<GasRefillProvider>(context);
// _gasRefillProvider!.reset();
// }
// _userProvider = Provider.of<UserProvider>(context);
// _settingProvider = Provider.of<SettingProvider>(context);
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.gasRefillRequest),
// body: SafeArea(
// child: LoadingManager(
// isLoading: _gasRefillProvider!.isLoading,
// isFailedLoading: _gasRefillProvider!.items == null,
// stateCode: _gasRefillProvider!.stateCode,
// onRefresh: () async {
// _gasRefillProvider!.reset();
// await _gasRefillProvider!.getRequests(user: _userProvider.user!, host: _settingProvider.host!, mostRecent: mostRecent);
// },
// child: Stack(
// children: [
// Column(
// children: [
// Expanded(
// child: GasRefillList(
// nextPage: _gasRefillProvider!.nextPage,
// onLazyLoad: () async {
// await _gasRefillProvider!.getRequests(user: _userProvider.user!, host: _settingProvider.host!, mostRecent: mostRecent);
// },
// items: _gasRefillProvider?.items ?? [],
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// ),
// );
// }
// }

@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -16,12 +15,12 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';

@ -1,66 +0,0 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
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_data_found.dart';
import '../../../widgets/ppm/ppm_item.dart';
class PpmPage extends StatefulWidget {
static const String id = "/ppm_page";
const PpmPage({Key? key}) : super(key: key);
@override
_PpmPageState createState() => _PpmPageState();
}
class _PpmPageState extends State<PpmPage> with TickerProviderStateMixin {
late PpmProvider _visitsProvider;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
@override
Widget build(BuildContext context) {
_visitsProvider = Provider.of<PpmProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.preventiveMaintenance),
body: SafeArea(
child: LoadingManager(
isLoading: _visitsProvider.isLoading,
isFailedLoading: _visitsProvider.ppms == null,
stateCode: _visitsProvider.stateCode,
onRefresh: () async {
_visitsProvider.reset();
await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!);
},
child: _visitsProvider.ppms?.isEmpty ?? true
? NoDataFound(message: context.translation.noVisitsFound)
: LazyLoading(
nextPage: _visitsProvider.nextPage,
onLazyLoad: () async {
await _visitsProvider.getVisits(user: _userProvider.user!, host: _settingProvider.host!);
},
child: ListView.builder(
itemCount: _visitsProvider.ppms!.length,
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
itemBuilder: (context, itemIndex) {
Ppm ppm = _visitsProvider.ppms![itemIndex];
return Padding(padding: const EdgeInsets.only(bottom: 8.0), child: PpmItem(ppm: ppm));
},
),
),
),
),
);
}
}

@ -1,512 +0,0 @@
// import 'package:flutter/material.dart';
// import 'package:fluttertoast/fluttertoast.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/string_extensions.dart';
// import 'package:test_sa/extensions/text_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/lookup.dart';
// import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
// import 'package:test_sa/models/ppm/ppm_calibration_tools.dart';
// import 'package:test_sa/models/service_request/supplier_details.dart';
// import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
// import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
// import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
// import 'package:test_sa/providers/loading_list_notifier.dart';
// import 'package:test_sa/providers/ppm_service_provider.dart';
// import 'package:test_sa/providers/work_order/vendor_provider.dart';
//
// import 'package:test_sa/views/widgets/pentry/calibration_tool_asset_picker.dart';
//
// import '../../../../../new_views/app_style/app_color.dart';
// import '../../../../widgets/date_and_time/date_picker.dart';
//
// class PpmExternalDetailsForm extends StatefulWidget {
// final List<PreventiveVisitSuppliers>? models;
//
// const PpmExternalDetailsForm({Key? key, this.models = const <PreventiveVisitSuppliers>[]}) : super(key: key);
//
// @override
// State<PpmExternalDetailsForm> createState() => _PpmExternalDetailsFormState();
// }
//
// class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
// final TextEditingController _workingHoursController = TextEditingController();
//
// @override
// Widget build(BuildContext context) {
// return ListView.builder(
// itemCount: widget.models!.length + 1,
// padding: const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16),
// itemBuilder: (context, index) {
// if (index == widget.models!.length) {
// return AppFilledButton(
// label: "Add More External Details".addTranslation,
// maxWidth: true,
// textColor: AppColor.black10,
// buttonColor: context.isDark ? AppColor.neutral60 : AppColor.white10,
// icon: Icon(Icons.add_circle, color: AppColor.blueStatus(context)),
// showIcon: true,
// onPressed: () async {
// // if (widget.models?.isNotEmpty ?? false) {
// // if (widget.models!.last.assetId == null) {
// // await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.assetNumber}");
// // return;
// // }
// // if (widget.models!.last.calibrationDateOfTesters == null) {
// // await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.date}");
// // return;
// // }
// // }
// // widget.models!.add(PpmCalibrationTools(id: 0));
// // setState(() {});
// },
// );
// }
// final model = widget.models![index];
// // _workingHoursController.text = model.workingHours != null ? model.workingHours.toString() : '';
// return Container(
// padding: const EdgeInsets.all(16),
// margin: EdgeInsets.only(bottom: 16.toScreenHeight),
// decoration: BoxDecoration(
// color: AppColor.background(context),
// borderRadius: BorderRadius.circular(20),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
// ),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// (index == 0 ? "1 /4 . External Details" : "").heading5(context),
// "trash".toSvgAsset(height: 20, width: 15).onPress(() {
// widget.models!.remove(model);
//
// setState(() {});
// }),
// ],
// ),
// 16.height,
// SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
// context: context,
// title: context.translation.supplier,
// initialValue: model.supplier,
// backgroundColor: AppColor.neutral100,
// showAsBottomSheet: true,
// onSelect: (supplier) {
// if (supplier != null) {
// model.supplier = supplier;
// print('supplier dtails is ${supplier.toJson()}');
// setState(() {});
// }
// },
// ),
// 8.height,
// SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
// context: context,
// title: context.translation.supplierEngineer,
// enabled: model.suppPerson != null,
// backgroundColor: AppColor.neutral100,
// initialValue: model.suppPerson,
// staticData: model.supplier?.suppPersons,
// showAsBottomSheet: true,
// onSelect: (suppPerson) {
// if (suppPerson != null) {
// model.suppPerson = suppPerson;
// print('supply person is ${model.suppPerson?.toJson()}');
// }
// },
// ),
// 8.height,
// AppTextFormField(
// labelText: "Telephone",
// initialValue: model.supplier?.telephones != null && model.supplier!.telephones!.isNotEmpty ? (model.supplier?.telephones?[0].telephone ?? "").toString() : '',
// textAlign: TextAlign.center,
// backgroundColor: AppColor.neutral100,
// style: Theme.of(context).textTheme.titleMedium,
// textInputType: TextInputType.number,
// onChange: (value) {
// model.supplier?.telephones?[0].telephone = value;
// },
// ),
// 8.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// ADatePicker(
// label: context.translation.startTime,
// hideShadow: true,
// backgroundColor: AppColor.neutral100,
// date: model.startDateTime,
// formatDateWithTime: true,
// onDatePicker: (selectedDate) {
// showTimePicker(
// context: context,
// initialTime: TimeOfDay.now(),
// ).then((selectedTime) {
// // Handle the selected date and time here.
// if (selectedTime != null) {
// DateTime selectedDateTime = DateTime(
// selectedDate.year,
// selectedDate.month,
// selectedDate.day,
// selectedTime.hour,
// selectedTime.minute,
// );
// setState(() {
// model.startDateTime = selectedDateTime;
// });
// model.endDateTime = null;
// _workingHoursController.clear();
// ServiceRequestUtils.calculateAndAssignWorkingHours(
// startTime: model.startDateTime,
// endTime: model.endDateTime,
// workingHoursController: _workingHoursController,
// updateModel: (hours) {
// model.workingHours = hours;
// },
// );
// }
// });
// },
// ).expanded,
// 8.width,
// ADatePicker(
// label: context.translation.endTime,
// hideShadow: true,
// backgroundColor: AppColor.neutral100,
// date: model.endDateTime,
// formatDateWithTime: true,
// onDatePicker: (selectedDate) {
// showTimePicker(
// context: context,
// initialTime: TimeOfDay.now(),
// ).then((selectedTime) {
// // Handle the selected date and time here.
// if (selectedTime != null) {
// DateTime selectedDateTime = DateTime(
// selectedDate.year,
// selectedDate.month,
// selectedDate.day,
// selectedTime.hour,
// selectedTime.minute,
// );
// if (model.startDateTime != null && selectedDateTime.isBefore(model.startDateTime!)) {
// "End Date time must be greater then start date".showToast;
// return;
// }
// model.endDateTime = selectedDateTime;
// setState(() {});
// ServiceRequestUtils.calculateAndAssignWorkingHours(
// startTime: model.startDateTime,
// endTime: model.endDateTime,
// workingHoursController: _workingHoursController,
// updateModel: (hours) {
// model.workingHours = hours;
// },
// );
// }
// });
// },
// ).expanded,
// ],
// ),
// 8.height,
// AppTextFormField(
// labelText: context.translation.workingHours,
// backgroundColor: AppColor.neutral80,
// controller: _workingHoursController,
// suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16),
// // initialValue: model.workingHours != null ? model.workingHours.toString() : '',
// textAlign: TextAlign.center,
// labelStyle: AppTextStyles.textFieldLabelStyle,
// enable: false,
// showShadow: false,
// style: Theme.of(context).textTheme.titleMedium,
// ),
// 8.height,
// ],
// ),
// );
// },
// );
// }
// }
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/controllers/providers/api/ppm_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/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
class PpmExternalDetailsForm extends StatefulWidget {
final List<PreventiveVisitSuppliers>? models;
const PpmExternalDetailsForm({Key? key, this.models = const <PreventiveVisitSuppliers>[]}) : super(key: key);
@override
State<PpmExternalDetailsForm> createState() => _PpmExternalDetailsFormState();
}
class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
bool isLoading = false;
//TODO add loader when adding or deleting item..
void _addNewEntry() {
setState(() {
// isLoading = true;
widget.models!.add(PreventiveVisitSuppliers(id: 0));
// Future.delayed(Duration(seconds: 1)).whenComplete(() {
// setState(() {
// isLoading = false;
// });
// });
});
}
void _removeEntry(int index) {
setState(() {
isLoading = true;
widget.models!.removeAt(index);
// isLoading = false;
});
}
@override
Widget build(BuildContext context) {
final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
return ListView.builder(
itemCount: widget.models!.length + 1,
padding: const EdgeInsets.all(16),
itemBuilder: (context, index) {
if (index == widget.models!.length) {
return Visibility(
visible: !ppmProvider.isReadOnly,
child: AppFilledButton(
label: "Add More External Details".addTranslation,
maxWidth: true,
textColor: AppColor.black10,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.white10,
icon: Icon(Icons.add_circle, color: AppColor.blueStatus(context)),
showIcon: true,
onPressed: _addNewEntry,
),
);
}
// return !isLoading
// ?
return ExternalDetailItem(
model: widget.models![index],
index: index,
onRemove: () => _removeEntry(index),
);
// : const ALoading();
},
);
}
}
class ExternalDetailItem extends StatefulWidget {
final PreventiveVisitSuppliers model;
final VoidCallback onRemove;
final int index;
const ExternalDetailItem({
Key? key,
required this.model,
required this.onRemove,
required this.index,
}) : super(key: key);
@override
State<ExternalDetailItem> createState() => _ExternalDetailItemState();
}
class _ExternalDetailItemState extends State<ExternalDetailItem> {
TextEditingController? controller;
PpmProvider? _ppmProvider;
@override
void initState() {
controller = TextEditingController(text: widget.model.workingHours != null ? widget.model.workingHours.toString() : '');
_ppmProvider= Provider.of<PpmProvider>(context,listen:false);
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
margin: EdgeInsets.only(bottom: 16.toScreenHeight),
decoration: BoxDecoration(
color: AppColor.background(context),
borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
),
child: IgnorePointer(
ignoring: _ppmProvider!.isReadOnly,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
(widget.index == 0 ? "1 /4 . External Details" : "").heading5(context),
Container(
height: 32,
width: 32,
padding: const EdgeInsets.all(6),
child: "trash".toSvgAsset(height: 20, width: 20),
).onPress(() {
widget.onRemove();
}),
],
),
16.height,
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
context: context,
title: context.translation.supplier,
initialValue: widget.model.supplier,
backgroundColor: AppColor.neutral100,
showAsBottomSheet: true,
showShadow: false,
onSelect: (supplier) {
if (supplier != null) {
setState(() {
widget.model.supplier = supplier;
});
}
},
),
8.height,
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.supplierEngineer,
enabled: widget.model.supplier != null,
backgroundColor: AppColor.neutral100,
initialValue: widget.model.suppPerson,
staticData: widget.model.supplier?.suppPersons,
showAsBottomSheet: true,
showShadow: false,
onSelect: (suppPerson) {
if (suppPerson != null) {
widget.model.suppPerson = suppPerson;
}
},
),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
ADatePicker(
label: context.translation.startTime,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: widget.model.startDateTime,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
setState(() {
widget.model.startDateTime = selectedDateTime;
});
widget.model.endDateTime = null;
controller?.clear();
ServiceRequestUtils.calculateAndAssignWorkingHours(
startTime: widget.model.startDateTime,
endTime: widget.model.endDateTime,
workingHoursController: controller!,
updateModel: (hours) {
widget.model.workingHours = hours;
},
);
}
});
},
).expanded,
8.width,
ADatePicker(
label: context.translation.endTime,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: widget.model.endDateTime,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
if (widget.model.startDateTime != null && selectedDateTime.isBefore(widget.model.startDateTime!)) {
"End Date time must be greater than start date".showToast;
return;
}
setState(() {
widget.model.endDateTime = selectedDateTime;
});
ServiceRequestUtils.calculateAndAssignWorkingHours(
startTime: widget.model.startDateTime,
endTime: widget.model.endDateTime,
workingHoursController: controller!,
updateModel: (hours) {
widget.model.workingHours = hours;
},
);
}
});
},
).expanded,
],
),
8.height,
AppTextFormField(
labelText: context.translation.workingHours,
backgroundColor: AppColor.neutral80,
controller: controller,
textAlign: TextAlign.center,
enable: false,
showShadow: false,
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
],
),
),
);
}
}

@ -4,10 +4,8 @@ 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/pending_service_request_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/modules/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/views/pages/user/requests/service_request_details.dart';
import 'package:test_sa/views/widgets/sound/sound_player.dart';
class PendingServiceRequestScreen extends StatelessWidget {

@ -1,60 +1,60 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/requests/service_request_list.dart';
class ServiceRequestsPage extends StatefulWidget {
static const String id = "/service-requests";
const ServiceRequestsPage({Key? key}) : super(key: key);
@override
_ServiceRequestsPageState createState() => _ServiceRequestsPageState();
}
class _ServiceRequestsPageState extends State<ServiceRequestsPage> with TickerProviderStateMixin {
late ServiceRequestsProvider _serviceRequestsProvider;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
final bool _expandedSearch = false;
bool _firstTime = true;
@override
Widget build(BuildContext context) {
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
if (_firstTime) {
_serviceRequestsProvider.reset();
_firstTime = false;
}
return Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceRequest),
//backgroundColor: context.isDark? :const Color(0xfff8f9fb),
body: SafeArea(
child: LoadingManager(
isLoading: _serviceRequestsProvider.isLoading,
isFailedLoading: _serviceRequestsProvider.serviceRequests == null,
stateCode: _serviceRequestsProvider.stateCode,
onRefresh: () async {
_serviceRequestsProvider.reset();
await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user!.clientId!);
},
child: ServiceRequestsList(
nextPage: _serviceRequestsProvider.nextPage,
onLazyLoad: () async {
await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user!.clientId!);
},
requests: _serviceRequestsProvider.serviceRequests!,
),
),
),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
// import 'package:test_sa/views/widgets/requests/service_request_list.dart';
// //todo @delete
// class ServiceRequestsPage extends StatefulWidget {
// static const String id = "/service-requests";
//
// const ServiceRequestsPage({Key? key}) : super(key: key);
//
// @override
// _ServiceRequestsPageState createState() => _ServiceRequestsPageState();
// }
//
// class _ServiceRequestsPageState extends State<ServiceRequestsPage> with TickerProviderStateMixin {
// late ServiceRequestsProvider _serviceRequestsProvider;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
// final bool _expandedSearch = false;
// bool _firstTime = true;
//
// @override
// Widget build(BuildContext context) {
// _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
// _userProvider = Provider.of<UserProvider>(context);
// _settingProvider = Provider.of<SettingProvider>(context);
// if (_firstTime) {
// _serviceRequestsProvider.reset();
// _firstTime = false;
// }
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.serviceRequest),
// //backgroundColor: context.isDark? :const Color(0xfff8f9fb),
// body: SafeArea(
// child: LoadingManager(
// isLoading: _serviceRequestsProvider.isLoading,
// isFailedLoading: _serviceRequestsProvider.serviceRequests == null,
// stateCode: _serviceRequestsProvider.stateCode,
// onRefresh: () async {
// _serviceRequestsProvider.reset();
// await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user!.clientId!);
// },
// child: ServiceRequestsList(
// nextPage: _serviceRequestsProvider.nextPage,
// onLazyLoad: () async {
// await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user!.clientId!);
// },
// requests: _serviceRequestsProvider.serviceRequests!,
// ),
// ),
// ),
// );
// }
// }

@ -1,302 +1,302 @@
//TODO old Flow ..
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/comments_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/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/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/views/pages/user/requests/comments_bottom_sheet.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_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/sound/sound_player.dart';
import '../../../widgets/requests/request_status.dart';
import 'first_action_bottom_sheet.dart';
class ServiceRequestDetailsPage extends StatefulWidget {
static const String id = "/call-details";
ServiceRequest serviceRequest;
ServiceRequestDetailsPage({Key? key, required this.serviceRequest}) : super(key: key);
@override
State<ServiceRequestDetailsPage> createState() => _ServiceRequestDetailsPageState();
}
class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
bool loading = false;
ServiceRequest? serviceRequest;
@override
void initState() {
super.initState();
getServiceRequest();
}
void getServiceRequest() {
loading = true;
setState(() {});
WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) async {
Provider.of<CommentsProvider>(context, listen: false).reset();
serviceRequest = await Provider.of<ServiceRequestsProvider>(context, listen: false).getServiceRequestObjectById(requestId: widget.serviceRequest.id!);
loading = false;
setState(() {});
});
}
@override
Widget build(BuildContext context) {
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
Widget informationCard(ServiceRequest serviceRequest) {
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(
children: [
StatusLabel(
label: serviceRequest.priority!.name,
id: serviceRequest.priority!.id!,
textColor: AppColor.getPriorityStatusTextColor(context, serviceRequest.priority!.id!),
backgroundColor: AppColor.getPriorityStatusColor(context, serviceRequest.priority!.id!),
),
8.width,
StatusLabel(
label: serviceRequest.statusLabel,
textColor: AppColor.getRequestStatusTextColor(context, serviceRequest.statusValue!),
backgroundColor: AppColor.getRequestStatusColor(context, serviceRequest.statusValue!),
),
1.width.expanded,
],
),
8.height,
Text(serviceRequest.deviceEnName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
8.height,
Text(
'${context.translation.assetNumber}: ${serviceRequest.device!.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.requestType}: ${serviceRequest.type!.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.equipmentStatus}: ${serviceRequest.defectType!.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.requestNo}: ${serviceRequest.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.requesterName}: ${serviceRequest.callCreatedBy?.name ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
],
).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(
serviceRequest.date!.toServiceRequestCardFormat,
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
],
)
],
),
8.height,
const Divider().defaultStyle(context),
8.height,
Text(
'${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition!.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.model}: ${serviceRequest.device!.modelDefinition!.modelName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
8.height,
if ((serviceRequest.callComments ?? "").isNotEmpty) ...[
const Divider().defaultStyle(context),
8.height,
Text(
serviceRequest.callComments!,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
],
if (serviceRequest.devicePhotos?.isNotEmpty ?? false) ...[
8.height,
const Divider().defaultStyle(context),
FilesList(images: serviceRequest.devicePhotos!),
],
if (serviceRequest.audio?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context),
16.height,
ASoundPlayer(audio: serviceRequest.audio!),
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!),
);
}),
],
).toShadowContainer(context, padding: 0);
}
return Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceDetails),
//backgroundColor: const Color(0xfff8f9fb),
body: SafeArea(
child: loading
? const ALoading().center
: serviceRequest == null
? Text(
context.translation.noDataFound,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
).center
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: informationCard(serviceRequest!),
).expanded,
if (userProvider.user!.type == UsersTypes.engineer || (serviceRequest!.statusValue == 5 || serviceRequest!.statusValue == 3))
(serviceRequest?.firstAction == null
? AppFilledButton(
label: context.translation.firstAction,
maxWidth: true,
onPressed: () async {
bool shouldReloadData = (await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => FirstActionBottomSheet(request: serviceRequest!),
)) as bool;
if (shouldReloadData ?? false) {
getServiceRequest();
}
},
)
: AppFilledButton(
label: context.translation.viewWorkOrder,
maxWidth: true,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WorkOrderListPage(serviceRequest: serviceRequest)),
);
// Navigator.of(context).pushNamed(WorkOrderListPage.id, arguments: serviceRequest);
},
))
.paddingOnly(start: 16, end: 16, bottom: 24),
],
),
),
);
}
}
//
// //TODO old Flow ..
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/comments_provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/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/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/views/pages/user/requests/comments_bottom_sheet.dart';
// import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_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/sound/sound_player.dart';
//
// import '../../../widgets/requests/request_status.dart';
// import 'first_action_bottom_sheet.dart';
//// //todo @delete
// class ServiceRequestDetailsPage extends StatefulWidget {
// static const String id = "/call-details";
// ServiceRequest serviceRequest;
//
// ServiceRequestDetailsPage({Key? key, required this.serviceRequest}) : super(key: key);
//
// @override
// State<ServiceRequestDetailsPage> createState() => _ServiceRequestDetailsPageState();
// }
//
// class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
// bool loading = false;
// ServiceRequest? serviceRequest;
//
// @override
// void initState() {
// super.initState();
// getServiceRequest();
// }
//
// void getServiceRequest() {
// loading = true;
// setState(() {});
// WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) async {
// Provider.of<CommentsProvider>(context, listen: false).reset();
// serviceRequest = await Provider.of<ServiceRequestsProvider>(context, listen: false).getServiceRequestObjectById(requestId: widget.serviceRequest.id!);
// loading = false;
// setState(() {});
// });
// }
//
// @override
// Widget build(BuildContext context) {
// UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
//
// Widget informationCard(ServiceRequest serviceRequest) {
// 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(
// children: [
// StatusLabel(
// label: serviceRequest.priority!.name,
// id: serviceRequest.priority!.id!,
// textColor: AppColor.getPriorityStatusTextColor(context, serviceRequest.priority!.id!),
// backgroundColor: AppColor.getPriorityStatusColor(context, serviceRequest.priority!.id!),
// ),
// 8.width,
// StatusLabel(
// label: serviceRequest.statusLabel,
// textColor: AppColor.getRequestStatusTextColor(context, serviceRequest.statusValue!),
// backgroundColor: AppColor.getRequestStatusColor(context, serviceRequest.statusValue!),
// ),
// 1.width.expanded,
// ],
// ),
// 8.height,
// Text(serviceRequest.deviceEnName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
// style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// 8.height,
// Text(
// '${context.translation.assetNumber}: ${serviceRequest.device!.assetNumber}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.requestType}: ${serviceRequest.type!.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.equipmentStatus}: ${serviceRequest.defectType!.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.requestNo}: ${serviceRequest.requestCode}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.requesterName}: ${serviceRequest.callCreatedBy?.name ?? "-"}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// ],
// ).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(
// serviceRequest.date!.toServiceRequestCardFormat,
// textAlign: TextAlign.end,
// style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
// ),
// ],
// )
// ],
// ),
// 8.height,
// const Divider().defaultStyle(context),
// 8.height,
// Text(
// '${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition!.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.model}: ${serviceRequest.device!.modelDefinition!.modelName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// 8.height,
// if ((serviceRequest.callComments ?? "").isNotEmpty) ...[
// const Divider().defaultStyle(context),
// 8.height,
// Text(
// serviceRequest.callComments!,
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// ],
// if (serviceRequest.devicePhotos?.isNotEmpty ?? false) ...[
// 8.height,
// const Divider().defaultStyle(context),
// FilesList(images: serviceRequest.devicePhotos!),
// ],
// if (serviceRequest.audio?.isNotEmpty ?? false) ...[
// const Divider().defaultStyle(context),
// 16.height,
// ASoundPlayer(audio: serviceRequest.audio!),
// 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!),
// );
// }),
// ],
// ).toShadowContainer(context, padding: 0);
// }
//
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.serviceDetails),
// //backgroundColor: const Color(0xfff8f9fb),
// body: SafeArea(
// child: loading
// ? const ALoading().center
// : serviceRequest == null
// ? Text(
// context.translation.noDataFound,
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ).center
// : Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// SingleChildScrollView(
// padding: const EdgeInsets.all(16),
// child: informationCard(serviceRequest!),
// ).expanded,
// if (userProvider.user!.type == UsersTypes.engineer || (serviceRequest!.statusValue == 5 || serviceRequest!.statusValue == 3))
// (serviceRequest?.firstAction == null
// ? AppFilledButton(
// label: context.translation.firstAction,
// maxWidth: true,
// onPressed: () async {
// bool shouldReloadData = (await showModalBottomSheet(
// context: context,
// useSafeArea: true,
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// builder: (context) => FirstActionBottomSheet(request: serviceRequest!),
// )) as bool;
// if (shouldReloadData ?? false) {
// getServiceRequest();
// }
// },
// )
// : AppFilledButton(
// label: context.translation.viewWorkOrder,
// maxWidth: true,
// onPressed: () {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderListPage(serviceRequest: serviceRequest)),
// );
// // Navigator.of(context).pushNamed(WorkOrderListPage.id, arguments: serviceRequest);
// },
// ))
// .paddingOnly(start: 16, end: 16, bottom: 24),
// ],
// ),
// ),
// );
// }
// }

@ -1,173 +1,173 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import '../../../../models/lookup.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../../providers/service_request_providers/equipment_status_provider.dart';
import '../../../../providers/service_request_providers/priority_provider.dart';
import '../../../../providers/service_request_providers/requested_through_provider.dart';
import '../../../../providers/service_request_providers/type_of_request_provider.dart';
import '../../../widgets/equipment/pick_asset.dart';
import '../../../widgets/images/multi_image_picker.dart';
import '../../../widgets/sound/record_sound.dart';
class UpdateServiceRequestPage extends StatefulWidget {
static const String id = "/update_service_request_page";
final ServiceRequest? serviceRequest;
const UpdateServiceRequestPage({Key? key, this.serviceRequest}) : super(key: key);
@override
State<UpdateServiceRequestPage> createState() => _UpdateServiceRequestPageState();
}
class _UpdateServiceRequestPageState extends State<UpdateServiceRequestPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
late TextEditingController _commentController;
List<File> _deviceImages = [];
late UserProvider _userProvider;
@override
void initState() {
super.initState();
_deviceImages = widget.serviceRequest?.devicePhotos?.map((e) => File(e)).toList() ?? [];
_commentController = TextEditingController(text: widget.serviceRequest?.callComments ?? "");
}
@override
void dispose() {
_commentController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context, listen: false);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.updateServiceRequest),
body: SafeArea(
child: Form(
key: _formKey,
child: Column(
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PickAsset(
editable: false,
device: widget.serviceRequest?.device,
onPickAsset: (asset) {
widget.serviceRequest!.device = asset;
setState(() {});
},
),
8.height,
SingleItemDropDownMenu<Lookup, PriorityProvider>(
context: context,
title: context.translation.priority,
initialValue: widget.serviceRequest?.priority,
onSelect: (value) {
widget.serviceRequest!.priority = value;
},
),
8.height,
SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
context: context,
title: context.translation.equipmentStatus,
initialValue: widget.serviceRequest?.defectType,
onSelect: (value) {
widget.serviceRequest!.defectType = value;
},
),
8.height,
Consumer<RequestedThroughProvider>(builder: (context, snapshot, _) {
return SingleItemDropDownMenu<Lookup, RequestedThroughProvider>(
context: context,
enabled: false,
title: context.translation.source,
initialValue: snapshot.items.firstWhere((element) => element.value == 3, orElse: null),
);
}),
8.height,
SingleItemDropDownMenu<Lookup, TypeOfRequestProvider>(
context: context,
title: context.translation.requestType,
initialValue: widget.serviceRequest?.type,
onSelect: (value) {
widget.serviceRequest!.type = value;
},
),
8.height,
MultiFilesPicker(label: context.translation.attachImage, files: _deviceImages),
((widget.serviceRequest!.devicePhotos?.isNotEmpty ?? false) ? 16 : 8).height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.callComments.heading5(context),
),
8.height,
AppTextFormField(
controller: _commentController,
labelText: context.translation.problemDesc,
initialValue: widget.serviceRequest!.callComments,
suffixIcon: "warning".toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, width: 24).paddingOnly(end: 16),
onSaved: (text) {
widget.serviceRequest!.callComments = text;
},
),
8.height,
RecordSound(
onRecord: (audio) {
widget.serviceRequest!.audio = audio;
},
enabled: widget.serviceRequest == null ? true : false,
),
16.height,
],
),
).expanded,
AppFilledButton(onPressed: _submit, label: context.translation.updateRequest),
],
),
).paddingOnly(start: 16, end: 16, bottom: 24, top: 16),
),
);
}
Future<void> _submit() async {
widget.serviceRequest?.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null);
if (_formKey.currentState!.validate() && await widget.serviceRequest!.validateNewRequest(context)) {
_formKey.currentState!.save();
widget.serviceRequest!.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList();
if (widget.serviceRequest!.audio != null) {
if (_isLocalUrl(widget.serviceRequest!.audio!)) {
final File file = File(widget.serviceRequest!.audio!);
widget.serviceRequest!.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
}
}
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await Provider.of<ServiceRequestsProvider>(context, listen: false).updateRequest(user: _userProvider.user!, request: widget.serviceRequest!);
Navigator.of(context).pop();
}
}
bool _isLocalUrl(String url) {
if (url.isEmpty != false) return false;
return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
}
}
// import 'dart:convert';
// import 'dart:io';
//
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/text_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/service_request/service_request.dart';
// import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
//
// import '../../../../models/lookup.dart';
// import '../../../../new_views/app_style/app_color.dart';
// import '../../../../new_views/common_widgets/app_filled_button.dart';
// import '../../../../new_views/common_widgets/app_lazy_loading.dart';
// import '../../../../new_views/common_widgets/app_text_form_field.dart';
// import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
// import '../../../../providers/service_request_providers/equipment_status_provider.dart';
// import '../../../../providers/service_request_providers/priority_provider.dart';
// import '../../../../providers/service_request_providers/requested_through_provider.dart';
// import '../../../../providers/service_request_providers/type_of_request_provider.dart';
// import '../../../widgets/equipment/pick_asset.dart';
// import '../../../widgets/images/multi_image_picker.dart';
// import '../../../widgets/sound/record_sound.dart';
//
// class UpdateServiceRequestPage extends StatefulWidget {
// static const String id = "/update_service_request_page";
// final ServiceRequest? serviceRequest;
//
// const UpdateServiceRequestPage({Key? key, this.serviceRequest}) : super(key: key);
//
// @override
// State<UpdateServiceRequestPage> createState() => _UpdateServiceRequestPageState();
// }
//
// class _UpdateServiceRequestPageState extends State<UpdateServiceRequestPage> {
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
// late TextEditingController _commentController;
// List<File> _deviceImages = [];
// late UserProvider _userProvider;
//// //todo @delete
// @override
// void initState() {
// super.initState();
// _deviceImages = widget.serviceRequest?.devicePhotos?.map((e) => File(e)).toList() ?? [];
// _commentController = TextEditingController(text: widget.serviceRequest?.callComments ?? "");
// }
//
// @override
// void dispose() {
// _commentController.dispose();
// super.dispose();
// }
//
// @override
// Widget build(BuildContext context) {
// _userProvider = Provider.of<UserProvider>(context, listen: false);
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.updateServiceRequest),
// body: SafeArea(
// child: Form(
// key: _formKey,
// child: Column(
// children: [
// SingleChildScrollView(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// PickAsset(
// editable: false,
// device: widget.serviceRequest?.device,
// onPickAsset: (asset) {
// widget.serviceRequest!.device = asset;
// setState(() {});
// },
// ),
// 8.height,
// SingleItemDropDownMenu<Lookup, PriorityProvider>(
// context: context,
// title: context.translation.priority,
// initialValue: widget.serviceRequest?.priority,
// onSelect: (value) {
// widget.serviceRequest!.priority = value;
// },
// ),
// 8.height,
// SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
// context: context,
// title: context.translation.equipmentStatus,
// initialValue: widget.serviceRequest?.defectType,
// onSelect: (value) {
// widget.serviceRequest!.defectType = value;
// },
// ),
// 8.height,
// Consumer<RequestedThroughProvider>(builder: (context, snapshot, _) {
// return SingleItemDropDownMenu<Lookup, RequestedThroughProvider>(
// context: context,
// enabled: false,
// title: context.translation.source,
// initialValue: snapshot.items.firstWhere((element) => element.value == 3, orElse: null),
// );
// }),
// 8.height,
// SingleItemDropDownMenu<Lookup, TypeOfRequestProvider>(
// context: context,
// title: context.translation.requestType,
// initialValue: widget.serviceRequest?.type,
// onSelect: (value) {
// widget.serviceRequest!.type = value;
// },
// ),
// 8.height,
// MultiFilesPicker(label: context.translation.attachImage, files: _deviceImages),
// ((widget.serviceRequest!.devicePhotos?.isNotEmpty ?? false) ? 16 : 8).height,
// Align(
// alignment: AlignmentDirectional.centerStart,
// child: context.translation.callComments.heading5(context),
// ),
// 8.height,
// AppTextFormField(
// controller: _commentController,
// labelText: context.translation.problemDesc,
// initialValue: widget.serviceRequest!.callComments,
// suffixIcon: "warning".toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, width: 24).paddingOnly(end: 16),
// onSaved: (text) {
// widget.serviceRequest!.callComments = text;
// },
// ),
// 8.height,
// RecordSound(
// onRecord: (audio) {
// widget.serviceRequest!.audio = audio;
// },
// enabled: widget.serviceRequest == null ? true : false,
// ),
// 16.height,
// ],
// ),
// ).expanded,
// AppFilledButton(onPressed: _submit, label: context.translation.updateRequest),
// ],
// ),
// ).paddingOnly(start: 16, end: 16, bottom: 24, top: 16),
// ),
// );
// }
//
// Future<void> _submit() async {
// widget.serviceRequest?.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null);
// if (_formKey.currentState!.validate() && await widget.serviceRequest!.validateNewRequest(context)) {
// _formKey.currentState!.save();
// widget.serviceRequest!.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList();
// if (widget.serviceRequest!.audio != null) {
// if (_isLocalUrl(widget.serviceRequest!.audio!)) {
// final File file = File(widget.serviceRequest!.audio!);
// widget.serviceRequest!.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
// }
// }
// showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
// await Provider.of<ServiceRequestsProvider>(context, listen: false).updateRequest(user: _userProvider.user!, request: widget.serviceRequest!);
// Navigator.of(context).pop();
// }
// }
//
// bool _isLocalUrl(String url) {
// if (url.isEmpty != false) return false;
// return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
// }
// }

@ -1,126 +1,126 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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/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/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import '../../../../../controllers/providers/api/user_provider.dart';
import '../../../../../models/enums/user_types.dart';
import '../../../../../models/service_request/search_work_order.dart';
import '../../../../../models/service_request/service_report.dart';
import '../../../../widgets/requests/request_status.dart';
class WorkOrderDetailsPage extends StatelessWidget {
static const String id = "/work_order_details_page";
final SearchWorkOrder? workOrder;
final ServiceRequest? serviceRequest;
const WorkOrderDetailsPage({Key? key, this.workOrder, this.serviceRequest}) : super(key: key);
@override
Widget build(BuildContext context) {
UserProvider userProvider = Provider.of<UserProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.activities),
body: FutureBuilder<ServiceReport>(
future: Provider.of<ServiceRequestsProvider>(context).getSingleServiceReport(context, reportId: workOrder!.id!.toInt()),
builder: (context, snapshot) {
final workOrderDetails = snapshot.data;
return Column(
children: [
snapshot.connectionState == ConnectionState.waiting
? const Expanded(child: ALoading())
: SingleChildScrollView(
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: workOrderDetails?.currentSituation?.name,
textColor: AppColor.getRequestStatusTextColorByName(context, workOrderDetails?.currentSituation?.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, workOrderDetails?.currentSituation?.name),
),
8.height,
Text(serviceRequest!.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
8.height,
Text(
'${context.translation.assetName}: ${workOrderDetails?.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrderDetails!.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.assignedEmployee}: ${workOrderDetails.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text('${context.translation.assetSN}: ${workOrderDetails.callRequest?.asset?.assetSerialNo ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetName}: ${workOrderDetails.callRequest?.asset?.modelDefinition?.assetName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetNumber}: ${workOrderDetails.callRequest?.asset?.assetNumber ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.model}: ${workOrderDetails.callRequest?.asset?.modelDefinition?.modelName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.site}: ${workOrderDetails.callRequest?.asset?.site?.custName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.currentSituation}: ${workOrderDetails.currentSituation?.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('Situation: ${workOrderDetails.calllastSituation?.name ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.startDate}: ${workOrderDetails.startofWorkTime?.toServiceRequestDetailsFormat ?? "" ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.endDate}: ${workOrderDetails.endofWorkTime?.toServiceRequestDetailsFormat ?? "" ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
if (workOrderDetails.attachmentsWorkOrder?.isNotEmpty ?? false) ...[
8.height,
const Divider().defaultStyle(context),
FilesList(images: workOrderDetails.attachmentsWorkOrder!.map((e) => e.name!).toList()),
],
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (userProvider.user!.type == UsersTypes.engineer && serviceRequest?.statusValue != 5 && serviceRequest?.statusValue != 3)
Align(alignment: AlignmentDirectional.centerEnd, child: "edit_icon".toSvgAsset(height: 21, width: 21)).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateServiceReport(workOrder: workOrder!, request: serviceRequest!)));
}),
// if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// Text(workOrderDetails.endofWorkTime?.toServiceRequestCardFormat ?? "",
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
)
],
).toShadowContainer(context),
).paddingAll(16).expanded,
if (userProvider.user!.type == UsersTypes.engineer && serviceRequest?.statusValue != 5 && serviceRequest?.statusValue != 3)
AppFilledButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: workOrder)),
);
},
label: context.translation.createSubWorkOrder,
).paddingAll(16),
],
);
}),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_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/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/views/pages/sub_workorder/create_sub_workorder_page.dart';
// import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart';
// import 'package:test_sa/views/widgets/images/files_list.dart';
// import 'package:test_sa/views/widgets/loaders/app_loading.dart';
//
// import '../../../../../controllers/providers/api/user_provider.dart';
// import '../../../../../models/enums/user_types.dart';
// import '../../../../../models/service_request/search_work_order.dart';
// import '../../../../../models/service_request/service_report.dart';
// import '../../../../widgets/requests/request_status.dart';
//
// class WorkOrderDetailsPage extends StatelessWidget {
// static const String id = "/work_order_details_page";
// final SearchWorkOrder? workOrder;
// final ServiceRequest? serviceRequest;
//// //todo @delete
// const WorkOrderDetailsPage({Key? key, this.workOrder, this.serviceRequest}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// UserProvider userProvider = Provider.of<UserProvider>(context);
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.activities),
// body: FutureBuilder<ServiceReport>(
// future: Provider.of<ServiceRequestsProvider>(context).getSingleServiceReport(context, reportId: workOrder!.id!.toInt()),
// builder: (context, snapshot) {
// final workOrderDetails = snapshot.data;
// return Column(
// children: [
// snapshot.connectionState == ConnectionState.waiting
// ? const Expanded(child: ALoading())
// : SingleChildScrollView(
// child: Row(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// StatusLabel(
// label: workOrderDetails?.currentSituation?.name,
// textColor: AppColor.getRequestStatusTextColorByName(context, workOrderDetails?.currentSituation?.name),
// backgroundColor: AppColor.getRequestStatusColorByName(context, workOrderDetails?.currentSituation?.name),
// ),
// 8.height,
// Text(serviceRequest!.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// 8.height,
// Text(
// '${context.translation.assetName}: ${workOrderDetails?.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.orderWorkNumber}: ${workOrderDetails!.workOrderNo}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.assignedEmployee}: ${workOrderDetails.assignedEmployee?.name ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text('${context.translation.assetSN}: ${workOrderDetails.callRequest?.asset?.assetSerialNo ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.assetName}: ${workOrderDetails.callRequest?.asset?.modelDefinition?.assetName ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.assetNumber}: ${workOrderDetails.callRequest?.asset?.assetNumber ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.model}: ${workOrderDetails.callRequest?.asset?.modelDefinition?.modelName ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.site}: ${workOrderDetails.callRequest?.asset?.site?.custName ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.currentSituation}: ${workOrderDetails.currentSituation?.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('Situation: ${workOrderDetails.calllastSituation?.name ?? '' ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.startDate}: ${workOrderDetails.startofWorkTime?.toServiceRequestDetailsFormat ?? "" ?? '' ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// Text('${context.translation.endDate}: ${workOrderDetails.endofWorkTime?.toServiceRequestDetailsFormat ?? "" ?? '' ?? ""}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// if (workOrderDetails.attachmentsWorkOrder?.isNotEmpty ?? false) ...[
// 8.height,
// const Divider().defaultStyle(context),
// FilesList(images: workOrderDetails.attachmentsWorkOrder!.map((e) => e.name!).toList()),
// ],
// ],
// ).expanded,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// children: [
// if (userProvider.user!.type == UsersTypes.engineer && serviceRequest?.statusValue != 5 && serviceRequest?.statusValue != 3)
// Align(alignment: AlignmentDirectional.centerEnd, child: "edit_icon".toSvgAsset(height: 21, width: 21)).onPress(() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateServiceReport(workOrder: workOrder!, request: serviceRequest!)));
// }),
// // if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// // Text(workOrderDetails.endofWorkTime?.toServiceRequestCardFormat ?? "",
// // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
// ],
// )
// ],
// ).toShadowContainer(context),
// ).paddingAll(16).expanded,
// if (userProvider.user!.type == UsersTypes.engineer && serviceRequest?.statusValue != 5 && serviceRequest?.statusValue != 3)
// AppFilledButton(
// onPressed: () {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: workOrder)),
// );
// },
// label: context.translation.createSubWorkOrder,
// ).paddingAll(16),
// ],
// );
// }),
// );
// }
// }

@ -1,127 +1,127 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/models/service_request/service_request.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/cm_module/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_data_found.dart';
class WorkOrderListPage extends StatelessWidget {
static const String id = "/work-order-list";
final ServiceRequest? serviceRequest;
WorkOrderListPage({Key? key, this.serviceRequest}) : super(key: key);
late ServiceRequestsProvider serviceRequestsProvider;
late UserProvider _userProvider;
@override
Widget build(BuildContext context) {
List<SearchWorkOrder> workOrders = [];
_userProvider = Provider.of<UserProvider>(context);
serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.activities),
//backgroundColor: const Color(0xfff8f9fb),
body: SafeArea(
child: FutureBuilder(
future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest!.requestCode!),
builder: (context, snap) {
if (snap.connectionState == ConnectionState.waiting) return const Center(child: CircularProgressIndicator());
workOrders = snap.data as List<SearchWorkOrder>;
return Column(
children: [
(workOrders.isEmpty)
? NoDataFound(message: context.translation.noDataFound).expanded
: ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: workOrders.length,
separatorBuilder: (czt, index) => 8.height,
itemBuilder: (context, index) {
return ActivityCardView(workOrders[index], serviceRequest!);
//older code....
// Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// StatusLabel(
// label: workOrders[index].currentSituation.name,
// textColor: AppColor.getRequestStatusTextColorByName(context, workOrders[index].currentSituation.name),
// backgroundColor: AppColor.getRequestStatusColorByName(context, workOrders[index].currentSituation.name),
// ),
// 8.height,
// Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// Text(
// '${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// Text(
// '${context.translation.currentSituation}: ${workOrders[index].currentSituation.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// ),
// 16.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// context.translation.viewDetails,
// style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
// ),
// 4.width,
// Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
// ],
// ),
// ],
// ).onPress(() {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)),
// );
// }).expanded,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
// "edit".toSvgAsset(height: 48, width: 48).onPress(() {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
// );
// }),
// if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "",
// textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
// ],
// )
// ],
// ).toShadowContainer(context);
},
).expanded,
if (_userProvider.user!.type == UsersTypes.engineer && (serviceRequest!.statusValue != 5 && serviceRequest!.statusValue != 3))
AppFilledButton(
label: context.translation.createWorkOrder,
maxWidth: true,
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreateServiceReport(request: serviceRequest!)));
},
).paddingOnly(start: 16, end: 16, bottom: 16)
],
);
},
),
),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/enums/user_types.dart';
// import 'package:test_sa/models/service_request/search_work_order.dart';
// import 'package:test_sa/models/service_request/service_request.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/cm_module/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_data_found.dart';
//// //todo @delete
// class WorkOrderListPage extends StatelessWidget {
// static const String id = "/work-order-list";
// final ServiceRequest? serviceRequest;
//
// WorkOrderListPage({Key? key, this.serviceRequest}) : super(key: key);
//
// late ServiceRequestsProvider serviceRequestsProvider;
// late UserProvider _userProvider;
//
// @override
// Widget build(BuildContext context) {
// List<SearchWorkOrder> workOrders = [];
// _userProvider = Provider.of<UserProvider>(context);
// serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
// return Scaffold(
// appBar: DefaultAppBar(title: context.translation.activities),
// //backgroundColor: const Color(0xfff8f9fb),
// body: SafeArea(
// child: FutureBuilder(
// future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest!.requestCode!),
// builder: (context, snap) {
// if (snap.connectionState == ConnectionState.waiting) return const Center(child: CircularProgressIndicator());
// workOrders = snap.data as List<SearchWorkOrder>;
// return Column(
// children: [
// (workOrders.isEmpty)
// ? NoDataFound(message: context.translation.noDataFound).expanded
// : ListView.separated(
// padding: const EdgeInsets.all(16),
// itemCount: workOrders.length,
// separatorBuilder: (czt, index) => 8.height,
// itemBuilder: (context, index) {
// return ActivityCardView(workOrders[index], serviceRequest!);
//
// //older code....
// // Row(
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // Column(
// // mainAxisSize: MainAxisSize.min,
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // StatusLabel(
// // label: workOrders[index].currentSituation.name,
// // textColor: AppColor.getRequestStatusTextColorByName(context, workOrders[index].currentSituation.name),
// // backgroundColor: AppColor.getRequestStatusColorByName(context, workOrders[index].currentSituation.name),
// // ),
// // 8.height,
// // Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// // Text(
// // '${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}',
// // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// // ),
// // Text(
// // '${context.translation.currentSituation}: ${workOrders[index].currentSituation.name}',
// // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
// // ),
// // 16.height,
// // Row(
// // mainAxisSize: MainAxisSize.min,
// // children: [
// // Text(
// // context.translation.viewDetails,
// // style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
// // ),
// // 4.width,
// // Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
// // ],
// // ),
// // ],
// // ).onPress(() {
// // Navigator.push(
// // context,
// // MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)),
// // );
// // }).expanded,
// // Column(
// // crossAxisAlignment: CrossAxisAlignment.end,
// // mainAxisAlignment: MainAxisAlignment.start,
// // children: [
// // if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
// // "edit".toSvgAsset(height: 48, width: 48).onPress(() {
// // Navigator.of(context).push(
// // MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
// // );
// // }),
// // if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
// // Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "",
// // textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
// // ],
// // )
// // ],
// // ).toShadowContainer(context);
// },
// ).expanded,
// if (_userProvider.user!.type == UsersTypes.engineer && (serviceRequest!.statusValue != 5 && serviceRequest!.statusValue != 3))
// AppFilledButton(
// label: context.translation.createWorkOrder,
// maxWidth: true,
// onPressed: () {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreateServiceReport(request: serviceRequest!)));
// },
// ).paddingOnly(start: 16, end: 16, bottom: 16)
// ],
// );
// },
// ),
// ),
// );
// }
// }

@ -3,17 +3,12 @@ import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:google_api_availability/google_api_availability.dart';
import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:provider/provider.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/main.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/cm_module/service_request_detail_provider.dart';
class RequestApprovalBottomSheet extends StatefulWidget {
RequestApprovalBottomSheet({Key? key}) : super(key: key);
@override
@ -46,11 +41,11 @@ class _RequestApprovalBottomState extends State<RequestApprovalBottomSheet> {
// });
} else {
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(message.data);
if(notificationModel.requestId!=null&&notificationModel.accept!=null){
if(notificationModel.accept=='True'){
Navigator.pop(context,true);
}else if(notificationModel.accept=='False'){
ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(message.data);
if (notificationModel.requestId != null && notificationModel.accept != null) {
if (notificationModel.accept == 'True') {
Navigator.pop(context, true);
} else if (notificationModel.accept == 'False') {
Navigator.pop(context, false);
}
}
@ -121,6 +116,7 @@ class _RequestApprovalBottomState extends State<RequestApprovalBottomSheet> {
;
}
}
class ConfirmArrivalNotificationModel {
final String? transactionType;
final String? requestId;
@ -158,4 +154,3 @@ class ConfirmArrivalNotificationModel {
};
}
}

@ -1,68 +1,68 @@
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/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import '../../../extensions/text_extensions.dart';
class DeviceTransferItem extends StatelessWidget {
final int index;
final DeviceTransfer item;
final Function(DeviceTransfer) onPressed;
const DeviceTransferItem({Key? key,required this.item,required this.onPressed,required this.index}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
context.translation.deviceTransferRequest.heading5(context),
'${context.translation.from} : ${item.senderAssignedEmployeeName}'.bodyText(context),
'${context.translation.to} : ${item.receiverAssignedEmployeeName}'.bodyText(context),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
).onPress(() => onPressed(item)),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
/// TBD
// StatusLabel(
// label: '',
// id: 0,
// textColor: AColors.getPriorityStatusTextColor(0),
// backgroundColor: AColors.getPriorityStatusColor(0)),
// 8.width,
/// TBD
//StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
1.width,
Text(item.createdOn != null ? item.createdOn!.toServiceRequestCardFormat : "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF3B3D4A))),
],
),
],
).toShadowContainer(context).paddingOnly(bottom: 8);
}
}
// 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/string_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/device/device_transfer.dart';
// import 'package:test_sa/new_views/app_style/app_color.dart';
//
// import '../../../extensions/text_extensions.dart';
//
// class DeviceTransferItem extends StatelessWidget {
// final int index;
// final DeviceTransfer item;
// final Function(DeviceTransfer) onPressed;
//
// const DeviceTransferItem({Key? key,required this.item,required this.onPressed,required this.index}) : super(key: key);
//// //todo @delete
// @override
// Widget build(BuildContext context) {
// return Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// crossAxisAlignment: CrossAxisAlignment.stretch,
// children: [
// context.translation.deviceTransferRequest.heading5(context),
// '${context.translation.from} : ${item.senderAssignedEmployeeName}'.bodyText(context),
// '${context.translation.to} : ${item.receiverAssignedEmployeeName}'.bodyText(context),
// 8.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// context.translation.viewDetails,
// style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
// ),
// 4.width,
// const Icon(
// Icons.arrow_forward,
// color: Color(0xFF4A8DB7),
// size: 14,
// )
// ],
// ).onPress(() => onPressed(item)),
// ],
// ).expanded,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// children: [
// /// TBD
// // StatusLabel(
// // label: '',
// // id: 0,
// // textColor: AColors.getPriorityStatusTextColor(0),
// // backgroundColor: AColors.getPriorityStatusColor(0)),
// // 8.width,
//
// /// TBD
// //StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
// 1.width,
// Text(item.createdOn != null ? item.createdOn!.toServiceRequestCardFormat : "",
// textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF3B3D4A))),
// ],
// ),
// ],
// ).toShadowContainer(context).paddingOnly(bottom: 8);
// }
// }

@ -1,41 +1,41 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_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_data_found.dart';
class DeviceTransferList extends StatelessWidget {
final List<DeviceTransfer> items;
final bool nextPage;
final Future<void> Function() onLazyLoad;
const DeviceTransferList({Key? key,required this.items,required this.nextPage,required this.onLazyLoad}) : super(key: key);
@override
Widget build(BuildContext context) {
if (items.isEmpty) {
return NoDataFound(
message: context.translation.noServiceRequestFound,
);
}
return LazyLoading(
nextPage: nextPage,
onLazyLoad: onLazyLoad,
child: ListView.builder(
//physics: const BouncingScrollPhysics(),
itemCount: items.length,
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
itemBuilder: (context, itemIndex) {
return DeviceTransferItem(
index: itemIndex,
item: items[itemIndex],
onPressed: (model) async {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: model)));
},
);
}),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/models/device/device_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_data_found.dart';
//
// class DeviceTransferList extends StatelessWidget {
// final List<DeviceTransfer> items;
// final bool nextPage;
// final Future<void> Function() onLazyLoad;
//// //todo @delete
// const DeviceTransferList({Key? key,required this.items,required this.nextPage,required this.onLazyLoad}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// if (items.isEmpty) {
// return NoDataFound(
// message: context.translation.noServiceRequestFound,
// );
// }
// return LazyLoading(
// nextPage: nextPage,
// onLazyLoad: onLazyLoad,
// child: ListView.builder(
// //physics: const BouncingScrollPhysics(),
// itemCount: items.length,
// padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
// itemBuilder: (context, itemIndex) {
// return DeviceTransferItem(
// index: itemIndex,
// item: items[itemIndex],
// onPressed: (model) async {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: model)));
// },
// );
// }),
// );
// }
// }

@ -1,92 +1,91 @@
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/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/ppm/ppm.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_details_page.dart';
import 'package:test_sa/views/pages/user/ppm/update_ppm/update_ppm.dart';
import '../../../controllers/providers/api/user_provider.dart';
import '../../../extensions/text_extensions.dart';
import '../requests/request_status.dart';
class PpmItem extends StatelessWidget {
final Ppm ppm;
final RequestsDetails? request;
const PpmItem({Key? key, required this.ppm, this.request}) : super(key: key);
@override
Widget build(BuildContext context) {
UserProvider userProvider = Provider.of<UserProvider>(context);
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
if (request?.priority != null)
StatusLabel(
label: request!.priority,
textColor: AppColor.getRequestStatusTextColorByName(context, request!.priority!),
backgroundColor: AppColor.getRequestStatusColorByName(context, request!.priority!),
),
if (request?.priority != null) 8.width,
StatusLabel(
label: ppm.visitStatusName,
id: ppm.deviceStatusId!.toInt(),
textColor: AppColor.getRequestStatusTextColorByName(context, ppm.visitStatusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, ppm.visitStatusName!),
),
1.width.expanded,
],
),
8.height,
ppm.assetName!.heading5(context),
8.height,
'${context.translation.assetNumber}: ${ppm.assetNumber}'.bodyText(context),
'${context.translation.assetSN}: ${ppm.assetSerialNo}'.bodyText(context),
'${context.translation.code}: ${ppm.visitCode}'.bodyText(context),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
),
4.width,
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: ppm.id!.toInt())));
}),
],
).expanded,
8.width,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (userProvider.user!.type == UsersTypes.engineer && (ppm.deviceStatusId != 270 || ppm.deviceStatusId != 269))
"edit".toSvgAsset(height: 48, width: 48).onPress(() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: ppm, details: request, planPreventiveVisit: null,)));
}),
if (userProvider.user!.type == UsersTypes.engineer && (ppm.deviceStatusId != 270 || ppm.deviceStatusId != 269)) 8.height,
Text(
ppm.createdOn?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
],
)
],
).toShadowContainer(context).paddingOnly(bottom: 8);
}
}
// 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/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/ppm/ppm.dart';
// import 'package:test_sa/modules/pm_module/ppm_wo/ppm_details_page.dart';
// import 'package:test_sa/new_views/app_style/app_color.dart';
//
// import '../../../controllers/providers/api/user_provider.dart';
// import '../../../extensions/text_extensions.dart';
// import '../requests/request_status.dart';
//todo @delete
// class PpmItem extends StatelessWidget {
// final Ppm ppm;
// final RequestsDetails? request;
//
// const PpmItem({Key? key, required this.ppm, this.request}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// UserProvider userProvider = Provider.of<UserProvider>(context);
// return Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Row(
// children: [
// if (request?.priority != null)
// StatusLabel(
// label: request!.priority,
// textColor: AppColor.getRequestStatusTextColorByName(context, request!.priority!),
// backgroundColor: AppColor.getRequestStatusColorByName(context, request!.priority!),
// ),
// if (request?.priority != null) 8.width,
// StatusLabel(
// label: ppm.visitStatusName,
// id: ppm.deviceStatusId!.toInt(),
// textColor: AppColor.getRequestStatusTextColorByName(context, ppm.visitStatusName!),
// backgroundColor: AppColor.getRequestStatusColorByName(context, ppm.visitStatusName!),
// ),
// 1.width.expanded,
// ],
// ),
// 8.height,
// ppm.assetName!.heading5(context),
// 8.height,
// '${context.translation.assetNumber}: ${ppm.assetNumber}'.bodyText(context),
// '${context.translation.assetSN}: ${ppm.assetSerialNo}'.bodyText(context),
// '${context.translation.code}: ${ppm.visitCode}'.bodyText(context),
// 16.height,
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// context.translation.viewDetails,
// style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
// ),
// 4.width,
// Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
// ],
// ).onPress(() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: ppm.id!.toInt())));
// }),
// ],
// ).expanded,
// 8.width,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// children: [
// if (userProvider.user!.type == UsersTypes.engineer && (ppm.deviceStatusId != 270 || ppm.deviceStatusId != 269))
// "edit".toSvgAsset(height: 48, width: 48).onPress(() {
// // Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: ppm, details: request, planPreventiveVisit: null,)));
// }),
// if (userProvider.user!.type == UsersTypes.engineer && (ppm.deviceStatusId != 270 || ppm.deviceStatusId != 269)) 8.height,
// Text(
// ppm.createdOn?.toServiceRequestCardFormat ?? "",
// textAlign: TextAlign.end,
// style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
// ),
// ],
// )
// ],
// ).toShadowContainer(context).paddingOnly(bottom: 8);
// }
// }

@ -1,48 +1,48 @@
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/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_data_found.dart';
import 'package:test_sa/views/widgets/requests/service_request_item.dart';
class ServiceRequestsList extends StatelessWidget {
final List<ServiceRequest> requests;
final bool nextPage;
final Future<void> Function() onLazyLoad;
const ServiceRequestsList({Key? key,required this.requests,required this.nextPage,required this.onLazyLoad}) : super(key: key);
@override
Widget build(BuildContext context) {
print('servies request page');
if (requests.isEmpty) {
return NoDataFound(
message: context.translation.noServiceRequestFound,
);
}
return LazyLoading(
nextPage: nextPage,
onLazyLoad: onLazyLoad,
child: ListView.separated(
//physics: BouncingScrollPhysics(),
itemCount: requests.length,
padding: const EdgeInsets.all(16),
separatorBuilder: (cxt, index) => 8.height,
itemBuilder: (context, itemIndex) {
return ServiceRequestItem(
index: itemIndex,
request: requests[itemIndex],
onPressed: (request) {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => ServiceRequestDetailsPage(
serviceRequest: request,
)));
},
);
}),
);
}
}
//
// 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/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_data_found.dart';
// import 'package:test_sa/views/widgets/requests/service_request_item.dart';
//// //todo @delete
// class ServiceRequestsList extends StatelessWidget {
// final List<ServiceRequest> requests;
// final bool nextPage;
// final Future<void> Function() onLazyLoad;
//
// const ServiceRequestsList({Key? key,required this.requests,required this.nextPage,required this.onLazyLoad}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// print('servies request page');
// if (requests.isEmpty) {
// return NoDataFound(
// message: context.translation.noServiceRequestFound,
// );
// }
// return LazyLoading(
// nextPage: nextPage,
// onLazyLoad: onLazyLoad,
// child: ListView.separated(
// //physics: BouncingScrollPhysics(),
// itemCount: requests.length,
// padding: const EdgeInsets.all(16),
// separatorBuilder: (cxt, index) => 8.height,
// itemBuilder: (context, itemIndex) {
// return ServiceRequestItem(
// index: itemIndex,
// request: requests[itemIndex],
// onPressed: (request) {
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => ServiceRequestDetailsPage(
// serviceRequest: request,
// )));
// },
// );
// }),
// );
// }
// }

Loading…
Cancel
Save