From b836170ae830152a3c29fb8ba581d16bf9cf2bdd Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Thu, 24 Apr 2025 19:11:23 +0300 Subject: [PATCH] task detail page improvement --- lib/models/new_models/site.dart | 2 +- .../task_request/task_request_model.dart | 14 ++- .../task_request_detail_view.dart | 98 +++++++++++++------ 3 files changed, 79 insertions(+), 35 deletions(-) diff --git a/lib/models/new_models/site.dart b/lib/models/new_models/site.dart index f90ef975..e76839fd 100644 --- a/lib/models/new_models/site.dart +++ b/lib/models/new_models/site.dart @@ -11,7 +11,7 @@ class Site extends Base { Site.fromJson(dynamic json) { id = json['id']; identifier = id?.toString() ?? ''; // Handle potential null id - custName = json['custName']; + custName = json['custName']?? json['siteName']; name = custName; if (json['buildings'] != null) { buildings = []; diff --git a/lib/models/new_models/task_request/task_request_model.dart b/lib/models/new_models/task_request/task_request_model.dart index bff6152f..c6dbc606 100644 --- a/lib/models/new_models/task_request/task_request_model.dart +++ b/lib/models/new_models/task_request/task_request_model.dart @@ -75,8 +75,8 @@ class TaskData { Lookup? impactStatus; bool? isUserAcknowledge; Lookup? typeOfAlert; - dynamic riskLevel; - dynamic resource; + Lookup? riskLevel; + Lookup? resource; Lookup? actionNeeded; String? alertNo; String? estimationDeliveryDate; @@ -197,13 +197,19 @@ class TaskData { installationDepartment = json["installationDepartment"] == null ? null : Lookup.fromJson(json["installationDepartment"]); installationFloor = json["installationFloor"] == null ? null : Lookup.fromJson(json["installationFloor"]); isUserAcknowledge = json['isUserAcknowledge'] ?? false; - riskLevel = json['riskLevel']; - resource = json['resource']; + riskLevel = json["riskLevel"] == null ? null : Lookup.fromJson(json["riskLevel"]); + resource = json["resource"] == null ? null : Lookup.fromJson(json["resource"]); alertNo = json['alertNo']; estimationDeliveryDate = json['estimationDeliveryDate']; reasonOfFSCA = json['reasonOfFSCA']; correctiveActionDescription = json['correctiveActionDescription']; evaluatorUser = json['evaluatorUser'] != null ? User.fromJson(json['evaluatorUser']) : null; + + site = json["site"] == null ? null : Site.fromJson(json["site"]); + building = json["building"] == null ? null : Building.fromJson(json["building"]); + floor = json["floor"] == null ? null : Floor.fromJson(json["floor"]); + department = json["department"] == null ? null : Department.fromJson(json["department"]); + room = json["room"] == null ? null : Rooms.fromJson(json["room"]); } Map toJson() { diff --git a/lib/views/pages/user/tasks_request/task_request_detail_view.dart b/lib/views/pages/user/tasks_request/task_request_detail_view.dart index 5c0dae3c..73a7005e 100644 --- a/lib/views/pages/user/tasks_request/task_request_detail_view.dart +++ b/lib/views/pages/user/tasks_request/task_request_detail_view.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/api_routes/urls.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'; @@ -10,6 +11,7 @@ import 'package:test_sa/models/new_models/task_request/task_request_model.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/providers/task_request_provider/task_request_provider.dart'; import 'package:test_sa/views/pages/user/tasks_request/task_request_form_view.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'; @@ -92,23 +94,25 @@ class _TaskRequestDetailsViewState extends State { ], ), 8.height, + + if (taskProvider.taskRequestModel?.taskType?.isInstallation == true) ...[installationWidget(taskModel: taskProvider.taskRequestModel!)], + if (taskProvider.taskRequestModel?.taskType?.isRecallAndAlert == true) ...[ + assetDetails(taskModel: taskProvider.taskRequestModel!), + ], + if (taskProvider.taskRequestModel?.taskType?.relatedTo?.value == 2) ...[ + linkWithLocationWidget(taskModel: taskProvider.taskRequestModel!), + ], + 8.height, Text( "Task Details".addTranslation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), - 8.height, '${context.translation.taskType}: ${widget.requestDetails?.nameOfType ?? "-"}'.bodyText(context), '${context.translation.taskNo}: ${widget.requestDetails?.requestNo ?? "-"}'.bodyText(context), - if (taskProvider.taskRequestModel?.taskType?.isInstallation == true) ...[installationWidget(taskModel: taskProvider.taskRequestModel!)], if (taskProvider.taskRequestModel?.taskType?.isRecallAndAlert == true) ...[ recallAlertTypeWidget(taskModel: taskProvider.taskRequestModel!), ], - if (taskProvider.taskRequestModel?.taskType?.relatedTo?.value == 2) ...[ - linkWithLocationWidget(taskModel: taskProvider.taskRequestModel!), - ], - if (taskProvider.taskRequestModel?.taskType?.relatedTo?.value == 1) ...[ - linkWithAssetWidget(taskModel: taskProvider.taskRequestModel!), - ], + if (taskProvider.taskRequestModel?.callComment != null) ...[ const Divider().defaultStyle(context), Text( @@ -117,7 +121,12 @@ class _TaskRequestDetailsViewState extends State { ), 2.height, taskProvider.taskRequestModel!.callComment!.bodyText(context), - ] + ], + if (taskProvider.taskRequestModel?.taskJobAttachments?.isNotEmpty ?? false) ...[ + 8.height, + const Divider().defaultStyle(context), + FilesList(images: taskProvider.taskRequestModel!.taskJobAttachments!.map((toElement) => URLs.getFileUrl(toElement.name ?? '') ?? '').toList()), + ], ], ).toShadowContainer(context).paddingAll(16), ).expanded, @@ -141,60 +150,88 @@ class _TaskRequestDetailsViewState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - assetDetails(), + assetDetails(taskModel: taskModel), + const Divider().defaultStyle(context), + Text( + "Site Details".addTranslation, + style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), '${context.translation.installationSite}: ${taskModel.asset?.siteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}'.bodyText(context), '${context.translation.installationBuilding}: ${taskModel.installationBuilding?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? '-'}'.bodyText(context), '${context.translation.installationFloor}: ${taskModel.installationFloor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? '-'}'.bodyText(context), '${context.translation.installationDepartment}: ${taskModel.installationDepartment?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? '-'}'.bodyText(context), '${context.translation.installationDate}: ${taskModel.installationDate?.toAssetDetailsFormat ?? "-"}'.bodyText(context), '${context.translation.serialNo}: ${taskModel.serialNo ?? '-'}'.bodyText(context), - const Divider().defaultStyle(context), + // const Divider().defaultStyle(context), ], ); } - Widget linkWithAssetWidget({required TaskData taskModel}) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - assetDetails(), - ], - ); - } + // Widget linkWithAssetWidget({required TaskData taskModel}) { + // return Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // // assetDetails(), + // ], + // ); + // } Widget linkWithLocationWidget({required TaskData taskModel}) { - return '${context.translation.site}: ${widget.requestDetails?.site?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}'.bodyText(context); - } - - Widget assetDetails() { return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ + const Divider().defaultStyle(context), Text( - context.translation.assetDetails, + "Location Details".addTranslation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), - '${context.translation.assetName}: ${widget.requestDetails?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}'.bodyText(context), - '${context.translation.assetNo}: ${widget.requestDetails?.assetNo ?? "-"}'.bodyText(context), - '${context.translation.assetSN}: ${widget.requestDetails?.assetSN ?? "-"}'.bodyText(context), + '${context.translation.site}: ${taskModel.site?.name ?? "-"}'.bodyText(context), + '${context.translation.building}: ${taskModel.building?.name ?? "-"}'.bodyText(context), + '${context.translation.floor}: ${taskModel.floor?.name?? "-"}'.bodyText(context), + '${context.translation.department}: ${taskModel.department?.name ?? "-"}'.bodyText(context), + '${context.translation.room}: ${taskModel.room?.name ?? "-"}'.bodyText(context), ], ); } + Widget assetDetails({required TaskData taskModel}) { + return taskModel.asset != null + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.assetDetails, + style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + '${context.translation.assetName}: ${taskModel.asset?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}'.bodyText(context), + '${context.translation.assetNo}: ${taskModel.asset?.assetNumber ?? "-"}'.bodyText(context), + '${context.translation.manufacture}: ${taskModel.asset?.manufacturer ?? "-"}'.bodyText(context), + '${context.translation.model}: ${taskModel.asset?.model ?? "-"}'.bodyText(context), + ], + ) + : const SizedBox(); + } + Widget recallAlertTypeWidget({required TaskData taskModel}) { if (taskModel.typeOfAlert != null) { switch (taskModel.typeOfAlert!.value) { case 1: return Column( + mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, - children: [assetDetails(), '${context.translation.acknowledge}: ${taskModel.isUserAcknowledge ?? "-"}'.bodyText(context)], + children: [ + '${context.translation.acknowledge}: ${taskModel.isUserAcknowledge ?? "-"}'.bodyText(context), + 'Risk Level: ${taskModel.riskLevel?.name}'.bodyText(context), + 'Resource: ${taskModel.resource?.name}'.bodyText(context)], ); case 2: return Column( + mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - assetDetails(), + // assetDetails(taskModel: taskModel), '${context.translation.completedActions}: ${taskModel.actionNeeded?.name ?? "-"}'.bodyText(context), if (taskModel.actionNeeded?.value == 1) ...[ '${context.translation.impactStatus}: ${taskModel.impactStatus?.name ?? "-"}'.bodyText(context), @@ -204,9 +241,10 @@ class _TaskRequestDetailsViewState extends State { case 3: return Column( + mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - assetDetails(), + // assetDetails(taskModel: taskModel), '${context.translation.acknowledge}: ${taskModel.isUserAcknowledge ?? "-"}'.bodyText(context), '${context.translation.completedActions}: ${taskModel.actionNeeded?.name ?? "-"}'.bodyText(context), if (taskModel.actionNeeded?.value == 1) ...[