code restructured and improvements.
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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
// }
|
||||
// }
|
||||
@ -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),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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,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';
|
||||
@ -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));
|
||||
// },
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
@ -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,
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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!,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
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 ?? [],
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -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,
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -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…
Reference in New Issue