From a42466b5783860c52bdca21fca89ce8b1a9d279b Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Thu, 1 May 2025 12:03:05 +0300 Subject: [PATCH] ATOMS-771, ATOMS-804, ATOMS-773, ATOMS-769, ATOMS-776, ATOMS-794, ATOMS-801, ATOMS-796, ATOMS-790, ATOMS-797, ATOMS-799, ATOMS-811, ATOMS-811, ATOMS-817, ATOMS-814, ATOMS-820, ATOMS-829, issues fixed --- ...der.dart => device_transfer_provider.dart} | 2 +- lib/main.dart | 4 +- .../my_request/all_requests_filter_page.dart | 6 ++ .../create__device_transfer_request.dart | 6 +- .../device_transfer_details.dart | 77 ++++++++++++------- .../track_device_transfer.dart | 6 +- .../update_device_transfer.dart | 8 +- .../user/gas_refill/gas_refill_details.dart | 29 +++---- 8 files changed, 79 insertions(+), 59 deletions(-) rename lib/controllers/providers/api/{asset_transfer_provider.dart => device_transfer_provider.dart} (99%) diff --git a/lib/controllers/providers/api/asset_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart similarity index 99% rename from lib/controllers/providers/api/asset_transfer_provider.dart rename to lib/controllers/providers/api/device_transfer_provider.dart index 713ca6fd..3ccf6851 100644 --- a/lib/controllers/providers/api/asset_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -15,7 +15,7 @@ import 'package:test_sa/models/user.dart'; import '../../../models/hospital.dart'; import '../../../new_views/common_widgets/app_lazy_loading.dart'; -class AssetTransferProvider extends ChangeNotifier { +class DeviceTransferProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 12; diff --git a/lib/main.dart b/lib/main.dart index 5960c8f1..979b1e2d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,7 +7,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:localization/localization.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; -import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart'; +import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/comments_provider.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart'; @@ -195,7 +195,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => GasStatusProvider()), ChangeNotifierProvider(create: (_) => GasTypesProvider()), ChangeNotifierProvider(create: (_) => GasRefillProvider()), - ChangeNotifierProvider(create: (_) => AssetTransferProvider()), + ChangeNotifierProvider(create: (_) => DeviceTransferProvider()), ChangeNotifierProvider(create: (_) => AssetTransferStatusProvider()), ///todo deleted diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 7f7e2250..aba28215 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -3,6 +3,7 @@ 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'; @@ -45,6 +46,7 @@ class _AllRequestsFilterPageState extends State { @override Widget build(BuildContext context) { + print('i am here...'); bool isEngineer = (Provider.of(context, listen: false).user?.type) == UsersTypes.engineer; if (search == null) { search = SearchAllRequestsModel( @@ -154,6 +156,10 @@ class _AllRequestsFilterPageState extends State { from: DateTime(2000), date: search!.endDate, onDatePicker: (date) { + if (search!.startDate != null && date.isBefore(search!.startDate!)) { + "End Date time must be greater then start date".showToast; + return; + } setState(() { search!.endDate = date; }); diff --git a/lib/views/pages/device_transfer/create__device_transfer_request.dart b/lib/views/pages/device_transfer/create__device_transfer_request.dart index b7d2efcb..df6840ba 100644 --- a/lib/views/pages/device_transfer/create__device_transfer_request.dart +++ b/lib/views/pages/device_transfer/create__device_transfer_request.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart'; +import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -41,7 +41,7 @@ class CreateDeviceTransferRequest extends StatefulWidget { } class _CreateDeviceTransferRequestState extends State { - late AssetTransferProvider _deviceTransferProvider; + late DeviceTransferProvider _deviceTransferProvider; final TextEditingController _requestedQuantityController = TextEditingController(); final DeviceTransfer _transferModel = DeviceTransfer(id: 0); final GlobalKey _formKey = GlobalKey(); @@ -111,7 +111,7 @@ class _CreateDeviceTransferRequestState extends State(context, listen: false); + _deviceTransferProvider = Provider.of(context, listen: false); return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar( diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 19e5ac74..39e6145f 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -1,8 +1,7 @@ import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/asset_transfer_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/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -13,7 +12,6 @@ import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart' import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; - import '../../../extensions/text_extensions.dart'; import '../../../models/enums/user_types.dart'; import '../../../new_views/app_style/app_color.dart'; @@ -51,7 +49,7 @@ class _DeviceTransferDetailsState extends State { key: _scaffoldKey, body: SafeArea( child: FutureBuilder( - future: Provider.of(context).getRequestById(assetTransferId: widget.model.id?.toInt()), + future: Provider.of(context).getRequestById(assetTransferId: widget.model.id?.toInt()), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const ALoading(); @@ -74,30 +72,44 @@ class _DeviceTransferDetailsState extends State { Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - context.translation.transferDetails.heading5(context), - 8.height, + Text( + "Transfer Details".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + _buildTextWidget('${context.translation.requestNo} : ${_model?.transferCode ?? ""}'), + _buildTextWidget('${context.translation.transferType} : ${_model?.transferType?.name ?? ""}'), + const Divider().defaultStyle(context), + Text( + "Asset Info".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + _buildTextWidget('${context.translation.assetName} : ${_model?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}'), + _buildTextWidget('${context.translation.assetNumber} : ${_model?.assetNumber ?? ""}'), + _buildTextWidget('${context.translation.model} : ${_model?.modelName ?? ""}'), + _buildTextWidget('${context.translation.sn} : ${_model?.assetSerialNo ?? ""}'), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildTextWidget('${context.translation.requestNo} : ${_model?.transferCode ?? ""}'), - _buildTextWidget('${context.translation.transferType} : ${_model?.transferType?.name ?? ""}'), - _buildTextWidget('${context.translation.assetName} : ${_model?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}'), - _buildTextWidget('${context.translation.assetNumber} : ${_model?.assetNumber ?? ""}'), - _buildTextWidget('${context.translation.model} : ${_model?.modelName ?? ""}'), - _buildTextWidget('${context.translation.sn} : ${_model?.assetSerialNo ?? ""}'), + const Divider().defaultStyle(context), + Text( + "Contact Info".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), if (_model?.receiverEndUserName != null) _buildTextWidget('${context.translation.receiverName} : ${_model?.receiverEndUserName ?? ""}'), infoText(label: context.translation.employeeId, value: _model?.employeeId), infoText(label: context.translation.name, value: _model?.name), - infoText(label: context.translation.createdDate, value: _model?.createdDate?.toInitialVisitCardFormat), + // infoText(label: context.translation.telephone, value: _model?.te), + if ((_model?.comment ?? "").isNotEmpty) ...[ - 8.height, const Divider().defaultStyle(context), + Text( + "Comments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), 8.height, _buildTextWidget(_model!.comment!), ], - if (_attachments.isNotEmpty) ...[ attachmentWidget(), - ] ], ), 8.height, @@ -121,7 +133,9 @@ class _DeviceTransferDetailsState extends State { _buildCard( isSender: true, site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - unit: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + dept: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + building: _model?.senderBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + floor: _model?.senderFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", comment: _model?.senderComment ?? "", statusLabel: _model?.senderMachineStatusName != null ? StatusLabel( @@ -137,7 +151,9 @@ class _DeviceTransferDetailsState extends State { _buildCard( isSender: false, site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - unit: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + dept: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + building: _model?.destBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + floor: _model?.destFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", comment: _model?.receiverComment ?? "", statusLabel: _model?.receiverMachineStatusName != null ? StatusLabel( @@ -160,13 +176,14 @@ class _DeviceTransferDetailsState extends State { } Widget attachmentWidget() { - return Column( + return _attachments.isNotEmpty? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - 8.height, - if (_attachments.isNotEmpty) ...[ const Divider().defaultStyle(context), - context.translation.attachments.bodyText(context), + Text( + "Attachments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), 8.height, MultiFilesPicker( label: context.translation.attachments, @@ -175,15 +192,14 @@ class _DeviceTransferDetailsState extends State { onlyImages: false, ), ], - ], - ); + ):const SizedBox(); } _buildTextWidget(String text) { return text.bodyText(context); } - _buildCard({required String site, required String unit, required String comment, required bool isSender, StatusLabel? statusLabel}) { + _buildCard({required String site, String? building, String? dept, String? floor, required String comment, required bool isSender, StatusLabel? statusLabel}) { bool isCurrentEngineerEligibleForEdit = isSender ? _model?.senderAssignedEmployeeId == _userProvider!.user?.userID : _model?.receiverAssignedEmployeeId == _userProvider!.user?.userID; bool isCurrentRequestClosed = @@ -219,12 +235,17 @@ class _DeviceTransferDetailsState extends State { }), ], ), - _buildTextWidget('${context.translation.site} : $site'), - _buildTextWidget('${context.translation.department} : $unit'), + infoText(label: context.translation.site, value: site), + infoText(label: context.translation.building, value: building), + infoText(label: context.translation.floor, value: floor), + infoText(label: context.translation.department, value: dept), if (comment.isNotEmpty) ...[ 8.height, const Divider().defaultStyle(context), - 8.height, + Text( + "Technical Comments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), _buildTextWidget(comment), ] ], diff --git a/lib/views/pages/device_transfer/track_device_transfer.dart b/lib/views/pages/device_transfer/track_device_transfer.dart index 4db6cc2e..2861b93f 100644 --- a/lib/views/pages/device_transfer/track_device_transfer.dart +++ b/lib/views/pages/device_transfer/track_device_transfer.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/asset_transfer_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'; @@ -19,13 +19,13 @@ class TrackDeviceTransferPage extends StatefulWidget { } class _TrackDeviceTransferPageState extends State with TickerProviderStateMixin { - late AssetTransferProvider _deviceTransferProvider; + late DeviceTransferProvider _deviceTransferProvider; late UserProvider _userProvider; late SettingProvider _settingProvider; @override Widget build(BuildContext context) { - _deviceTransferProvider = Provider.of(context); + _deviceTransferProvider = Provider.of(context); _userProvider = Provider.of(context); _settingProvider = Provider.of(context); diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 8158aee5..d44d17a7 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -6,7 +6,7 @@ // import 'package:flutter/material.dart'; // import 'package:fluttertoast/fluttertoast.dart'; // import 'package:provider/provider.dart'; -// import 'package:test_sa/controllers/providers/api/asset_transfer_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'; @@ -337,7 +337,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart'; +import 'package:test_sa/controllers/providers/api/device_transfer_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'; @@ -376,7 +376,7 @@ class UpdateDeviceTransfer extends StatefulWidget { class _UpdateDeviceTransferState extends State { final bool _isLoading = false; - late AssetTransferProvider _deviceTransferProvider; + late DeviceTransferProvider _deviceTransferProvider; final TextEditingController _requestedQuantityController = TextEditingController(); final DeviceTransfer _formModel = DeviceTransfer(); final GlobalKey _formKey = GlobalKey(); @@ -470,7 +470,7 @@ class _UpdateDeviceTransferState extends State { @override Widget build(BuildContext context) { - _deviceTransferProvider = Provider.of(context, listen: false); + _deviceTransferProvider = Provider.of(context, listen: false); double totalWorkingHours = widget.isSender ? (widget.model.senderVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0) : (widget.model.receiverVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0); diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index bd894483..0345d29e 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -1,5 +1,4 @@ import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_comments.dart'; @@ -11,18 +10,15 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_form.dart'; -import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; - import '../../../../extensions/text_extensions.dart'; import '../../../../models/enums/user_types.dart'; import '../../../../models/new_models/gas_refill_model.dart'; import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../widgets/requests/request_status.dart'; -import 'gas_refill_comments.dart'; class GasRefillDetailsPage extends StatefulWidget { GasRefillModel model; @@ -125,16 +121,16 @@ class _GasRefillDetailsPageState extends State { "Request Details".addTranslation, style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), - infoText(label: context.translation.requestNo, value:gasRefillModel.gasRefillNo), - infoText(label: context.translation.gasType, value:gasRefillModel.gasRefillDetails?[0].gasType?.name), - infoText(label: context.translation.cylinderType, value:gasRefillModel.gasRefillDetails?[0].cylinderType?.name), - infoText(label: context.translation.cylinderSize, value:gasRefillModel.gasRefillDetails?[0].cylinderSize?.name), - infoText(label: context.translation.site, value:gasRefillModel.site?.name?.cleanupWhitespace.capitalizeFirstOfEach), - infoText(label: context.translation.building, value:gasRefillModel.building?.name), - infoText(label: context.translation.floor, value:gasRefillModel.floor?.name), - infoText(label: context.translation.department, value:gasRefillModel.department?.name), - infoText(label: context.translation.requestedQuantity, value:gasRefillModel.gasRefillDetails?[0].requestedQty.toString()), - infoText(label: context.translation.deliveredQuantity, value:gasRefillModel.gasRefillDetails![0].deliverdQty.toString()), + infoText(label: context.translation.requestNo, value: gasRefillModel.gasRefillNo), + infoText(label: context.translation.gasType, value: gasRefillModel.gasRefillDetails?[0].gasType?.name), + infoText(label: context.translation.cylinderType, value: gasRefillModel.gasRefillDetails?[0].cylinderType?.name), + infoText(label: context.translation.cylinderSize, value: gasRefillModel.gasRefillDetails?[0].cylinderSize?.name), + infoText(label: context.translation.site, value: gasRefillModel.site?.name?.cleanupWhitespace.capitalizeFirstOfEach), + infoText(label: context.translation.building, value: gasRefillModel.building?.name), + infoText(label: context.translation.floor, value: gasRefillModel.floor?.name), + infoText(label: context.translation.department, value: gasRefillModel.department?.name), + infoText(label: context.translation.requestedQuantity, value: gasRefillModel.gasRefillDetails?[0].requestedQty.toString()), + infoText(label: context.translation.deliveredQuantity, value: gasRefillModel.gasRefillDetails![0].deliverdQty.toString()), const Divider().defaultStyle(context), Text( "Created By".addTranslation, @@ -185,10 +181,7 @@ class _GasRefillDetailsPageState extends State { style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), ), ], - ).paddingOnly(top: 16, start: 16, end: 16), - - ], ).toShadowContainer(context, padding: 0); } @@ -197,7 +190,7 @@ class _GasRefillDetailsPageState extends State { String? label, String? value, }) { - if (value == null || value.isEmpty||value.toLowerCase()=='null') { + if (value == null || value.isEmpty || value.toLowerCase() == 'null') { return const SizedBox(); } else { return '$label: $value'.bodyText(context);