From 1eaf9a21fa56fbfa25c8d2a526740fa84a707173 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 24 Aug 2023 11:11:59 +0300 Subject: [PATCH] asset transfer status fixed. --- lib/controllers/api_routes/urls.dart | 1 + .../asset_transfer_status_provider.dart | 75 +++++++++++++++++++ lib/main.dart | 2 + .../update_device_transfer.dart | 3 +- lib/views/widgets/status/asset_status.dart | 38 ++++++++++ 5 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 lib/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart create mode 100644 lib/views/widgets/status/asset_status.dart diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 626f9639..94388e19 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -90,6 +90,7 @@ class URLs { static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get static get getAssetTransferById => "$_baseUrl/AssetTransfer/GetAssetTransferById"; // get + static get getAssetTransferStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=406"; // get // employee static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get diff --git a/lib/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart b/lib/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart new file mode 100644 index 00000000..8b578176 --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/user.dart'; + +class AssetTransferStatusProvider extends ChangeNotifier { + //reset provider data + void reset() { + _items = null; + _loading = null; + _stateCode = null; + } + + // state code of current request to defied error message + // like 400 customer request failed + // 500 service not available + int _stateCode; + + int get stateCode => _stateCode; + + // contain user data + // when user not login or register _user = null + List _items; + + List get items => _items; + + // when categories in-process _loading = true + // done _loading = true + // failed _loading = false + bool _loading; + + bool get isLoading => _loading; + + set isLoading(bool isLoading) { + _loading = isLoading; + notifyListeners(); + } + + /// return -2 if request in progress + /// return -1 if error happen when sending request + /// 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 getData({ + String host, + User user, + }) async { + if (_loading == true) return -2; + _loading = true; + notifyListeners(); + Response response; + try { + response = await ApiManager.instance.get(URLs.getAssetTransferStatus); + _stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch (error) { + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + } +} diff --git a/lib/main.dart b/lib/main.dart index 03427e46..3d7241b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,6 +13,7 @@ import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart'; @@ -98,6 +99,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => UserProvider()), ChangeNotifierProvider(create: (_) => HospitalsProvider()), ChangeNotifierProvider(create: (_) => DevicesProvider()), + ChangeNotifierProvider(create: (_) => AssetTransferStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestsProvider()), ChangeNotifierProvider(create: (_) => DepartmentsProvider()), ChangeNotifierProvider(create: (_) => NotificationsProvider()), diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 1b7f3f78..36a9c78e 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -15,6 +15,7 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/asset_status.dart'; import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; @@ -179,7 +180,7 @@ class _UpdateDeviceTransferState extends State { const SizedBox( height: 4, ), - GasStatusMenu( + AssetStatusMenu( initialValue: _formModel.status, onSelect: (status) { if (status == null) return; diff --git a/lib/views/widgets/status/asset_status.dart b/lib/views/widgets/status/asset_status.dart new file mode 100644 index 00000000..c1b0f9dc --- /dev/null +++ b/lib/views/widgets/status/asset_status.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_status_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/models/lookup.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + +class AssetStatusMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + final bool enabled; + + const AssetStatusMenu({Key key, this.enabled = true, this.onSelect, this.initialValue}) : super(key: key); + + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final assetProvider = Provider.of(context); + return LoadingManager( + isLoading: assetProvider.isLoading, + isFailedLoading: assetProvider.items == null, + stateCode: assetProvider.stateCode, + onRefresh: () async { + assetProvider.reset(); + await assetProvider.getData(user: userProvider.user, host: settingProvider.host); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: assetProvider.items, + onSelect: onSelect, + enabled: enabled, + )); + } +}