From c2f4722bb3a26088d26c8d6f2b4aac2c1ab4083e Mon Sep 17 00:00:00 2001 From: "muhammad.abbasi" Date: Thu, 3 Oct 2024 12:23:22 +0300 Subject: [PATCH] add maintenance request completed --- .../activity_maintenance_model.dart | 5 +- .../request_detail_provider.dart | 1 + .../components/activities_list_view.dart | 344 +++++++++--------- .../maintenance_request_main.dart | 8 +- 4 files changed, 182 insertions(+), 176 deletions(-) diff --git a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart index 7382a7ca..ab3dd456 100644 --- a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart +++ b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart @@ -6,6 +6,7 @@ import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart'; import 'package:test_sa/models/service_request/supplier_details.dart'; class ActivityMaintenanceHelperModel { + int? id; int? workOrderId; int? lastSituationId; Lookup? activityStatus; @@ -29,7 +30,8 @@ class ActivityMaintenanceHelperModel { List? assistantEmployees; ActivityMaintenanceHelperModel( - {this.workOrderId, + {this.id, + this.workOrderId, this.lastSituationId, this.startTime, this.supplier, @@ -52,6 +54,7 @@ class ActivityMaintenanceHelperModel { Map toJson() { final Map data = {}; + data['id'] = id; data['workOrderId'] = workOrderId; data['lastSituationId'] = lastSituationId; data['activityStatusId'] = activityStatus?.id; diff --git a/lib/service_request_latest/request_detail_provider.dart b/lib/service_request_latest/request_detail_provider.dart index 7ba850ab..410a1a61 100644 --- a/lib/service_request_latest/request_detail_provider.dart +++ b/lib/service_request_latest/request_detail_provider.dart @@ -603,6 +603,7 @@ class RequestDetailProvider extends ChangeNotifier { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); updateCurrentWorkOrder(currentWorkOrder); notifyListeners(); + return response.statusCode; } isLoading = false; notifyListeners(); diff --git a/lib/service_request_latest/views/components/activities_list_view.dart b/lib/service_request_latest/views/components/activities_list_view.dart index cfd23198..967a5554 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -17,6 +17,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; +import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart'; import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.dart'; import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; @@ -46,8 +47,8 @@ class ActivitiesListView extends StatelessWidget { itemCount: activities.length, separatorBuilder: (czt, index) => 16.height, itemBuilder: (context, index) { - if(activities[index].activityMaintenance!=null){ - return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]); + if (activities[index].activityMaintenance != null) { + return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]); } return sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]); }, @@ -69,210 +70,205 @@ class ActivitiesListView extends StatelessWidget { ); } - Widget sparePartActivityCard({required RequestDetailProvider requestDetailProvider,required UserProvider userProvider,required BuildContext context,required Activities activity}){ + Widget sparePartActivityCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider, required BuildContext context, required Activities activity}) { return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - StatusLabel( - label: activity.activityStatus?.name, - textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), - backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), - ), - "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), -if (userProvider.user!.type == UsersTypes.engineer && -requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && -requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) -Row( -crossAxisAlignment: CrossAxisAlignment.start, -mainAxisAlignment: MainAxisAlignment.spaceBetween, -children: [ -"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { -requestDetailProvider.sparePartHelperModel = SparePartHelperModel( -id: activity.id, -workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, -comment: activity.activitySparePart?.comment, -sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], -sparePart: SparePart( -id: activity.activitySparePart?.partCatalogItem?.id, -partName: activity.activitySparePart?.partCatalogItem?.partName, -partNo: activity.activitySparePart?.partCatalogItem?.partNumber), -quantity: activity.activitySparePart?.quantity, -activityStatusId: activity.activityStatus?.id, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + StatusLabel( + label: activity.activityStatus?.name, + textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), + backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), + ), + "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), + if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { + requestDetailProvider.sparePartHelperModel = SparePartHelperModel( + id: activity.id, + workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, + comment: activity.activitySparePart?.comment, + sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], + sparePart: SparePart( + id: activity.activitySparePart?.partCatalogItem?.id, + partName: activity.activitySparePart?.partCatalogItem?.partName, + partNo: activity.activitySparePart?.partCatalogItem?.partNumber), + quantity: activity.activitySparePart?.quantity, + activityStatusId: activity.activityStatus?.id, //TODO commets are missing in api response.. // comment: activity.activitySparePart?.description, -); + ); -requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); + requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); -Navigator.of(context).push(MaterialPageRoute( -builder: (_) => const SparePartRequest(), -)); -}), -24.width, -"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { -showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); -int status = -await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); -if (status == 200) { -await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); -Navigator.pop(context); -} else { -Navigator.pop(context); -} -}), -], -) -], -), -6.height, + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => const SparePartRequest(), + )); + }), + 24.width, + "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); + if (status == 200) { + await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + Navigator.pop(context); + } else { + Navigator.pop(context); + } + }), + ], + ) + ], + ), + 6.height, //activity type... -Text( -'${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', -style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), -), -3.height, -Text( -'${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -2.height, -Text( -'${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -2.height, + Text( + '${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + 3.height, + Text( + '${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + 2.height, + Text( + '${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + 2.height, //TODO description text not in api. // Text( // '${context.translation.date}: ${activity.currentSituation?.date}', // style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), // ), -if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ -const Divider().defaultStyle(context), -2.height, -Text( -activity.activitySparePart?.comment ?? "", -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -], -if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ -2.height, -const Divider().defaultStyle(context), -FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), -], -], -).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { + if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ + const Divider().defaultStyle(context), + 2.height, + Text( + activity.activitySparePart?.comment ?? "", + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + ], + if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ + 2.height, + const Divider().defaultStyle(context), + FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), + ], + ], + ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { //TODO write onview detail method.. // Navigator.push( // context, // MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())), // ); -}); + }); } - Widget maintenanceActivityCard({required RequestDetailProvider requestDetailProvider,required UserProvider userProvider,required BuildContext context,required Activities activity}){ + + Widget maintenanceActivityCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider, required BuildContext context, required Activities activity}) { return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - StatusLabel( - label: activity.activityStatus?.name, - textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), - backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), - ), - "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), -if (userProvider.user!.type == UsersTypes.engineer && -requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && -requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) -Row( -crossAxisAlignment: CrossAxisAlignment.start, -mainAxisAlignment: MainAxisAlignment.spaceBetween, -children: [ -"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { -requestDetailProvider.sparePartHelperModel = SparePartHelperModel( -id: activity.id, -workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, -comment: activity.activitySparePart?.comment, -sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], -sparePart: SparePart( -id: activity.activitySparePart?.partCatalogItem?.id, -partName: activity.activitySparePart?.partCatalogItem?.partName, -partNo: activity.activitySparePart?.partCatalogItem?.partNumber), -quantity: activity.activitySparePart?.quantity, -activityStatusId: activity.activityStatus?.id, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + StatusLabel( + label: activity.activityStatus?.name, + textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), + backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), + ), + "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), + if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { + requestDetailProvider.sparePartHelperModel = SparePartHelperModel( + id: activity.id, + workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, + comment: activity.activitySparePart?.comment, + sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], + sparePart: SparePart( + id: activity.activitySparePart?.partCatalogItem?.id, + partName: activity.activitySparePart?.partCatalogItem?.partName, + partNo: activity.activitySparePart?.partCatalogItem?.partNumber), + quantity: activity.activitySparePart?.quantity, + activityStatusId: activity.activityStatus?.id, //TODO commets are missing in api response.. // comment: activity.activitySparePart?.description, -); + ); -requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); + requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); -Navigator.of(context).push(MaterialPageRoute( -builder: (_) => const SparePartRequest(), -)); -}), -24.width, -"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { -showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); -int status = -await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); -if (status == 200) { -await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); -Navigator.pop(context); -} else { -Navigator.pop(context); -} -}), -], -) -], -), -6.height, + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => const MaintenanceRequestForm(), + )); + }), + 24.width, + "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); + if (status == 200) { + await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + Navigator.pop(context); + } else { + Navigator.pop(context); + } + }), + ], + ) + ], + ), + 6.height, //activity type... -Text( -'${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', -style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), -), -3.height, -Text( -'${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -2.height, -Text( -'${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -2.height, + Text( + '${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + 3.height, + Text( + '${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + 2.height, + Text( + '${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + 2.height, //TODO description text not in api. // Text( // '${context.translation.date}: ${activity.currentSituation?.date}', // style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), // ), -if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ -const Divider().defaultStyle(context), -2.height, -Text( -activity.activitySparePart?.comment ?? "", -style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -), -], -if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ -2.height, -const Divider().defaultStyle(context), -FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), -], -], -).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { + if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ + const Divider().defaultStyle(context), + 2.height, + Text( + activity.activitySparePart?.comment ?? "", + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + ], + if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ + 2.height, + const Divider().defaultStyle(context), + FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), + ], + ], + ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { //TODO write onview detail method.. // Navigator.push( // context, // MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())), // ); -}); + }); } } diff --git a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart index 8f12bdd9..66631c8b 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart @@ -36,7 +36,12 @@ class _MaintenanceRequestFormState extends State with Si } Future getInitialData() async { Provider.of(context, listen: false).getTypes(); - Provider.of(context,listen: false).activityMaintenanceHelperModel?.modelAssistantEmployees = MaintenanceActivityAssistantEmployees(); + RequestDetailProvider requestDetailProvider = Provider.of(context,listen: false); + + requestDetailProvider.activityMaintenanceHelperModel = ActivityMaintenanceHelperModel( + + ); + requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees = MaintenanceActivityAssistantEmployees(); } @@ -105,6 +110,7 @@ class _MaintenanceRequestFormState extends State with Si int status = -1; // if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) { status = await requestDetailProvider.createActivityMaintenanceRequest(); + print('status i got is $status'); // } else { // //TODO update logic... // status = await requestDetailProvider.updateActivityMaintenance();