diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index b8c16719..18c63a95 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -89,7 +89,7 @@ class WorkOrderData { this.closedDate, this.since, this.cmFrame, - this.lastComment, + this.rejectComment, this.callResponse, required this.workOrderHistory, required this.activities, @@ -143,7 +143,7 @@ class WorkOrderData { String? iHaveArrivedDate; String? closedDate; Lookup? rejectReason; - String? lastComment; // need to replace with reject comments. + String? rejectComment; // need to replace with reject comments. String? callResponse; // need to replace with reject comments. int? since; List workOrderHistory; @@ -166,7 +166,7 @@ class WorkOrderData { floor: json["floor"] == null ? null : Lookup.fromJson(json["floor"]), department: json["department"] == null ? null : AssetGroup.fromJson(json["department"]), room: json["room"], - lastComment: json["lastComment"], + rejectComment: json["rejectComment"], callResponse: json["callResponse"], iHaveArrivedDate: json["iHaveArrivedDate"], closedDate: json["closedDate"], @@ -527,9 +527,9 @@ class WorkOrderContactPerson { String? name; String? employeeId; String? position; - String extension; + String? extension; String? email; - String mobilePhone; + String ?mobilePhone; WorkOrderAssignedEmployee? contactUser; factory WorkOrderContactPerson.fromJson(Map json) { @@ -642,6 +642,7 @@ class ActivityMaintenance { String? supplierStartTime; String? supplierEndTime; double? supplierWorkingHours; + String? activityType; List? assistantEmployees; List? activityMaintenanceTimers; @@ -661,6 +662,7 @@ class ActivityMaintenance { this.supplierEngineer, this.supplierStartTime, this.supplierEndTime, + this.activityType, this.supplierWorkingHours, this.assistantEmployees}); @@ -670,6 +672,7 @@ class ActivityMaintenance { startTime = json['startTime']; endTime = json['endTime']; workingHours = json['workingHours']; + activityType = json['activityType']; travelHours = json['travelHours']; lastSituation = json['lastSituation'] != null ? Lookup.fromJson(json['lastSituation']) : null; repairLocation = json['repairLocation'] != null ? Lookup.fromJson(json['repairLocation']) : null; diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart index 4e4421fe..847b6b59 100644 --- a/lib/new_views/app_style/app_color.dart +++ b/lib/new_views/app_style/app_color.dart @@ -47,6 +47,7 @@ class AppColor { static const Color white60 = Color(0xffEFEFEF); static const Color white70 = Color(0xffF1F1F1); static const Color white80 = Color(0xffF2F4FA); + static const Color white90 = Color(0xffBFD1E4); static const Color white936 = Color(0xff212936); //black @@ -137,6 +138,27 @@ class AppColor { return Colors.white; } } + static Color getActivityTypeBgColor(String type) { + switch (type) { + case "Internal": + return neutral50; + case "External": + return white90; + default: + + return primary10; + } + } +static Color getActivityTypeTextColor(String type) { + switch (type) { + case "Internal": + return white10; + case "External": + return black10; + default: + return Colors.white; + } + } static Color getHistoryLogStatusColorByName(String status) { switch ((status).toLowerCase()) { diff --git a/lib/service_request_latest/service_request_detail_provider.dart b/lib/service_request_latest/service_request_detail_provider.dart index fc989218..7fa906f7 100644 --- a/lib/service_request_latest/service_request_detail_provider.dart +++ b/lib/service_request_latest/service_request_detail_provider.dart @@ -225,7 +225,8 @@ class ServiceRequestDetailProvider extends ChangeNotifier { stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - if (currentWorkOrder?.data?.status?.id == 3498) { + //need to check on value as id changed on different env. + if (currentWorkOrder?.data?.status?.value == 3 || currentWorkOrder?.data?.status?.value == 5 || currentWorkOrder?.data?.status?.value == 6) { isReadOnlyRequest = true; } else { isReadOnlyRequest = false; diff --git a/lib/service_request_latest/views/components/action_button/footer_action_button.dart b/lib/service_request_latest/views/components/action_button/footer_action_button.dart index 34446263..b5a67159 100644 --- a/lib/service_request_latest/views/components/action_button/footer_action_button.dart +++ b/lib/service_request_latest/views/components/action_button/footer_action_button.dart @@ -60,7 +60,6 @@ class FooterActionButton { case WorkOrderNextStepEnum.nTakeAction: // const SizedBox().flushBar(context: context, title: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm, message: ''); //Need to add enum for these values in future instead of static values.. - if (requestDetailProvider.isReadOnlyRequest) { return footerContainer( child: AppFilledButton( 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 6793817a..1acd0ba2 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -275,13 +275,26 @@ class _ActivitiesListViewState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ //TODO will be here when fixed from backend.. - StatusLabel( - label: activity.activityStatus?.name, - textColor: AppColor.white10, - // textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), - // backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), - backgroundColor: AppColor.primary10, + Row( + children: [ + StatusLabel( + label: activity.activityStatus?.name, + textColor: AppColor.white10, + // textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), + // backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), + backgroundColor: AppColor.primary10, + ), + 5.width, + StatusLabel( + label: activity.activityMaintenance?.activityType, + // textColor: AppColor.white10, + textColor: AppColor.getActivityTypeTextColor(activity.activityMaintenance?.activityType??''), + backgroundColor: AppColor.getActivityTypeBgColor(activity.activityMaintenance?.activityType??''), + // backgroundColor: AppColor.primary10, + ), + ], ), + // "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( diff --git a/lib/service_request_latest/views/components/asset_detail_card.dart b/lib/service_request_latest/views/components/asset_detail_card.dart index 5c4b858e..914b847d 100644 --- a/lib/service_request_latest/views/components/asset_detail_card.dart +++ b/lib/service_request_latest/views/components/asset_detail_card.dart @@ -27,25 +27,37 @@ class AssetDetailCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - StatusLabel( - label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.equipmentStatus?.name, - id: requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0, - radius: 4, - textColor: AppColor.white10, - backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0), + Row( + children: [ + StatusLabel( + label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.equipmentStatus?.name, + id: requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0, + radius: 4, + textColor: AppColor.white10, + backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0), + ), + 5.width, + StatusLabel( + label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.serviceType?.name, + id: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.serviceType?.id ?? 0, + radius: 4, + textColor: AppColor.getActivityTypeTextColor(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.serviceType?.name ?? ''), + backgroundColor: AppColor.getActivityTypeBgColor(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.serviceType?.name ?? ''), + ), + ], ), - //hide if status is closed. - if(!requestDetailProvider.isReadOnlyRequest) - "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() async{ - requestDetailProvider.refreshTimer = false; - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => VerifyAssetDetails( - isEdit: true, - ))); - requestDetailProvider.refreshTimer = true; - }), + //hide if status is closed or complete . + if (!requestDetailProvider.isReadOnlyRequest) + "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() async { + requestDetailProvider.refreshTimer = false; + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => VerifyAssetDetails( + isEdit: true, + ))); + requestDetailProvider.refreshTimer = true; + }), ]), 6.height, Text( diff --git a/lib/service_request_latest/views/components/service_request_detail_view.dart b/lib/service_request_latest/views/components/service_request_detail_view.dart index 8cf0c060..92ca9575 100644 --- a/lib/service_request_latest/views/components/service_request_detail_view.dart +++ b/lib/service_request_latest/views/components/service_request_detail_view.dart @@ -34,12 +34,13 @@ class ServiceRequestDetailView extends StatefulWidget { } class _ServiceRequestDetailViewState extends State { - List _workOrderAttachments = []; + List _workOrderAttachments = []; @override void initState() { ServiceRequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); - _workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => AttachmentModel(e.id??0, File(e.name ?? ''))).toList() ?? []; + _workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => File(e.name ?? '')).toList() ?? []; + // _workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => AttachmentModel(e.id??0, File(e.name ?? ''))).toList() ?? []; super.initState(); } @@ -79,9 +80,10 @@ class _ServiceRequestDetailViewState extends State { context: context), ], ), - if (requestProvider.timer != null && requestProvider.timer!.isActive) ...[ - const TimerWidget(), - ] + //no need to show timer as discussed with backend + // if (requestProvider.timer != null && requestProvider.timer!.isActive) ...[ + // const TimerWidget(), + // ] ], ); }); @@ -255,10 +257,10 @@ class _ServiceRequestDetailViewState extends State { '${context.translation.callResponse}: ${workOrder.callResponse ?? "-"}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), - Text( - '${context.translation.since}: ${workOrder.since != null ? '${workOrder.since} days' : '-'}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), + // Text( + // '${context.translation.since}: ${workOrder.since != null ? '${workOrder.since} days' : '-'}', + // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + // ), 8.height, if (workOrder.rejectReason != null) ...[ @@ -275,7 +277,7 @@ class _ServiceRequestDetailViewState extends State { ), 8.height, Text( - '${context.translation.comment}: ${workOrder.lastComment ?? '-'}', + '${context.translation.comment}: ${workOrder.rejectComment ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), ], @@ -296,17 +298,17 @@ class _ServiceRequestDetailViewState extends State { 8.height, const Divider().defaultStyle(context), - AttachmentPicker( + MultiFilesPicker( label: context.translation.attachments, - // files: _workOrderAttachments, - attachment: _workOrderAttachments, + files: _workOrderAttachments, + // attachment: _workOrderAttachments, buttonColor: AppColor.primary10, onlyImages: false, buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10), onChange: (attachment) { print('i am called.'); // print('attachment value is ${attachment.last.file?.path}'); - // requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: _workOrderAttachments); + requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: _workOrderAttachments); }, ), @@ -401,27 +403,27 @@ class _ServiceRequestDetailViewState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '${workOrder.workOrderContactPerson[index].name}', + '${workOrder.workOrderContactPerson[index].name??'-'}', style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), Text( - '${context.translation.employeeId}: ${workOrder.workOrderContactPerson[index].employeeId}', + '${context.translation.employeeId}: ${workOrder.workOrderContactPerson[index].employeeId??'-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), Text( - '${context.translation.telephone}: ${workOrder.workOrderContactPerson[index].mobilePhone}', + '${context.translation.telephone}: ${workOrder.workOrderContactPerson[index].mobilePhone??'-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), Text( - 'Job: ${workOrder.workOrderContactPerson[index].position}', + 'Job: ${workOrder.workOrderContactPerson[index].position??'-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), Text( - '${context.translation.email}: ${workOrder.workOrderContactPerson[index].email}', + '${context.translation.email}: ${workOrder.workOrderContactPerson[index].email??'-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), Text( - 'Extension: ${workOrder.workOrderContactPerson[index].extension}', + 'Extension: ${workOrder.workOrderContactPerson[index].extension??'-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), ], 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 41759c3c..ad0e5f01 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 @@ -18,7 +18,7 @@ import 'package:test_sa/service_request_latest/views/forms/maintenance_request/c import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/internal_request.dart'; class MaintenanceRequestForm extends StatefulWidget { - MaintenanceRequestForm({Key? key}) : super(key: key); + MaintenanceRequestForm({Key? key}) : super(key: key); @override _MaintenanceRequestFormState createState() => _MaintenanceRequestFormState(); @@ -51,9 +51,11 @@ class _MaintenanceRequestFormState extends State with Si backgroundColor: AppColor.neutral110, appBar: DefaultAppBar( title: "CM Activity", - onWillPopScope: () { - save(requestDetailProvider); - }, + onWillPopScope: requestDetailProvider.isReadOnlyRequest + ? null + : () { + save(requestDetailProvider); + }, ), body: Stack( children: [ @@ -97,19 +99,20 @@ class _MaintenanceRequestFormState extends State with Si ], ), ), - FooterActionButton.footerContainer( - child: AppFilledButton( - label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label - buttonColor: AppColor.primary10, - onPressed: () async { - save(requestDetailProvider); - }, + if (!requestDetailProvider.isReadOnlyRequest) + FooterActionButton.footerContainer( + child: AppFilledButton( + label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label + buttonColor: AppColor.primary10, + onPressed: () async { + save(requestDetailProvider); + }, + ), ), - ), ], ), ).handlePopScope(context, () { - save(requestDetailProvider); + requestDetailProvider.isReadOnlyRequest ? null : save(requestDetailProvider); }); }); }