From ce1044f2014fe6392f3248d9d4ea95f7a0019ec9 Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Thu, 6 Feb 2025 11:27:55 +0300 Subject: [PATCH] timer and working hours issue fixes --- .../providers/api/all_requests_provider.dart | 4 +- lib/l10n/app_ar.arb | 4 +- lib/l10n/app_en.arb | 5 +- lib/models/ppm/recurrent_wo.dart | 27 +-- .../requests/recurrent_wo_item_view.dart | 4 +- .../recurrent_wo/components/dummy_data.dart | 184 ------------------ .../components/room_inspection_card.dart | 14 +- ...info_widget.dart => task_info_widget.dart} | 4 +- .../recurrent_work_order_view.dart | 33 ++-- 9 files changed, 50 insertions(+), 229 deletions(-) delete mode 100644 lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/dummy_data.dart rename lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/{asset_info_widget.dart => task_info_widget.dart} (97%) diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index ca8801b2..94004f1f 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -62,7 +62,7 @@ class AllRequestsProvider extends ChangeNotifier { // AllRequestsAndCount? get completedRequests => _completedRequests; AllRequestsAndCount? get requestDetailList => _requestDetailList; - RecurrentWoData? _recurrentWoData; + RecurrentWoData? _recurrentWoData=RecurrentWoData(); RecurrentWoData? get recurrentWoData => _recurrentWoData; @@ -198,7 +198,6 @@ class AllRequestsProvider extends ChangeNotifier { Response response; try { response = await ApiManager.instance.get(URLs.getRecurrentPlanByIdUrl + "?planRecurrentTaskId=$id"); - stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { recurrentWoData = RecurrentWoData.fromJson(json.decode(response.body)["data"]); @@ -220,7 +219,6 @@ class AllRequestsProvider extends ChangeNotifier { Response response; try { response = await ApiManager.instance.post(URLs.updateRecurrentPlanUrl, body: recurrentWoData!.toJson(status: status)); - print('response i got back is ${response.body}'); stateCode = response.statusCode; isLoading = false; notifyListeners(); diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 6c613add..0fa2b641 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -530,10 +530,10 @@ "createdDate": "تاريخ الإنشاء", "employeeId": "رقم الموظف", "extensionNo": "رقم التمديد", - "recurrentWo": "أمر العمل المتكرر" + "checkIn": "تسجيل الدخول", "pmWo": "أمر العمل الوقائي", - "recurrentWo": "أمر العمل المتكرر", + "taskNo": "رقم المهمة", "assignEngineer": "تعيين مهندس", "scheduledDate": "التاريخ المجدول", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 143082d1..80cf85eb 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -537,10 +537,7 @@ "assignEngineer": "Assign Engineer", "scheduledDate": "Scheduled Date", "complete": "Complete", - "recurrentWo": "Recurrent WO" - "checkIn": "Check in", "createdDate": "Created Date", "employeeId": "Employee ID", - "extensionNo": "Extension No", - "recurrentWo": "Recurrent WO" + "extensionNo": "Extension No" } \ No newline at end of file diff --git a/lib/models/ppm/recurrent_wo.dart b/lib/models/ppm/recurrent_wo.dart index 0fcc44c9..acea8df2 100644 --- a/lib/models/ppm/recurrent_wo.dart +++ b/lib/models/ppm/recurrent_wo.dart @@ -49,7 +49,7 @@ class RecurrentWoData { List? planRecurrentMedicalTaskRooms; List? planRecurrentTaskTimers; TimerModel? recurrentWoTimerModel = TimerModel(); - double? totalWorkingHours=0.0; + double? totalWorkingHours = 0.0; RecurrentWoData( {this.id, @@ -82,12 +82,14 @@ class RecurrentWoData { planRecurrentMedicalTaskRooms!.add(PlanRecurrentMedicalTaskRooms.fromJson(v)); }); } + if (json['planRecurrentTaskTimers'] != null) { planRecurrentTaskTimers = []; json['planRecurrentTaskTimers'].forEach((v) { planRecurrentTaskTimers?.add(PlanRecurrentTaskTimers.fromJson(v)); }); - totalWorkingHours = json['planRecurrentTaskTimers'].fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endTime!).difference(DateTime.parse(item.startTime!)).inSeconds) ?? 0; + //TODO need to test this @waseem.. + totalWorkingHours = json['planRecurrentTaskTimers'].fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item['endDateTime']).difference(DateTime.parse(item['startDateTime'])).inSeconds) ?? 0; } } @@ -110,8 +112,7 @@ class RecurrentWoData { } if (taskRoomTabAttributesJson.isNotEmpty) { data['attributes'] = taskRoomTabAttributesJson; - } - else{ + } else { data['attributes'] = []; } @@ -182,7 +183,7 @@ class Site { Map toJson() { final Map data = {}; - data['id'] =id; + data['id'] = id; data['siteName'] = siteName; return data; } @@ -253,7 +254,7 @@ class PlanRecurrentMedicalTaskRoomTabs { if (json['planRecurrentMedicalTaskRoomTabAttributes'] != null) { planRecurrentMedicalTaskRoomTabAttributes = []; json['planRecurrentMedicalTaskRoomTabAttributes'].forEach((v) { - planRecurrentMedicalTaskRoomTabAttributes!.add( PlanRecurrentMedicalTaskRoomTabAttributes.fromJson(v)); + planRecurrentMedicalTaskRoomTabAttributes!.add(PlanRecurrentMedicalTaskRoomTabAttributes.fromJson(v)); }); } } @@ -286,7 +287,7 @@ class PlanRecurrentMedicalTaskRoomTabAttributes { Map toJson() { final Map data = {}; data['id'] = id; - data['attributeValue'] =attributeValue!=null? attributeValue.toString():attributeValue; + data['attributeValue'] = attributeValue != null ? attributeValue.toString() : attributeValue; return data; } } @@ -325,17 +326,17 @@ class PlanRecurrentTaskTimers { PlanRecurrentTaskTimers.fromJson(Map json) { id = json['id']; - startTime = json['startTime']; - endTime = json['endTime']; - workingHours = json['workingHours']; + startTime = json['startDateTime']; + endTime = json['endDateTime']; + workingHours = json['workingHour']; } Map toJson() { final Map data = {}; data['id'] = id; - data['startTime'] = startTime; - data['endTime'] = endTime; - data['workingHours'] = workingHours; + data['startDateTime'] = startTime; + data['endDateTime'] = endTime; + data['workingHour'] = workingHours; return data; } } diff --git a/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart b/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart index 3d8b7c42..35e111ab 100644 --- a/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart +++ b/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart @@ -49,8 +49,8 @@ class RecurrentWoItemView extends StatelessWidget { 8.height, (requestDetails?.nameOfType ?? context.translation.ppmRequest).heading5(context), 8.height, - '${context.translation.assetNumber}: ${requestDetails!.assetNo}'.bodyText(context), - '${context.translation.assetSN}: ${requestDetails!.assetSN}'.bodyText(context), + '${context.translation.taskNo}: ${requestDetails!.id}'.bodyText(context), + '${context.translation.site}: ${requestDetails!.site}'.bodyText(context), // '${context.translation.code}: ${request.code}'.bodyText(context), '${context.translation.requestNo}: ${requestDetails!.requestNo}'.bodyText(context), 16.height, diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/dummy_data.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/dummy_data.dart deleted file mode 100644 index 51b3e6bb..00000000 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/dummy_data.dart +++ /dev/null @@ -1,184 +0,0 @@ -class DummyData { - static List> roomData = [ - { - "name": "Room 1", - "cards": [ - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": true - }, - { - "label": "Room Humidity <35%", - "value": true - }, - { - "label": "Valve value", - "value": false - }, - { - "label": "Alarm Check", - "value": true - }, - { - "label": "Overall Result", - "value": true - } - ] - }, - { - "title": "Manifold", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": true - }, - { - "label": "Room Humidity <35%", - "value": true - }, - { - "label": "Valve value", - "value": false - }, - { - "label": "Alarm Check", - "value": true - } - ] - } - ] - }, - { - "name": "Room 2", - "cards": [ - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": true - }, - { - "label": "Room Humidity <35%", - "value": true - }, - { - "label": "Valve value", - "value": true - }, - { - "label": "Alarm Check", - "value": true - }, - { - "label": "Overall Result", - "value": true - } - ] - } - ] - }, - { - "name": "Room 3", - "cards": [ - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": false - }, - { - "label": "Room Humidity <35%", - "value": false - }, - { - "label": "Valve value", - "value": true - }, - { - "label": "Alarm Check", - "value": true - }, - { - "label": "Overall Result", - "value": false - } - ] - } - ] - }, - { - "name": "Room 4", - "cards": [ - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": false - }, - { - "label": "Room Humidity <35%", - "value": false - }, - { - "label": "Valve value", - "value": true - }, - { - "label": "Alarm Check", - "value": true - }, - { - "label": "Overall Result", - "value": false - } - ] - }, - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": false - }, - { - "label": "Room Humidity <35%", - "value": false - }, - { - "label": "Valve value", - "value": true - }, - { - "label": "Alarm Check", - "value": true - }, - ] - }, - { - "title": "General Inspection", - "info": [ - { - "label": "Room Temperature (15-35 C)", - "value": false - }, - { - "label": "Room Humidity <35%", - "value": false - }, - { - "label": "Valve value", - "value": true - }, - ] - } - - ] - } - ]; -} diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/room_inspection_card.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/room_inspection_card.dart index 56dd7470..f827aef5 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/room_inspection_card.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/room_inspection_card.dart @@ -66,7 +66,11 @@ class _RoomInspectionCardState extends State { required PlanRecurrentMedicalTaskRoomTabAttributes model, required BuildContext context, }) { - bool status = model.attributeValue; + bool status = model.attribute != null + ? model.attributeValue == 'true' + ? true + : false + : false; String statusString = status ? 'Pass' : 'Fail'; return Row( @@ -85,7 +89,7 @@ class _RoomInspectionCardState extends State { width: 41.toScreenWidth, child: CupertinoSwitch( thumbColor: status ? AppColor.green50 : AppColor.red30, - activeColor: AppColor.green30, + activeColor: AppColor.green30, trackColor: AppColor.red80, value: status, onChanged: (state) { @@ -119,7 +123,7 @@ class _RoomInspectionCardState extends State { model.attribute!.name!.bodyText2(context).custom(color: AppColor.white936, fontWeight: FontWeight.w500), TextFormField( keyboardType: TextInputType.number, - initialValue: model.attributeValue??'', + initialValue: model.attributeValue ?? '', decoration: InputDecoration( contentPadding: EdgeInsets.symmetric(horizontal: 5.toScreenWidth), filled: true, @@ -132,8 +136,8 @@ class _RoomInspectionCardState extends State { enabledBorder: border, focusedBorder: border, ), - onChanged: (value){ - model.attributeValue=value; + onChanged: (value) { + model.attributeValue = value; }, ), ], diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/asset_info_widget.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart similarity index 97% rename from lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/asset_info_widget.dart rename to lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart index 343d5e31..d3be2d64 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/asset_info_widget.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart @@ -15,10 +15,10 @@ import 'package:test_sa/service_request_latest/utilities/service_request_utils.d import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; -class RecurrentTaskAssetInfoWidget extends StatelessWidget { +class RecurrentTaskInfoWidget extends StatelessWidget { final RecurrentWoData? model; - RecurrentTaskAssetInfoWidget({super.key, required this.model}); + RecurrentTaskInfoWidget({super.key, required this.model}); @override Widget build(BuildContext context) { diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart index fb7f268d..81cfc5cf 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; @@ -9,10 +7,10 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/ppm/recurrent_wo.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; -import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/asset_info_widget.dart'; -import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/dummy_data.dart'; +import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../../../../../controllers/providers/api/all_requests_provider.dart'; @@ -60,7 +58,7 @@ class _RecurrentWorkOrderViewState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - RecurrentTaskAssetInfoWidget(model: requestProvider.recurrentWoData), + RecurrentTaskInfoWidget(model: requestProvider.recurrentWoData), // 8.height, requestProvider.recurrentWoData!.planRecurrentMedicalTaskRooms!.isNotEmpty ? Column( @@ -114,22 +112,29 @@ void _updateTask({required BuildContext context, required int status}) async { if(validate(model: allRequestsProvider.recurrentWoData!)){ allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers = allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers ?? []; - - final workingHours = allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.startAt == null ? 0 : (allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.startAt ?? DateTime.now()).difference(allRequestsProvider.recurrentWoData!.recurrentWoTimerModel!.startAt!).inSeconds; - print('working hours is ${workingHours}'); - return; + DateTime ?startTime = allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.startAt; + DateTime ?endTime = allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.endAt; + final duration = (endTime?.difference(startTime!)); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers?.add( PlanRecurrentTaskTimers( id: 0, - startTime: allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.startAt?.toIso8601String(), - endTime: allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.endAt?.toIso8601String(), - workingHours: ((allRequestsProvider.recurrentWoData?.recurrentWoTimerModel?.durationInSecond ?? 0) / 60 / 60), + startTime: startTime?.toIso8601String(), + endTime: endTime?.toIso8601String(), + workingHours: (duration?.inSeconds ?? 0) / 60 / 60, ), ); await allRequestsProvider.updateRecurrentWo( status: status, - ); - Navigator.pop(context); + ).whenComplete((){ + if(status==1){// when click complete then this request remove from the list and status changes to closed.. + //TODO some issues data not properly refreshed need to check waseem + allRequestsProvider.getAllRequests(context,typeTransaction: 5); + } + allRequestsProvider.recurrentWoData?.recurrentWoTimerModel=null; + Navigator.pop(context); + Navigator.pop(context); + }); }