diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index b577042f..3a955242 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -1,12 +1,9 @@ class URLs { URLs._(); - //static const host1 = "https://atomsuat.hmg.com"; // old uat url - static const host1 = "https://atomsm.hmg.com"; // production url + // static const host1 = "https://atomsm.hmg.com"; // production url + static const host1 = "https://atomsmdev.hmg.com"; // local UAT url - // static const host1 = "https://atomsmdev.hmg.com"; // local UAT url - - // static const host1 = "http://109.123.243.118:9000"; static String _baseUrl = "$_host/mobile"; @@ -112,6 +109,7 @@ class URLs { static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get static get getNurses => "$_baseUrl/Account/GetUserByRoleValue?value=R-7"; // get + static get getNursesBySiteId => "$_baseUrl/Account/GetUserByRoleValueSiteAndAssetGroupBySiteId?value=R-7"; // get // pentry static get getPentry => "$_baseUrl/return/pentry/details"; // get diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart index 0fffcc93..4cbd1a7e 100644 --- a/lib/controllers/providers/api/notifications_provider.dart +++ b/lib/controllers/providers/api/notifications_provider.dart @@ -39,12 +39,12 @@ class NotificationsProvider extends ChangeNotifier { /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getSystemNotifications({ - String host, - User user, - int hospitalId, - }) async { + Future getSystemNotifications({User user, bool resetProvider = false}) async { if (isLoading == true) return -2; + + if (resetProvider) { + reset(); + } isLoading = true; notifyListeners(); Response response; diff --git a/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart index 57ccfead..62267bcf 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart @@ -25,6 +25,8 @@ class NurseProvider extends ChangeNotifier { bool get isLoading => _loading; + int siteId; + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); @@ -36,7 +38,15 @@ class NurseProvider extends ChangeNotifier { notifyListeners(); Response response; try { - response = await ApiManager.instance.get(URLs.getNurses); + if (siteId == null) { + await Future.delayed(const Duration(seconds: 1)); + _items = []; + _loading = false; + notifyListeners(); + _stateCode = 200; + return _stateCode; + } + response = await ApiManager.instance.get(URLs.getNursesBySiteId + "&siteId=$siteId"); _stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received diff --git a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart index 2416c1c4..1f6f857c 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart @@ -22,7 +22,7 @@ class RecentActivitiesFragment extends StatelessWidget { return RefreshIndicator( onRefresh: () { Provider.of(context, listen: false).getRequests(); - _notificationsProvider.getSystemNotifications(user: Provider.of(context, listen: false).user); + _notificationsProvider.getSystemNotifications(user: Provider.of(context, listen: false).user,resetProvider: true); return Future.delayed(const Duration(microseconds: 250)); }, child: SingleChildScrollView( diff --git a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart index 6624208c..1007edc7 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart @@ -25,7 +25,7 @@ class RequestsFragment extends StatelessWidget { builder: (context, snapshot, _) => RefreshIndicator( onRefresh: () { snapshot.getRequests(); - Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user); + Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user,resetProvider: true); return Future.delayed(const Duration(microseconds: 250)); }, child: GridView( diff --git a/lib/new_views/pages/land_page/dashboard_page.dart b/lib/new_views/pages/land_page/dashboard_page.dart index c9b5324c..eb11ff52 100644 --- a/lib/new_views/pages/land_page/dashboard_page.dart +++ b/lib/new_views/pages/land_page/dashboard_page.dart @@ -38,7 +38,7 @@ class _DashboardPageState extends State { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { Provider.of(context, listen: false).getRequests(); - Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user); + Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user,resetProvider: true); }); } diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 4ccd2042..cc768fdc 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -216,7 +216,7 @@ class _DeviceTransferDetailsState extends State { ], ), _buildTextWidget('${context.translation.site} : $site'), - _buildTextWidget('${context.translation.unite} : $unit'), + _buildTextWidget('${context.translation.department} : $unit'), if (comment != null && comment.isNotEmpty) ...[ 8.height, const Divider().defaultStyle(context), diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index ed74aa82..1fe2f406 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -1,6 +1,7 @@ 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/status_drop_down/employee/nurse_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/controllers/validator/validator.dart'; @@ -85,8 +86,7 @@ class _RequestDeviceTransferState extends State { _userProvider = Provider.of(context, listen: false); _settingProvider = Provider.of(context, listen: false); _deviceTransferProvider = Provider.of(context, listen: false); - _selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username); - + // _selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username); return Scaffold( key: _scaffoldKey, @@ -111,17 +111,6 @@ class _RequestDeviceTransferState extends State { 16.height, context.translation.receiverDetails.heading5(context), 8.height, - NurseMenu( - title: context.translation.receiverName, - initialValue: _selectedNurse, - onSelect: (employee) { - if (employee != null) { - _selectedNurse = employee; - setState(() {}); - } - }, - ), - 8.height, SingleItemDropDownMenu( context: context, title: context.translation.destinationSite, @@ -131,6 +120,9 @@ class _RequestDeviceTransferState extends State { _assetDestination.building = null; _assetDestination.floor = null; _assetDestination.department = null; + _selectedNurse = null; + Provider.of(context,listen: false).siteId = value.id; + Provider.of(context,listen: false).getData(); setState(() {}); }, ), @@ -187,12 +179,17 @@ class _RequestDeviceTransferState extends State { }, ), 8.height, - // AppTextFormField( - // labelText: context.translation.room, - // onSaved: (text) { - // _transferModel.destRoom = text; - // }, - // ), + NurseMenu( + title: context.translation.receiverName, + initialValue: _selectedNurse, + enable: _assetDestination?.site != null, + onSelect: (employee) { + if (employee != null) { + _selectedNurse = employee; + setState(() {}); + } + }, + ), 16.height, context.translation.comments.heading5(context), 8.height, diff --git a/lib/views/pages/user/notifications/notifications_page.dart b/lib/views/pages/user/notifications/notifications_page.dart index a78d22da..9d481cd7 100644 --- a/lib/views/pages/user/notifications/notifications_page.dart +++ b/lib/views/pages/user/notifications/notifications_page.dart @@ -36,9 +36,10 @@ class _NotificationsPageState extends State with TickerProvid onRefresh: () async { _notificationsProvider.reset(); await _notificationsProvider.getSystemNotifications( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.clientId, + user: _userProvider.user,resetProvider: true + + // host: _settingProvider.host, + // hospitalId: _userProvider.user.clientId, ); }, child: NotificationsList( @@ -46,8 +47,8 @@ class _NotificationsPageState extends State with TickerProvid onLazyLoad: () async { await _notificationsProvider.getSystemNotifications( user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.clientId, + // host: _settingProvider.host, + // hospitalId: _userProvider.user.clientId, ); }, notifications: _notificationsProvider.notifications, diff --git a/lib/views/pages/user/requests/work_order/create_service_report.dart b/lib/views/pages/user/requests/work_order/create_service_report.dart index 1dce3017..52fc7624 100644 --- a/lib/views/pages/user/requests/work_order/create_service_report.dart +++ b/lib/views/pages/user/requests/work_order/create_service_report.dart @@ -253,7 +253,7 @@ class _CreateServiceReportState extends State with TickerPr ServiceReportLastCallsMenu( report: _serviceReport, title: context.translation.callLastSituation, - parentId: widget.request.id, + parentId: "0",//widget.request.id, onSelect: (status) { _serviceReport.calllastSituation = status; }, diff --git a/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart new file mode 100644 index 00000000..7a7fcf77 --- /dev/null +++ b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart @@ -0,0 +1,109 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; + +typedef SelectionBuilderString = String Function(dynamic); + +class SelectionBottomSheet extends StatefulWidget { + List items; + T selectedItem; + String title; + + final SelectionBuilderString builderString; + + SelectionBottomSheet({Key key, this.items = const [], this.selectedItem, this.title = "", @required this.builderString}) : super(key: key); + + @override + _SelectionBottomSheetState createState() { + return _SelectionBottomSheetState(); + } +} + +class _SelectionBottomSheetState extends State { + T _selectedValue; + + String query = ""; + + List get filteredList => widget.items.where((element) => element.name.toString().toLowerCase().contains(query.toLowerCase())).toList(); + + @override + void initState() { + _selectedValue = widget.selectedItem; + super.initState(); + } + + FocusNode searchFocusNode = FocusNode(); + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Container( + height: MediaQuery.of(context).size.height * .7, + padding: const EdgeInsets.all(21), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + widget.title.heading5(context), + 16.height, + TextField( + onChanged: (queryString) { + query = queryString; + setState(() {}); + }, + style: TextStyle(fontSize: 14), + focusNode: searchFocusNode, + decoration: InputDecoration( + hintText: 'Search by name', + labelText: 'Search', + hintStyle: TextStyle(fontSize: 14), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: AppColor.blueStatus(context), width: 2.0), + borderRadius: BorderRadius.all(Radius.circular(12.0)), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: AppColor.blueStatus(context), width: 1.0), + borderRadius: BorderRadius.all(Radius.circular(12.0)), + ), + contentPadding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), + ), + ), + 8.height, + ListView.builder( + itemCount: filteredList.length, + padding: EdgeInsets.only(top: 8), + itemBuilder: (cxt, index) => RadioListTile( + value: filteredList[index], + dense: true, + contentPadding: EdgeInsets.zero, + groupValue: _selectedValue, + activeColor: Colors.black87, + onChanged: (value) { + _selectedValue = value; + searchFocusNode.unfocus(); + setState(() {}); + }, + title: Text( + widget.builderString(filteredList[index]).cleanupWhitespace?.capitalizeFirstOfEach ?? "", + style: Theme.of(context).textTheme.bodyLarge, + ))).expanded, + 8.height, + if (_selectedValue != null) + AppFilledButton( + label: context.translation.select, + maxWidth: true, + onPressed: () { + Navigator.pop(context, _selectedValue); + }), + ], + ), + ); + } +} diff --git a/lib/views/widgets/equipment/asset_item_gridview.dart b/lib/views/widgets/equipment/asset_item_gridview.dart index b1a825f2..09209cd6 100644 --- a/lib/views/widgets/equipment/asset_item_gridview.dart +++ b/lib/views/widgets/equipment/asset_item_gridview.dart @@ -38,8 +38,9 @@ class AssetItemGridView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - device.modelDefinition.assetName, + device.modelDefinition.assetName.cleanupWhitespace.capitalizeFirstOfEach, maxLines: 2, + overflow: TextOverflow.ellipsis, style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), Column( @@ -47,15 +48,15 @@ class AssetItemGridView extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ "${context.translation.assetNumber} : ${device.assetNumber}".bodyText2(context), - "${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText2(context), + "${context.translation.modelName} : ${device.modelDefinition.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText2(context), Text( "${context.translation.serialNo} : ${device.assetSerialNo}", maxLines: 2, - overflow: TextOverflow.fade, + overflow: TextOverflow.ellipsis, style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), - ), + ).expanded, ], - ), + ).expanded, Row( mainAxisSize: MainAxisSize.min, children: [ @@ -70,6 +71,6 @@ class AssetItemGridView extends StatelessWidget { ], ).expanded ], - ).onPress(() => onPressed(device)).toShadowContainer(context); + ).onPress(() => onPressed(device)).toShadowContainer(context,padding: 12); } } diff --git a/lib/views/widgets/equipment/asset_item_listview.dart b/lib/views/widgets/equipment/asset_item_listview.dart index ce2d58bd..5155e256 100644 --- a/lib/views/widgets/equipment/asset_item_listview.dart +++ b/lib/views/widgets/equipment/asset_item_listview.dart @@ -69,6 +69,6 @@ class AssetItemListView extends StatelessWidget { ], ).expanded ], - ).toShadowContainer(context).onPress(() => onPressed(device)); + ).toShadowContainer(context,padding: 12).onPress(() => onPressed(device)); } } diff --git a/lib/views/widgets/equipment/commissioning_status_buttons.dart b/lib/views/widgets/equipment/commissioning_status_buttons.dart index 4a7f8040..35b415f1 100644 --- a/lib/views/widgets/equipment/commissioning_status_buttons.dart +++ b/lib/views/widgets/equipment/commissioning_status_buttons.dart @@ -54,7 +54,7 @@ class _CommissioningStatusButtonsState extends State return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - context.translation.jopStatus.heading5(context).paddingOnly(start: 16, end: 16), + context.translation.equipmentStatus.heading5(context).paddingOnly(start: 16, end: 16), 8.height, Consumer( builder: (context, snapshot, _) { diff --git a/lib/views/widgets/equipment/pick_asset.dart b/lib/views/widgets/equipment/pick_asset.dart index a3123e6b..6433c02a 100644 --- a/lib/views/widgets/equipment/pick_asset.dart +++ b/lib/views/widgets/equipment/pick_asset.dart @@ -13,8 +13,10 @@ class PickAsset extends StatelessWidget { final Function(Asset) onPickAsset; final Asset device; final bool editable; + final bool showAssetInfo; + final bool forPPM; - const PickAsset({Key key, this.editable = true, this.device, this.onPickAsset}) : super(key: key); + const PickAsset({Key key, this.editable = true, this.device, this.onPickAsset, this.showAssetInfo = true, this.forPPM = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -34,17 +36,25 @@ class PickAsset extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ context.translation.device.tinyFont(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50), - context.translation.pickAsset.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50), + if (device != null) + device.assetNumber.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50) + else + context.translation.pickAsset.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50), ], ).onPress(() async { Asset device = await Navigator.of(context).pushNamed(MyAssetsPage.id) as Asset; - onPickAsset(device); + if (device != null) { + onPickAsset(device); + } }).expanded, - "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70), + if (forPPM) + Icon(Icons.change_circle_rounded, size: 22, color: context.isDark ? AppColor.primary40 : AppColor.primary70) + else + "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70), ], ), ), - if (device != null) AssetInfoCard(asset: device).paddingOnly(top: 8), + if (device != null && showAssetInfo) AssetInfoCard(asset: device).paddingOnly(top: 8), ], ); } diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 20776ca6..03fe90c9 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -89,6 +89,10 @@ class _MyAssetsPageState extends State { title: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ + if (!widget.fromBottomBar) + const Icon(Icons.arrow_back_ios).onPress(() { + Navigator.of(context).pop(); + }), Container( height: 40, padding: const EdgeInsets.only(left: 16, right: 8), @@ -183,7 +187,7 @@ class _MyAssetsPageState extends State { }, ) : GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 261, crossAxisSpacing: 16, mainAxisSpacing: 16), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 188 / 261, crossAxisSpacing: 12, mainAxisSpacing: 12), itemCount: _searchableList.length, padding: const EdgeInsets.all(16), itemBuilder: (context, index) { @@ -201,18 +205,16 @@ class _MyAssetsPageState extends State { ), ), ), - floatingActionButton: widget.fromBottomBar - ? null - : FloatingActionButton( - heroTag: "some tag 2", - child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor), - onPressed: () async { - String result = await Navigator.of(context).push( - MaterialPageRoute(builder: (_) => const ScanQr()), - ) as String; - _getDevice(result, isQr: true); - }, - ), + floatingActionButton: FloatingActionButton( + heroTag: "some tag 2", + child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor), + onPressed: () async { + String result = await Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const ScanQr()), + ) as String; + _getDevice(result, isQr: true); + }, + ), ); } } diff --git a/lib/views/widgets/pentry/calibration_tool_asset_picker.dart b/lib/views/widgets/pentry/calibration_tool_asset_picker.dart new file mode 100644 index 00000000..e8b45968 --- /dev/null +++ b/lib/views/widgets/pentry/calibration_tool_asset_picker.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_typeahead/flutter_typeahead.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/devices_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'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/widgets/equipment/pick_asset.dart'; + +import '../../../../extensions/text_extensions.dart'; +import '../../../../models/device/asset.dart'; +import '../../../../models/device/asset_search.dart'; +import '../../../../new_views/app_style/app_color.dart'; +import '../../../../new_views/app_style/app_text_style.dart'; + +class CalibrationToolAssetPicker extends StatefulWidget { + final Lookup initialValue; + final int hospitalId; + final Function(Lookup) onPick; + + const CalibrationToolAssetPicker({Key key, this.initialValue, this.onPick, this.hospitalId}) : super(key: key); + + @override + State createState() => _CalibrationToolAssetPickerState(); +} + +class _CalibrationToolAssetPickerState extends State { + SettingProvider _settingProvider; + AssetProvider _devicesProvider; + UserProvider _userProvider; + TextEditingController _controller; + + @override + void initState() { + _controller = TextEditingController(text: widget.initialValue?.name); + super.initState(); + } + + @override + void didUpdateWidget(covariant CalibrationToolAssetPicker oldWidget) { + if (widget.initialValue != oldWidget.initialValue) { + _controller = TextEditingController(text: widget.initialValue?.name); + } + super.didUpdateWidget(oldWidget); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + _settingProvider = Provider.of(context); + _userProvider = Provider.of(context); + _devicesProvider = Provider.of(context); + final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10)); + return Container( + decoration: BoxDecoration( + color: AppColor.background(context), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + PickAsset( + showAssetInfo: false, + forPPM: true, + device: widget.initialValue == null + ? null + : Asset( + id: widget.initialValue.id, + assetNumber: widget.initialValue.name, + ), + onPickAsset: (device) { + widget.onPick(Lookup(id: device.id, name: device.assetNumber)); + }, + ), + ], + )); + } +} diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index e2bf1f5f..6ffdda99 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -9,6 +9,8 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/ppm/ppm_calibration_tools.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/views/widgets/equipment/pick_asset.dart'; +import 'package:test_sa/views/widgets/pentry/calibration_tool_asset_picker.dart'; import '../../../new_views/app_style/app_color.dart'; import '../date_and_time/date_picker.dart'; @@ -76,7 +78,7 @@ class _PentryCalibrationToolFormState extends State { ], ), 16.height, - AutoCompleteDeviceNumberField( + CalibrationToolAssetPicker( initialValue: model.assetId == null ? null : Lookup(id: model.assetId, name: model.assetNumber ?? ""), hospitalId: userProvider.user.clientId, onPick: (number) { diff --git a/lib/views/widgets/status/employee/nurse_menu.dart b/lib/views/widgets/status/employee/nurse_menu.dart index 8d9ebc9e..0b723286 100644 --- a/lib/views/widgets/status/employee/nurse_menu.dart +++ b/lib/views/widgets/status/employee/nurse_menu.dart @@ -16,12 +16,14 @@ class NurseMenu extends StatelessWidget { final String title; final bool enable; + final int siteId; - const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true}) : super(key: key); + const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true, this.siteId}) : super(key: key); @override Widget build(BuildContext context) { NurseProvider menuProvider = Provider.of(context); + menuProvider.siteId = siteId; return LoadingManager( isLoading: menuProvider.isLoading, isFailedLoading: menuProvider.nursesList == null, diff --git a/lib/views/widgets/status/nurse_employee_menu.dart b/lib/views/widgets/status/nurse_employee_menu.dart index 9b6dc187..0d2c91d2 100644 --- a/lib/views/widgets/status/nurse_employee_menu.dart +++ b/lib/views/widgets/status/nurse_employee_menu.dart @@ -1,7 +1,10 @@ import 'package:flutter/material.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/employee.dart'; +import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart'; import '../../../models/new_models/assistant_employee.dart'; import '../../../new_views/app_style/app_color.dart'; @@ -66,14 +69,19 @@ class _SingleNurseEmployeeMenuState extends State { Widget build(BuildContext context) { return Container( height: 60.toScreenHeight, + width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), decoration: BoxDecoration( - color: context.isDark ? AppColor.neutral50 : Colors.white, + color: context.isDark && (widget.enable == false) + ? AppColor.neutral50 + : (widget.enable == false) + ? AppColor.neutral40 + : AppColor.background(context), borderRadius: BorderRadius.circular(10), boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), child: Stack( - alignment: Alignment.center, + alignment: Alignment.centerLeft, children: [ PositionedDirectional( end: 0, @@ -90,41 +98,35 @@ class _SingleNurseEmployeeMenuState extends State { widget.title, style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500), ), - DropdownButton( - value: _selectedStatus, - iconSize: 24, - isDense: true, - icon: const SizedBox.shrink(), - elevation: 0, - isExpanded: true, - hint: Text( - context.translation.select, - style: Theme.of(context).textTheme.bodyLarge, - ), - style: TextStyle(color: Theme.of(context).primaryColor), - underline: const SizedBox.shrink(), - onChanged: widget.enable - ? (Employee newValue) { - setState(() { - _selectedStatus = newValue; - }); - widget.onSelect(newValue); - } - : null, - items: widget.list.map>((Employee value) { - return DropdownMenuItem( - value: value, - child: Text( - value.name ?? "NULL", - style: Theme.of(context).textTheme.bodyLarge, - ), - ); - }).toList(), + Text( + _selectedStatus?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? context.translation.select, + style: Theme.of(context).textTheme.bodyLarge, ), ], ), ], ), - ); + ).onPress(widget.enable + ? () async { + _selectedStatus = (await showModalBottomSheet( + context: context, + isScrollControlled: true, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(20), + ), + ), + clipBehavior: Clip.antiAliasWithSaveLayer, + builder: (BuildContext context) => SelectionBottomSheet( + items: widget.list, + selectedItem: _selectedStatus, + title: widget.title, + builderString: (emp) => emp?.name ?? "", + ), + )) as Employee; + if (_selectedStatus != null) setState(() {}); + widget.onSelect(_selectedStatus); + } + : null); } }