From 53c1f83bac6770ecf789e27349f30f371e9c0d28 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Mon, 10 Jul 2023 13:08:26 +0300 Subject: [PATCH] Enhancements --- lib/models/service_report.dart | 14 +- .../report/create_service_report.dart | 11 +- .../equipment/single_device_picker.dart | 148 +++++++++--------- 3 files changed, 94 insertions(+), 79 deletions(-) diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 5b4ceca7..0ad3b7ad 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -1,5 +1,6 @@ import 'dart:typed_data'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/engineer.dart'; @@ -150,13 +151,16 @@ class ServiceReport { return _map; } - bool validate() { + Future validate() async { print("visitDate:$visitDate"); - print("equipmentStatus:$equipmentStatus"); - print("callLastSituation:${callLastSituation.toMap()}"); + print("equipmentStatus:${equipmentStatus?.toMap()}"); + print("callLastSituation:${callLastSituation?.toMap()}"); print("parts:$parts"); - print("reason:${reason.toMap()}"); - if (visitDate == null) return false; + print("reason:${reason?.toMap()}"); + if (visitDate == null) { + await Fluttertoast.showToast(msg: "Visit Date Required"); + return false; + } //if(serviceType == null) return false; if (equipmentStatus == null) return false; //if (type == null && assetType == null) return false; diff --git a/lib/views/pages/user/requests/report/create_service_report.dart b/lib/views/pages/user/requests/report/create_service_report.dart index 690bdc92..23c96a74 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -605,6 +605,12 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reasons), + _validate && _serviceReport.reason?.id == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), const SizedBox(height: 4), ServiceReportReasonsMenu( initialValue: _serviceReport.reason, @@ -904,7 +910,10 @@ class _CreateServiceReportState extends State with TickerPr // setState(() {}); // return; // } - if (!_serviceReport.validate()) return; + if (!(await _serviceReport.validate())) { + setState(() {}); + return; + } _formKey.currentState.save(); _isLoading = true; diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 5162b3e7..6166ea27 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -73,81 +73,83 @@ class _SingleDevicePickerState extends State { _subtitle = AppLocalization.of(context).subtitle; return Scaffold( resizeToAvoidBottomInset: false, - body: LoadingManager( - isLoading: _devicesProvider.isLoading, - stateCode: _devicesProvider.stateCode, - isFailedLoading: _devicesProvider.devices == null, - onRefresh: () async { - _devicesProvider.reset(); - await _devicesProvider.getEquipment(user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId); - }, - child: Column( - children: [ - const SizedBox(height: 48), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), - child: Column( - children: [ - ATextFormField( - hintText: _subtitle.searchBySn, - controller: snController, - style: Theme.of(context).textTheme.subtitle1, - suffixIcon: const Icon(Icons.search_rounded), - textInputAction: TextInputAction.search, - onAction: () async { - _devicesProvider.reset(); - await _devicesProvider.getEquipment( - user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); - _searchableList.clear(); - _searchableList.addAll(_devicesProvider.devices); - }, - ), - const SizedBox( - height: 8, - ), - ATextFormField( - hintText: "Search by Number", - controller: numberController, - style: Theme.of(context).textTheme.subtitle1, - suffixIcon: const Icon(Icons.search_rounded), - textInputAction: TextInputAction.search, - onAction: () async { - _devicesProvider.reset(); - await _devicesProvider.getEquipment( - user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); - _searchableList.clear(); - _searchableList.addAll(_devicesProvider.devices); - }, - ), - ], + body: SafeArea( + child: LoadingManager( + isLoading: _devicesProvider.isLoading, + stateCode: _devicesProvider.stateCode, + isFailedLoading: _devicesProvider.devices == null, + onRefresh: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment(user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId); + }, + child: Column( + children: [ + const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), + child: Column( + children: [ + ATextFormField( + hintText: _subtitle.searchBySn, + controller: snController, + style: Theme.of(context).textTheme.subtitle1, + suffixIcon: const Icon(Icons.search_rounded), + textInputAction: TextInputAction.search, + onAction: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment( + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); + _searchableList.clear(); + _searchableList.addAll(_devicesProvider.devices); + }, + ), + const SizedBox( + height: 8, + ), + ATextFormField( + hintText: "Search by Number", + controller: numberController, + style: Theme.of(context).textTheme.subtitle1, + suffixIcon: const Icon(Icons.search_rounded), + textInputAction: TextInputAction.search, + onAction: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment( + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); + _searchableList.clear(); + _searchableList.addAll(_devicesProvider.devices); + }, + ), + ], + ), ), - ), - Expanded( - child: _searchableList.isEmpty - ? NoItemFound( - message: _subtitle.noDeviceFound, - ) - : LazyLoading( - nextPage: _devicesProvider.nextPage, - onLazyLoad: () async { - await _devicesProvider.getDevicesList( - user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); - }, - child: ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _searchableList.length, - itemBuilder: (listContext, itemIndex) { - return DeviceItem( - device: _searchableList[itemIndex], - onPressed: (device) { - Navigator.of(context).pop(device); - }, - ); + Expanded( + child: _searchableList.isEmpty + ? NoItemFound( + message: _subtitle.noDeviceFound, + ) + : LazyLoading( + nextPage: _devicesProvider.nextPage, + onLazyLoad: () async { + await _devicesProvider.getDevicesList( + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text); }, - ), - )), - ], + child: ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: _searchableList.length, + itemBuilder: (listContext, itemIndex) { + return DeviceItem( + device: _searchableList[itemIndex], + onPressed: (device) { + Navigator.of(context).pop(device); + }, + ); + }, + ), + )), + ], + ), ), ), floatingActionButton: FloatingActionButton(