From 13c5b3891aca4c561e05a5e477d384c04cd08d6f Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 7 Jun 2023 08:41:24 +0300 Subject: [PATCH] equipment status added. --- .../api/service_requests_provider.dart | 2 +- ...vice_report_equipment_status_provider.dart | 75 ++++++++++++++++++ lib/main.dart | 2 + lib/models/service_report.dart | 10 +-- .../report/create_service_report.dart | 19 +++-- .../requests/report/edit_service_report.dart | 4 +- .../service_report_equipment_status.dart | 76 +++++++++++++++++++ .../status/report/service_report_status.dart | 4 +- 8 files changed, 177 insertions(+), 15 deletions(-) create mode 100644 lib/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart create mode 100644 lib/views/widgets/status/report/service_report_equipment_status.dart diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 628cb254..a044543d 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -336,7 +336,7 @@ class ServiceRequestsProvider extends ChangeNotifier { "reviewComment": report.reviewComment ?? "", "comment": report.comment, "attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(), - "equipmentStatus": report.status?.toMap(), + "equipmentStatus": report.equipmentStatus?.toMap(), "suppEngineerWorkOrders": null, "engSignature": report.signatureEngineer, "nurseSignature": report.signatureNurse, diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart new file mode 100644 index 00000000..82ac1f49 --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:http/http.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 ServiceReportEquipmentStatusProvider extends ChangeNotifier { + //reset provider data + void reset() { + _status = 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 _status; + + List get statuses => _status; + + // 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 getTypes({String host, User user}) async { + if (_loading == true) return -2; + _loading = true; + notifyListeners(); + Response response; + try { + response = await ApiManager.instance.get(URLs.equipmentStatus); + + _stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _status = categoriesListJson.map((type) => Lookup.fromJson(type)).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 56bcee8c..3d85f355 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -22,6 +22,7 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/ga import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_first_action_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_loan_availability_provider.dart'; @@ -96,6 +97,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => PartsProvider()), ChangeNotifierProvider(create: (_) => ServiceReportReasonsProvider()), ChangeNotifierProvider(create: (_) => ServiceReportStatusProvider()), + ChangeNotifierProvider(create: (_) => ServiceReportEquipmentStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceReportTypesProvider()), ChangeNotifierProvider(create: (_) => ServiceStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceReportLastCallsProvider()), diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 52dbfac8..3b681d2a 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -19,7 +19,7 @@ class ServiceReport { Lookup callLastSituation; Lookup repairLocation; Engineer engineer; - Lookup status; + Lookup equipmentStatus; Lookup type; Lookup reason; int faultDescriptionId; @@ -49,7 +49,7 @@ class ServiceReport { this.visitDate, this.endDate, this.assetType, - this.status, + this.equipmentStatus, this.type, this.faultDescriptionId, //this.workHours, @@ -83,7 +83,7 @@ class ServiceReport { if (id != null) _map["id"] = id; if (visitDate != null) _map["visitDate"] = visitDate.toIso8601String(); //if(serviceType != null) _map["service_type"] = serviceType.id.toString(); - if (status != null) _map["status"] = status?.toMap(); + if (equipmentStatus != null) _map["status"] = equipmentStatus?.toMap(); if (type != null) _map["typeOfWO"] = type?.toMap(); if (assetType != null) _map["TypeOfWO"] = assetType?.toMap(); //if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId; @@ -144,7 +144,7 @@ class ServiceReport { bool validate() { if (visitDate == null) return false; //if(serviceType == null) return false; - if (status == null) return false; + if (equipmentStatus == null) return false; //if (type == null && assetType == null) return false; // if (engineer == null) return false; if (callLastSituation == null) return false; @@ -175,7 +175,7 @@ class ServiceReport { assetType: Lookup.fromJson(parsedJson["assetType"]), callLastSituation: Lookup.fromJson(parsedJson["calllastSituation"]), reason: Lookup.fromJson(parsedJson["reason"]), - status: Lookup.fromJson(parsedJson["status"]), + equipmentStatus: Lookup.fromJson(parsedJson["status"]), type: Lookup.fromJson(parsedJson["typeOfWO"]), faultDescriptionId: parsedJson["fault_description"], endDate: DateTime.tryParse(parsedJson["endofWorkTime"]), 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 76cbe43a..ad6647e6 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -31,6 +31,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/parts/part_item.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart'; +import 'package:test_sa/views/widgets/status/report/service_report_equipment_status.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart'; import 'package:test_sa/views/widgets/status/report/service_report_status.dart'; @@ -330,8 +331,9 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.reportStatus), - _validate && _serviceReport.status == null + // ASubTitle(_subtitle.reportStatus), + ASubTitle("Equipment Status"), + _validate && _serviceReport.equipmentStatus == null ? ASubTitle( _subtitle.requiredWord, color: Colors.red, @@ -340,13 +342,20 @@ class _CreateServiceReportState extends State with TickerPr const SizedBox( height: 4, ), - ServiceReportStatusMenu( + // ServiceReportStatusMenu( + // report: _serviceReport, + // request: widget.request, + // onSelect: (status) { + // _serviceReport.status = status; + // }, + // ), + ServiceReportEquipmentStatusMenu( report: _serviceReport, request: widget.request, onSelect: (status) { - _serviceReport.status = status; + _serviceReport.equipmentStatus = status; }, - ), + ) ], ), ), diff --git a/lib/views/pages/user/requests/report/edit_service_report.dart b/lib/views/pages/user/requests/report/edit_service_report.dart index e92f4c7c..848fc4f2 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -295,7 +295,7 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reportStatus), - _validate && _serviceReport.status == null + _validate && _serviceReport.equipmentStatus == null ? ASubTitle( _subtitle.requiredWord, color: Colors.red, @@ -308,7 +308,7 @@ class _EditServiceReportState extends State with TickerProvid report: _serviceReport, request: widget.request, onSelect: (status) { - _serviceReport.status = status; + _serviceReport.equipmentStatus = status; }, ), ], diff --git a/lib/views/widgets/status/report/service_report_equipment_status.dart b/lib/views/widgets/status/report/service_report_equipment_status.dart new file mode 100644 index 00000000..1a0382b1 --- /dev/null +++ b/lib/views/widgets/status/report/service_report_equipment_status.dart @@ -0,0 +1,76 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_equipment_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/models/service_report.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + +class ServiceReportEquipmentStatusMenu extends StatefulWidget { + final Function(Lookup) onSelect; + final ServiceReport report; + final ServiceRequest request; + + const ServiceReportEquipmentStatusMenu({Key key, this.onSelect, this.report, this.request}) : super(key: key); + + @override + State createState() => _ServiceReportEquipmentStatusMenuState(); +} + +class _ServiceReportEquipmentStatusMenuState extends State { + bool firstTime = true; + @override + Widget build(BuildContext context) { + SettingProvider settingProvider = Provider.of(context); + UserProvider userProvider = Provider.of(context); + ServiceReportEquipmentStatusProvider menuProvider = Provider.of(context); + ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of(context); + if (firstTime) { + callsLastSituationsProvider.reset(); + + firstTime = false; + } + return LoadingManager( + isLoading: menuProvider.isLoading == true || callsLastSituationsProvider.isLoading == true, + isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null, + stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0), + onRefresh: () async { + await callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: widget.report.equipmentStatus?.id, + typeName: widget.report.type?.name, + id: widget.report.id, + woId: widget.request.id, + ); + if (menuProvider.stateCode == null) { + menuProvider.reset(); + await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host); + setState(() {}); + } + }, + child: SingleStatusMenu( + statuses: menuProvider.statuses, + initialStatus: widget.report.equipmentStatus, + onSelect: (status) { + widget.report.callLastSituation = null; + callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: status.id, + id: widget.report.id, + woId: widget.request.id, + typeName: widget.report.type?.name, + ); + + widget.onSelect(status); + }, + )); + } +} diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index 5d3f797a..b21057cb 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -44,7 +44,7 @@ class _ServiceReportStatusMenuState extends State { await callsLastSituationsProvider.getCalls( user: userProvider.user, host: settingProvider.host, - serviceStatus: widget.report.status?.id, + serviceStatus: widget.report.equipmentStatus?.id, typeName: widget.report.type?.name, id: widget.report.id, woId: widget.request.id, @@ -57,7 +57,7 @@ class _ServiceReportStatusMenuState extends State { }, child: SingleStatusMenu( statuses: menuProvider.statuses, - initialStatus: widget.report.status, + initialStatus: widget.report.equipmentStatus, onSelect: (status) { widget.report.callLastSituation = null; callsLastSituationsProvider.getCalls(