From bba0b3d7d748483ac8faacb73fc8036d9de6559c Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 14 Jan 2023 22:32:58 +0200 Subject: [PATCH 1/9] version 0.7.4 - update pentry add update pentry add Defect Type and priority for service request rename and remove unused fields add search with asset number and view it in service request and ppm visit --- assets/subtitles/en_subtitle.json | 18 +- lib/controllers/api_routes/urls.dart | 11 + .../data/pentry/pentry_controller.dart | 18 ++ .../providers/api/devices_provider.dart | 20 +- .../providers/api/gas_refill_provider.dart | 4 +- .../providers/api/hospitals_provider.dart | 5 - .../providers/api/parts_provider.dart | 4 - .../api/regular_visits_provider.dart | 56 ++++- .../api/service_requests_provider.dart | 8 +- .../employee/employee_provider.dart | 8 +- .../gas_cylinder_size_provider.dart | 8 +- .../gas_refill/gas_status_provider.dart | 8 +- .../gas_refill/gas_types_provider.dart | 8 +- .../pentry/pentry_status_provider.dart | 75 +++++++ .../pentry/pentry_task_status_provider.dart | 75 +++++++ .../pentry/pentry_visit_status_provider.dart | 75 +++++++ .../service_report_defect_types_provider.dart | 75 +++++++ .../service_report_last_calls_provider.dart | 8 +- .../service_report_priority_provider.dart | 75 +++++++ .../service_report_reasons_provider.dart | 8 +- .../service_report_status_provider.dart | 8 +- .../report/service_report_types_provider.dart | 8 +- .../report/service_types_provider.dart | 8 +- lib/main.dart | 10 + lib/models/device/device.dart | 4 + lib/models/device/device_transfer.dart | 2 +- lib/models/device/device_transfer_info.dart | 6 +- lib/models/gas_refill/gas_refill_details.dart | 14 +- lib/models/gas_refill/gas_refill_model.dart | 8 +- lib/models/{status.dart => lookup.dart} | 18 +- lib/models/pantry/calibration_tools.dart | 26 +++ lib/models/pantry/contact.dart | 41 ++++ lib/models/pantry/lookups/contact_person.dart | 15 ++ lib/models/pantry/lookups/contact_title.dart | 15 ++ lib/models/pantry/pentry.dart | 121 +++++++++++ lib/models/pantry/pm_kit.dart | 45 ++++ lib/models/pantry/ppm_check_list.dart | 33 +++ lib/models/service_report.dart | 23 +-- .../service_request/service_request.dart | 9 + lib/models/user.dart | 1 - lib/models/visits/visit.dart | 9 +- lib/models/visits/visits_group.dart | 6 +- lib/views/app_style/colors.dart | 2 +- .../track_device_transfer.dart | 2 +- lib/views/pages/user/land_page.dart | 112 +++++----- .../pages/user/requests/create_request.dart | 27 ++- .../report/create_service_report.dart | 94 ++++----- .../requests/report/edit_service_report.dart | 2 +- .../pages/user/requests/request_details.dart | 12 +- .../pages/user/visits/pantry/edit_pentry.dart | 192 ++++++++++++++++++ .../visits/pantry/future_edit_pently.dart | 60 ++++++ .../visits/update_visits_group_sheet.dart | 16 +- .../pages/user/visits/visit_details.dart | 23 ++- .../widgets/date_and_time/date_picker.dart | 7 +- .../auto_complete_devices_field.dart | 99 ++++----- .../equipment/single_device_picker.dart | 45 ++-- ...dart => hospital_auto_complete_field.dart} | 9 +- .../widgets/images/mini_one_image_picker.dart | 4 +- .../widgets/images/multi_image_picker.dart | 2 +- .../parts/auto_complete_parts_field.dart | 101 +++++---- .../auto_complete_devices_field.dart | 95 +++++++++ .../pentry/pentry_calibration_tool_form.dart | 100 +++++++++ .../widgets/pentry/pentry_info_form.dart | 123 +++++++++++ .../widgets/pentry/pentry_pm_kit_form.dart | 158 ++++++++++++++ .../pentry/pentry_ppm_check_list_form.dart | 119 +++++++++++ .../widgets/requests/request_status.dart | 2 +- .../requests/service_request_item.dart | 51 ----- .../service_request_update_dialog.dart | 6 +- lib/views/widgets/search/filter_item.dart | 4 +- .../search/service_request_search_bar.dart | 18 +- .../widgets/search/visits_search_bar.dart | 22 +- .../status/employee/employee_mune.dart | 6 +- .../status/gas_refill/gas_cylinder_size.dart | 6 +- .../widgets/status/gas_refill/gas_status.dart | 6 +- .../widgets/status/gas_refill/gas_type.dart | 6 +- .../widgets/status/multi_status_menu.dart | 14 +- .../status/pentry/pentry_status_mune.dart | 40 ++++ .../pentry/pentry_task_status_mune.dart | 38 ++++ .../pentry/pentry_visit_status_mune.dart | 39 ++++ .../report/service_report_last_call.dart | 4 +- .../status/report/service_report_reasons.dart | 6 +- .../status/report/service_report_status.dart | 4 +- .../status/report/service_report_type.dart | 32 +-- .../widgets/status/report/service_status.dart | 6 +- .../service_request_defect_types_mune.dart | 41 ++++ .../service_request_priority_mune.dart | 40 ++++ .../widgets/status/single_status_menu.dart | 18 +- lib/views/widgets/timer/app_timer.dart | 47 ++--- lib/views/widgets/visits/visit_item.dart | 15 +- pubspec.yaml | 2 +- 90 files changed, 2331 insertions(+), 543 deletions(-) create mode 100644 lib/controllers/data/pentry/pentry_controller.dart create mode 100644 lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart rename lib/models/{status.dart => lookup.dart} (68%) create mode 100644 lib/models/pantry/calibration_tools.dart create mode 100644 lib/models/pantry/contact.dart create mode 100644 lib/models/pantry/lookups/contact_person.dart create mode 100644 lib/models/pantry/lookups/contact_title.dart create mode 100644 lib/models/pantry/pentry.dart create mode 100644 lib/models/pantry/pm_kit.dart create mode 100644 lib/models/pantry/ppm_check_list.dart create mode 100644 lib/views/pages/user/visits/pantry/edit_pentry.dart create mode 100644 lib/views/pages/user/visits/pantry/future_edit_pently.dart rename lib/views/widgets/hospitals/{auto_complete_field.dart => hospital_auto_complete_field.dart} (89%) create mode 100644 lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart create mode 100644 lib/views/widgets/pentry/pentry_calibration_tool_form.dart create mode 100644 lib/views/widgets/pentry/pentry_info_form.dart create mode 100644 lib/views/widgets/pentry/pentry_pm_kit_form.dart create mode 100644 lib/views/widgets/pentry/pentry_ppm_check_list_form.dart create mode 100644 lib/views/widgets/status/pentry/pentry_status_mune.dart create mode 100644 lib/views/widgets/status/pentry/pentry_task_status_mune.dart create mode 100644 lib/views/widgets/status/pentry/pentry_visit_status_mune.dart create mode 100644 lib/views/widgets/status/service_request/service_request_defect_types_mune.dart create mode 100644 lib/views/widgets/status/service_request/service_request_priority_mune.dart diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 2353ebd1..2ce29fb9 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -64,7 +64,7 @@ "code": "Code", "serialNumber": "Serial Number", "add": "Add", - "brand": "Brand", + "brand": "manufacture", "clearSearch": "Clear Search", "closed": "Closed", "create": "Create", @@ -84,8 +84,8 @@ "facebook": "facebook", "faultDescription": "Fault Description", "general": "General", - "hospital": "Client", - "hospitalRequired": "Client Required", + "hospital": "Site", + "hospitalRequired": "Site Required", "hotLine": "Hot Line", "jobSheetNumber": "Job Sheet Number", "linkedIn": "linkedIn", @@ -97,8 +97,8 @@ "newServiceRequest": "New Service Request", "newWord": "New", "noDateFound": "No Date Found", - "noDeviceFound": "No Device Found", - "noHospitalFound": "No Client Found", + "noDeviceFound": "No Asset Found", + "noHospitalFound": "No Site Found", "noModelFound": "No Model Found", "noServiceRequestFound": "No Service Request Found", "noSnFound": "No SN Found", @@ -106,8 +106,8 @@ "notificationsNotFound": "Notifications Not Found", "noUniteFound": "No Unit Found", "ourWebsite": "Our Website", - "pickDevice": "Pick Device", - "pickHospital": "Pick Client", + "pickDevice": "Pick Asset", + "pickHospital": "Pick Site", "pickUnite": "Pick Unit", "policy": "Policy", "reason1": "The engineer didn't confirm visit date with 2 hours from the request time", @@ -169,10 +169,10 @@ "attachImage": "Attach Image", "callLastSituation": "Call's Last Situation", "customer": "Customer", - "editServiceReport": "Edit Service Report", + "editServiceReport": "Edit Work Order", "invoiceCode": "Invoice Code", "invoiceNumber": "Invoice Number", - "newServiceReport": "New Service Report", + "newServiceReport": "New Work Order", "number": "Number", "operatingHours": "Operating Hours", "partNumber": "Part Number", diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index f09068a2..be346745 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -37,6 +37,8 @@ class URLs{ static const getServiceReportLastCalls = "/return/call/last/situation"; // get static const getServiceTypes = "/return/service/type"; // get static const getPartNumber = "/handle/return/all/parts"; // get + static const getServiceReportPriority = "/return/call/priority/list"; // get + static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get //gas refill static const getGasTypes = "/return/gas/refill/types"; // get @@ -54,4 +56,13 @@ class URLs{ // employee static const getEmployees = "/return/assigned/employee"; // get + // pentry + static const getPentry = "/return/pentry/details"; // get + static const updatePentry = "/update/pentry/details"; // get + static const getPentryTaskStatus = "/return/pentry/task/status"; // get + static const getPentryVisitStatus = "/return/pentry/visit/status/list"; // get + static const getPentryStatus = "/return/pentry/status/list"; // get + // contacts + static const getPentryContacts = "/handle/return/all/contacts"; // get + } \ No newline at end of file diff --git a/lib/controllers/data/pentry/pentry_controller.dart b/lib/controllers/data/pentry/pentry_controller.dart new file mode 100644 index 00000000..f12b27b8 --- /dev/null +++ b/lib/controllers/data/pentry/pentry_controller.dart @@ -0,0 +1,18 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:http/http.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/pantry/pentry.dart'; +import 'package:test_sa/models/visits/visit.dart'; + +import '../../../models/user.dart'; +import '../../api_routes/urls.dart'; + +class PentryController { + const PentryController._(); + + static const PentryController instance = PentryController._(); + + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index 808421da..985f3aad 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -81,25 +81,25 @@ class DevicesProvider extends ChangeNotifier{ @required String host, @required User user, @required String hospitalId, - @required String title}) async { + String serialNumber, + String number, + }) async { Response response; try{ response = await get( - Uri.parse(host + URLs.getEquipment+"?client=$hospitalId" - + ( title == null || title.isEmpty ? "" : "&name=$title" )), + Uri.parse("$host${URLs.getEquipment}?client=$hospitalId" + "${serialNumber?.isEmpty == false ? "&name=$serialNumber" :""}" + "${number?.isEmpty == false ? "&number=$number" : ""}" + ), ); - _stateCode = response.statusCode; - List _page = []; + List page = []; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); + page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); } - return _page; + return page; } catch(error) { - _loading = false; - _stateCode = -1; - notifyListeners(); return []; } diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index e0f90bbc..a409eea1 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -109,8 +109,8 @@ class GasRefillProvider extends ChangeNotifier{ }; body["details"] = jsonEncode(model.details.map((model) => { - "type": model.type.id.toString(), - "size": model.cylinderSize.id.toString(), + "type": model.type.id?.toString(), + "size": model.cylinderSize?.id.toString(), "requsted_qty": model.requestedQuantity.toString(), }).toList()); diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index 3ead9f6f..e7d61595 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -96,11 +96,6 @@ class HospitalsProvider extends ChangeNotifier{ } - /// 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> getHospitalsList ({String host,User user,String title}) async { Response response; try{ diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 061e3da7..6f763f77 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -110,7 +110,6 @@ class PartsProvider extends ChangeNotifier{ "Content-Type":"application/json; charset=utf-8" } ); - _stateCode = response.statusCode; List _page = []; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -119,9 +118,6 @@ class PartsProvider extends ChangeNotifier{ } return _page; } catch(error) { - _loading = false; - _stateCode = -1; - notifyListeners(); return []; } diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index 1db89790..bc0ec05c 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; @@ -54,6 +55,11 @@ class RegularVisitsProvider extends ChangeNotifier{ Response response; //userId = 397.toString(); // testing id to view data try{ + print( Uri.parse( + "$host${URLs.getRegularVisits}?uid=${user.id}" + "&token=${user.token}" + "&page=${(visits?.length ?? 0) ~/pageItemNumber}${visitsSearch?.toSearchString()}" ?? "" + )); response = await get( Uri.parse( host+URLs.getRegularVisits @@ -76,7 +82,7 @@ class RegularVisitsProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received try{ - List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); + List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List _visits = requestsListJson.map( (request) => Visit.fromJson(request) ).toList(); @@ -89,6 +95,7 @@ class RegularVisitsProvider extends ChangeNotifier{ nextPage = false; } }catch(error){ + print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -137,5 +144,52 @@ class RegularVisitsProvider extends ChangeNotifier{ } } + Future getPently({String host,User user,String id}) async { + Response response; + print(Uri.parse("$host${URLs.getPentry}/$id"),); + response = await get( + Uri.parse("$host${URLs.getPentry}/$id"), + headers: { + "Content-Type":"application/json; charset=utf-8" + } + ); + print(response.body); + + Pentry pantry; + if(response.statusCode >= 200 && response.statusCode < 300) { + pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes))); + } + return pantry; + } + Future updatePentry ({ + @required String host, + @required User user, + @required Pentry pentry, + @required Visit visit, + }) async { + try{ + Response response; + Map body = pentry.toMap(); + body["uid"] = user.id; + body["token"] = user.token; + print( Uri.parse(host+URLs.updatePentry + "/${visit.id}"),); + print(body); + response = await post( + Uri.parse(host+URLs.updatePentry + "/${visit.id}"), + body: body, + ); + print(response.body); + if(response.statusCode >= 200 && response.statusCode < 300) { + visit.status = pentry.ppmVisitStatus; + notifyListeners(); + } + return response.statusCode; + + } catch(error) { + print(error); + return -1; + } + + } } \ No newline at end of file diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index b5ab6022..3b452497 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -3,10 +3,10 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/models/issue.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/models/service_request/service_request_search.dart'; -import 'package:test_sa/models/status.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/user.dart'; @@ -161,6 +161,8 @@ class ServiceRequestsProvider extends ChangeNotifier{ "client": user.hospital.id ?? '', "complaint": serviceRequest.maintenanceIssue, "image": json.encode(serviceRequest.devicePhotos), + "priority": (serviceRequest.priority?.id).toString(), + "defect_types": (serviceRequest.defectType?.id).toString(), }; if(serviceRequest.audio != null){ body["audio"] = serviceRequest.audio; @@ -173,7 +175,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ host+URLs.createRequest), body: body, ); - + print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(serviceRequests != null) @@ -225,7 +227,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required String host, @required User user, @required String newDate, - @required Status employee, + @required Lookup employee, @required ServiceRequest request, }) async { Response response; diff --git a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart index 7c6a6757..bd4db06c 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -23,8 +23,8 @@ class EmployeesProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _items; - List get items => _items; + List _items; + List get items => _items; // when categories in-process _loading = true // done _loading = true @@ -57,7 +57,7 @@ class EmployeesProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((type) => Status.fromJson(type)).toList(); + _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart index a4533788..5ea49fa9 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -24,8 +24,8 @@ class GasCylinderSizesProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _items; - List get items => _items; + List _items; + List get items => _items; // when categories in-process _loading = true // done _loading = true @@ -56,7 +56,7 @@ class GasCylinderSizesProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((item) => Status.fromJson(item)).toList(); + _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart index 60d5db9e..a6fcbc5a 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -24,8 +24,8 @@ class GasStatusProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _items; - List get items => _items; + List _items; + List get items => _items; // when categories in-process _loading = true // done _loading = true @@ -55,7 +55,7 @@ class GasStatusProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((item) => Status.fromJson(item)).toList(); + _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index 33ab1b27..fa193fa4 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -24,8 +24,8 @@ class GasTypesProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _items; - List get items => _items; + List _items; + List get items => _items; // when categories in-process _loading = true // done _loading = true @@ -55,7 +55,7 @@ class GasTypesProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((item) => Status.fromJson(item)).toList(); + _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart new file mode 100644 index 00000000..d659ca7a --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; + +class PentryStatusProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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 get( + Uri.parse( + host + URLs.getPentryStatus), + ); + print(response.body); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List listJson = json.decode(utf8.decode(response.bodyBytes)); + _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart new file mode 100644 index 00000000..5bbedd0b --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; + +class PentryTaskStatusProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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 get( + Uri.parse( + host + URLs.getPentryTaskStatus), + ); + print(response.body); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + _items = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart new file mode 100644 index 00000000..a25a402f --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; + +class PentryVisitStatusProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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 get( + Uri.parse( + host + URLs.getPentryVisitStatus), + ); + print(response.body); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List listJson = json.decode(utf8.decode(response.bodyBytes)); + _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart new file mode 100644 index 00000000..3547e8cc --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; + +class ServiceRequestDefectTypesProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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 get( + Uri.parse( + host + URLs.getServiceReportDefectTypes), + ); + print(response.body); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List listJson = json.decode(utf8.decode(response.bodyBytes)); + _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart index b7ac8b79..20e9f7be 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -24,8 +24,8 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _calls; - List get calls => _calls; + List _calls; + List get calls => _calls; // when categories in-process _loading = true // done _loading = true @@ -59,7 +59,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _calls = categoriesListJson.map((type) => Status.fromServiceReportJson(type)).toList(); + _calls = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart new file mode 100644 index 00000000..bcee8d4c --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart @@ -0,0 +1,75 @@ +import 'dart:convert'; + +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'; + +class ServiceRequestPriorityProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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 get( + Uri.parse( + host + URLs.getServiceReportPriority), + ); + print(response.body); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List listJson = json.decode(utf8.decode(response.bodyBytes)); + _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart index 5d2f499d..b1f86f54 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -23,8 +23,8 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _reasons; - List get reasons => _reasons; + List _reasons; + List get reasons => _reasons; // when categories in-process _loading = true // done _loading = true @@ -56,7 +56,7 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _reasons = categoriesListJson.map((type) => Status.fromServiceReportJson(type)).toList(); + _reasons = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart index 1cc21f4c..6e98367c 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -23,8 +23,8 @@ class ServiceReportStatusProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _status; - List get statuses => _status; + List _status; + List get statuses => _status; // when categories in-process _loading = true // done _loading = true @@ -56,7 +56,7 @@ class ServiceReportStatusProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _status = categoriesListJson.map((type) => Status.fromServiceReportJson(type)).toList(); + _status = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart index 3737fc51..358440a1 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -23,8 +23,8 @@ class ServiceReportTypesProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _types; - List get types => _types; + List _types; + List get types => _types; // when categories in-process _loading = true // done _loading = true @@ -57,7 +57,7 @@ class ServiceReportTypesProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _types = categoriesListJson.map((type) => Status.fromServiceReportJson(type)).toList(); + _types = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart index 5cde5e9b..3fa2ddb3 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/models/status.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'; @@ -23,8 +23,8 @@ class ServiceStatusProvider extends ChangeNotifier{ // contain user data // when user not login or register _user = null - List _statuses; - List get statuses => _statuses; + List _statuses; + List get statuses => _statuses; // when categories in-process _loading = true // done _loading = true @@ -57,7 +57,7 @@ class ServiceStatusProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _statuses = categoriesListJson.map((e) => Status.fromServiceReportJson(e)).toList(); + _statuses = categoriesListJson.map((e) => Lookup.fromIntIdJson(e)).toList(); } _loading = false; diff --git a/lib/main.dart b/lib/main.dart index 2cf47e62..0be3e414 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,6 +11,10 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/employee/empl import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_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/status_drop_down/gas_refill/gas_types_provider.dart'; +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_priority_provider.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/login.dart'; import 'package:test_sa/views/pages/register.dart'; @@ -33,6 +37,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; import 'controllers/providers/api/parts_provider.dart'; import 'controllers/providers/api/preventive_maintenance_visits_provider.dart'; +import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart'; @@ -80,6 +85,11 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => GasRefillProvider()), ChangeNotifierProvider(create: (_) => DeviceTransferProvider()), ChangeNotifierProvider(create: (_) => EmployeesProvider()), + ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()), + ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()), + ChangeNotifierProvider(create: (_) => PentryStatusProvider()), + ChangeNotifierProvider(create: (_) => ServiceRequestPriorityProvider()), + ChangeNotifierProvider(create: (_) => ServiceRequestDefectTypesProvider()), ], child: GestureDetector( onTap: () { diff --git a/lib/models/device/device.dart b/lib/models/device/device.dart index a817b00e..b84b8715 100644 --- a/lib/models/device/device.dart +++ b/lib/models/device/device.dart @@ -1,6 +1,7 @@ class Device{ String id; String serialNumber; + String number; String brand; String model; DateTime productionDate; @@ -13,6 +14,7 @@ class Device{ Device({ this.id, this.serialNumber, + this.number, this.brand, this.model, this.productionDate, @@ -27,6 +29,7 @@ class Device{ return Device( id: parsedJson["nid"] ?? parsedJson["id"], serialNumber: parsedJson["sn"] ?? parsedJson["value"], + number: parsedJson["asset_no"], brand: parsedJson["brand"].toString(), model: parsedJson["model"].toString(), productionDate: getDateFromString(parsedJson["production_date"]), @@ -42,6 +45,7 @@ class Device{ return Device( id: device.id, serialNumber: device.serialNumber, + number: device.number, brand: device.brand, model: device.model, productionDate: device.productionDate, diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index 2cad5ed0..27379344 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -3,7 +3,7 @@ import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/hospital.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; class DeviceTransfer{ String id; diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index f3f1d80d..3e8d0f8f 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -2,7 +2,7 @@ import 'package:http/http.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/hospital.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; class DeviceTransferInfo{ String userId; @@ -13,7 +13,7 @@ class DeviceTransferInfo{ String travelingHours; String name; String signature; - Status status; + Lookup status; DeviceTransferInfo({ this.userId, @@ -67,7 +67,7 @@ class DeviceTransferInfo{ comment: parsedJson["${key}comment"], client: Hospital.fromJson(parsedJson["${key}client"]), department: Department.fromJson(parsedJson["${key}department"]), - status: Status.fromJson(parsedJson["${key}status"]), + status: Lookup.fromJson(parsedJson["${key}status"]), ); } } diff --git a/lib/models/gas_refill/gas_refill_details.dart b/lib/models/gas_refill/gas_refill_details.dart index 35ed91fa..f150e150 100644 --- a/lib/models/gas_refill/gas_refill_details.dart +++ b/lib/models/gas_refill/gas_refill_details.dart @@ -1,8 +1,8 @@ -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; class GasRefillDetails{ - Status type; - Status cylinderSize; + Lookup type; + Lookup cylinderSize; int requestedQuantity; int deliveredQuantity; @@ -21,9 +21,9 @@ class GasRefillDetails{ } factory GasRefillDetails.fromJson(Map parsedJson){ return GasRefillDetails( - type: Status.fromJson(parsedJson["type"]), + type: Lookup.fromJson(parsedJson["type"]), - cylinderSize: Status.fromJson(parsedJson["size"]), + cylinderSize: Lookup.fromJson(parsedJson["size"]), requestedQuantity: parsedJson["requsted_qty"] == null ? 0 : int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0, deliveredQuantity: parsedJson["deliverd_qty"] == null @@ -33,8 +33,8 @@ class GasRefillDetails{ factory GasRefillDetails.fromDetails(GasRefillDetails details){ return GasRefillDetails( - type: Status.fromStatus(details.type), - cylinderSize:Status.fromStatus(details.cylinderSize), + type: Lookup.fromStatus(details.type), + cylinderSize:Lookup.fromStatus(details.cylinderSize), requestedQuantity: details.requestedQuantity, deliveredQuantity: details.deliveredQuantity, ); diff --git a/lib/models/gas_refill/gas_refill_model.dart b/lib/models/gas_refill/gas_refill_model.dart index b0941c2b..28773fac 100644 --- a/lib/models/gas_refill/gas_refill_model.dart +++ b/lib/models/gas_refill/gas_refill_model.dart @@ -1,12 +1,12 @@ import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; class GasRefillModel{ String id; String userId; String clientName; String title; - Status status; + Lookup status; List details; GasRefillModel({ @@ -30,7 +30,7 @@ class GasRefillModel{ userId = model.userId; clientName = model.clientName; title = model.title; - status = Status.fromStatus(model.status); + status = Lookup.fromStatus(model.status); details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); } @@ -45,7 +45,7 @@ class GasRefillModel{ userId: parsedJson["uid"], title: parsedJson["title"], clientName: parsedJson["client"], - status: Status.fromJson(parsedJson["status"]), + status: Lookup.fromJson(parsedJson["status"]), details: details, ); } diff --git a/lib/models/status.dart b/lib/models/lookup.dart similarity index 68% rename from lib/models/status.dart rename to lib/models/lookup.dart index 79786f40..a52a1698 100644 --- a/lib/models/status.dart +++ b/lib/models/lookup.dart @@ -1,10 +1,10 @@ -class Status{ +class Lookup{ final String label; final String key; final int id; - const Status({ + const Lookup({ this.label, this.key, this.id, @@ -12,7 +12,7 @@ class Status{ @override bool operator == (Object other) => - identical(this, other) || other is Status && + identical(this, other) || other is Lookup && key == other.key && id == other.id; @@ -20,17 +20,17 @@ class Status{ @override int get hashCode => id.hashCode; - factory Status.fromStatus(Status old){ - return Status( + factory Lookup.fromStatus(Lookup old){ + return Lookup( label: old.label, id: old.id, key: old.key, ); } - factory Status.fromJson(Map parsedJson){ + factory Lookup.fromJson(Map parsedJson){ if(parsedJson["id"] == null && parsedJson["uid"] == null) return null; - return Status( + return Lookup( label: parsedJson["value"], id: parsedJson["id"] is int ? parsedJson["id"] @@ -38,8 +38,8 @@ class Status{ ); } - factory Status.fromServiceReportJson(Map parsedJson){ - return Status( + factory Lookup.fromIntIdJson(Map parsedJson){ + return Lookup( label: parsedJson["value"], id: parsedJson["id"], ); diff --git a/lib/models/pantry/calibration_tools.dart b/lib/models/pantry/calibration_tools.dart new file mode 100644 index 00000000..2c70c6d2 --- /dev/null +++ b/lib/models/pantry/calibration_tools.dart @@ -0,0 +1,26 @@ +import 'package:test_sa/models/lookup.dart'; + +class CalibrationTool{ + Lookup assetsNumber; + DateTime dataOfTesting; + + CalibrationTool({ + this.assetsNumber, + this.dataOfTesting, + }); + + Map toMap() { + return { + if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(), + if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(), + }; + } + + factory CalibrationTool.fromMap(Map map) { + return CalibrationTool( + assetsNumber: Lookup.fromJson(map['assetsSN']), + dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null : + DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000), + ); + } +} \ No newline at end of file diff --git a/lib/models/pantry/contact.dart b/lib/models/pantry/contact.dart new file mode 100644 index 00000000..50748bea --- /dev/null +++ b/lib/models/pantry/contact.dart @@ -0,0 +1,41 @@ +import 'package:test_sa/models/lookup.dart'; + +class Contact{ + Lookup title; + Lookup contactPerson; + String job; + String email; + String telephone; + String landLine; + + Contact({ + this.title, + this.contactPerson, + this.job, + this.email, + this.telephone, + this.landLine + }); + + Map toMap() { + return { + if (title != null) 'title': title.id.toString(), + if (contactPerson != null) 'contactPerson': contactPerson.id.toString(), + if (job != null) 'job': job, + if (email != null) 'email': email, + if (telephone != null) 'telephone': telephone, + if (landLine != null) 'landLine': landLine, + }; + } + + factory Contact.fromMap(Map map) { + return Contact( + title: map['title'] as Lookup, + contactPerson: map['contactPerson'] as Lookup, + job: map['job'] as String, + email: map['email'] as String, + telephone: map['telephone'] as String, + landLine: map['landLine'] as String, + ); + } +} \ No newline at end of file diff --git a/lib/models/pantry/lookups/contact_person.dart b/lib/models/pantry/lookups/contact_person.dart new file mode 100644 index 00000000..5231712c --- /dev/null +++ b/lib/models/pantry/lookups/contact_person.dart @@ -0,0 +1,15 @@ +import 'package:test_sa/models/lookup.dart'; + +class ContactTitle extends Lookup { + ContactTitle({ + int id, + String label + }):super(id: id,label: label); + + factory ContactTitle.fromMap(Map parsedJson){ + return ContactTitle( + label: parsedJson["value"], + id: parsedJson["id"], + ); + } +} \ No newline at end of file diff --git a/lib/models/pantry/lookups/contact_title.dart b/lib/models/pantry/lookups/contact_title.dart new file mode 100644 index 00000000..5231712c --- /dev/null +++ b/lib/models/pantry/lookups/contact_title.dart @@ -0,0 +1,15 @@ +import 'package:test_sa/models/lookup.dart'; + +class ContactTitle extends Lookup { + ContactTitle({ + int id, + String label + }):super(id: id,label: label); + + factory ContactTitle.fromMap(Map parsedJson){ + return ContactTitle( + label: parsedJson["value"], + id: parsedJson["id"], + ); + } +} \ No newline at end of file diff --git a/lib/models/pantry/pentry.dart b/lib/models/pantry/pentry.dart new file mode 100644 index 00000000..cee31181 --- /dev/null +++ b/lib/models/pantry/pentry.dart @@ -0,0 +1,121 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/pantry/calibration_tools.dart'; +import 'package:test_sa/models/pantry/contact.dart'; +import 'package:test_sa/models/pantry/pm_kit.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; +import 'package:test_sa/models/timer_model.dart'; + +class Pentry{ + Lookup ppmVisitStatus; + Lookup status; + TimerModel timer; + DateTime actualVisitDate; + String travelingHours; + String image; + File imageFile; + // List contacts; + List ppmCheckLists; + List calibrationTools; + List pmKits; + + Pentry({ + this.travelingHours, + this.timer, + this.status, + this.ppmVisitStatus, + this.actualVisitDate, + this.image, + this.imageFile, + // this.contacts, + this.ppmCheckLists, + this.calibrationTools, + this.pmKits, + }); + + bool validate(){ + if(actualVisitDate == null) return false; + if(timer == null && timer.endAt != null) return false; + if(ppmVisitStatus == null) return false; + //if(status == null) return false; + + return true; + } + + Map toMap() { + Map map = {}; + map["visit_status"] = ppmVisitStatus?.id.toString(); + if(status != null) map["pentry_status"] = status?.id.toString(); + if(travelingHours != null) map["traveling_hours"] = travelingHours; + if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); + map["actual_date"] = (actualVisitDate.millisecondsSinceEpoch / 1000).toStringAsFixed(0); + if(timer != null){ + map["start_date"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); + map["end_date"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); + map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); + } + // if(contacts?.isNotEmpty == true) { + // for(int i = 0;i e.toMap()).toList()); + map["calibrationTools"] = jsonEncode(calibrationTools.map((e) => e.toMap()).toList()); + map["pmKits"] = jsonEncode(pmKits.map((e) => e.toMap()).toList()); + return map; + } + + factory Pentry.fromMap(Map map) { + // List contacts = []; + // if(map['contacts'] != null){ + // contacts =(map['contacts'] as List) + // .map((e) => Contact.fromMap(e as Map)) + // .toList(); + // } + + List pmKits = []; + if(map['pmKits'] != null){ + pmKits =(map['pmKits'] as List) + .map((e) => PMKit.fromMap(e as Map)) + .toList(); + } + + List ppmCheckLists = []; + if(map['ppmCheckLists'] != null){ + ppmCheckLists =(map['ppmCheckLists'] as List) + .map((e) => PPMCheckList.fromMap(e as Map)) + .toList(); + } + + List calibrationTools = []; + if(map['calibrationTools'] != null){ + calibrationTools =(map['calibrationTools'] as List) + .map((e) => CalibrationTool.fromMap(e as Map)) + .toList(); + } + return Pentry( + status: Lookup.fromJson(map["pentry_status"]), + ppmVisitStatus: Lookup.fromJson(map["visit_status"]), + actualVisitDate: getDate(map["actual_date"]), + travelingHours: map["traveling_hours"], + timer: TimerModel( + startAt: getDate(map["start_date"]), + endAt: getDate(map["end_date"]), + durationInSecond: (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 *60 + ), + // contacts: contacts, + ppmCheckLists: ppmCheckLists, + calibrationTools: calibrationTools, + pmKits: pmKits, + ); + } + + static getDate(String date){ + return date == null || date.isEmpty + ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); + } +} \ No newline at end of file diff --git a/lib/models/pantry/pm_kit.dart b/lib/models/pantry/pm_kit.dart new file mode 100644 index 00000000..0a008e5f --- /dev/null +++ b/lib/models/pantry/pm_kit.dart @@ -0,0 +1,45 @@ +import 'package:test_sa/models/lookup.dart'; + +class PMKit{ + Lookup itemCode; + String itemName; + String preparationTimeFrame; + String kitFrequencyDemand; + String availability; + String quantityNeeded; + String quantityReserved; + + PMKit({ + this.itemCode, + this.itemName, + this.preparationTimeFrame, + this.kitFrequencyDemand, + this.availability, + this.quantityNeeded, + this.quantityReserved + }); + + Map toMap() { + return { + if(itemCode != null) 'itemCode': (itemCode?.id).toString(), + if(itemName != null) 'itemName': itemName, + if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, + if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, + if(availability != null) 'availability': availability, + if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, + if(quantityReserved != null) 'quantityReserved': quantityReserved, + }; + } + + factory PMKit.fromMap(Map map) { + return PMKit( + itemCode: Lookup.fromJson(map['itemCode']), + itemName: map['itemName'] as String, + preparationTimeFrame: map['preparationTimeFrame'] as String, + kitFrequencyDemand: map['kitFrequencyDemand'] as String, + availability: map['availability'] as String, + quantityNeeded: map['quantityNeeded'] as String, + quantityReserved: map['quantityReserved'] as String, + ); + } +} \ No newline at end of file diff --git a/lib/models/pantry/ppm_check_list.dart b/lib/models/pantry/ppm_check_list.dart new file mode 100644 index 00000000..8f1a14d7 --- /dev/null +++ b/lib/models/pantry/ppm_check_list.dart @@ -0,0 +1,33 @@ +import 'package:test_sa/models/lookup.dart'; + +class PPMCheckList{ + Lookup status; + String title; + String comment; + String measuredValue; + + PPMCheckList({ + this.title, + this.status, + this.comment, + this.measuredValue, + }); + + Map toMap() { + return { + if(status != null) 'status': status?.id.toString(), + if(title != null) 'title': title, + if(comment != null) 'comment': comment, + if(measuredValue != null) 'measuredValue': measuredValue, + }; + } + + factory PPMCheckList.fromMap(Map map) { + return PPMCheckList( + status: Lookup.fromJson(map['status']), + title: map['title'] as String, + comment: map['comment'] as String, + measuredValue: map['measuredValue'] as String, + ); + } +} \ No newline at end of file diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 7737c9f5..33bb2fd2 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/part.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; class ServiceReport { @@ -10,11 +10,11 @@ class ServiceReport { String operatingHours; DateTime visitDate; DateTime endDate; - Status serviceType; - Status callLastSituation; - Status status; - Status type; - Status reason; + Lookup serviceType; + Lookup callLastSituation; + Lookup status; + Lookup type; + Lookup reason; String faultDescription; String workPreformed; //String workHours; @@ -90,7 +90,6 @@ class ServiceReport { } bool validate(){ - if(visitDate == null) return false; if(serviceType == null) return false; if(status == null) return false; @@ -120,11 +119,11 @@ class ServiceReport { } return ServiceReport( id: id, - serviceType: Status.fromJson(parsedJson["service_type"]), - callLastSituation: Status.fromJson(parsedJson["call_last_situtation"]), - reason: Status.fromJson(parsedJson["reasons"]), - status: Status.fromJson(parsedJson["service_report_status"]), - type: Status.fromJson(parsedJson["service_report_type"]), + serviceType: Lookup.fromJson(parsedJson["service_type"]), + callLastSituation: Lookup.fromJson(parsedJson["call_last_situtation"]), + reason: Lookup.fromJson(parsedJson["reasons"]), + status: Lookup.fromJson(parsedJson["service_report_status"]), + type: Lookup.fromJson(parsedJson["service_report_type"]), faultDescription: parsedJson["fault_description"], endDate:getDate(parsedJson["end_date"]), invoiceCode: parsedJson["invoice_code"], diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 81ea6744..ae6f9370 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -1,3 +1,5 @@ +import 'package:test_sa/models/lookup.dart'; + import '../timer_model.dart'; class ServiceRequest{ @@ -27,6 +29,9 @@ class ServiceRequest{ DateTime nextVisitDate; String jobSheetNumber; String reportID; + String deviceNumber; + Lookup priority; + Lookup defectType; ServiceRequest({ this.id, @@ -55,6 +60,9 @@ class ServiceRequest{ this.nextVisitDate, this.workPerformed, this.reportID, + this.defectType, + this.priority, + this.deviceNumber, }); @@ -63,6 +71,7 @@ class ServiceRequest{ id: parsedJson["nid"], requestCode: parsedJson["call_id"] ?? parsedJson["jobcode"] , hospitalName: parsedJson["call_client"], + deviceNumber: parsedJson["device_no"], deviceId: parsedJson["deviceid"], audio: parsedJson["audio"] ?? "", deviceArName: parsedJson["equipment_arabic_name"] == false diff --git a/lib/models/user.dart b/lib/models/user.dart index 10fb06be..b091856f 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -9,7 +9,6 @@ class User{ String password; String email; String image; - String hospitalID; Hospital hospital; Department department; UsersTypes type; diff --git a/lib/models/visits/visit.dart b/lib/models/visits/visit.dart index 55071bf9..da3a2143 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,4 +1,4 @@ -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; class Visit{ @@ -16,8 +16,9 @@ class Visit{ String employName; String modelAndBrand; String contactStatus; - Status status; + Lookup status; String assignTo; + String deviceNumber; List images; Visit({ @@ -38,6 +39,7 @@ class Visit{ this.contactStatus, this.images, this.assignTo, + this.deviceNumber, }); factory Visit.fromJson(Map parsedJson){ @@ -45,6 +47,7 @@ class Visit{ id: parsedJson["nid"], serialNumber: parsedJson["title"], hospitalId: parsedJson["client"], + deviceNumber: parsedJson["device_no"], hospitalName: parsedJson["client_name"], deviceId: parsedJson["medical_equipment_nid"], deviceSerialNumber: parsedJson["medical_equipment"], @@ -57,7 +60,7 @@ class Visit{ modelAndBrand: parsedJson["mode_brand"], contactStatus: parsedJson["contactStatus"], images: List.from(parsedJson["images"] ?? []), - status: Status( + status: Lookup( id: int.tryParse(parsedJson["status"] ?? "-1"), // actual value (0,1,2) label: parsedJson["status_value"] // text value ), diff --git a/lib/models/visits/visits_group.dart b/lib/models/visits/visits_group.dart index b408e934..abe6dfc0 100644 --- a/lib/models/visits/visits_group.dart +++ b/lib/models/visits/visits_group.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/visits/visit.dart'; class VisitsGroup{ @@ -8,8 +8,8 @@ class VisitsGroup{ String travelingHours; String jobSheetNumber; String image; - Status status; - Status taskStatus; + Lookup status; + Lookup taskStatus; DateTime date; List visits; diff --git a/lib/views/app_style/colors.dart b/lib/views/app_style/colors.dart index 6d87c5f3..58f7d442 100644 --- a/lib/views/app_style/colors.dart +++ b/lib/views/app_style/colors.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; class AColors { AColors._(); static const Color white = Color(0xffffffff); diff --git a/lib/views/pages/device_transfer/track_device_transfer.dart b/lib/views/pages/device_transfer/track_device_transfer.dart index 02da4946..7308617f 100644 --- a/lib/views/pages/device_transfer/track_device_transfer.dart +++ b/lib/views/pages/device_transfer/track_device_transfer.dart @@ -65,7 +65,7 @@ class _TrackDeviceTransferPageState extends State Expanded( child: Center( child: Text( - _subtitle.serviceRequests, + "Device Transfer", style: Theme.of(context).textTheme.headline6.copyWith( color: AColors.white, fontStyle: FontStyle.italic diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index d29f3600..c305b4ab 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -280,45 +280,46 @@ class _LandPageState extends State { }, ), - Expanded( - child: MaterialButton( - splashColor: AColors.secondaryColor.withOpacity(.5), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - padding: EdgeInsets.all(12), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular( - 8 * AppStyle.getScaleFactor(context) - ), - color: AColors.onPrimaryColor - ), - child: Icon( - Icons.phone_in_talk, - color: AColors.primaryColor , - size: 32, - ), - ), - SizedBox( - width: 12 * AppStyle.getScaleFactor(context), - ), - Text( - "${_subtitle.hotLine}\n15564", - - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - letterSpacing: 2.75, - fontWeight: FontWeight.bold - ), - ), - ], - ), - onPressed: (){ - launch("tel:15564"); - }, - ), - ), + Spacer(), + // Expanded( + // child: MaterialButton( + // splashColor: AColors.secondaryColor.withOpacity(.5), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Container( + // padding: EdgeInsets.all(12), + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular( + // 8 * AppStyle.getScaleFactor(context) + // ), + // color: AColors.onPrimaryColor + // ), + // child: Icon( + // Icons.phone_in_talk, + // color: AColors.primaryColor , + // size: 32, + // ), + // ), + // SizedBox( + // width: 12 * AppStyle.getScaleFactor(context), + // ), + // Text( + // "${_subtitle.hotLine}\n ", + // + // style: Theme.of(context).textTheme.headline6.copyWith( + // color: AColors.white, + // letterSpacing: 2.75, + // fontWeight: FontWeight.bold + // ), + // ), + // ], + // ), + // onPressed: (){ + // //launch("tel:15564"); + // }, + // ), + // ), AIconButton( iconData: Icons.notifications, onPressed: (){ @@ -349,7 +350,6 @@ class _LandPageState extends State { onPressed: (){ Navigator.of(context).pop(); Navigator.of(context).pushNamed(ProfilePage.id); - }, child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -366,9 +366,7 @@ class _LandPageState extends State { shape: BoxShape.circle ), child: ClipOval( - child: ImageLoader( - url: "https://cdn.business2community.com/wp-content/uploads/2017/08/blank-profile-picture-973460_640.png", - ), + child: Icon(Icons.person,size: 72,color: Theme.of(context).colorScheme.primary,), ), ), Text( @@ -419,20 +417,20 @@ class _LandPageState extends State { ), ], ), - DrawerItem( - icon: FontAwesomeIcons.linkedinIn, - title: _subtitle.linkedIn, - onPressed: (){ - launch("https://www.linkedin.com/company/Test SA/"); - }, - ), - DrawerItem( - icon: FontAwesomeIcons.globe, - title: _subtitle.ourWebsite, - onPressed: (){ - launch("https://www.Test SA.com/"); - }, - ), + // DrawerItem( + // icon: FontAwesomeIcons.linkedinIn, + // title: _subtitle.linkedIn, + // onPressed: (){ + // launch("https://www.linkedin.com/company/Test SA/"); + // }, + // ), + // DrawerItem( + // icon: FontAwesomeIcons.globe, + // title: _subtitle.ourWebsite, + // onPressed: (){ + // launch("https://www.Test SA.com/"); + // }, + // ), DrawerItem( icon: Icons.share, title: _subtitle.shareApp, diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index 104ce32e..705bb177 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -24,6 +24,9 @@ import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/sound/record_sound.dart'; import 'package:test_sa/views/widgets/speech_to_text/speech_to_text.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_defect_types_mune.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_priority_mune.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class CreateRequestPage extends StatefulWidget { static final String id = "/create-request"; @override @@ -120,9 +123,9 @@ class _CreateRequestPageState extends State { enable: false, initialValue: _userProvider.user.hospital?.name ?? _subtitle.noHospitalFound, hintText: _subtitle.hospital, - prefixIconData: FontAwesomeIcons.hospitalAlt, + prefixIconData: FontAwesomeIcons.hospital, prefixIconSize: 36, - style: Theme.of(context).textTheme.headline6, + style: Theme.of(context).textTheme.subtitle1, ), const SizedBox(height: 8,), _userProvider.user.department == null ? SizedBox.shrink() : @@ -132,7 +135,7 @@ class _CreateRequestPageState extends State { hintText: _subtitle.unite, prefixIconData: FontAwesomeIcons.hospitalUser, prefixIconSize: 36, - style: Theme.of(context).textTheme.headline6, + style: Theme.of(context).textTheme.subtitle1, ), const SizedBox(height: 8,), DeviceButton( @@ -142,6 +145,24 @@ class _CreateRequestPageState extends State { setState(() {}); }, ), + const SizedBox(height: 8,), + const ASubTitle("Priority"), + const SizedBox(height: 4,), + ServiceRequestPriorityMenu( + initialValue: _serviceRequest.priority, + onSelect: (status){ + _serviceRequest.priority = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Defect Type"), + const SizedBox(height: 4,), + ServiceRequestDefectTypesMenu( + initialValue: _serviceRequest.defectType, + onSelect: (status){ + _serviceRequest.defectType = status; + }, + ), MultiImagesPicker( label: _subtitle.deviceImages, images: _deviceImages, 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 b509b58d..b9f353be 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -12,7 +12,7 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -68,7 +68,7 @@ class _CreateServiceReportState extends State with TickerPr void initState() { _serviceReport = ServiceReport( visitDate: DateTime.now(), - type: const Status(id: 2), + type: const Lookup(id: 2), device: Device( id: widget.request.deviceId, serialNumber: widget.request.deviceSerialNumber, @@ -159,25 +159,25 @@ class _CreateServiceReportState extends State with TickerPr Row( children: [ // Report Status - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.reportType), - _validate && _serviceReport.type == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), - ServiceReportTypeMenu( - initialValue: _serviceReport.type, - onSelect: (status){ - _serviceReport.type = status; - }, - ), - ], - ), - ), - const SizedBox(width: 8,), + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.reportType), + // _validate && _serviceReport.type == null ? + // ASubTitle(_subtitle.requiredWord,color: Colors.red,): + // const SizedBox.shrink(), + // const SizedBox(height: 4,), + // ServiceReportTypeMenu( + // initialValue: _serviceReport.type, + // onSelect: (status){ + // _serviceReport.type = status; + // }, + // ), + // ], + // ), + // ), + // const SizedBox(width: 8,), // visit date Expanded( child: Column( @@ -490,9 +490,9 @@ class _CreateServiceReportState extends State with TickerPr textAlign: TextAlign.center, hintText: "i.e 3, 3.5, 4", style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : _subtitle.requiredWord, + // validator: (value) => + // Validator.isNumeric(value) + // ? null : _subtitle.requiredWord, textInputType: TextInputType.number, onSaved: (value){ _serviceReport.travelingHours = value; @@ -507,29 +507,29 @@ class _CreateServiceReportState extends State with TickerPr // Operating Hours and Job Sheet Number Row( children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.operatingHours), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.operatingHours, - textAlign: TextAlign.center, - hintText: "i.e 3, 3.5, 4", - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.operatingHours = value; - }, - ), - ], - ), - ), - const SizedBox(width: 8,), + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.operatingHours), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.operatingHours, + // textAlign: TextAlign.center, + // hintText: "i.e 3, 3.5, 4", + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.isNumeric(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.number, + // onSaved: (value){ + // _serviceReport.operatingHours = value; + // }, + // ), + // ], + // ), + // ), + // const SizedBox(width: 8,), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, 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 aeed77b5..1ca58282 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -12,7 +12,7 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index c9e78584..5e2d80f9 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -182,6 +182,10 @@ class RequestDetailsPage extends StatelessWidget { title: _subtitle.code, info: serviceRequest.requestCode, ), + RequestInfoRow( + title: "Asset Number", + info: serviceRequest.deviceNumber, + ), RequestInfoRow( title: _subtitle.deviceSN, info: serviceRequest.deviceSerialNumber, @@ -230,10 +234,10 @@ class RequestDetailsPage extends StatelessWidget { title: _subtitle.unite, info: serviceRequest.departmentName, ), - RequestInfoRow( - title: _subtitle.deviceArName, - content: serviceRequest.deviceArName, - ), + // RequestInfoRow( + // title: _subtitle.deviceArName, + // content: serviceRequest.deviceArName, + // ), RequestInfoRow( title: _subtitle.deviceEnName, content: serviceRequest.deviceEnName, diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart new file mode 100644 index 00000000..6b508552 --- /dev/null +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -0,0 +1,192 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/data/pentry/pentry_controller.dart'; +import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; +import 'package:test_sa/controllers/providers/api/regular_visits_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/device/device_transfer.dart'; +import 'package:test_sa/models/device/device_transfer_info.dart'; +import 'package:test_sa/models/pantry/pentry.dart'; +import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/models/visits/visit.dart'; +import 'package:test_sa/views/widgets/buttons/app_button.dart'; +import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/pentry/pentry_calibration_tool_form.dart'; +import 'package:test_sa/views/widgets/pentry/pentry_info_form.dart'; +import 'package:test_sa/views/widgets/pentry/pentry_pm_kit_form.dart'; +import 'package:test_sa/views/widgets/pentry/pentry_ppm_check_list_form.dart'; + +class EditPentry extends StatefulWidget { + final Pentry pentry; + final Visit visit; + const EditPentry({Key key,this.pentry, this.visit}) : super(key: key); + + @override + State createState() => _EditPentryState(); +} + +class _EditPentryState extends State with SingleTickerProviderStateMixin{ + bool _isLoading = false; + bool _validate = false; + Subtitle _subtitle; + UserProvider _userProvider; + SettingProvider _settingProvider; + RegularVisitsProvider _regularVisitsProvider; + Pentry _pentry; + final GlobalKey _scaffoldKey = GlobalKey(); + + TabController _tabController; + _onSubmit() async { + _validate = true; + + if(!_pentry.validate()) { + setState(() { }); + return; + } + + _isLoading = true; + setState(() {}); + + int status = await _regularVisitsProvider.updatePentry( + user: _userProvider.user, + host: _settingProvider.host, + pentry: _pentry, + visit: widget.visit + ); + _isLoading =false; + setState(() {}); + if(status >= 200 && status < 300){ + Fluttertoast.showToast( + msg: _subtitle.requestCompleteSuccessfully, + ); + // Navigator.of(context).pop(); + }else{ + String errorMessage = HttpStatusManger.getStatusMessage( + status: status, subtitle: _subtitle); + Fluttertoast.showToast( + msg: errorMessage, + ); + } + } + + @override + void initState() { + _pentry = widget.pentry; + _tabController = TabController(length: 4, vsync: this); + super.initState(); + } + + @override + void dispose() { + _tabController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + _subtitle = AppLocalization.of(context).subtitle; + _userProvider = Provider.of(context); + _settingProvider = Provider.of(context); + _regularVisitsProvider = Provider.of(context); + return Scaffold( + key: _scaffoldKey, + body: SafeArea( + child: LoadingManager( + isLoading: _isLoading, + isFailedLoading: false, + stateCode: 200, + onRefresh: () async {}, + child: Column( + children: [ + Material( + color: Theme.of(context).colorScheme.primary, + child: Padding( + padding: const EdgeInsets.all(2.0), + child: TabBar( + controller: _tabController, + isScrollable: true, + onTap: (index){ + setState(() {}); + }, + tabs: const [ + Tab(text: "PPM Check List",), + Tab(text: "Calibration Tools",), + Tab(text: "PK Kits",), + Tab(text: "Pentry",), + ]), + ), + ), + Expanded( + child: Stack( + children: [ + TabBarView( + physics: const NeverScrollableScrollPhysics(), + controller: _tabController, + children: [ + PentryPPMCheckListForm( + models: _pentry.ppmCheckLists, + enableValidate: _validate, + ), + PentryCalibrationToolForm( + models: _pentry.calibrationTools, + enableValidate: _validate, + ), + PentryPMKitForm( + models: _pentry.pmKits, + enableValidate: _validate, + ), + PentryInfoForm( + model: _pentry, + enableValidate: _validate, + ) + ], + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + if(_tabController.index != 0) + ASmallButton( + text: _subtitle.back, + onPressed: (){ + _tabController.animateTo(_tabController.index - 1,); + setState(() {}); + }, + ), + const Spacer(), + if(_tabController.index != _tabController.length -1) + ASmallButton( + text: _subtitle.next, + onPressed: (){ + _tabController.animateTo(_tabController.index + 1,); + setState(() {}); + }, + ), + if(_tabController.index == _tabController.length -1) + ASmallButton( + text: _subtitle.update, + onPressed: _onSubmit, + ), + ], + ), + ), + ) + ], + ), + ), + + ], + ) + ), + ), + ); + } +} + diff --git a/lib/views/pages/user/visits/pantry/future_edit_pently.dart b/lib/views/pages/user/visits/pantry/future_edit_pently.dart new file mode 100644 index 00000000..829052e0 --- /dev/null +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/data/pentry/pentry_controller.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/controllers/providers/api/regular_visits_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/pantry/pentry.dart'; +import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/models/visits/visit.dart'; +import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; +import 'package:test_sa/views/widgets/loaders/app_loading.dart'; +import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; +class FutureEditPentry extends StatefulWidget { + + final Visit visit; + + const FutureEditPentry({Key key, this.visit}) : super(key: key); + + @override + State createState() => _FutureEditPentryState(); +} + +class _FutureEditPentryState extends State { + + UserProvider _userProvider; + SettingProvider _settingProvider; + @override + Widget build(BuildContext context) { + _userProvider = Provider.of(context); + _settingProvider = Provider.of(context); + //String requestId = ModalRoute.of(context).settings.arguments; + Subtitle subtitle = AppLocalization.of(context).subtitle; + return Scaffold( + body: FutureBuilder( + future: RegularVisitsProvider().getPently( + user: _userProvider.user, + host: _settingProvider.host, + id: widget.visit.id + ), + builder: (BuildContext context, AsyncSnapshot snapshot){ + if(snapshot.hasError) { + print(snapshot.error); + return FailedLoading( + message: subtitle.failedToCompleteRequest, + onReload: (){setState(() {});}, + ); + } + if(snapshot.hasData){ + return EditPentry( + pentry: snapshot.data, + visit: widget.visit, + ); + } + return const Center(child: ALoading()); + }, + ), + ); + } +} diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index 50d925d5..8be79f27 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; @@ -26,15 +26,15 @@ class UpdateVisitsGroupSheet extends StatefulWidget { } class _UpdateVisitsGroupSheetState extends State { - List status = [ - Status(label: "Done", id: 0,), - Status(label: "Not Yet", id: 1), - Status(label: "On Hold", id: 2,), + List status = [ + Lookup(label: "Done", id: 0,), + Lookup(label: "Not Yet", id: 1), + Lookup(label: "On Hold", id: 2,), ]; - List taskStatus = [ - Status(label: "Passed", id: 0,), - Status(label: "Failed", id: 1), + List taskStatus = [ + Lookup(label: "Passed", id: 0,), + Lookup(label: "Failed", id: 1), ]; VisitsGroup _group = VisitsGroup(); File _image; diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index 98738c36..f5929ded 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -1,15 +1,20 @@ +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/pages/user/visits/pantry/future_edit_pently.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; +import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; import 'package:flutter/material.dart'; +import '../../../../controllers/providers/api/regular_visits_provider.dart'; + class VisitDetailsPage extends StatelessWidget { static final String id = "/visit-details"; final Visit visit; @@ -18,6 +23,7 @@ class VisitDetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; + final regularVisitsProvider = Provider.of(context); return Scaffold( body: SafeArea( child: Column( @@ -39,7 +45,18 @@ class VisitDetailsPage extends StatelessWidget { ), ), ), - SizedBox(width: 42,) + AIconButton( + iconData: Icons.edit, + color: AColors.white, + buttonSize: 42, + backgroundColor: AColors.green, + onPressed: () async { + Navigator.of(context).push( + MaterialPageRoute(builder: (_)=> FutureEditPentry(visit: visit,)) + ); + }, + ), + SizedBox(width: 16,) ], ), ), @@ -87,6 +104,10 @@ class VisitDetailsPage extends StatelessWidget { title: _subtitle.code, info: visit.serialNumber, ), + RequestInfoRow( + title: "Asset Number", + info: visit.deviceNumber, + ), RequestInfoRow( title: _subtitle.deviceSN, info: visit.deviceSerialNumber, diff --git a/lib/views/widgets/date_and_time/date_picker.dart b/lib/views/widgets/date_and_time/date_picker.dart index 4ce1dd9f..70a4c82e 100644 --- a/lib/views/widgets/date_and_time/date_picker.dart +++ b/lib/views/widgets/date_and_time/date_picker.dart @@ -14,18 +14,17 @@ class ADatePicker extends StatelessWidget { Widget build(BuildContext context) { return ElevatedButton( style: ElevatedButton.styleFrom( + foregroundColor: Colors.white, + textStyle: Theme.of(context).textTheme.subtitle2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular( 12 * AppStyle.getScaleFactor(context) - ) + ), ), - primary: AColors.white, - onPrimary: AColors.primaryColor, ), child: Text( date == null ? "Pick Date" : date.toString().split(" ").first, - style: Theme.of(context).textTheme.subtitle2, textScaleFactor: AppStyle.getScaleFactor(context), ), onPressed: () async { diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index c9e11872..ec91ae17 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -43,65 +43,52 @@ class _AutoCompleteDeviceFieldState extends State { _userProvider = Provider.of(context); _devicesProvider = Provider.of(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; - return LoadingManager( - isLoading: _devicesProvider.isLoading, - isFailedLoading: _devicesProvider.devices == null, - stateCode: _devicesProvider.stateCode, - onRefresh: () async { - _devicesProvider.reset(); - await _devicesProvider.getEquipment( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: widget.hospitalId - ); - }, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 16 - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 16 + ), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color:AColors.black), + borderRadius: BorderRadius.circular( + AppStyle.borderRadius * AppStyle.getScaleFactor(context) ), - child: TypeAheadField( - textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.headline6, - controller: _controller, - textAlign: TextAlign.center, - decoration: InputDecoration( - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + boxShadow: [ + AppStyle.boxShadow + ] + ), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), - suggestionsCallback: (vale) async { - return await _devicesProvider.getDevicesList( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: widget.hospitalId, - title: vale, - ); - }, - itemBuilder: (context, device) { - return ListTile( - title: Text(device.serialNumber), - subtitle: Text(device.model+"/"+device.brand), - ); - }, - onSuggestionSelected: (device) { - _controller.text = device.serialNumber; - widget.onPick(device.id); - }, - ), + textInputAction: TextInputAction.search, ), + suggestionsCallback: (value) async { + return await _devicesProvider.getDevicesList( + host: _settingProvider.host, + user: _userProvider.user, + hospitalId: widget.hospitalId, + serialNumber: value, + ); + }, + itemBuilder: (context, device) { + return ListTile( + title: Text(device.serialNumber), + subtitle: Text(device.model+"/"+device.brand), + ); + }, + onSuggestionSelected: (device) { + _controller.text = device.serialNumber; + widget.onPick(device.id); + }, + ), ); } } diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 9ecd0bbe..aac06ff1 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -88,22 +88,41 @@ class _SingleDevicePickerState extends State { }, child: Column( children: [ - SizedBox(height: 48,), + const SizedBox(height: 48,), Padding( padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), - child: ATextFormField( - hintText: _subtitle.searchBySn, - style: Theme.of(context).textTheme.headline6, - suffixIcon: const Icon(Icons.search_rounded), - onChange: (value){ - _searchableList.clear(); - _searchableList.addAll(_devicesProvider.devices.where( - (element) => element.serialNumber.toLowerCase().contains( + child: Column( + children: [ + ATextFormField( + hintText: _subtitle.searchBySn, + style: Theme.of(context).textTheme.subtitle1, + suffixIcon: const Icon(Icons.search_rounded), + onChange: (value){ + _searchableList.clear(); + _searchableList.addAll(_devicesProvider.devices.where( + (element) => element.serialNumber.toLowerCase().contains( + value.toLowerCase() + ) + ).toList()); + setState(() {}); + }, + ), + const SizedBox(height: 8,), + ATextFormField( + hintText: "Search by Number", + style: Theme.of(context).textTheme.subtitle1, + suffixIcon: const Icon(Icons.search_rounded), + onChange: (value){ + _searchableList.clear(); + _searchableList.addAll(_devicesProvider.devices.where( + (element) => element.number.toLowerCase().contains( value.toLowerCase() - ) - ).toList()); - setState(() {}); - }, + ) + ).toList()); + setState(() {}); + }, + ), + ], ), ), Expanded( diff --git a/lib/views/widgets/hospitals/auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart similarity index 89% rename from lib/views/widgets/hospitals/auto_complete_field.dart rename to lib/views/widgets/hospitals/hospital_auto_complete_field.dart index 6c51d23f..ba860745 100644 --- a/lib/views/widgets/hospitals/auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -9,18 +9,18 @@ import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; -class AutoCompleteField extends StatefulWidget { +class HospitalAutoCompleteField extends StatefulWidget { final String initialValue; final Function(String) onSearch; final Function(String) onSave; - const AutoCompleteField({Key key, this.onSearch, this.initialValue, this.onSave}) : super(key: key); + const HospitalAutoCompleteField({Key key, this.onSearch, this.initialValue, this.onSave}) : super(key: key); @override - _AutoCompleteFieldState createState() => _AutoCompleteFieldState(); + _HospitalAutoCompleteFieldState createState() => _HospitalAutoCompleteFieldState(); } -class _AutoCompleteFieldState extends State { +class _HospitalAutoCompleteFieldState extends State { SettingProvider _settingProvider; TextEditingController _controller; @@ -56,7 +56,6 @@ class _AutoCompleteFieldState extends State { ] ), child: TypeAheadField( - textFieldConfiguration: TextFieldConfiguration( style: Theme.of(context).textTheme.headline6, onSubmitted: widget.onSave, diff --git a/lib/views/widgets/images/mini_one_image_picker.dart b/lib/views/widgets/images/mini_one_image_picker.dart index 0f696032..b26e9f49 100644 --- a/lib/views/widgets/images/mini_one_image_picker.dart +++ b/lib/views/widgets/images/mini_one_image_picker.dart @@ -70,7 +70,8 @@ class _AMiniOneImagePickerState extends State { AppStyle.borderRadius * AppStyle.getScaleFactor(context) ) ), - primary: Colors.grey[200], + //primary: Colors.grey[200], + textStyle: Theme.of(context).textTheme.overline, padding: _image == null ? null : EdgeInsets.zero, ), @@ -78,7 +79,6 @@ class _AMiniOneImagePickerState extends State { padding: const EdgeInsets.all(8.0), child: Text( _image == null ? _subtitle.pickImage : _image.path.split("/").last, - style: Theme.of(context).textTheme.overline, textScaleFactor: AppStyle.getScaleFactor(context), ), ), diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index ae0dddb6..08f16926 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -38,7 +38,7 @@ class _MultiImagesPickerState extends State child: Text( widget.label ?? _subtitle.images, style: Theme.of(context).textTheme - .headline6.copyWith(fontSize: 18,), + .headline6.copyWith(fontSize: 14,), textScaleFactor: AppStyle.getScaleFactor(context), ), ), diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index ef2be956..0ce14380 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -10,9 +10,10 @@ import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; class AutoCompletePartsField extends StatefulWidget { final String initialValue; + final bool clearAfterPick; final Function(Part) onPick; - const AutoCompletePartsField({Key key, this.initialValue, this.onPick}) : super(key: key); + const AutoCompletePartsField({Key key, this.initialValue, this.onPick, this.clearAfterPick = true}) : super(key: key); @override _AutoCompletePartsFieldState createState() => _AutoCompletePartsFieldState(); @@ -42,62 +43,54 @@ class _AutoCompletePartsFieldState extends State { _userProvider = Provider.of(context); _partsProvider = Provider.of(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; - return LoadingManager( - isLoading: _partsProvider.isLoading, - isFailedLoading: _partsProvider.parts == null, - stateCode: _partsProvider.stateCode, - onRefresh: () async { - _partsProvider.reset(); - await _partsProvider.getParts( - host: _settingProvider.host, - user: _userProvider.user, - ); - }, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 16 - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 16 + ), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color:AColors.black), + borderRadius: BorderRadius.circular( + AppStyle.borderRadius * AppStyle.getScaleFactor(context) ), - child: TypeAheadField( - textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.subtitle1, - controller: _controller, - textAlign: TextAlign.center, - decoration: InputDecoration( - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + boxShadow: const [ + AppStyle.boxShadow + ] + ), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.subtitle1, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), - suggestionsCallback: (vale) async { - return await _partsProvider.getPartsList( - host: _settingProvider.host, - title: vale - ); - }, - itemBuilder: (context, part) { - return ListTile( - title: Text(part.code), - subtitle: Text(part.name, style: Theme.of(context).textTheme.caption,), - ); - }, - onSuggestionSelected: (part) { - _controller.clear(); - widget.onPick(part); - }, - ), + textInputAction: TextInputAction.search, ), + suggestionsCallback: (vale) async { + return await _partsProvider.getPartsList( + host: _settingProvider.host, + title: vale + ); + }, + itemBuilder: (context, part) { + return ListTile( + title: Text(part.code), + subtitle: Text(part.name, style: Theme.of(context).textTheme.caption,), + ); + }, + onSuggestionSelected: (part) { + if(widget.clearAfterPick){ + _controller.clear(); + } else{ + _controller.text = part.code; + } + widget.onPick(part); + }, + ), ); } } diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart new file mode 100644 index 00000000..e21c9ba0 --- /dev/null +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -0,0 +1,95 @@ +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/models/device/device.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_typeahead/flutter_typeahead.dart'; +import 'package:provider/provider.dart'; +class AutoCompleteDeviceNumberField extends StatefulWidget { + final Lookup initialValue; + final String hospitalId; + final Function(Lookup) onPick; + + const AutoCompleteDeviceNumberField({Key key, this.initialValue, this.onPick, this.hospitalId}) : super(key: key); + + @override + State createState() => _AutoCompleteDeviceNumberFieldState(); +} + +class _AutoCompleteDeviceNumberFieldState extends State { + + SettingProvider _settingProvider; + DevicesProvider _devicesProvider; + UserProvider _userProvider; + TextEditingController _controller; + + @override + void initState() { + _controller = TextEditingController(text: widget.initialValue?.label); + super.initState(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + @override + Widget build(BuildContext context) { + _settingProvider = Provider.of(context); + _userProvider = Provider.of(context); + _devicesProvider = Provider.of(context); + //Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 16 + ), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color:AColors.black), + borderRadius: BorderRadius.circular( + AppStyle.borderRadius * AppStyle.getScaleFactor(context) + ), + boxShadow: const [ + AppStyle.boxShadow + ] + ), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + textInputAction: TextInputAction.search, + ), + suggestionsCallback: (vale) async { + return await _devicesProvider.getDevicesList( + host: _settingProvider.host, + user: _userProvider.user, + hospitalId: widget.hospitalId, + number: vale, + ); + }, + itemBuilder: (context, device) { + return ListTile( + title: Text(device.number), + subtitle: Text("${device.model}/${device.brand}"), + ); + }, + onSuggestionSelected: (device) { + _controller.text = device.number; + widget.onPick(Lookup(id: int.tryParse(device.id),label: device.number)); + }, + ), + ); + } +} diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart new file mode 100644 index 00000000..a8d51b15 --- /dev/null +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/models/pantry/calibration_tools.dart'; +import 'package:test_sa/models/pantry/contact.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +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/buttons/app_small_button.dart'; +import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +class PentryCalibrationToolForm extends StatefulWidget { + final List models; + final bool enableValidate; + const PentryCalibrationToolForm({ + Key key, this.models, this.enableValidate, + }) : super(key: key); + + @override + State createState() => _PentryCalibrationToolFormState(); +} + +class _PentryCalibrationToolFormState extends State { + + + @override + Widget build(BuildContext context) { + final subtitle = AppLocalization.of(context).subtitle; + final userProvider = Provider.of(context); + return ListView.builder( + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), + left: 12 * AppStyle.getScaleFactor(context), + right: 12 * AppStyle.getScaleFactor(context), + bottom: 80 * AppStyle.getScaleFactor(context) + ), + itemCount: widget.models.length + 1, + itemBuilder: (context,index){ + if(index == widget.models.length){ + return AButton( + text: subtitle.add, + onPressed: (){ + widget.models.add(CalibrationTool()); + setState(() {}); + }, + ); + } + final model = widget.models[index]; + return ListView( + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ASubTitle("#${index+1}"), + if(index != 0) + ASmallButton( + color: Theme.of(context).colorScheme.error, + text: subtitle.delete, + onPressed: (){ + widget.models.remove(model); + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8,), + const ASubTitle("Asset Number"), + const SizedBox(height: 4,), + AutoCompleteDeviceNumberField( + initialValue: model.assetsNumber, + hospitalId: userProvider.user.hospital.id, + onPick: (number){ + model.assetsNumber = number; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Date of Testing"), + const SizedBox(height: 4,), + ADatePicker( + date: model.dataOfTesting, + onDatePicker: (date){ + model.dataOfTesting =date; + setState(() {}); + }, + ), + const SizedBox(height: 8,), + Divider(color: Theme.of(context).textTheme.titleMedium.color,), + ], + ); + } + ); + } +} diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart new file mode 100644 index 00000000..94813b50 --- /dev/null +++ b/lib/views/widgets/pentry/pentry_info_form.dart @@ -0,0 +1,123 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/models/pantry/calibration_tools.dart'; +import 'package:test_sa/models/pantry/contact.dart'; +import 'package:test_sa/models/pantry/pentry.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +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/buttons/app_small_button.dart'; +import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; +import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_status_mune.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; +import 'package:test_sa/views/widgets/timer/app_timer.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +class PentryInfoForm extends StatefulWidget { + final Pentry model; + final bool enableValidate; + const PentryInfoForm({ + Key key, this.model, this.enableValidate, + }) : super(key: key); + + @override + State createState() => _PentryInfoFormState(); +} + +class _PentryInfoFormState extends State { + + @override + Widget build(BuildContext context) { + final subtitle = AppLocalization.of(context).subtitle; + final userProvider = Provider.of(context); + return ListView( + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), + left: 12 * AppStyle.getScaleFactor(context), + right: 12 * AppStyle.getScaleFactor(context), + bottom: 80 * AppStyle.getScaleFactor(context) + ), + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + const SizedBox(height: 8,), + const ASubTitle("PPM Visit Status"), + if(widget.enableValidate && widget.model.ppmVisitStatus == null) + ASubTitle(subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + PentryVisitsStatusMenu( + initialValue: widget.model.ppmVisitStatus, + onSelect: (status){ + widget.model.ppmVisitStatus = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Timer"), + if(widget.enableValidate && widget.model?.timer?.endAt == null) + ASubTitle(subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + AppTimer( + timer: widget.model.timer, + onChange: (timer) async{ + widget.model.timer = timer; + return true; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Status"), + // if(widget.enableValidate && widget.model.status == null) + // ASubTitle(subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + PentryStatusMenu( + initialValue: widget.model.status, + onSelect: (status){ + widget.model.status = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Actual Visit Date"), + if(widget.enableValidate && widget.model.actualVisitDate == null) + ASubTitle(subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + ADatePicker( + date: widget.model.actualVisitDate, + from: DateTime.now().subtract(const Duration(days: 30)), + onDatePicker: (date){ + if(date == null) return; + widget.model.actualVisitDate = date; + setState(() {}); + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Traveling Hours"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (widget.model.travelingHours ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.number, + onChange: (value){ + widget.model.travelingHours = value; + }, + ), + const SizedBox(height: 12,), + const ASubTitle("PPM Attachment"), + AMiniOneImagePicker( + //error: _validate && _serviceReport.image == null, + image: widget.model.imageFile, + onPick: (image){ + widget.model.imageFile =image; + }, + ), + const SizedBox(height: 8,), + ], + ); + } +} diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart new file mode 100644 index 00000000..c725a118 --- /dev/null +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -0,0 +1,158 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/pantry/contact.dart'; +import 'package:test_sa/models/pantry/pm_kit.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +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/buttons/app_small_button.dart'; +import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +class PentryPMKitForm extends StatefulWidget { + final List models; + final bool enableValidate; + const PentryPMKitForm({ + Key key, this.models, this.enableValidate, + }) : super(key: key); + + @override + State createState() => _PentryPMKitFormState(); +} + +class _PentryPMKitFormState extends State { + + @override + Widget build(BuildContext context) { + final subtitle = AppLocalization.of(context).subtitle; + return ListView.builder( + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), + left: 12 * AppStyle.getScaleFactor(context), + right: 12 * AppStyle.getScaleFactor(context), + bottom: 80 * AppStyle.getScaleFactor(context) + ), + itemCount: widget.models.length + 1, + itemBuilder: (context,index){ + if(index == widget.models.length){ + return AButton( + text: subtitle.add, + onPressed: (){ + widget.models.add(PMKit()); + setState(() {}); + }, + ); + } + final model = widget.models[index]; + return ListView( + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ASubTitle("#${index+1}"), + if(index != 0) + ASmallButton( + color: Theme.of(context).colorScheme.error, + text: subtitle.delete, + onPressed: (){ + widget.models.remove(model); + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8,), + const ASubTitle("Item Code"), + const SizedBox(height: 4,), + AutoCompletePartsField( + clearAfterPick: false, + initialValue: (model.itemCode?.label ?? "").toString(), + onPick: (part){ + model.itemCode = Lookup(id: int.tryParse(part.id),label: part.code); + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Item Name"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.itemName ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.itemName = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Preparation Time Frame"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.preparationTimeFrame ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.preparationTimeFrame = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("kit Frequency Demand"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.kitFrequencyDemand ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.kitFrequencyDemand = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Availability"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.availability ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.availability = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Quantity Needed"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.quantityNeeded ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.number, + onChange: (value){ + model.quantityNeeded = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Quantity Reserved"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.quantityReserved ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.number, + onChange: (value){ + model.quantityReserved = value; + }, + ), + const SizedBox(height: 8,), + Divider(color: Theme.of(context).textTheme.titleMedium.color,), + ], + ); + } + ); + } +} diff --git a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart new file mode 100644 index 00000000..7219c33a --- /dev/null +++ b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/models/pantry/contact.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +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/buttons/app_small_button.dart'; +import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +class PentryPPMCheckListForm extends StatefulWidget { + final List models; + final bool enableValidate; + const PentryPPMCheckListForm({ + Key key, this.models, this.enableValidate, + }) : super(key: key); + + @override + State createState() => _PentryPPMCheckListFormState(); +} + +class _PentryPPMCheckListFormState extends State { + + + @override + Widget build(BuildContext context) { + final subtitle = AppLocalization.of(context).subtitle; + return ListView.builder( + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), + left: 12 * AppStyle.getScaleFactor(context), + right: 12 * AppStyle.getScaleFactor(context), + bottom: 80 * AppStyle.getScaleFactor(context) + ), + itemCount: widget.models.length + 1, + itemBuilder: (context,index){ + if(index == widget.models.length){ + return AButton( + text: subtitle.add, + onPressed: (){ + widget.models.add(PPMCheckList()); + setState(() {}); + }, + ); + } + final model = widget.models[index]; + return ListView( + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ASubTitle("#${index+1}"), + if(index != 0) + ASmallButton( + color: Theme.of(context).colorScheme.error, + text: subtitle.delete, + onPressed: (){ + widget.models.remove(model); + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8,), + const ASubTitle("Task"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.title ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.title = value; + }, + ), + const SizedBox(height: 8,), + ASubTitle(subtitle.status), + const SizedBox(height: 4,), + PentryTaskStatusMenu( + initialValue: model.status, + onSelect: (status){ + model.status = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Comment"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.comment ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.comment = value; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Measured Value"), + const SizedBox(height: 4,), + ATextFormField( + initialValue: (model.measuredValue ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value){ + model.measuredValue = value; + }, + ), + const SizedBox(height: 8,), + Divider(color: Theme.of(context).textTheme.titleMedium.color,), + ], + ); + } + ); + } +} diff --git a/lib/views/widgets/requests/request_status.dart b/lib/views/widgets/requests/request_status.dart index 84142349..44308861 100644 --- a/lib/views/widgets/requests/request_status.dart +++ b/lib/views/widgets/requests/request_status.dart @@ -1,5 +1,5 @@ import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index 6cffb284..448cb53e 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -251,57 +251,6 @@ class ServiceRequestItem extends StatelessWidget { color: onItemColor ), ), - - ], - ), - ], - ), - if(request.viewReport) - Column( - children: [ - const SizedBox(height: 8,), - Row( - children: [ - Expanded( - child: Text( - "Work Duration", - style: Theme.of(context).textTheme.headline6.copyWith( - color: onItemColor, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ), - ), - // AppTimer( - // timer: request.timer, - // onChange: (timeModel) async { - // - // request.timer = timeModel; - // if(timeModel.endAt == null) return true; - // int status = await servicesProvider.updateServiceReportTimer( - // host: settingProvider.host, - // user: _user, - // timer: timeModel, - // request: request - // ); - // if(status >= 200 && status < 300){ - // return true; - // }else{ - // String errorMessage = HttpStatusManger.getStatusMessage( - // status: status, subtitle: _subtitle); - // ScaffoldMessenger.of(context).showSnackBar( - // SnackBar( - // content: Text( - // errorMessage - // ), - // ) - // ); - // return false; - // } - // - // - // }, - // ), ], ), ], diff --git a/lib/views/widgets/requests/service_request_update_dialog.dart b/lib/views/widgets/requests/service_request_update_dialog.dart index ccea8858..bde17432 100644 --- a/lib/views/widgets/requests/service_request_update_dialog.dart +++ b/lib/views/widgets/requests/service_request_update_dialog.dart @@ -8,13 +8,13 @@ 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/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/hospitals/auto_complete_field.dart'; +import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/views/widgets/status/employee/employee_mune.dart'; @@ -33,7 +33,7 @@ class _ServiceRequestsUpdateDialogState extends State with TickerProviderStateMixin{ ServiceRequestSearch _search; - List status = [ - Status(label: "New", id: 4,), + List status = [ + Lookup(label: "New", id: 4,), - Status(label: "Repaired", id: 6,), - Status(label: "Repeated", id: 8), - Status(label: "Closed", id: 9,), - Status(label: "Under Repair", id: 5,), + Lookup(label: "Repaired", id: 6,), + Lookup(label: "Repeated", id: 8), + Lookup(label: "Closed", id: 9,), + Lookup(label: "Under Repair", id: 5,), ]; final GlobalKey _formKey = GlobalKey(); @@ -94,7 +94,7 @@ class _ServiceRequestsSearchDialogState extends State with TickerProviderStateMixin{ VisitsSearch _search; - List status = [ - Status(label: "Done", id: 0,), - Status(label: "Not Yet", id: 1), - Status(label: "On Hold", id: 2,), + List status = [ + Lookup(label: "Done", id: 0,), + Lookup(label: "Not Yet", id: 1), + Lookup(label: "On Hold", id: 2,), ]; - List contactStatus = [ - Status(label: "Hospital Employee", key: "H",), - Status(label: "Under Warranty", key: "CW"), - Status(label: "Under Maintenance Contract", key: "CC",), + List contactStatus = [ + Lookup(label: "Hospital Employee", key: "H",), + Lookup(label: "Under Warranty", key: "CW"), + Lookup(label: "Under Maintenance Contract", key: "CC",), ]; @@ -100,7 +100,7 @@ class _VisitsSearchDialogState extends State }, ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), - AutoCompleteField( + HospitalAutoCompleteField( initialValue: _search.hospitalName, onSave: (value){ _search.hospitalName = value; diff --git a/lib/views/widgets/status/employee/employee_mune.dart b/lib/views/widgets/status/employee/employee_mune.dart index 5555233a..5ee55ea5 100644 --- a/lib/views/widgets/status/employee/employee_mune.dart +++ b/lib/views/widgets/status/employee/employee_mune.dart @@ -1,14 +1,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class EmployeeMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const EmployeeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart index 842e5d0e..925e920a 100644 --- a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart @@ -3,14 +3,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/ga import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class GasCylinderSizeMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const GasCylinderSizeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/gas_refill/gas_status.dart b/lib/views/widgets/status/gas_refill/gas_status.dart index 524d8acf..c198bd33 100644 --- a/lib/views/widgets/status/gas_refill/gas_status.dart +++ b/lib/views/widgets/status/gas_refill/gas_status.dart @@ -3,14 +3,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/ga import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class GasStatusMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const GasStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/gas_refill/gas_type.dart b/lib/views/widgets/status/gas_refill/gas_type.dart index 9d9b47f5..6f0c0616 100644 --- a/lib/views/widgets/status/gas_refill/gas_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_type.dart @@ -4,14 +4,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/ga import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class GasTypeMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const GasTypeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/multi_status_menu.dart b/lib/views/widgets/status/multi_status_menu.dart index b0c8272d..8d1d7c4c 100644 --- a/lib/views/widgets/status/multi_status_menu.dart +++ b/lib/views/widgets/status/multi_status_menu.dart @@ -1,14 +1,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; class MultiStatusMenu extends StatefulWidget { - final List statuses; - final List initialSelectedStatus; - final Function(List) onSelect; + final List statuses; + final List initialSelectedStatus; + final Function(List) onSelect; const MultiStatusMenu({Key key, this.statuses, this.onSelect, this.initialSelectedStatus}) : super(key: key); @override @@ -17,7 +17,7 @@ class MultiStatusMenu extends StatefulWidget { class _MultiStatusMenuState extends State { - List _selectedStatus = []; + List _selectedStatus = []; TextEditingController _controller; @override @@ -93,7 +93,7 @@ class _MultiStatusMenuState extends State { AppStyle.boxShadow ] ), - child: TypeAheadField( + child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( style: Theme.of(context).textTheme.subtitle1, controller: _controller, @@ -107,7 +107,7 @@ class _MultiStatusMenuState extends State { textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) { - return widget.statuses.where((Status option) { + return widget.statuses.where((Lookup option) { return option.label.toLowerCase().contains(_controller.text); }); }, diff --git a/lib/views/widgets/status/pentry/pentry_status_mune.dart b/lib/views/widgets/status/pentry/pentry_status_mune.dart new file mode 100644 index 00000000..3b1ef709 --- /dev/null +++ b/lib/views/widgets/status/pentry/pentry_status_mune.dart @@ -0,0 +1,40 @@ +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; +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/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'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +class PentryStatusMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const PentryStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/pentry/pentry_task_status_mune.dart b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart new file mode 100644 index 00000000..d9f4f276 --- /dev/null +++ b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart @@ -0,0 +1,38 @@ +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_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'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +class PentryTaskStatusMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const PentryTaskStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart new file mode 100644 index 00000000..8df13d8c --- /dev/null +++ b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart @@ -0,0 +1,39 @@ +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +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/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'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +class PentryVisitsStatusMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const PentryVisitsStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/report/service_report_last_call.dart b/lib/views/widgets/status/report/service_report_last_call.dart index 7093e7e4..1e858cb9 100644 --- a/lib/views/widgets/status/report/service_report_last_call.dart +++ b/lib/views/widgets/status/report/service_report_last_call.dart @@ -1,12 +1,12 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; import 'package:test_sa/models/service_report.dart'; -import 'package:test_sa/models/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ServiceReportLastCallsMenu extends StatelessWidget { - final Function(Status) onSelect; + final Function(Lookup) onSelect; final ServiceReport report; const ServiceReportLastCallsMenu({ diff --git a/lib/views/widgets/status/report/service_report_reasons.dart b/lib/views/widgets/status/report/service_report_reasons.dart index 8aa4effd..fc24140d 100644 --- a/lib/views/widgets/status/report/service_report_reasons.dart +++ b/lib/views/widgets/status/report/service_report_reasons.dart @@ -1,14 +1,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_reasons_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ServiceReportReasonsMenu extends StatelessWidget { - final Status initialValue; - final Function(Status) onSelect; + final Lookup initialValue; + final Function(Lookup) onSelect; const ServiceReportReasonsMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index 41033e8b..d739b1db 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -5,13 +5,13 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic 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/service_report.dart'; -import 'package:test_sa/models/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ServiceReportStatusMenu extends StatefulWidget { - final Function(Status) onSelect; + final Function(Lookup) onSelect; final ServiceReport report; const ServiceReportStatusMenu({Key key, this.onSelect, this.report}) : super(key: key); diff --git a/lib/views/widgets/status/report/service_report_type.dart b/lib/views/widgets/status/report/service_report_type.dart index 26e4eb14..b3e509b3 100644 --- a/lib/views/widgets/status/report/service_report_type.dart +++ b/lib/views/widgets/status/report/service_report_type.dart @@ -1,36 +1,36 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_types_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ServiceReportTypeMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const ServiceReportTypeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override Widget build(BuildContext context) { - SettingProvider _settingProvider = Provider.of(context); - UserProvider _userProvider = Provider.of(context); - ServiceReportTypesProvider _menuProvider = Provider.of(context); + SettingProvider settingProvider = Provider.of(context); + UserProvider userProvider = Provider.of(context); + ServiceReportTypesProvider menuProvider = Provider.of(context); return LoadingManager( - isLoading: _menuProvider.isLoading, - isFailedLoading: _menuProvider.types == null, - stateCode: _menuProvider.stateCode, + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.types == null, + stateCode: menuProvider.stateCode, onRefresh: () async { - _menuProvider.reset(); - await _menuProvider.getTypes( - user: _userProvider.user, - host: _settingProvider.host + menuProvider.reset(); + await menuProvider.getTypes( + user: userProvider.user, + host: settingProvider.host ); - onSelect(initialValue ?? _menuProvider.types?.last); + onSelect(initialValue ?? menuProvider.types?.last); }, child: SingleStatusMenu( - initialStatus: initialValue ?? _menuProvider.types?.last, - statuses: _menuProvider.types, + initialStatus: initialValue ?? menuProvider.types?.last, + statuses: menuProvider.types, onSelect: onSelect, ) ); diff --git a/lib/views/widgets/status/report/service_status.dart b/lib/views/widgets/status/report/service_status.dart index 6851ab38..a9bd0950 100644 --- a/lib/views/widgets/status/report/service_status.dart +++ b/lib/views/widgets/status/report/service_status.dart @@ -1,14 +1,14 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/status.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'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ServiceStatusMenu extends StatelessWidget { - final Function(Status) onSelect; - final Status initialValue; + final Function(Lookup) onSelect; + final Lookup initialValue; const ServiceStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override diff --git a/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart new file mode 100644 index 00000000..5d4e0902 --- /dev/null +++ b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart @@ -0,0 +1,41 @@ +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +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_priority_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'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +class ServiceRequestDefectTypesMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const ServiceRequestDefectTypesMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/service_request/service_request_priority_mune.dart b/lib/views/widgets/status/service_request/service_request_priority_mune.dart new file mode 100644 index 00000000..709d35a4 --- /dev/null +++ b/lib/views/widgets/status/service_request/service_request_priority_mune.dart @@ -0,0 +1,40 @@ +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +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_priority_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'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +class ServiceRequestPriorityMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const ServiceRequestPriorityMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index 6923b555..592830ef 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -1,11 +1,11 @@ -import 'package:test_sa/models/status.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; class SingleStatusMenu extends StatefulWidget { - final List statuses; - final Status initialStatus; - final Function(Status) onSelect; + final List statuses; + final Lookup initialStatus; + final Function(Lookup) onSelect; const SingleStatusMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key); @override @@ -14,7 +14,7 @@ class SingleStatusMenu extends StatefulWidget { class _SingleStatusMenuState extends State { - Status _selectedStatus; + Lookup _selectedStatus; @override void didUpdateWidget(covariant SingleStatusMenu oldWidget) { @@ -56,7 +56,7 @@ class _SingleStatusMenuState extends State { AppStyle.boxShadow ] ), - child: DropdownButton( + child: DropdownButton( value: _selectedStatus, iconSize: 24, elevation: 16, @@ -69,15 +69,15 @@ class _SingleStatusMenuState extends State { color: Theme.of(context).primaryColor ), underline: SizedBox.shrink(), - onChanged: (Status newValue) { + onChanged: (Lookup newValue) { setState(() { _selectedStatus = newValue; }); widget.onSelect(newValue); }, items: widget.statuses - .map>((Status value) { - return DropdownMenuItem( + .map>((Lookup value) { + return DropdownMenuItem( value: value, child: Text( value.label, diff --git a/lib/views/widgets/timer/app_timer.dart b/lib/views/widgets/timer/app_timer.dart index c2c332b3..48f96723 100644 --- a/lib/views/widgets/timer/app_timer.dart +++ b/lib/views/widgets/timer/app_timer.dart @@ -30,19 +30,19 @@ class _AppTimerState extends State { final ValueNotifier _period = ValueNotifier("0:00:00"); _startTimer() async { - final time = DateTime.now(); - bool result = await widget.onChange( - TimerModel(startAt: time,endAt: null,durationInSecond: _delay)); - if(!result) return; - _running = true; + if (!_running) { + final time = DateTime.now(); + bool result = await widget.onChange( + TimerModel(startAt: time,endAt: null,durationInSecond: _delay)); + if(!result) return; + _running = true; - if(_endAt != null){ - _delay += _endAt.difference(_startAt).inSeconds; + if(_endAt != null){ + _delay += _endAt.difference(_startAt).inSeconds; + } + _startAt = time.subtract(Duration(seconds: _delay)); + _endAt = null; } - _startAt = time.subtract(Duration(seconds: _delay)); - _endAt = null; - - _timer = Timer.periodic(const Duration(seconds: 1), (timer) { if(_loading == true) return; @@ -78,32 +78,13 @@ class _AppTimerState extends State { @override void initState() { - // TODO: implement initState - // if(widget.timer?.isNotEmpty == true){ - // _startAt = widget.timer.last.startAt; - // _endAt = widget.timer.last.endAt; - // _running = _startAt != null && _endAt == null; - // print(_startAt); - // print(_endAt); - // print(_running); - // if(widget.timer.length != 1){ - // for (int i = 0;i=2.7.0 <3.0.0" From 2d741e59174511bf9660f1b1a2395a9ae471f7cf Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 14 Jan 2023 22:33:57 +0200 Subject: [PATCH 2/9] remove unused file --- .../data/pentry/pentry_controller.dart | 18 ------------------ .../pages/user/visits/pantry/edit_pentry.dart | 1 - .../user/visits/pantry/future_edit_pently.dart | 1 - 3 files changed, 20 deletions(-) delete mode 100644 lib/controllers/data/pentry/pentry_controller.dart diff --git a/lib/controllers/data/pentry/pentry_controller.dart b/lib/controllers/data/pentry/pentry_controller.dart deleted file mode 100644 index f12b27b8..00000000 --- a/lib/controllers/data/pentry/pentry_controller.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; -import 'package:test_sa/models/lookup.dart'; -import 'package:test_sa/models/pantry/pentry.dart'; -import 'package:test_sa/models/visits/visit.dart'; - -import '../../../models/user.dart'; -import '../../api_routes/urls.dart'; - -class PentryController { - const PentryController._(); - - static const PentryController instance = PentryController._(); - - -} \ No newline at end of file diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index 6b508552..be244603 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/data/pentry/pentry_controller.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; diff --git a/lib/views/pages/user/visits/pantry/future_edit_pently.dart b/lib/views/pages/user/visits/pantry/future_edit_pently.dart index 829052e0..a4077a44 100644 --- a/lib/views/pages/user/visits/pantry/future_edit_pently.dart +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/data/pentry/pentry_controller.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; From 72ff36020c8788b7f17b31c0df4762c02dc76e14 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 14 Jan 2023 23:09:43 +0200 Subject: [PATCH 3/9] remove prints and optimize imports --- .../providers/api/device_transfer_provider.dart | 11 ----------- .../providers/api/devices_provider.dart | 3 --- .../providers/api/gas_refill_provider.dart | 13 ------------- .../providers/api/hospitals_provider.dart | 6 +----- .../providers/api/regular_visits_provider.dart | 12 ------------ .../api/service_requests_provider.dart | 16 ---------------- .../employee/employee_provider.dart | 1 - .../gas_refill/gas_types_provider.dart | 1 - .../pentry/pentry_status_provider.dart | 4 ++-- .../pentry/pentry_task_status_provider.dart | 4 ++-- .../pentry/pentry_visit_status_provider.dart | 3 +-- .../service_report_defect_types_provider.dart | 4 ++-- .../service_report_priority_provider.dart | 3 +-- .../device_transfer_details.dart | 2 -- .../request_device_transfer.dart | 1 - .../device_transfer/track_device_transfer.dart | 13 +++---------- .../device_transfer/update_device_transfer.dart | 3 --- lib/views/pages/register.dart | 8 ++++---- lib/views/pages/splash_screen.dart | 9 +++------ .../user/gas_refill/request_gas_refill.dart | 2 -- .../pages/user/gas_refill/track_gas_refill.dart | 11 +++-------- lib/views/pages/user/land_page.dart | 17 +++++++---------- .../user/notifications/notifications_list.dart | 2 +- .../user/notifications/notifications_page.dart | 4 ++-- lib/views/pages/user/profile_page.dart | 6 +++--- lib/views/pages/user/report_issues_page.dart | 7 +++---- .../pages/user/requests/create_request.dart | 1 - .../future_request_service_details.dart | 4 ++-- .../requests/report/create_service_report.dart | 13 ++++++------- .../requests/report/edit_service_report.dart | 12 +++++------- .../requests/report/future_service_report.dart | 5 ++--- .../pages/user/requests/request_details.dart | 9 ++++----- .../pages/user/requests/requests_page.dart | 6 +++--- .../pages/user/visits/pantry/edit_pentry.dart | 4 ---- .../user/visits/pantry/future_edit_pently.dart | 2 +- .../preventive_maintenance_visits_page.dart | 10 +++++----- .../pages/user/visits/regular_visits_page.dart | 10 +++++----- .../user/visits/update_visits_group_sheet.dart | 2 +- lib/views/pages/user/visits/visit_details.dart | 2 +- lib/views/widgets/buttons/app_back_button.dart | 2 +- lib/views/widgets/buttons/app_button.dart | 2 +- lib/views/widgets/buttons/app_flat_button.dart | 2 +- lib/views/widgets/buttons/app_icon_button.dart | 4 ++-- lib/views/widgets/buttons/app_icon_button2.dart | 2 +- .../widgets/buttons/app_outlined_button.dart | 2 +- lib/views/widgets/buttons/app_small_button.dart | 2 +- lib/views/widgets/dialogs/dialog.dart | 4 ++-- lib/views/widgets/drawer/drawer_item.dart | 2 +- lib/views/widgets/images/image_item.dart | 4 ++-- lib/views/widgets/images/images_list.dart | 2 +- lib/views/widgets/images/images_viewer.dart | 2 +- .../widgets/images/mini_one_image_picker.dart | 6 +++--- .../widgets/images/multi_image_picker.dart | 8 ++++---- .../widgets/images/multi_image_picker_item.dart | 2 +- lib/views/widgets/images/one_image_picker.dart | 6 +++--- lib/views/widgets/issues/report_issue_item.dart | 2 +- lib/views/widgets/loaders/app_lazy_loading.dart | 2 +- lib/views/widgets/loaders/failed_loading.dart | 2 +- lib/views/widgets/loaders/lazy_loading.dart | 2 +- lib/views/widgets/loaders/loading_manager.dart | 2 +- lib/views/widgets/loaders/no_item_found.dart | 2 +- .../parts/auto_complete_parts_field.dart | 7 +++---- lib/views/widgets/parts/part_item.dart | 2 +- .../auto_complete_devices_field.dart | 7 +++---- .../pentry/pentry_calibration_tool_form.dart | 5 ----- lib/views/widgets/pentry/pentry_info_form.dart | 9 --------- .../widgets/pentry/pentry_pm_kit_form.dart | 4 ---- .../pentry/pentry_ppm_check_list_form.dart | 2 -- lib/views/widgets/requests/info_row.dart | 2 +- lib/views/widgets/requests/request_status.dart | 4 +--- .../widgets/requests/service_request_item.dart | 13 ++++--------- .../widgets/requests/service_request_list.dart | 2 +- .../requests/service_request_update_dialog.dart | 9 ++------- lib/views/widgets/search/filter_item.dart | 2 +- .../search/service_request_search_bar.dart | 4 ++-- lib/views/widgets/search/visits_search_bar.dart | 4 ++-- lib/views/widgets/sound/record_sound.dart | 5 ----- lib/views/widgets/sound/sound_player.dart | 5 +---- .../widgets/status/employee/employee_mune.dart | 4 ++-- .../status/gas_refill/gas_cylinder_size.dart | 6 ++---- .../widgets/status/gas_refill/gas_status.dart | 6 ++---- .../widgets/status/gas_refill/gas_type.dart | 7 ++----- lib/views/widgets/status/multi_status_menu.dart | 3 +-- .../status/pentry/pentry_status_mune.dart | 7 ++----- .../status/pentry/pentry_task_status_mune.dart | 5 ++--- .../status/pentry/pentry_visit_status_mune.dart | 6 ++---- .../status/report/service_report_last_call.dart | 6 +++--- .../status/report/service_report_reasons.dart | 4 ++-- .../status/report/service_report_status.dart | 6 +++--- .../status/report/service_report_type.dart | 4 ++-- .../widgets/status/report/service_status.dart | 4 ++-- .../service_request_defect_types_mune.dart | 8 ++------ .../service_request_priority_mune.dart | 7 ++----- .../widgets/status/single_status_menu.dart | 2 +- lib/views/widgets/timer/app_timer.dart | 1 - lib/views/widgets/titles/app_sub_title.dart | 2 +- lib/views/widgets/titles/app_title.dart | 2 +- .../widgets/titles/expandable_info_row.dart | 2 +- lib/views/widgets/visits/visit_item.dart | 7 +++---- lib/views/widgets/visits/visit_status.dart | 2 +- lib/views/widgets/visits/visits_list.dart | 2 +- 101 files changed, 167 insertions(+), 332 deletions(-) diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index e646a6da..907ae2ff 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -74,10 +74,6 @@ class DeviceTransferProvider extends ChangeNotifier{ // return 200; Response response; try{ - print( Uri.parse( - "$host${URLs.getDeviceTransfer}?uid=${user.id}" - "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" - ),); response = await get( Uri.parse( "$host${URLs.getDeviceTransfer}?uid=${user.id}" @@ -106,7 +102,6 @@ class DeviceTransferProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -137,7 +132,6 @@ class DeviceTransferProvider extends ChangeNotifier{ body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(items != null) { @@ -153,7 +147,6 @@ class DeviceTransferProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } @@ -175,16 +168,13 @@ class DeviceTransferProvider extends ChangeNotifier{ }; body.addAll(newModel.toJson(isSender)); - print(body); Response response; try{ - print(Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),); response = await post( Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { reset(); @@ -198,7 +188,6 @@ class DeviceTransferProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index 985f3aad..d434551f 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -128,13 +128,10 @@ class DevicesProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - print(categoriesListJson.length); _page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); - print(_page.length); } return _page; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index a409eea1..5297ae06 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -54,10 +54,6 @@ class GasRefillProvider extends ChangeNotifier{ isLoading = true; Response response; try{ - print( Uri.parse( - "$host${URLs.getGasRefill}?uid=${user.id}" - "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" - )); response = await get( Uri.parse( "$host${URLs.getGasRefill}?uid=${user.id}" @@ -67,7 +63,6 @@ class GasRefillProvider extends ChangeNotifier{ "Content-Type":"application/json; charset=utf-8" } ); - print(response.body); stateCode = response.statusCode; if(stateCode >= 200 && stateCode < 300) { // client's request was successfully received @@ -87,7 +82,6 @@ class GasRefillProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -114,7 +108,6 @@ class GasRefillProvider extends ChangeNotifier{ "requsted_qty": model.requestedQuantity.toString(), }).toList()); - print(body); Response response; try{ response = await post( @@ -123,7 +116,6 @@ class GasRefillProvider extends ChangeNotifier{ body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(items != null) { @@ -139,7 +131,6 @@ class GasRefillProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } @@ -165,8 +156,6 @@ class GasRefillProvider extends ChangeNotifier{ "deliverd_qty": model.deliveredQuantity.toString(), }).toList()); - print(body); - print(Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"),); Response response; try{ response = await post( @@ -174,7 +163,6 @@ class GasRefillProvider extends ChangeNotifier{ body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { oldModel.fromGasRefillModel(newModel); @@ -183,7 +171,6 @@ class GasRefillProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index e7d61595..5e3c4509 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -55,11 +55,7 @@ class HospitalsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - print( Uri.parse( - host + URLs.getHospitals - + "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}" - + ( title == null || title.isEmpty ? "" : "&name=$title" ))); - response = await get( + response = await get( Uri.parse( host + URLs.getHospitals + "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}" diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index bc0ec05c..03737f73 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -55,11 +55,6 @@ class RegularVisitsProvider extends ChangeNotifier{ Response response; //userId = 397.toString(); // testing id to view data try{ - print( Uri.parse( - "$host${URLs.getRegularVisits}?uid=${user.id}" - "&token=${user.token}" - "&page=${(visits?.length ?? 0) ~/pageItemNumber}${visitsSearch?.toSearchString()}" ?? "" - )); response = await get( Uri.parse( host+URLs.getRegularVisits @@ -95,7 +90,6 @@ class RegularVisitsProvider extends ChangeNotifier{ nextPage = false; } }catch(error){ - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -146,14 +140,12 @@ class RegularVisitsProvider extends ChangeNotifier{ Future getPently({String host,User user,String id}) async { Response response; - print(Uri.parse("$host${URLs.getPentry}/$id"),); response = await get( Uri.parse("$host${URLs.getPentry}/$id"), headers: { "Content-Type":"application/json; charset=utf-8" } ); - print(response.body); Pentry pantry; if(response.statusCode >= 200 && response.statusCode < 300) { @@ -173,13 +165,10 @@ class RegularVisitsProvider extends ChangeNotifier{ Map body = pentry.toMap(); body["uid"] = user.id; body["token"] = user.token; - print( Uri.parse(host+URLs.updatePentry + "/${visit.id}"),); - print(body); response = await post( Uri.parse(host+URLs.updatePentry + "/${visit.id}"), body: body, ); - print(response.body); if(response.statusCode >= 200 && response.statusCode < 300) { visit.status = pentry.ppmVisitStatus; notifyListeners(); @@ -187,7 +176,6 @@ class RegularVisitsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 3b452497..cb62d06b 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -58,14 +58,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ isLoading = true; Response response; try{ - print( Uri.parse( - host+URLs.getServiceRequests - +"?uid=${user.id}" - +(hospitalId == null? "" :"&client_nid=$hospitalId") - +"&token=${user.token}" - "&page=${(serviceRequests?.length ?? 0) ~/pageItemNumber}" - +search?.toSearchString() ?? "" - )); response = await get( Uri.parse( host+URLs.getServiceRequests @@ -79,7 +71,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ "Content-Type":"application/json; charset=utf-8" } ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -100,7 +91,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -167,7 +157,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ if(serviceRequest.audio != null){ body["audio"] = serviceRequest.audio; } - print(body); Response response; try{ response = await post( @@ -175,7 +164,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ host+URLs.createRequest), body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(serviceRequests != null) @@ -190,7 +178,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } @@ -237,14 +224,12 @@ class ServiceRequestsProvider extends ChangeNotifier{ body["nid"] = request.id; if(newDate != null) body["date"] = newDate; if(employee != null) body["ass_emp"] = employee.id.toString(); - print(body); try{ response = await post( Uri.parse( host+URLs.updateRequestDate), body: body, ); - print(response.body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { request.engineerName = employee.label; @@ -379,7 +364,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ host+URLs.updateServiceReport), body: body, ); - print(response.body); //stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart index bd4db06c..e21f7180 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart @@ -52,7 +52,6 @@ class EmployeesProvider extends ChangeNotifier{ Uri.parse( host + URLs.getEmployees), ); - print(response.body); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index fa193fa4..80e0d531 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -61,7 +61,6 @@ class GasTypesProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart index d659ca7a..75d18783 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart @@ -52,7 +52,7 @@ class PentryStatusProvider extends ChangeNotifier{ Uri.parse( host + URLs.getPentryStatus), ); - print(response.body); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -63,7 +63,7 @@ class PentryStatusProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); + _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart index 5bbedd0b..900671e1 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart @@ -52,7 +52,7 @@ class PentryTaskStatusProvider extends ChangeNotifier{ Uri.parse( host + URLs.getPentryTaskStatus), ); - print(response.body); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -63,7 +63,7 @@ class PentryTaskStatusProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); + _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart index a25a402f..c8562f25 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart @@ -52,7 +52,7 @@ class PentryVisitStatusProvider extends ChangeNotifier{ Uri.parse( host + URLs.getPentryVisitStatus), ); - print(response.body); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -63,7 +63,6 @@ class PentryVisitStatusProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart index 3547e8cc..a61b1e76 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart @@ -52,7 +52,7 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ Uri.parse( host + URLs.getServiceReportDefectTypes), ); - print(response.body); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -63,7 +63,7 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); + _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart index bcee8d4c..beb18280 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart @@ -52,7 +52,7 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ Uri.parse( host + URLs.getServiceReportPriority), ); - print(response.body); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -63,7 +63,6 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 9b089448..7b36058c 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -15,7 +15,6 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_info_section.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; -import 'package:test_sa/views/widgets/requests/request_status.dart'; class DeviceTransferDetails extends StatefulWidget { final DeviceTransfer model; @@ -51,7 +50,6 @@ class _DeviceTransferDetailsState extends State { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _deviceTransferProvider = Provider.of(context); - print(_userProvider.user.id); _isSender = _userProvider.user.id == widget.model.sender?.userId; _isReceiver = _userProvider.user.id == widget.model.receiver?.userId; return Scaffold( diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index f8ad6948..aa5562b9 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -11,7 +11,6 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/departments/department_button.dart'; -import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/equipment/device_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; diff --git a/lib/views/pages/device_transfer/track_device_transfer.dart b/lib/views/pages/device_transfer/track_device_transfer.dart index 7308617f..454d6d30 100644 --- a/lib/views/pages/device_transfer/track_device_transfer.dart +++ b/lib/views/pages/device_transfer/track_device_transfer.dart @@ -1,21 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; -import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; -import 'package:test_sa/controllers/providers/api/service_requests_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/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart'; -import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart'; -import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; -import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; +import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/search/service_request_search_bar.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class TrackDeviceTransferPage extends StatefulWidget { static const String id = "/track-device-transfer"; diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index f9044b65..2b407a48 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -14,10 +14,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; 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/departments/department_button.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; -import 'package:test_sa/views/widgets/equipment/device_button.dart'; -import 'package:test_sa/views/widgets/hospitals/hospital_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; diff --git a/lib/views/pages/register.dart b/lib/views/pages/register.dart index 04312e9a..016fedf1 100644 --- a/lib/views/pages/register.dart +++ b/lib/views/pages/register.dart @@ -1,3 +1,7 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -13,10 +17,6 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/departments/department_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:provider/provider.dart'; class Register extends StatefulWidget { static final String id = "/register"; diff --git a/lib/views/pages/splash_screen.dart b/lib/views/pages/splash_screen.dart index 32911345..aea53176 100644 --- a/lib/views/pages/splash_screen.dart +++ b/lib/views/pages/splash_screen.dart @@ -1,16 +1,15 @@ import 'dart:convert'; -import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flare_flutter/flare_actor.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/notification/notification_manger.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/app_notification.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/pages/user/land_page.dart'; -import 'package:firebase_core/firebase_core.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'login.dart'; @@ -67,10 +66,8 @@ class _SplashScreenState extends State { fit: BoxFit.contain, animation: "splash", callback: (animation) async { - print(await FirebaseMessaging.instance.getToken()); Navigator.of(context).pushNamed(Login.id); if(_settingProvider.isLoaded && _settingProvider.user != null){ - print(_settingProvider.user.toJson()); _goToUserScreen(_settingProvider.user); } }, diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 3b0cb343..5f41ec48 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -14,8 +14,6 @@ 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/gas_refill/gas_refill_create_details_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/status/gas_refill/gas_cylinder_size.dart'; -import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/status/gas_refill/gas_type.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; diff --git a/lib/views/pages/user/gas_refill/track_gas_refill.dart b/lib/views/pages/user/gas_refill/track_gas_refill.dart index 2b502f6d..31c67201 100644 --- a/lib/views/pages/user/gas_refill/track_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/track_gas_refill.dart @@ -1,19 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; -import 'package:test_sa/controllers/providers/api/service_requests_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/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart'; -import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; -import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; +import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/search/service_request_search_bar.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class TrackGasRefillPage extends StatefulWidget { static const String id = "/track-gas-refill"; diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index c305b4ab..d173219d 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -1,5 +1,12 @@ import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:package_info/package_info.dart'; +import 'package:provider/provider.dart'; +import 'package:share/share.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/notification/firebase_notification_manger.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; @@ -19,20 +26,11 @@ import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; import 'package:test_sa/views/pages/user/requests/create_request.dart'; -import 'package:test_sa/views/pages/user/visits/preventive_maintenance_visits_page.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/dialogs/dialog.dart'; import 'package:test_sa/views/widgets/drawer/drawer_item.dart'; -import 'package:test_sa/views/widgets/loaders/image_loader.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:package_info/package_info.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../widgets/land_page/land_page_item.dart'; @@ -97,7 +95,6 @@ class _LandPageState extends State { _buttonHeight = 68 * AppStyle.getScaleFactor(context); return WillPopScope( onWillPop: () async { - print("back pressed"); bool result = await showDialog( context: context, builder: (_) => AAlertDialog( diff --git a/lib/views/pages/user/notifications/notifications_list.dart b/lib/views/pages/user/notifications/notifications_list.dart index 2df3171d..6034f1aa 100644 --- a/lib/views/pages/user/notifications/notifications_list.dart +++ b/lib/views/pages/user/notifications/notifications_list.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -5,7 +6,6 @@ import 'package:test_sa/views/pages/user/requests/future_request_service_details import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/notifications/notification_item.dart'; -import 'package:flutter/material.dart'; class NotificationsList extends StatelessWidget { final List notifications; final bool nextPage; diff --git a/lib/views/pages/user/notifications/notifications_page.dart b/lib/views/pages/user/notifications/notifications_page.dart index 900fb460..a0e85259 100644 --- a/lib/views/pages/user/notifications/notifications_page.dart +++ b/lib/views/pages/user/notifications/notifications_page.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -7,8 +9,6 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/notifications/notifications_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class NotificationsPage extends StatefulWidget { static final String id = "/notifications"; @override diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index 514655e9..f22b09f6 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -1,3 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -13,9 +16,6 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/departments/department_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:provider/provider.dart'; class ProfilePage extends StatefulWidget { static final String id = "/user/profile"; @override diff --git a/lib/views/pages/user/report_issues_page.dart b/lib/views/pages/user/report_issues_page.dart index d9a91be3..a1641b24 100644 --- a/lib/views/pages/user/report_issues_page.dart +++ b/lib/views/pages/user/report_issues_page.dart @@ -1,3 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -8,15 +11,11 @@ import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; - import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/issues/report_issue_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; class ReportIssuesPage extends StatefulWidget { static final String id = "/report-issue"; final ServiceRequest serviceRequest; diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index 705bb177..8e0a5b78 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -213,7 +213,6 @@ class _CreateRequestPageState extends State { final file = File(_serviceRequest.audio); _serviceRequest.audio = base64Encode(file.readAsBytesSync()); } - print("pass data"); int status = await _serviceRequestsProvider.createRequest( user: _userProvider.user, host: _settingProvider.host, diff --git a/lib/views/pages/user/requests/future_request_service_details.dart b/lib/views/pages/user/requests/future_request_service_details.dart index 7f56dd5f..1c2dbe38 100644 --- a/lib/views/pages/user/requests/future_request_service_details.dart +++ b/lib/views/pages/user/requests/future_request_service_details.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -7,8 +9,6 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class FutureRequestServiceDetails extends StatefulWidget { static final String id = "/service-request-details"; 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 b9f353be..33638f92 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -1,18 +1,22 @@ import 'dart:convert'; import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.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/service_requests_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/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/models/device/device.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -29,14 +33,9 @@ import 'package:test_sa/views/widgets/speech_to_text/speech_to_text.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'; -import 'package:test_sa/views/widgets/status/report/service_report_type.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; class CreateServiceReport extends StatefulWidget { static final String id = "/create-service-report"; final ServiceRequest request ; 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 1ca58282..0b268fc7 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -1,18 +1,20 @@ import 'dart:convert'; import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.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/service_requests_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/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; -import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -33,10 +35,6 @@ import 'package:test_sa/views/widgets/status/report/service_report_type.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; class EditServiceReport extends StatefulWidget { static final String id = "/edit-service-report"; final ServiceRequest request ; diff --git a/lib/views/pages/user/requests/report/future_service_report.dart b/lib/views/pages/user/requests/report/future_service_report.dart index a2e1897d..5ee16ea2 100644 --- a/lib/views/pages/user/requests/report/future_service_report.dart +++ b/lib/views/pages/user/requests/report/future_service_report.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -5,11 +7,8 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; -import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'edit_service_report.dart'; class FutureServiceReport extends StatefulWidget { diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 5e2d80f9..2ada571e 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -1,3 +1,7 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; @@ -20,11 +24,6 @@ import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/service_request_update_dialog.dart'; import 'package:test_sa/views/widgets/sound/sound_player.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; import '../report_issues_page.dart'; import 'report/future_service_report.dart'; diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index af926f28..e535d03b 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -5,13 +7,11 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/search/service_request_search_bar.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceRequestsPage extends StatefulWidget { static final String id = "/service-requests"; @override diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index be244603..7c9201b1 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -3,16 +3,12 @@ import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_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/device/device_transfer.dart'; -import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; -import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/pentry/pentry_calibration_tool_form.dart'; diff --git a/lib/views/pages/user/visits/pantry/future_edit_pently.dart b/lib/views/pages/user/visits/pantry/future_edit_pently.dart index a4077a44..161df3ce 100644 --- a/lib/views/pages/user/visits/pantry/future_edit_pently.dart +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -39,7 +39,7 @@ class _FutureEditPentryState extends State { ), builder: (BuildContext context, AsyncSnapshot snapshot){ if(snapshot.hasError) { - print(snapshot.error); + return FailedLoading( message: subtitle.failedToCompleteRequest, onReload: (){setState(() {});}, diff --git a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart index b4eec47f..7c1c57c2 100644 --- a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart +++ b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart @@ -1,3 +1,7 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/preventive_maintenance_visits_provider.dart'; @@ -8,16 +12,12 @@ import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/visits/update_visits_group_sheet.dart'; -import 'package:test_sa/views/widgets/visits/visits_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/search/visits_search_bar.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; +import 'package:test_sa/views/widgets/visits/visits_list.dart'; class PreventiveMaintenanceVisitsPage extends StatefulWidget { static final String id = "/preventive-maintenance-visits"; @override diff --git a/lib/views/pages/user/visits/regular_visits_page.dart b/lib/views/pages/user/visits/regular_visits_page.dart index d1bd69bd..37e34fed 100644 --- a/lib/views/pages/user/visits/regular_visits_page.dart +++ b/lib/views/pages/user/visits/regular_visits_page.dart @@ -1,3 +1,7 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; @@ -8,16 +12,12 @@ import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/visits/update_visits_group_sheet.dart'; -import 'package:test_sa/views/widgets/visits/visits_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/search/visits_search_bar.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; +import 'package:test_sa/views/widgets/visits/visits_list.dart'; class RegularVisitsPage extends StatefulWidget { static final String id = "/Regular-visits"; @override diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index 8be79f27..724f4657 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -15,7 +16,6 @@ import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/images/one_image_picker.dart'; import 'package:test_sa/views/widgets/search/filter_item.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; -import 'package:flutter/material.dart'; class UpdateVisitsGroupSheet extends StatefulWidget { final List visits; final String title; diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index f5929ded..f2b06be0 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -11,7 +12,6 @@ import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; -import 'package:flutter/material.dart'; import '../../../../controllers/providers/api/regular_visits_provider.dart'; diff --git a/lib/views/widgets/buttons/app_back_button.dart b/lib/views/widgets/buttons/app_back_button.dart index c7c72ce4..fbb080bb 100644 --- a/lib/views/widgets/buttons/app_back_button.dart +++ b/lib/views/widgets/buttons/app_back_button.dart @@ -1,7 +1,7 @@ -import 'package:test_sa/views/app_style/colors.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:test_sa/views/app_style/colors.dart'; import 'app_icon_button.dart'; class ABackButton extends StatelessWidget { diff --git a/lib/views/widgets/buttons/app_button.dart b/lib/views/widgets/buttons/app_button.dart index 231e1d80..7d96c68e 100644 --- a/lib/views/widgets/buttons/app_button.dart +++ b/lib/views/widgets/buttons/app_button.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class AButton extends StatelessWidget { final String text; diff --git a/lib/views/widgets/buttons/app_flat_button.dart b/lib/views/widgets/buttons/app_flat_button.dart index 903b05e2..f8df57b6 100644 --- a/lib/views/widgets/buttons/app_flat_button.dart +++ b/lib/views/widgets/buttons/app_flat_button.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class AFlatButton extends StatelessWidget { final String text; diff --git a/lib/views/widgets/buttons/app_icon_button.dart b/lib/views/widgets/buttons/app_icon_button.dart index 8c1da58e..07e9c9a3 100644 --- a/lib/views/widgets/buttons/app_icon_button.dart +++ b/lib/views/widgets/buttons/app_icon_button.dart @@ -1,7 +1,7 @@ -import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class AIconButton extends StatelessWidget { final IconData iconData; diff --git a/lib/views/widgets/buttons/app_icon_button2.dart b/lib/views/widgets/buttons/app_icon_button2.dart index 1a9bc78e..bce63196 100644 --- a/lib/views/widgets/buttons/app_icon_button2.dart +++ b/lib/views/widgets/buttons/app_icon_button2.dart @@ -1,6 +1,6 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class AIconButton2 extends StatelessWidget { final IconData iconData; diff --git a/lib/views/widgets/buttons/app_outlined_button.dart b/lib/views/widgets/buttons/app_outlined_button.dart index 7497d395..1b8c47f0 100644 --- a/lib/views/widgets/buttons/app_outlined_button.dart +++ b/lib/views/widgets/buttons/app_outlined_button.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class AOutLinedButton extends StatelessWidget { final String text; diff --git a/lib/views/widgets/buttons/app_small_button.dart b/lib/views/widgets/buttons/app_small_button.dart index b2f71626..10c103f6 100644 --- a/lib/views/widgets/buttons/app_small_button.dart +++ b/lib/views/widgets/buttons/app_small_button.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class ASmallButton extends StatelessWidget { final String text; diff --git a/lib/views/widgets/dialogs/dialog.dart b/lib/views/widgets/dialogs/dialog.dart index fa20a8f3..7bb08f20 100644 --- a/lib/views/widgets/dialogs/dialog.dart +++ b/lib/views/widgets/dialogs/dialog.dart @@ -1,7 +1,7 @@ -import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/models/subtitle.dart'; class AAlertDialog extends StatelessWidget { final String title; final String content; diff --git a/lib/views/widgets/drawer/drawer_item.dart b/lib/views/widgets/drawer/drawer_item.dart index 88f027dd..8323141f 100644 --- a/lib/views/widgets/drawer/drawer_item.dart +++ b/lib/views/widgets/drawer/drawer_item.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class DrawerItem extends StatelessWidget { final String title; final IconData icon; diff --git a/lib/views/widgets/images/image_item.dart b/lib/views/widgets/images/image_item.dart index 8478ae97..5e2412a0 100644 --- a/lib/views/widgets/images/image_item.dart +++ b/lib/views/widgets/images/image_item.dart @@ -1,8 +1,8 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class ImageItem extends StatelessWidget { final String url; final bool isVideo; diff --git a/lib/views/widgets/images/images_list.dart b/lib/views/widgets/images/images_list.dart index 01868340..df2bdb0d 100644 --- a/lib/views/widgets/images/images_list.dart +++ b/lib/views/widgets/images/images_list.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; import 'image_item.dart'; import 'images_viewer.dart'; diff --git a/lib/views/widgets/images/images_viewer.dart b/lib/views/widgets/images/images_viewer.dart index 76c79814..865f0306 100644 --- a/lib/views/widgets/images/images_viewer.dart +++ b/lib/views/widgets/images/images_viewer.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; -import 'package:flutter/material.dart'; class ImagesViewer extends StatelessWidget { final List images; diff --git a/lib/views/widgets/images/mini_one_image_picker.dart b/lib/views/widgets/images/mini_one_image_picker.dart index b26e9f49..710e960d 100644 --- a/lib/views/widgets/images/mini_one_image_picker.dart +++ b/lib/views/widgets/images/mini_one_image_picker.dart @@ -1,11 +1,11 @@ import 'dart:io'; -import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/subtitle.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class AMiniOneImagePicker extends StatefulWidget { final Function(File) onPick; diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index 08f16926..e9c794fe 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -1,14 +1,14 @@ import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_flat_button.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:image_picker/image_picker.dart'; import 'multi_image_picker_item.dart'; class MultiImagesPicker extends StatefulWidget { diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart index 92943032..be1d1b15 100644 --- a/lib/views/widgets/images/multi_image_picker_item.dart +++ b/lib/views/widgets/images/multi_image_picker_item.dart @@ -1,9 +1,9 @@ import 'dart:io'; +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; -import 'package:flutter/material.dart'; class MultiImagesPickerItem extends StatelessWidget { diff --git a/lib/views/widgets/images/one_image_picker.dart b/lib/views/widgets/images/one_image_picker.dart index 4220f330..3ff3ebbf 100644 --- a/lib/views/widgets/images/one_image_picker.dart +++ b/lib/views/widgets/images/one_image_picker.dart @@ -1,11 +1,11 @@ import 'dart:io'; -import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/subtitle.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class AOneImagePicker extends StatefulWidget { final Function(File) onPick; diff --git a/lib/views/widgets/issues/report_issue_item.dart b/lib/views/widgets/issues/report_issue_item.dart index 0d04910d..8a952be7 100644 --- a/lib/views/widgets/issues/report_issue_item.dart +++ b/lib/views/widgets/issues/report_issue_item.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class ReportIssueItem extends StatelessWidget { final bool isSelected; final String issueInfo; diff --git a/lib/views/widgets/loaders/app_lazy_loading.dart b/lib/views/widgets/loaders/app_lazy_loading.dart index 7f2676c1..e3378c98 100644 --- a/lib/views/widgets/loaders/app_lazy_loading.dart +++ b/lib/views/widgets/loaders/app_lazy_loading.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; import 'app_loading.dart'; class ALazyLoading extends StatelessWidget { diff --git a/lib/views/widgets/loaders/failed_loading.dart b/lib/views/widgets/loaders/failed_loading.dart index 42e047ef..5039628b 100644 --- a/lib/views/widgets/loaders/failed_loading.dart +++ b/lib/views/widgets/loaders/failed_loading.dart @@ -1,6 +1,6 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class FailedLoading extends StatelessWidget { final String message; final VoidCallback onReload; diff --git a/lib/views/widgets/loaders/lazy_loading.dart b/lib/views/widgets/loaders/lazy_loading.dart index d5649c30..d5e5f2ed 100644 --- a/lib/views/widgets/loaders/lazy_loading.dart +++ b/lib/views/widgets/loaders/lazy_loading.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; import 'app_loading.dart'; class LazyLoading extends StatefulWidget { diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index 2a0c9bd9..8ed322e0 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; -import 'package:flutter/material.dart'; import 'app_loading.dart'; import 'failed_loading.dart'; diff --git a/lib/views/widgets/loaders/no_item_found.dart b/lib/views/widgets/loaders/no_item_found.dart index ca71c28e..5ed637e7 100644 --- a/lib/views/widgets/loaders/no_item_found.dart +++ b/lib/views/widgets/loaders/no_item_found.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class NoItemFound extends StatelessWidget { final String message; diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index 0ce14380..9481e9cd 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -1,13 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_typeahead/flutter_typeahead.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/parts_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/part.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:provider/provider.dart'; class AutoCompletePartsField extends StatefulWidget { final String initialValue; final bool clearAfterPick; diff --git a/lib/views/widgets/parts/part_item.dart b/lib/views/widgets/parts/part_item.dart index 354e4302..a82809bc 100644 --- a/lib/views/widgets/parts/part_item.dart +++ b/lib/views/widgets/parts/part_item.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; -import 'package:flutter/material.dart'; class PartItem extends StatefulWidget { final Part part; diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index e21c9ba0..ea2228cd 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -1,3 +1,6 @@ +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'; @@ -5,10 +8,6 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:provider/provider.dart'; class AutoCompleteDeviceNumberField extends StatefulWidget { final Lookup initialValue; final String hospitalId; diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index a8d51b15..70528bb3 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -3,16 +3,11 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; -import 'package:test_sa/models/pantry/contact.dart'; -import 'package:test_sa/models/pantry/ppm_check_list.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -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/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; -import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class PentryCalibrationToolForm extends StatefulWidget { final List models; diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart index 94813b50..1fadc1c9 100644 --- a/lib/views/widgets/pentry/pentry_info_form.dart +++ b/lib/views/widgets/pentry/pentry_info_form.dart @@ -1,22 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; -import 'package:test_sa/models/pantry/calibration_tools.dart'; -import 'package:test_sa/models/pantry/contact.dart'; import 'package:test_sa/models/pantry/pentry.dart'; -import 'package:test_sa/models/pantry/ppm_check_list.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; 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/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; -import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_status_mune.dart'; -import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index c725a118..6fdd3b43 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -1,16 +1,12 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/lookup.dart'; -import 'package:test_sa/models/pantry/contact.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; -import 'package:test_sa/models/pantry/ppm_check_list.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; 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/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; -import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class PentryPMKitForm extends StatefulWidget { final List models; diff --git a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart index 7219c33a..201c7498 100644 --- a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart +++ b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/pantry/contact.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; diff --git a/lib/views/widgets/requests/info_row.dart b/lib/views/widgets/requests/info_row.dart index e7f8ed43..d8fe0bc6 100644 --- a/lib/views/widgets/requests/info_row.dart +++ b/lib/views/widgets/requests/info_row.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class RequestInfoRow extends StatelessWidget { final String title; final String info; diff --git a/lib/views/widgets/requests/request_status.dart b/lib/views/widgets/requests/request_status.dart index 44308861..c953efc8 100644 --- a/lib/views/widgets/requests/request_status.dart +++ b/lib/views/widgets/requests/request_status.dart @@ -1,8 +1,6 @@ -import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/lookup.dart'; +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class StatusLabel extends StatelessWidget { final String label; final Color color; diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index 448cb53e..0c63f2ff 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -1,4 +1,7 @@ -import 'package:fluttertoast/fluttertoast.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -10,16 +13,8 @@ import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart'; -import 'package:test_sa/views/pages/user/requests/report/future_service_report.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/views/widgets/timer/app_timer.dart'; - -import '../../../controllers/http_status_manger/http_status_manger.dart'; class ServiceRequestItem extends StatelessWidget { final int index; final ServiceRequest request; diff --git a/lib/views/widgets/requests/service_request_list.dart b/lib/views/widgets/requests/service_request_list.dart index 7672a5d6..7cd71079 100644 --- a/lib/views/widgets/requests/service_request_list.dart +++ b/lib/views/widgets/requests/service_request_list.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -5,7 +6,6 @@ import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/requests/service_request_item.dart'; -import 'package:flutter/material.dart'; class ServiceRequestsList extends StatelessWidget { final List requests; final bool nextPage; diff --git a/lib/views/widgets/requests/service_request_update_dialog.dart b/lib/views/widgets/requests/service_request_update_dialog.dart index bde17432..71dd67cc 100644 --- a/lib/views/widgets/requests/service_request_update_dialog.dart +++ b/lib/views/widgets/requests/service_request_update_dialog.dart @@ -1,4 +1,5 @@ import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; @@ -6,20 +7,14 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_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/service_request/service_request.dart'; -import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; -import 'package:flutter/material.dart'; import 'package:test_sa/views/widgets/status/employee/employee_mune.dart'; -import '../app_text_form_field.dart'; - class ServiceRequestsUpdateDialog extends StatefulWidget { final ServiceRequest request; const ServiceRequestsUpdateDialog({ diff --git a/lib/views/widgets/search/filter_item.dart b/lib/views/widgets/search/filter_item.dart index 0d346dfb..10d708a0 100644 --- a/lib/views/widgets/search/filter_item.dart +++ b/lib/views/widgets/search/filter_item.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class FilterItem extends StatelessWidget { final bool isSelected; diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index 57781690..a1f78945 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -1,12 +1,12 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; -import 'package:flutter/material.dart'; import '../app_text_form_field.dart'; import 'filter_item.dart'; diff --git a/lib/views/widgets/search/visits_search_bar.dart b/lib/views/widgets/search/visits_search_bar.dart index 8930ea76..17805c20 100644 --- a/lib/views/widgets/search/visits_search_bar.dart +++ b/lib/views/widgets/search/visits_search_bar.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -8,8 +10,6 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/from_to_date_bar.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import '../app_text_form_field.dart'; import 'filter_item.dart'; diff --git a/lib/views/widgets/sound/record_sound.dart b/lib/views/widgets/sound/record_sound.dart index 2f93c150..a5ffcc32 100644 --- a/lib/views/widgets/sound/record_sound.dart +++ b/lib/views/widgets/sound/record_sound.dart @@ -3,7 +3,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_sound/flutter_sound.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:rive/rive.dart'; -import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/sound/sound_player.dart'; @@ -89,7 +88,6 @@ class _RecordSoundState extends State { _recording = true; setState(() {}); - print("onTapDown"); } _stopRecording() async { @@ -99,12 +97,10 @@ class _RecordSoundState extends State { return; } String path = (await _myRecorder.stopRecorder()).toString(); - print("audio path ----> $path <-----"); _record = path; widget.onRecord(path); _recording = false; setState(() { }); - print("onTapUp"); } _cancelRecording() async { @@ -117,7 +113,6 @@ class _RecordSoundState extends State { _recording = false; await Future.delayed(const Duration(seconds: 1)); if(!_recording) setState(() { }); - print("onTapCancel"); // _message.memoryAudio.; } diff --git a/lib/views/widgets/sound/sound_player.dart b/lib/views/widgets/sound/sound_player.dart index 20dd0051..7793f54b 100644 --- a/lib/views/widgets/sound/sound_player.dart +++ b/lib/views/widgets/sound/sound_player.dart @@ -1,5 +1,3 @@ -import 'dart:typed_data'; - import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -81,7 +79,7 @@ class _ASoundPlayerState extends State { icon: const Icon( Icons.replay_rounded), onPressed: () async { _failedToLoad = false; - print(!Uri.parse(_audio).isAbsolute); + try { _audioPlayer.seek(const Duration(milliseconds: 0)); _audioPlayer.stop(); @@ -131,7 +129,6 @@ class _ASoundPlayerState extends State { } // set up listeners _audioPlayer.onPositionChanged.listen((Duration duration) { - //print('Current position: $p'); if(!_sliderMoving){ _audioPosition = duration; rebuild(); diff --git a/lib/views/widgets/status/employee/employee_mune.dart b/lib/views/widgets/status/employee/employee_mune.dart index 5ee55ea5..5ea741d4 100644 --- a/lib/views/widgets/status/employee/employee_mune.dart +++ b/lib/views/widgets/status/employee/employee_mune.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class EmployeeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart index 925e920a..358226b0 100644 --- a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart @@ -1,13 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_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/status_drop_down/report/service_types_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class GasCylinderSizeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/gas_refill/gas_status.dart b/lib/views/widgets/status/gas_refill/gas_status.dart index c198bd33..1dce0c71 100644 --- a/lib/views/widgets/status/gas_refill/gas_status.dart +++ b/lib/views/widgets/status/gas_refill/gas_status.dart @@ -1,13 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/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/status_drop_down/report/service_types_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class GasStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/gas_refill/gas_type.dart b/lib/views/widgets/status/gas_refill/gas_type.dart index 6f0c0616..8d3b9e61 100644 --- a/lib/views/widgets/status/gas_refill/gas_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_type.dart @@ -1,14 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class GasTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/multi_status_menu.dart b/lib/views/widgets/status/multi_status_menu.dart index 8d1d7c4c..99a52a87 100644 --- a/lib/views/widgets/status/multi_status_menu.dart +++ b/lib/views/widgets/status/multi_status_menu.dart @@ -1,10 +1,9 @@ import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; -import 'package:test_sa/views/widgets/app_text_form_field.dart'; class MultiStatusMenu extends StatefulWidget { final List statuses; final List initialSelectedStatus; diff --git a/lib/views/widgets/status/pentry/pentry_status_mune.dart b/lib/views/widgets/status/pentry/pentry_status_mune.dart index 3b1ef709..b0813f22 100644 --- a/lib/views/widgets/status/pentry/pentry_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_status_mune.dart @@ -1,14 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; -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/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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class PentryStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/pentry/pentry_task_status_mune.dart b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart index d9f4f276..8564410d 100644 --- a/lib/views/widgets/status/pentry/pentry_task_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart @@ -1,12 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class PentryTaskStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart index 8df13d8c..4df17a49 100644 --- a/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart @@ -1,13 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/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/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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class PentryVisitsStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/report/service_report_last_call.dart b/lib/views/widgets/status/report/service_report_last_call.dart index 1e858cb9..a3f59211 100644 --- a/lib/views/widgets/status/report/service_report_last_call.dart +++ b/lib/views/widgets/status/report/service_report_last_call.dart @@ -1,10 +1,10 @@ +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/models/service_report.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceReportLastCallsMenu extends StatelessWidget { final Function(Lookup) onSelect; final ServiceReport report; diff --git a/lib/views/widgets/status/report/service_report_reasons.dart b/lib/views/widgets/status/report/service_report_reasons.dart index fc24140d..dbdd48ef 100644 --- a/lib/views/widgets/status/report/service_report_reasons.dart +++ b/lib/views/widgets/status/report/service_report_reasons.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_reasons_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceReportReasonsMenu extends StatelessWidget { final Lookup initialValue; final Function(Lookup) onSelect; diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index d739b1db..8a4d1c98 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -1,15 +1,15 @@ 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_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/service_report.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceReportStatusMenu extends StatefulWidget { final Function(Lookup) onSelect; final ServiceReport report; diff --git a/lib/views/widgets/status/report/service_report_type.dart b/lib/views/widgets/status/report/service_report_type.dart index b3e509b3..fb315747 100644 --- a/lib/views/widgets/status/report/service_report_type.dart +++ b/lib/views/widgets/status/report/service_report_type.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_types_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceReportTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/report/service_status.dart b/lib/views/widgets/status/report/service_status.dart index a9bd0950..37eb554e 100644 --- a/lib/views/widgets/status/report/service_status.dart +++ b/lib/views/widgets/status/report/service_status.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart index 5d4e0902..be02c54e 100644 --- a/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart @@ -1,15 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; -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:flutter/material.dart'; +import 'package:provider/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_priority_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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceRequestDefectTypesMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/service_request/service_request_priority_mune.dart b/lib/views/widgets/status/service_request/service_request_priority_mune.dart index 709d35a4..fe3bd6db 100644 --- a/lib/views/widgets/status/service_request/service_request_priority_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_priority_mune.dart @@ -1,14 +1,11 @@ -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; -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:flutter/material.dart'; +import 'package:provider/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/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'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class ServiceRequestPriorityMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index 592830ef..6640bf19 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class SingleStatusMenu extends StatefulWidget { final List statuses; final Lookup initialStatus; diff --git a/lib/views/widgets/timer/app_timer.dart b/lib/views/widgets/timer/app_timer.dart index 48f96723..4002475d 100644 --- a/lib/views/widgets/timer/app_timer.dart +++ b/lib/views/widgets/timer/app_timer.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/app_loading.dart'; class AppTimer extends StatefulWidget { final TimerModel timer; final Future Function(TimerModel) onChange; diff --git a/lib/views/widgets/titles/app_sub_title.dart b/lib/views/widgets/titles/app_sub_title.dart index 0d611db1..68211873 100644 --- a/lib/views/widgets/titles/app_sub_title.dart +++ b/lib/views/widgets/titles/app_sub_title.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class ASubTitle extends StatelessWidget { final String text; final EdgeInsets padding; diff --git a/lib/views/widgets/titles/app_title.dart b/lib/views/widgets/titles/app_title.dart index e97f8b9d..e5dfbc9e 100644 --- a/lib/views/widgets/titles/app_title.dart +++ b/lib/views/widgets/titles/app_title.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class ATitle extends StatelessWidget { final String text; final EdgeInsets padding; diff --git a/lib/views/widgets/titles/expandable_info_row.dart b/lib/views/widgets/titles/expandable_info_row.dart index c67ff85f..b5d24e62 100644 --- a/lib/views/widgets/titles/expandable_info_row.dart +++ b/lib/views/widgets/titles/expandable_info_row.dart @@ -1,6 +1,6 @@ -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class ExpandableInfoRow extends StatefulWidget { final IconData iconData; final String title; diff --git a/lib/views/widgets/visits/visit_item.dart b/lib/views/widgets/visits/visit_item.dart index 3298aa53..a57016e6 100644 --- a/lib/views/widgets/visits/visit_item.dart +++ b/lib/views/widgets/visits/visit_item.dart @@ -1,14 +1,13 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class VisitItem extends StatelessWidget { final Visit visit; final int index; diff --git a/lib/views/widgets/visits/visit_status.dart b/lib/views/widgets/visits/visit_status.dart index 7309dcd6..871287fe 100644 --- a/lib/views/widgets/visits/visit_status.dart +++ b/lib/views/widgets/visits/visit_status.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class VisitStatusLabel extends StatelessWidget { final Visit visit; diff --git a/lib/views/widgets/visits/visits_list.dart b/lib/views/widgets/visits/visits_list.dart index a5b05966..ba688518 100644 --- a/lib/views/widgets/visits/visits_list.dart +++ b/lib/views/widgets/visits/visits_list.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; @@ -6,7 +7,6 @@ import 'package:test_sa/views/pages/user/visits/visit_details.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/visits/visit_item.dart'; -import 'package:flutter/material.dart'; class VisitsList extends StatefulWidget { final List visits; final bool nextPage; From d256a27a214f92db83835f1d10aaad8911f39f7d Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Tue, 17 Jan 2023 10:32:51 +0200 Subject: [PATCH 4/9] comment sign up button in login form --- lib/views/pages/login.dart | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/views/pages/login.dart b/lib/views/pages/login.dart index 9d06692b..ad8554cd 100644 --- a/lib/views/pages/login.dart +++ b/lib/views/pages/login.dart @@ -140,16 +140,16 @@ class _LoginState extends State { } }, ), - SizedBox(height: 140 * AppStyle.getScaleFactor(context),), - AOutLinedButton( - text: _subtitle.signUp, - //color: AColors.cyan, - onPressed: (){ - Navigator.of(context).pushNamed(Register.id); - }, - ), + // SizedBox(height: 140 * AppStyle.getScaleFactor(context),), + // AOutLinedButton( + // text: _subtitle.signUp, + // //color: AColors.cyan, + // onPressed: (){ + // Navigator.of(context).pushNamed(Register.id); + // }, + // ), - SizedBox(height: 32,), + const SizedBox(height: 32,), ], ), ), From 75fedf395ee2266bd60d1be037a6733b451a9f60 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Tue, 4 Apr 2023 22:25:25 +0200 Subject: [PATCH 5/9] new server edits --- lib/controllers/api_routes/api_manager.dart | 138 +++++++++ .../http_status_manger.dart | 0 lib/controllers/api_routes/urls.dart | 109 +++++--- .../providers/api/departments_provider.dart | 14 +- .../api/device_transfer_provider.dart | 88 ++++-- .../providers/api/devices_provider.dart | 78 ++++-- .../providers/api/gas_refill_provider.dart | 85 +++--- .../providers/api/hospitals_provider.dart | 39 +-- .../providers/api/notifications_provider.dart | 2 +- .../providers/api/parts_provider.dart | 36 +-- ...reventive_maintenance_visits_provider.dart | 23 +- .../api/regular_visits_provider.dart | 70 ++--- .../api/service_requests_provider.dart | 90 +++--- ...rovider.dart => assigned_to_provider.dart} | 12 +- .../employee/engineers_provider.dart | 74 +++++ .../gas_cylinder_size_provider.dart | 7 +- .../gas_cylinder_type_provider.dart | 74 +++++ .../gas_refill/gas_status_provider.dart | 7 +- .../gas_refill/gas_types_provider.dart | 7 +- .../pentry/pentry_status_provider.dart | 10 +- .../pentry/pentry_task_status_provider.dart | 10 +- .../pentry/pentry_visit_status_provider.dart | 10 +- .../service_report_defect_types_provider.dart | 11 +- .../service_report_last_calls_provider.dart | 19 +- .../service_report_priority_provider.dart | 11 +- .../service_report_reasons_provider.dart | 10 +- .../service_report_status_provider.dart | 11 +- .../report/service_report_types_provider.dart | 11 +- .../report/service_types_provider.dart | 11 +- .../service_request_status_provider.dart | 74 +++++ .../service_request_through_provider.dart | 74 +++++ .../service_request_type_provider.dart | 74 +++++ .../providers/api/user_provider.dart | 27 +- lib/main.dart | 14 +- lib/models/department.dart | 6 +- lib/models/device/device.dart | 14 +- lib/models/device/device_transfer.dart | 58 +++- lib/models/device/device_transfer_info.dart | 23 +- lib/models/engineer.dart | 31 +++ lib/models/gas_refill/gas_refill_details.dart | 19 +- lib/models/gas_refill/gas_refill_model.dart | 19 +- lib/models/hospital.dart | 6 +- lib/models/lookup.dart | 50 +++- lib/models/pantry/calibration_tools.dart | 26 +- lib/models/pantry/lookups/contact_person.dart | 2 +- lib/models/pantry/lookups/contact_title.dart | 2 +- lib/models/pantry/pentry.dart | 105 +++++-- lib/models/pantry/pm_kit.dart | 45 ++- lib/models/pantry/ppm_check_list.dart | 35 ++- lib/models/part.dart | 12 +- lib/models/service_report.dart | 21 +- .../service_request/service_request.dart | 77 +++--- .../service_request_search.dart | 36 ++- lib/models/user.dart | 62 +++-- lib/models/visits/visit.dart | 55 ++-- lib/models/visits/visits_group.dart | 64 +++-- lib/models/visits/visits_search.dart | 44 +-- .../device_transfer_details.dart | 4 +- .../request_device_transfer.dart | 6 +- .../update_device_transfer.dart | 16 +- lib/views/pages/login.dart | 15 +- lib/views/pages/register.dart | 2 +- lib/views/pages/splash_screen.dart | 9 +- .../user/gas_refill/gas_refill_details.dart | 5 +- .../user/gas_refill/request_gas_refill.dart | 67 +++-- lib/views/pages/user/land_page.dart | 15 +- lib/views/pages/user/profile_page.dart | 2 +- .../pages/user/requests/create_request.dart | 30 +- .../report/create_service_report.dart | 2 +- .../requests/report/edit_service_report.dart | 8 +- .../pages/user/requests/request_details.dart | 102 ++++--- .../pages/user/requests/requests_page.dart | 2 +- .../pages/user/visits/pantry/edit_pentry.dart | 20 +- .../preventive_maintenance_visits_page.dart | 4 +- .../user/visits/regular_visits_page.dart | 6 +- .../visits/update_visits_group_sheet.dart | 261 +++++++++--------- .../pages/user/visits/visit_details.dart | 3 +- .../device_transfer_info_section.dart | 4 +- .../device_trancfer/device_transfer_item.dart | 6 +- .../auto_complete_devices_field.dart | 6 +- .../equipment/auto_complete_models_field.dart | 92 ++++++ .../equipment/single_device_picker.dart | 65 +++-- .../gas_refill_create_details_item.dart | 9 +- .../widgets/gas_refill/gas_refill_item.dart | 4 +- .../gas_refill_update_details_item.dart | 8 +- .../hospital_auto_complete_field.dart | 16 +- .../widgets/loaders/loading_manager.dart | 2 +- .../auto_complete_devices_field.dart | 6 +- .../pentry/pentry_calibration_tool_form.dart | 2 +- .../widgets/pentry/pentry_info_form.dart | 33 ++- .../widgets/pentry/pentry_pm_kit_form.dart | 148 +++++----- .../requests/service_request_item.dart | 2 +- .../service_request_update_dialog.dart | 6 +- lib/views/widgets/search/filter_item.dart | 2 +- .../search/service_request_search_bar.dart | 98 ++++--- .../widgets/search/visits_search_bar.dart | 200 ++++++++------ ...ployee_mune.dart => assigned_to_mune.dart} | 8 +- .../status/employee/engineers_mune.dart | 37 +++ .../status/employee/single_type_menu.dart | 99 +++++++ .../status/gas_refill/gas_cylinder_type.dart | 38 +++ .../widgets/status/multi_status_menu.dart | 6 +- .../status/report/service_report_status.dart | 21 +- .../service_request_status_mune.dart | 40 +++ .../service_request_through_mune.dart | 38 +++ .../service_request_types_mune.dart | 39 +++ .../widgets/status/single_status_menu.dart | 17 +- lib/views/widgets/visits/visit_item.dart | 14 +- lib/views/widgets/visits/visit_status.dart | 6 +- pubspec.lock | 2 +- 109 files changed, 2610 insertions(+), 1185 deletions(-) create mode 100644 lib/controllers/api_routes/api_manager.dart rename lib/controllers/{http_status_manger => api_routes}/http_status_manger.dart (100%) rename lib/controllers/providers/api/status_drop_down/employee/{employee_provider.dart => assigned_to_provider.dart} (86%) create mode 100644 lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart create mode 100644 lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart create mode 100644 lib/models/engineer.dart create mode 100644 lib/views/widgets/equipment/auto_complete_models_field.dart rename lib/views/widgets/status/employee/{employee_mune.dart => assigned_to_mune.dart} (83%) create mode 100644 lib/views/widgets/status/employee/engineers_mune.dart create mode 100644 lib/views/widgets/status/employee/single_type_menu.dart create mode 100644 lib/views/widgets/status/gas_refill/gas_cylinder_type.dart create mode 100644 lib/views/widgets/status/service_request/service_request_status_mune.dart create mode 100644 lib/views/widgets/status/service_request/service_request_through_mune.dart create mode 100644 lib/views/widgets/status/service_request/service_request_types_mune.dart diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart new file mode 100644 index 00000000..ae4eae9c --- /dev/null +++ b/lib/controllers/api_routes/api_manager.dart @@ -0,0 +1,138 @@ +import 'dart:convert'; + +import 'package:flutter/cupertino.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:http/http.dart' as http; +import 'package:http/http.dart'; + +class ApiManager { + + ApiManager._(); + + final Map _headers = {'Content-Type': 'application/json',}; + + static ApiManager instance = ApiManager._(); + + Future get( + String url, + {Map headers,} + ) async{ + + Uri _url = Uri.parse(url); + print(_url); + http.Response response = await http.get(_url,headers: headers); + if(response.body is! List){ + final message = jsonDecode(response.body)["message"]; + if(message != null && message.toString().isNotEmpty){ + Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + } + } + + return response; + } + + Future post( + String url, { + Map headers, + @required Map body, + } + ) async{ + + headers ??= {}; + + headers.addAll(_headers); + + Uri _url = Uri.parse(url); + print(_url); + print(headers); + print(json.encode(body)); + var request = http.Request('POST', _url); + request.body = json.encode(body); + request.headers.addAll(headers); + + http.StreamedResponse _streamedResponse = await request.send(); + http.Response response = await http.Response.fromStream(_streamedResponse); + print(response.statusCode); + print(response.body); + + if(response.body is! List){ + final message = jsonDecode(response.body)["message"]; + if(message != null && message.toString().isNotEmpty){ + Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + } + } + + return response; + } + + Future put( + String url, { + Map headers, + @required Map body, + } + ) async{ + + headers ??= {}; + + headers.addAll(_headers); + + Uri _url = Uri.parse(url); + print(_url); + print(headers); + print(json.encode(body)); + var request = http.Request('PUT', _url); + request.body = json.encode(body); + request.headers.addAll(headers); + + http.StreamedResponse streamedResponse = await request.send(); + http.Response response = await http.Response.fromStream(streamedResponse); + print(response.statusCode); + print(response.body); + if(response.body is! List){ + final message = jsonDecode(response.body)["message"]; + if(message != null && message.toString().isNotEmpty){ + Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + } + } + return response; + } + + Future multiPart( + String url, { + Map headers, + @required Map body, + @required List> files, + }) async{ + Map _headers = const {'Content-Type': 'multipart/form-data',}; + + headers ??= {}; + + headers.addAll(_headers); + + Uri _url = Uri.parse(url); + print(_url); + print(_headers); + print(json.encode(body)); + var request = http.MultipartRequest('POST', _url); + request.fields.addAll(body); + request.headers.addAll(_headers); + + for (var element in files) { + request.files.add(await element); + } + + //request.files.addAll(_files); + print(request.files); + http.StreamedResponse streamedResponse = await request.send(); + http.Response response = await http.Response.fromStream(streamedResponse); + print(response.statusCode); + print(response.body); + if(response.body is! List){ + final message = jsonDecode(response.body)["message"]; + if(message != null && message.toString().isNotEmpty){ + Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + } + } + return response; + } +} \ No newline at end of file diff --git a/lib/controllers/http_status_manger/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart similarity index 100% rename from lib/controllers/http_status_manger/http_status_manger.dart rename to lib/controllers/api_routes/http_status_manger.dart diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index be346745..70dca275 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -1,68 +1,85 @@ class URLs{ URLs._(); static const host2 = "http://194.163.164.213/atoms/api"; - static const host1 = "http://194.163.164.213/atoms/api"; + static const host1 = "http://109.123.243.118:9000"; + + static String _baseUrl = "$_host/mobile"; + + static String _host = host1; + + set host(String value) => _host = value; + + static String getFileUrl(String file) => file == null || file.isEmpty + ? null : "$_host/attachment/$file"; // API Routes - static const login = "/handle/user/login"; // post - static const register = "/handle/create/user"; // post - static const updateProfile = "/update/user/profile"; // post - static const getHospitals = "/handle/return/all/clients"; // get - static const getDepartments = "/handle/return/all/departments"; // get - static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051 - static const getServiceRequests = "/return/user/calls"; // get + static get login => "$_baseUrl/MobileAuth/Login"; // post + static get register => "$_baseUrl/handle/create/user"; // post + static get updateProfile => "$_baseUrl/update/user/profile"; // post + static get getHospitals => "$_baseUrl/Customer/GetCustomers"; // get + static get getDepartments => "$_baseUrl/Customer/GetDepartmentLookup"; // get + static get getEquipment => "$_baseUrl/Asset/GetAssets"; // get ?client=208051 + static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2 + // 08051 + static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get + static get getServiceRequestThrough => "$_baseUrl/Lookups/GetLookup?lookupEnum=603"; // get + static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get + static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503"; - static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get - static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get + static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get + static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // get - static const getRegularVisits = "/return/user/ppm"; // get - static const updateRegularVisits = "/update/user/ppm"; // get + static get getRegularVisits => "$_baseUrl/Visit/GetVisits"; // get + static get updateRegularVisits => "$_baseUrl/Visit/UpdateVisits"; // get - static const getSingleServiceRequest = "/return/call/information"; // get - static const getNotifications = "/return/user/notification"; // get - static const getRecentNotifications = "/return/user/recent/notification"; // get - static const createRequest = "/handle/create/request"; // get - static const createReport = "/handle/create/report/issue"; // get - static const updateRequestDate = "/handle/update/request"; // get + static get getSingleServiceRequest => "$_baseUrl/return/call/information"; // get + static get getNotifications => "$_baseUrl/return/user/notification"; // get + static get getRecentNotifications => "$_baseUrl/return/user/recent/notification"; // get + static get createRequest => "$_baseUrl/CallRequest/AddCallRequest"; // get + static get createReport => "$_baseUrl/handle/create/report/issue"; // get + static get updateRequestDate => "$_baseUrl/handle/update/request"; // get // service report - static const createServiceReport = "/handle/create/service/report"; // get - static const updateServiceReport = "/handle/update/service/report"; // get - static const getServiceReport = "/handle/view/service/report"; // get - static const createDuplicatedReport = "/handle/duplicate/request"; // get + static get createServiceReport => "$_baseUrl/handle/create/service/report"; // get + static get updateServiceReport => "$_baseUrl/handle/update/service/report"; // get + static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get + static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get - static const getServiceReportReasons = "/return/service/report/reasons"; // get - static const getServiceReportTypes = "/return/service/report/type"; // get - static const getServiceReportStatus = "/return/service/report/status"; // get - static const getServiceReportLastCalls = "/return/call/last/situation"; // get - static const getServiceTypes = "/return/service/type"; // get - static const getPartNumber = "/handle/return/all/parts"; // get - static const getServiceReportPriority = "/return/call/priority/list"; // get - static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get + static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get + static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=34"; // get + static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get + static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get + static get getServiceTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get + static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get + static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get + static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get //gas refill - static const getGasTypes = "/return/gas/refill/types"; // get - static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get - static const getGasStatus = "/return/gas/refill/status"; // get - static const requestGasRefill = "/create/gas/refill"; // get - static const updateGasRefill = "/update/gas/refill/"; // get - static const getGasRefill = "/search/gas/refill"; // get + static get getGasTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=606"; // get + // todo check edits with backend + static get getGasCylinderSize => "$_baseUrl/Lookups/GetLookup?lookupEnum=608"; // get + static get getGasCylinderType => "$_baseUrl/Lookups/GetLookup?lookupEnum=607"; // get + static get getGasStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=609"; // get + static get requestGasRefill => "$_baseUrl/GazRefill/AddGazRefill"; // get + static get updateGasRefill => "$_baseUrl/GazRefill/UpdateGazRefill"; // get + static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get //device transfer - static const requestDeviceTransfer = "/create/transfer/asset"; // get - static const updateDeviceTransfer = "/update/transfer/asset"; // get - static const getDeviceTransfer = "/search/transfer/asset"; // get + static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get + static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get + static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get // employee - static const getEmployees = "/return/assigned/employee"; // get + static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get + static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get // pentry - static const getPentry = "/return/pentry/details"; // get - static const updatePentry = "/update/pentry/details"; // get - static const getPentryTaskStatus = "/return/pentry/task/status"; // get - static const getPentryVisitStatus = "/return/pentry/visit/status/list"; // get - static const getPentryStatus = "/return/pentry/status/list"; // get + static get getPentry => "$_baseUrl/return/pentry/details"; // get + static get updatePentry => "$_baseUrl/Visit/UpdateVisit"; // get + static get getPentryTaskStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=403"; // get + static get getPentryVisitStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=402"; // get + static get getPentryStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=401"; // get // contacts - static const getPentryContacts = "/handle/return/all/contacts"; // get + static get getPentryContacts => "$_baseUrl/handle/return/all/contacts"; // get } \ No newline at end of file diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart index 1b66771d..07b0a57b 100644 --- a/lib/controllers/providers/api/departments_provider.dart +++ b/lib/controllers/providers/api/departments_provider.dart @@ -1,5 +1,6 @@ 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/department.dart'; import 'package:flutter/cupertino.dart'; @@ -41,11 +42,12 @@ class DepartmentsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse(host + URLs.getDepartments), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + response = await ApiManager.instance.post( + URLs.getDepartments, + body: { + "pageSize":50, + // if(title != null && title.isNotEmpty) "name":title, + } ); } catch(error) { isLoading = false; @@ -56,7 +58,7 @@ class DepartmentsProvider extends ChangeNotifier{ stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + List listJson = json.decode(response.body)["data"]; departments = listJson.map((department) => Department.fromJson(department)).toList(); } isLoading = false; diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 907ae2ff..ff1b77f3 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -1,7 +1,8 @@ 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/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device.dart'; @@ -74,19 +75,19 @@ class DeviceTransferProvider extends ChangeNotifier{ // return 200; Response response; try{ - response = await get( - Uri.parse( - "$host${URLs.getDeviceTransfer}?uid=${user.id}" - "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + Map body = {}; + body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1; + body["pageSize"] = pageItemNumber; + + response = await ApiManager.instance.post( + URLs.getDeviceTransfer, + body: body, ); + stateCode = response.statusCode; if(stateCode >= 200 && stateCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + List listJson = json.decode(response.body)["data"]; List itemsPage = listJson.map( (request) => DeviceTransfer.fromJson(request)).toList(); items ??= []; @@ -116,23 +117,22 @@ class DeviceTransferProvider extends ChangeNotifier{ @required DeviceTransfer model, }) async { Map body = { - "uid": user.id.toString(), - "token": user.token ?? "", - "serial_id": model.device.id ?? "", - "destination_client": model.receiver.client.id ?? "", - "destination_department": model.receiver.department.id ?? "", + // "uid": user.id.toString(), + // "token": user.token ?? "", + "assetId": model.device.id ?? "", + "destSiteId": model.receiver.client.id ?? "", + "destDepartmentId": model.receiver.department.id ?? "", + "senderSiteId": model.receiver.client.id ?? "", }; Response response; try{ - response = await post( - Uri.parse( - host+URLs.requestDeviceTransfer), - body: body, + response = await ApiManager.instance.post( + URLs.requestDeviceTransfer, + body: body ); - stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(items != null) { items.insert( @@ -156,24 +156,58 @@ class DeviceTransferProvider extends ChangeNotifier{ @required String host, @required User user, @required bool isSender, - @required String requestId, + @required int requestId, @required DeviceTransfer oldModel, @required DeviceTransferInfo newModel, }) async { Map body = { - "uid": user.id.toString(), - "token": user.token ?? "", - "current_user": user.id ?? "", + "id": oldModel.id, + "assetId": oldModel.device.id ?? "", + "senderSiteId": oldModel.sender.client.id, + "destSiteId": oldModel.receiver.client.id, + "destDepartmentId": oldModel.receiver.department.id, }; + + if(isSender){ + body.addAll( + { + //"senderSiteId": newModel.client.id, + //"senderDepartmentId": newModel.department.id, + "senderAssignedEmployeeId": newModel.userId, + "senderMachineStatusId": newModel.status.id, + "senderComment": newModel.comment, + "senderWorkingHours": newModel.workingHours, + "senderTravelingHours": newModel.travelingHours, + "senderAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", + } + ); + }else{ + body.addAll( + { + //"destSiteId": newModel.client.id, + //"destDepartmentId": newModel.department.id, + "receiverAssignedEmployeeId": newModel.userId, + "receiverMachineStatusId": newModel.status.id, + "receiverComment": newModel.comment, + "receiverWorkingHours": newModel.workingHours, + "receiverTravelingHours": newModel.travelingHours, + "receiverAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", + } + ); + } body.addAll(newModel.toJson(isSender)); Response response; try{ - response = await post( - Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), - body: body, + response = await ApiManager.instance.put( + URLs.updateDeviceTransfer, + body: body ); + // response = await post( + // Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), + // body: body, + // ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index d434551f..e957cb17 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -1,7 +1,9 @@ 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/device/device.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; @@ -41,7 +43,9 @@ class DevicesProvider extends ChangeNotifier{ Future getEquipment ({ @required String host, @required User user, - @required String hospitalId + @required int hospitalId, + String serialNumber, + String number, }) async { if(_loading == true) return -2; @@ -49,11 +53,14 @@ class DevicesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse(host + URLs.getEquipment+"?client=$hospitalId"), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + response = await ApiManager.instance.post( + URLs.getEquipment, + body: { + "pageSize":50, + "siteId":hospitalId, + if(serialNumber?.isEmpty == false) "assetSerialNumber":serialNumber, + if(number?.isEmpty == false) "assetNo":number, + } ); } catch(error) { _loading = false; @@ -64,7 +71,7 @@ class DevicesProvider extends ChangeNotifier{ _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); + List equipmentListJson = json.decode(response.body)["data"]; _devices = equipmentListJson.map((device) => Device.fromJson(device)).toList(); } _loading = false; @@ -80,31 +87,70 @@ class DevicesProvider extends ChangeNotifier{ Future> getDevicesList ({ @required String host, @required User user, - @required String hospitalId, + @required int hospitalId, String serialNumber, String number, }) async { Response response; try{ - response = await get( - Uri.parse("$host${URLs.getEquipment}?client=$hospitalId" - "${serialNumber?.isEmpty == false ? "&name=$serialNumber" :""}" - "${number?.isEmpty == false ? "&number=$number" : ""}" - ), + response = await ApiManager.instance.post( + URLs.getEquipment, + body: { + "pageSize":50, + "siteId":hospitalId, + if(serialNumber?.isEmpty == false) "assetSerialNumber":serialNumber, + if(number?.isEmpty == false) "assetNo":number, + } ); + // response = await get( + // Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId" + // "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}" + // "${number?.isEmpty == false ? "&assetNo=$number" : ""}" + // ), + // ); List page = []; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); + List equipmentListJson = json.decode(response.body)["data"]; + page = equipmentListJson.map((device) => Device.fromJson(device)).toList(); + } + return page; + } catch(error) { + print(error); + return []; + } + + } + + Future> getModels({ + String code, + }) async { + Response response; + try{ + response = await ApiManager.instance.get( + URLs.getModels+"?code=$code", + ); + List page = []; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + page = categoriesListJson.map((json) => + Lookup( + name: json["modelDefCode"], + id: json["id"], + value: json["id"], + ) + ).toList(); } return page; } catch(error) { + print(error); return []; } } + /// 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 @@ -113,7 +159,7 @@ class DevicesProvider extends ChangeNotifier{ Future> getDevicesListBySN ({ @required String host, @required User user, - @required String hospitalId, + @required int hospitalId, @required String sn }) async { Response response; diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index 5297ae06..da3b6077 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -1,7 +1,8 @@ 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/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/service_report.dart'; @@ -53,20 +54,19 @@ class GasRefillProvider extends ChangeNotifier{ return -2; isLoading = true; Response response; - try{ - response = await get( - Uri.parse( - "$host${URLs.getGasRefill}?uid=${user.id}" - "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + + Map body = {}; + body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1; + body["pageSize"] = pageItemNumber; + + response = await ApiManager.instance.post( + URLs.getGasRefill, + body: body, ); stateCode = response.statusCode; if(stateCode >= 200 && stateCode < 300) { // client's request was successfully received - List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); + List requestsListJson = json.decode(response.body)["data"]; List itemsPage = requestsListJson.map( (request) => GasRefillModel.fromJson(request)).toList(); items ??= []; @@ -77,11 +77,13 @@ class GasRefillProvider extends ChangeNotifier{ nextPage = false; } } + try{ isLoading = false; notifyListeners(); return response.statusCode; } catch(error) { + print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -98,39 +100,34 @@ class GasRefillProvider extends ChangeNotifier{ Map body = { "uid": user.id.toString(), "token": user.token ?? "", - "title": model.title ?? "", - "status": "0",//model.status.value.toString(), + "GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}", + "status": model.status.toMap(), }; - body["details"] = jsonEncode(model.details.map((model) => { - "type": model.type.id?.toString(), - "size": model.cylinderSize?.id.toString(), - "requsted_qty": model.requestedQuantity.toString(), - }).toList()); + body["gazRefillDetails"] = model.details.map((model) => { + "gasType": model.type.toMap(), + "cylinderSize": model.cylinderSize.toMap(), + "cylinderType": model.cylinderType.toMap(), + "requestedQty": model.requestedQuantity, + }).toList(); Response response; try{ - response = await post( - Uri.parse( - host+URLs.requestGasRefill), - body: body, + response = await ApiManager.instance.post( + URLs.requestGasRefill, + body: body ); - stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(items != null) { - items.insert( - 0, - GasRefillModel.fromJson( - json.decode(utf8.decode(response.bodyBytes))[0] - ) - ); + reset(); notifyListeners(); } } return response.statusCode; } catch(error) { + print(error); return -1; } @@ -143,25 +140,29 @@ class GasRefillProvider extends ChangeNotifier{ @required GasRefillModel newModel, }) async { Map body = { - "uid": user.id.toString(), - "token": user.token ?? "", - "title": newModel.title ?? "", - "status": newModel.status.id.toString(), + "id":newModel.id, + "gazRefillNo": newModel.title ?? "", + "status": newModel.status.toMap(), }; - body["details"] = jsonEncode(newModel.details.map((model) => { - "type": model.type.id.toString(), - "size": model.cylinderSize.id.toString(), - "requsted_qty": model.requestedQuantity.toString(), - "deliverd_qty": model.deliveredQuantity.toString(), - }).toList()); + body["gazRefillDetails"] = newModel.details.map((model) => { + "gasType": model.type.toMap(), + "cylinderSize": model.cylinderSize.toMap(), + "cylinderType": model.cylinderType.toMap(), + "requestedQty": model.requestedQuantity, + "deliverdQty": model.deliveredQuantity, + }).toList(); Response response; try{ - response = await post( - Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), - body: body, + response = await ApiManager.instance.put( + URLs.updateGasRefill, + body: body ); + // response = await post( + // Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), + // body: body, + // ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index 5e3c4509..7b19a6e1 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -1,5 +1,6 @@ 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/hospital.dart'; import 'package:test_sa/models/user.dart'; @@ -55,20 +56,18 @@ class HospitalsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getHospitals - + "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}" - + ( title == null || title.isEmpty ? "" : "&name=$title" ) - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + response = await ApiManager.instance.post( + URLs.getHospitals, + body: { + "pageNumber":(hospitals?.length ?? 0) ~/pageItemNumber + 1, + "pageSize":50, + if(title != null && title.isNotEmpty) "name":title, + } ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); if(hospitals == null) _hospitals = []; @@ -95,20 +94,26 @@ class HospitalsProvider extends ChangeNotifier{ Future> getHospitalsList ({String host,User user,String title}) async { Response response; try{ - - response = await get( - Uri.parse(host + URLs.getHospitals - + ( title == null || title.isEmpty ? "" : "?name=$title" )), - headers: { - "Content-Type":"application/json; charset=utf-8" + response = await ApiManager.instance.post( + URLs.getHospitals, + body: { + "pageSize":50, + if(title != null && title.isNotEmpty) "name":title, } ); + // response = await get( + // Uri.parse(host + URLs.getHospitals + // + ( title == null || title.isEmpty ? "" : "?name=$title" )), + // headers: { + // "Content-Type":"application/json; charset=utf-8" + // } + // ); _stateCode = response.statusCode; List _page = []; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); } return _page; diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart index 0bea5f26..36abef10 100644 --- a/lib/controllers/providers/api/notifications_provider.dart +++ b/lib/controllers/providers/api/notifications_provider.dart @@ -43,7 +43,7 @@ class NotificationsProvider extends ChangeNotifier{ Future getNotifications ({ @required String host, @required User user, - @required String hospitalId, + @required int hospitalId, }) async { if(isLoading == true) return -2; diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 6f763f77..864adaeb 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -1,5 +1,6 @@ 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/part.dart'; import 'package:test_sa/models/user.dart'; @@ -55,16 +56,12 @@ class PartsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getPartNumber - + "?page=${(_parts?.length ?? 0) ~/pageItemNumber}" - + ( title == null || title.isEmpty ? "" : "&name=$title" ) - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } - ); + response = await ApiManager.instance.post( + URLs.getPartNumber, + body: { + if(title != null && title.isNotEmpty) + "partName":title + }); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -100,24 +97,21 @@ class PartsProvider extends ChangeNotifier{ Future> getPartsList ({String host,User user,String title}) async { Response response; try{ - - response = await get( - Uri.parse( - host + URLs.getPartNumber - + ( title == null || title.isEmpty ? "" : "?name=$title" ) - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } - ); + response = await ApiManager.instance.post( + URLs.getPartNumber, + body: { + if(title != null && title.isNotEmpty) + "partName":title + }); List _page = []; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); } return _page; } catch(error) { + print(error); return []; } diff --git a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart index 14103fd6..9d209fec 100644 --- a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart +++ b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart @@ -1,5 +1,6 @@ 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/user.dart'; import 'package:test_sa/models/visits/visit.dart'; @@ -60,7 +61,7 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{ +"?uid=${user.id}" "&token=${user.token}" "&page=${(visits?.length ?? 0) ~/pageItemNumber}" - +visitsSearch?.toSearchString() ?? "" + // +visitsSearch?.toMap() ?? "" ), headers: { "Content-Type":"application/json; charset=utf-8" @@ -104,24 +105,20 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{ }) async { Response response; Map body = group.toJson(); - body["token"] = user.token ?? ""; - body["uid"] = user.id; + // body["token"] = user.token ?? ""; + // body["uid"] = user.id; //userId = 397.toString(); // testing id to view data try{ - response = await post( - Uri.parse( - host+URLs.updatePreventiveMaintenanceVisits - ), - body: body, - ); + response = await ApiManager.instance.put( + URLs.updatePreventiveMaintenanceVisits, body: body); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - group.visits.forEach((visit) { - visit.status = group.status; - visit.actualDate = group.date.toString().split(" ").first; - }); + // group.visits.forEach((visit) { + // visit.status = group.status; + // visit.actualDate = group.date.toString().split(" ").first; + // }); group.visits.clear(); notifyListeners(); } diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index 03737f73..d9baaec1 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -1,5 +1,6 @@ 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/pantry/pentry.dart'; import 'package:test_sa/models/user.dart'; @@ -8,11 +9,12 @@ import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; +import 'package:logger/logger.dart'; class RegularVisitsProvider extends ChangeNotifier{ // number of items call in each request - final pageItemNumber = 50; + final pageItemNumber = 20; //reset provider data void reset(){ @@ -52,20 +54,19 @@ class RegularVisitsProvider extends ChangeNotifier{ if(isLoading == true) return -2; isLoading = true; + if(visits == null) notifyListeners(); Response response; //userId = 397.toString(); // testing id to view data + try{ - response = await get( - Uri.parse( - host+URLs.getRegularVisits - +"?uid=${user.id}" - "&token=${user.token}" - "&page=${(visits?.length ?? 0) ~/pageItemNumber}" - +visitsSearch?.toSearchString() ?? "" - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + Map body = {}; + body.addAll(visitsSearch.toMap()); + body["pageNumber"] = (visits?.length ?? 0) ~/pageItemNumber +1; + body["pageSize"] = pageItemNumber; + + response = await ApiManager.instance.post( + URLs.getRegularVisits, + body: body, ); } catch(error) { isLoading = false; @@ -77,12 +78,11 @@ class RegularVisitsProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received try{ - List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + List requestsListJson = json.decode(response.body)["data"]; List _visits = requestsListJson.map( (request) => Visit.fromJson(request) ).toList(); - if(visits == null) - visits = []; + visits ??= []; visits.addAll(_visits); if(_visits.length == pageItemNumber){ nextPage = true; @@ -90,12 +90,12 @@ class RegularVisitsProvider extends ChangeNotifier{ nextPage = false; } }catch(error){ + Logger().e(error); isLoading = false; stateCode = -1; notifyListeners(); return -1; } - } isLoading = false; notifyListeners(); @@ -113,14 +113,13 @@ class RegularVisitsProvider extends ChangeNotifier{ VisitsGroup group, }) async { Response response; - Map body = group.toJson(); - body["token"] = user.token ?? ""; - body["uid"] = user.id; - //userId = 397.toString(); // testing id to view data + try{ - response = await post( - Uri.parse(host+URLs.updateRegularVisits), - body: body, + Map body = group.toJson(); + + response = await ApiManager.instance.post( + URLs.getRegularVisits, + body: body, ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { @@ -138,7 +137,7 @@ class RegularVisitsProvider extends ChangeNotifier{ } } - Future getPently({String host,User user,String id}) async { + Future getPently({String host,User user,int id}) async { Response response; response = await get( Uri.parse("$host${URLs.getPentry}/$id"), @@ -162,20 +161,29 @@ class RegularVisitsProvider extends ChangeNotifier{ }) async { try{ Response response; - Map body = pentry.toMap(); - body["uid"] = user.id; - body["token"] = user.token; - response = await post( - Uri.parse(host+URLs.updatePentry + "/${visit.id}"), - body: body, + Map body = pentry.toMap(visit.id); + body["id"] = visit.id; + body["assetId"] = visit.deviceId; + // body["token"] = user.token; + // body["vChecklists"]?.addAll({}); + // body["vCalibrationTools"]?.addAll({"visitId": visit.id,}); + // body["vKits"]?.add({"visitId": visit.id,}); + response = await ApiManager.instance.put( + URLs.updatePentry, body: body ); + + // response = await post( + // Uri.parse(host+URLs.updatePentry + "/${visit.id}"), + // body: body, + // ); if(response.statusCode >= 200 && response.statusCode < 300) { - visit.status = pentry.ppmVisitStatus; + reset();//visit.status = pentry.ppmVisitStatus; notifyListeners(); } return response.statusCode; } catch(error) { + print(error); return -1; } diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index cb62d06b..67f7f5ab 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -1,7 +1,8 @@ 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/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; @@ -51,36 +52,33 @@ class ServiceRequestsProvider extends ChangeNotifier{ Future getRequests ({ @required String host, @required User user, - @required String hospitalId, + @required int hospitalId, }) async { if(isLoading == true) return -2; isLoading = true; + if(serviceRequests == null) notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host+URLs.getServiceRequests - +"?uid=${user.id}" - +(hospitalId == null? "" :"&client_nid=$hospitalId") - +"&token=${user.token}" - "&page=${(serviceRequests?.length ?? 0) ~/pageItemNumber}" - +search?.toSearchString() ?? "" - ), - headers: { - "Content-Type":"application/json; charset=utf-8" - } + Map body = {}; + body.addAll(search.toMap()); + body["pageNumber"] = (serviceRequests?.length ?? 0) ~/pageItemNumber + 1; + body["pageSize"] = pageItemNumber; + + response = await ApiManager.instance.post( + URLs.getServiceRequests, + body: body, ); + stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); - List _serviceRequestsPage = requestsListJson.map( + List requestsListJson = json.decode(response.body)["data"]; + List serviceRequestsPage = requestsListJson.map( (request) => ServiceRequest.fromJson(request)).toList(); - if(serviceRequests == null) - serviceRequests = []; - serviceRequests.addAll(_serviceRequestsPage); - if(_serviceRequestsPage.length == pageItemNumber){ + serviceRequests ??= []; + serviceRequests.addAll(serviceRequestsPage); + if(serviceRequestsPage.length == pageItemNumber){ nextPage = true; }else{ nextPage = false; @@ -91,6 +89,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { + print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -144,26 +143,31 @@ class ServiceRequestsProvider extends ChangeNotifier{ }) async { var body = { - "uid": user.id, - "token": user.token ?? "", - "sn_id": serviceRequest.deviceId ?? "", - "date": (DateTime.now().millisecondsSinceEpoch).toString(), - "client": user.hospital.id ?? '', - "complaint": serviceRequest.maintenanceIssue, - "image": json.encode(serviceRequest.devicePhotos), - "priority": (serviceRequest.priority?.id).toString(), - "defect_types": (serviceRequest.defectType?.id).toString(), + "callCreatedBy": { + "id":user.id, + "name":user.userName + }, + "assets":serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId], + "requestedDate": DateTime.now().toIso8601String(), + "requestedTime": DateTime.now().toIso8601String(), + "client": user.hospital?.id ?? '', + "callComments": serviceRequest.maintenanceIssue, + "attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name":e}).toList(), + "priority": serviceRequest.priority.toMap(), + "defectType": serviceRequest.defectType.toMap(), + "typeofRequest":serviceRequest.type.toMap(), + "requestedThrough":serviceRequest.type.toMap(), }; if(serviceRequest.audio != null){ - body["audio"] = serviceRequest.audio; + body["voiceNote"] = serviceRequest.audio; } Response response; try{ - response = await post( - Uri.parse( - host+URLs.createRequest), - body: body, + response = await ApiManager.instance.post( + URLs.createRequest, + body: body ); + stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(serviceRequests != null) @@ -178,6 +182,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { + print(error); return -1; } @@ -232,7 +237,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { - request.engineerName = employee.label; + request.engineerName = employee.name; notifyListeners(); } return response.statusCode; @@ -385,21 +390,12 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required User user, @required Subtitle subtitle, }) async { - String userData = ''; - if(user != null){ - userData += "&uid="+user.id; - userData += "&token="+user.token; - } Response response; try{ - - response = await get( - Uri.parse( - host+URLs.getServiceReport - +'?report_id=$reportId' - '$userData',) - ); + response = await ApiManager.instance.get( + URLs.getServiceReport + "?workOrderId=$reportId", + ); }catch(error){ throw(HttpStatusManger.getStatusMessage( diff --git a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart similarity index 86% rename from lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart rename to lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart index e21f7180..757b13f9 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/employee_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -7,7 +8,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; -class EmployeesProvider extends ChangeNotifier{ +class AssignedToProvider extends ChangeNotifier{ //reset provider data void reset(){ @@ -48,21 +49,20 @@ class EmployeesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getEmployees), + response = await ApiManager.instance.get( + URLs.getEmployees, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); return response.statusCode; } catch(error) { - + print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart new file mode 100644 index 00000000..67c10b26 --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart @@ -0,0 +1,74 @@ +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/engineer.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'; + +class EngineersProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _items = 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.getEngineers, + ); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body); + _items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + print(error); + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart index 5ea49fa9..ecf5a0c7 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -49,13 +50,13 @@ class GasCylinderSizesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse(host + URLs.getGasCylinderSize), + response = await ApiManager.instance.get( + URLs.getGasCylinderSize, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart new file mode 100644 index 00000000..0d1a1e0a --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart @@ -0,0 +1,74 @@ +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'; + +class GasCylinderTypesProvider 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.getGasCylinderType, + ); + _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; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart index a6fcbc5a..6073c9fe 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,13 +49,13 @@ class GasStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse(host + URLs.getGasStatus), + response = await ApiManager.instance.get( + URLs.getGasStatus, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index 80e0d531..3286ea00 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,13 +49,13 @@ class GasTypesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse(host + URLs.getGasTypes), + response = await ApiManager.instance.get( + URLs.getGasTypes, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); } _loading = false; diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart index 75d18783..e5d769ac 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,15 @@ class PentryStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getPentryStatus), + response = await ApiManager.instance.get( + URLs.getPentryStatus, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes)); - _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List listJson = json.decode(response.body)["data"]; + _items = listJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart index 900671e1..689f357d 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,15 @@ class PentryTaskStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getPentryTaskStatus), + response = await ApiManager.instance.get( + URLs.getPentryTaskStatus, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart index c8562f25..c616d746 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,15 @@ class PentryVisitStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getPentryVisitStatus), + response = await ApiManager.instance.get( + URLs.getPentryVisitStatus, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes)); - _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List listJson = json.decode(response.body)["data"]; + _items = listJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart index a61b1e76..563ba8d8 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,14 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getServiceReportDefectTypes), + response = await ApiManager.instance.get( + URLs.getServiceReportDefectTypes, ); - _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes)); - _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List listJson = json.decode(response.body)["data"]; + _items = listJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart index 20e9f7be..b76938fd 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -49,17 +50,21 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getServiceReportLastCalls - +(serviceStatus == null ? "" : "?service_status=$serviceStatus") - ), + // todo request new api from backend to make filter work + response = await ApiManager.instance.get( + URLs.getServiceReportLastCalls, ); + // response = await get( + // Uri.parse( + // URLs.getServiceReportLastCalls + // +(serviceStatus == null ? "" : "?service_status=$serviceStatus") + // ), + // ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _calls = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart index beb18280..a9c566e0 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,21 +49,21 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getServiceReportPriority), + response = await ApiManager.instance.get( + URLs.getServiceReportPriority, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes)); - _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List listJson = json.decode(response.body)["data"]; + _items = listJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); return response.statusCode; } catch(error) { + print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart index b1f86f54..7df11d8d 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,15 +49,14 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getServiceReportReasons), + response = await ApiManager.instance.get( + URLs.getServiceReportReasons, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _reasons = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart index 6e98367c..93209606 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,15 +49,15 @@ class ServiceReportStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await get( - Uri.parse( - host + URLs.getServiceReportStatus), + response = await ApiManager.instance.get( + URLs.getServiceReportStatus, ); + _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _status = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _status = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart index 358440a1..f385c27e 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,14 @@ class ServiceReportTypesProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - - response = await get( - Uri.parse( - host + URLs.getServiceReportTypes), + response = await ApiManager.instance.get( + URLs.getServiceReportTypes, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _types = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _types = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart index 3fa2ddb3..9e25f2eb 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart @@ -1,5 +1,6 @@ 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'; @@ -48,16 +49,14 @@ class ServiceStatusProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - - response = await get( - Uri.parse( - host + URLs.getServiceTypes), + response = await ApiManager.instance.get( + URLs.getServiceTypes, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _statuses = categoriesListJson.map((e) => Lookup.fromIntIdJson(e)).toList(); + List categoriesListJson = json.decode(response.body)["data"]; + _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); } _loading = false; diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart new file mode 100644 index 00000000..4ead90e0 --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart @@ -0,0 +1,74 @@ +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'; + +class ServiceRequestStatusProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _statuses = 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 _statuses; + List get items => _statuses; + + // 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.getServiceRequestStatus, + ); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); + + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart new file mode 100644 index 00000000..592ec4dc --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart @@ -0,0 +1,74 @@ +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'; + +class ServiceRequestedThroughProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _statuses = 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 _statuses; + List get items => _statuses; + + // 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.getServiceRequestThrough, + ); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); + + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart new file mode 100644 index 00000000..bcc01b4a --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart @@ -0,0 +1,74 @@ +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'; + +class ServiceRequestTypeProvider extends ChangeNotifier{ + + //reset provider data + void reset(){ + _statuses = 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 _statuses; + List get items => _statuses; + + // 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.getServiceRequestTypes, + ); + _stateCode = response.statusCode; + if(response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); + + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch(error) { + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + + } + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 843746c9..55788923 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -1,5 +1,7 @@ import 'dart:convert'; +import 'package:fluttertoast/fluttertoast.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/user.dart'; import 'package:flutter/material.dart'; @@ -48,22 +50,21 @@ class UserProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await post( - Uri.parse( - host+URLs.login), - body: await user.toLoginJson(), + response = await ApiManager.instance.post( + URLs.login, + body: await user.toLoginJson(), ); _loading = false; if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); - + _user = User.fromJson(jsonDecode(response.body)); return response.statusCode; } notifyListeners(); return response.statusCode; } catch(error) { + print(error); _loading = false; notifyListeners(); return -1; @@ -86,10 +87,9 @@ class UserProvider extends ChangeNotifier{ notifyListeners(); Response response; try{ - response = await post( - Uri.parse( - host+URLs.register), - body: await user.toRegisterJson() + response = await ApiManager.instance.post( + URLs.register, + body: await user.toLoginJson(), ); } catch(error) { _loading = false; @@ -134,10 +134,9 @@ class UserProvider extends ChangeNotifier{ if(user.phoneNumber != _user.phoneNumber) jsonObject["phone"] = user.phoneNumber; try{ - response = await post( - Uri.parse( - host+URLs.updateProfile), - body: jsonObject + response = response = await ApiManager.instance.post( + URLs.login, + body: jsonObject, ); } catch(error) { _loading = false; diff --git a/lib/main.dart b/lib/main.dart index 0be3e414..f21c35b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,14 +7,19 @@ 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/employee/employee_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'; +import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_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/status_drop_down/gas_refill/gas_types_provider.dart'; 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_priority_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/login.dart'; import 'package:test_sa/views/pages/register.dart'; @@ -80,16 +85,21 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => ServiceStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceReportLastCallsProvider()), ChangeNotifierProvider(create: (_) => GasCylinderSizesProvider()), + ChangeNotifierProvider(create: (_) => GasCylinderTypesProvider()), ChangeNotifierProvider(create: (_) => GasStatusProvider()), ChangeNotifierProvider(create: (_) => GasTypesProvider()), ChangeNotifierProvider(create: (_) => GasRefillProvider()), ChangeNotifierProvider(create: (_) => DeviceTransferProvider()), - ChangeNotifierProvider(create: (_) => EmployeesProvider()), + ChangeNotifierProvider(create: (_) => AssignedToProvider()), ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()), ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()), ChangeNotifierProvider(create: (_) => PentryStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestPriorityProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestDefectTypesProvider()), + ChangeNotifierProvider(create: (_) => ServiceRequestTypeProvider()), + ChangeNotifierProvider(create: (_) => ServiceRequestedThroughProvider()), + ChangeNotifierProvider(create: (_) => ServiceRequestStatusProvider()), + ChangeNotifierProvider(create: (_) => EngineersProvider()), ], child: GestureDetector( onTap: () { diff --git a/lib/models/department.dart b/lib/models/department.dart index 27df7b06..4dfe4cd0 100644 --- a/lib/models/department.dart +++ b/lib/models/department.dart @@ -1,5 +1,5 @@ class Department{ - String id; + int id; String name; Department({ @@ -9,8 +9,8 @@ class Department{ factory Department.fromJson(Map parsedJson){ return Department( - id: parsedJson["nid"] ?? parsedJson["id"], - name: parsedJson["dept_name"] ?? parsedJson["value"], + id: parsedJson["id"], + name: parsedJson["name"], ); } factory Department.fromDepartment(Department department){ diff --git a/lib/models/device/device.dart b/lib/models/device/device.dart index b84b8715..cf6eed07 100644 --- a/lib/models/device/device.dart +++ b/lib/models/device/device.dart @@ -1,5 +1,5 @@ class Device{ - String id; + int id; String serialNumber; String number; String brand; @@ -27,11 +27,13 @@ class Device{ factory Device.fromJson(Map parsedJson){ return Device( - id: parsedJson["nid"] ?? parsedJson["id"], - serialNumber: parsedJson["sn"] ?? parsedJson["value"], - number: parsedJson["asset_no"], - brand: parsedJson["brand"].toString(), - model: parsedJson["model"].toString(), + id: parsedJson["id"], + serialNumber: parsedJson["assetSerialNo"], + number: parsedJson["assetNumber"], + brand: parsedJson["modelDefinition"] == null ? "" : + parsedJson["modelDefinition"]["manufacturerName"], + model: parsedJson["modelDefinition"] == null ? "" : + parsedJson["modelDefinition"]["modelName"], productionDate: getDateFromString(parsedJson["production_date"]), supplyDate: getDateFromString(parsedJson["supply_date "]), installDate: getDateFromString(parsedJson["install_date "]), diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index 27379344..d2e18572 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -1,4 +1,5 @@ import 'package:http/http.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; @@ -6,7 +7,7 @@ import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; class DeviceTransfer{ - String id; + int id; String userId; String title; Device device; @@ -41,13 +42,60 @@ class DeviceTransfer{ } factory DeviceTransfer.fromJson(Map parsedJson){ + print(parsedJson["id"],); + print(URLs.getFileUrl(parsedJson["senderAttachmentName"]),); + print(URLs.getFileUrl(parsedJson["receiverAttachmentName"]),); return DeviceTransfer( id: parsedJson["id"], - title: parsedJson["title"], + title: parsedJson["transferCode"], userId: parsedJson["uid"], - device: Device.fromJson(parsedJson["eq_sn"]), - sender: DeviceTransferInfo.fromJson(parsedJson,"sender_"), - receiver: DeviceTransferInfo.fromJson(parsedJson,"receiver_"), + device: Device( + id: parsedJson["assetId"], + number: parsedJson["assetNumber"], + serialNumber: parsedJson["assetSerialNo"], + ), + sender: DeviceTransferInfo( + travelingHours: parsedJson["senderTravelingHours"], + comment: parsedJson["senderComment"], + workingHours: parsedJson["senderWorkingHours"], + userId: parsedJson["senderAssignedEmployeeId"], + userName: parsedJson["senderAssignedEmployeeName"], + client: Hospital( + id: parsedJson["senderSiteId"], + name: parsedJson["senderSiteName"] + ), + department: Department( + id: parsedJson["senderDepartmentId"], + name: parsedJson["senderDepartmentName"], + ), + // todo add segnature + signature: URLs.getFileUrl(parsedJson["senderAttachmentName"]), + status: Lookup( + id: parsedJson["senderMachineStatusId"], + name: parsedJson["senderMachineStatusName"], + ), + ), + receiver: DeviceTransferInfo( + travelingHours: parsedJson["receiverTravelingHours"], + comment: parsedJson["receiverComment"], + workingHours: parsedJson["receiverWorkingHours"], + userId: parsedJson["receiverAssignedEmployeeId"], + userName: parsedJson["receiverAssignedEmployeeName"], + client: Hospital( + id: parsedJson["destSiteId"], + name: parsedJson["destSiteName"] + ), + department: Department( + id: parsedJson["destDepartmentId"], + name: parsedJson["destDepartmentName"], + ), + // todo add segnature + signature: URLs.getFileUrl(parsedJson["receiverAttachmentName"]), + status: Lookup( + id: parsedJson["receiverMachineStatusId"], + name: parsedJson["receiverMachineStatusName"], + ), + ), ); } } diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index 3e8d0f8f..4475b085 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -11,7 +11,7 @@ class DeviceTransferInfo{ Department department; String workingHours; String travelingHours; - String name; + String userName; String signature; Lookup status; @@ -20,7 +20,7 @@ class DeviceTransferInfo{ this.comment, this.department, this.client, - this.name, + this.userName, this.travelingHours, this.workingHours, this.signature, @@ -47,7 +47,7 @@ class DeviceTransferInfo{ fromDetails(DeviceTransferInfo old,{bool withSignature = true}){ userId = old.userId; - name = old.name; + userName = old.userName; client = Hospital.fromHospital(old.client); department = Department.fromDepartment(old.department); workingHours = old.workingHours; @@ -61,13 +61,22 @@ class DeviceTransferInfo{ return DeviceTransferInfo( workingHours: parsedJson["${key}working_hours"], travelingHours: parsedJson["${key}travel_hours"], - name: parsedJson["${key}name"], + userName: parsedJson["${key}name"], signature: parsedJson["${key}image"], userId: parsedJson["${key}id"], comment: parsedJson["${key}comment"], - client: Hospital.fromJson(parsedJson["${key}client"]), - department: Department.fromJson(parsedJson["${key}department"]), - status: Lookup.fromJson(parsedJson["${key}status"]), + client: Hospital( + id: parsedJson["${key}SiteId"], + name: parsedJson["${key}SiteName"] + ), + department: Department( + id: parsedJson["${key}DepartmentId"], + name: parsedJson["${key}DepartmentName"], + ), + status: Lookup( + id: parsedJson["${key}status"], + name: parsedJson["${key}status"], + ), ); } } diff --git a/lib/models/engineer.dart b/lib/models/engineer.dart new file mode 100644 index 00000000..74916e45 --- /dev/null +++ b/lib/models/engineer.dart @@ -0,0 +1,31 @@ +class Engineer{ + String id; + String name; + + Engineer({ + this.id, + this.name, + }); + + factory Engineer.fromJson(Map parsedJson){ + return Engineer( + id: parsedJson["userId"], + name: parsedJson["userName"], + ); + } + factory Engineer.fromEngineer(Engineer department){ + return Engineer( + id: department?.id, + name: department?.name, + ); + } + + @override + bool operator == (Object other) => + identical(this, other) || other is Engineer && + id == other.id; + + + @override + int get hashCode => id.hashCode; +} \ No newline at end of file diff --git a/lib/models/gas_refill/gas_refill_details.dart b/lib/models/gas_refill/gas_refill_details.dart index f150e150..2f8d55ff 100644 --- a/lib/models/gas_refill/gas_refill_details.dart +++ b/lib/models/gas_refill/gas_refill_details.dart @@ -3,12 +3,14 @@ import 'package:test_sa/models/lookup.dart'; class GasRefillDetails{ Lookup type; Lookup cylinderSize; - int requestedQuantity; - int deliveredQuantity; + Lookup cylinderType; + double requestedQuantity; + double deliveredQuantity; GasRefillDetails({ this.type, this.cylinderSize, + this.cylinderType, this.requestedQuantity, this.deliveredQuantity, }); @@ -21,13 +23,11 @@ class GasRefillDetails{ } factory GasRefillDetails.fromJson(Map parsedJson){ return GasRefillDetails( - type: Lookup.fromJson(parsedJson["type"]), - - cylinderSize: Lookup.fromJson(parsedJson["size"]), - requestedQuantity: parsedJson["requsted_qty"] == null - ? 0 : int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0, - deliveredQuantity: parsedJson["deliverd_qty"] == null - ? 0 : int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0, + type: Lookup.fromJson(parsedJson["gasType"]), + cylinderSize: Lookup.fromJson(parsedJson["cylinderSize"]), + cylinderType: Lookup.fromJson(parsedJson["cylinderType"]), + requestedQuantity: parsedJson["requestedQty"], + deliveredQuantity: parsedJson["deliverdQty"], ); } @@ -35,6 +35,7 @@ class GasRefillDetails{ return GasRefillDetails( type: Lookup.fromStatus(details.type), cylinderSize:Lookup.fromStatus(details.cylinderSize), + cylinderType:Lookup.fromStatus(details.cylinderType), requestedQuantity: details.requestedQuantity, deliveredQuantity: details.deliveredQuantity, ); diff --git a/lib/models/gas_refill/gas_refill_model.dart b/lib/models/gas_refill/gas_refill_model.dart index 28773fac..ae3331fb 100644 --- a/lib/models/gas_refill/gas_refill_model.dart +++ b/lib/models/gas_refill/gas_refill_model.dart @@ -2,8 +2,8 @@ import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/lookup.dart'; class GasRefillModel{ - String id; - String userId; + int id; + //String userId; String clientName; String title; Lookup status; @@ -11,7 +11,7 @@ class GasRefillModel{ GasRefillModel({ this.id, - this.userId, + //this.userId, this.clientName, this.title, this.status, @@ -27,7 +27,7 @@ class GasRefillModel{ fromGasRefillModel(GasRefillModel model){ id = model.id; - userId = model.userId; + //userId = model.userId; clientName = model.clientName; title = model.title; status = Lookup.fromStatus(model.status); @@ -36,15 +36,16 @@ class GasRefillModel{ factory GasRefillModel.fromJson(Map parsedJson){ List details = []; - if(parsedJson["details"] != null){ - List list = parsedJson["details"]; + if(parsedJson["gazRefillDetails"] != null){ + List list = parsedJson["gazRefillDetails"]; details = list.map((e) => GasRefillDetails.fromJson(e)).toList(); } return GasRefillModel( id: parsedJson["id"], - userId: parsedJson["uid"], - title: parsedJson["title"], - clientName: parsedJson["client"], + //userId: parsedJson["uid"], + title: parsedJson["gazRefillNo"], + clientName: parsedJson["site"] == null ? null: + parsedJson["site"]["custName"], status: Lookup.fromJson(parsedJson["status"]), details: details, ); diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index 34e2e3a9..432b1748 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -1,5 +1,5 @@ class Hospital{ - String id; + int id; String name; Hospital({ @@ -9,8 +9,8 @@ class Hospital{ factory Hospital.fromJson(Map parsedJson){ return Hospital( - id: parsedJson["nid"] ?? parsedJson["id"], - name: parsedJson["client_name"] ?? parsedJson["value"], + id: parsedJson["id"], + name: parsedJson["custName"], ); } diff --git a/lib/models/lookup.dart b/lib/models/lookup.dart index a52a1698..dd0ba990 100644 --- a/lib/models/lookup.dart +++ b/lib/models/lookup.dart @@ -1,46 +1,66 @@ class Lookup{ - final String label; - final String key; + //old name label + final String name; + // old name key + final int value; final int id; const Lookup({ - this.label, - this.key, + this.name, + this.value, this.id, }); @override bool operator == (Object other) => identical(this, other) || other is Lookup && - key == other.key && - id == other.id; + ((value != null && value == other.value) + || ( id != null && id == other.id )) ; @override - int get hashCode => id.hashCode; + int get hashCode => id?.hashCode ?? value?.hashCode; + + toMap(){ + return { + "id": id, + "name": name, + "value": value + }; + } factory Lookup.fromStatus(Lookup old){ + if(old == null) return null; return Lookup( - label: old.label, + name: old.name, id: old.id, - key: old.key, + value: old.value, ); } factory Lookup.fromJson(Map parsedJson){ - if(parsedJson["id"] == null && parsedJson["uid"] == null) return null; + if(parsedJson == null) return null; return Lookup( - label: parsedJson["value"], - id: parsedJson["id"] is int - ? parsedJson["id"] - : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]), + name: parsedJson["name"], + id: parsedJson["id"], + value: parsedJson["value"] ?? parsedJson["id"], ); } + // factory Lookup.fromJson(Map parsedJson){ + // if(parsedJson["id"] == null && parsedJson["uid"] == null) return null; + // return Lookup( + // name: parsedJson["value"], + // id: parsedJson["id"] is int + // ? parsedJson["id"] + // : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]), + // ); + // } + factory Lookup.fromIntIdJson(Map parsedJson){ return Lookup( - label: parsedJson["value"], + name: parsedJson["value"], id: parsedJson["id"], ); } diff --git a/lib/models/pantry/calibration_tools.dart b/lib/models/pantry/calibration_tools.dart index 2c70c6d2..9e006eac 100644 --- a/lib/models/pantry/calibration_tools.dart +++ b/lib/models/pantry/calibration_tools.dart @@ -1,26 +1,40 @@ import 'package:test_sa/models/lookup.dart'; class CalibrationTool{ + int id; Lookup assetsNumber; DateTime dataOfTesting; CalibrationTool({ + this.id, this.assetsNumber, this.dataOfTesting, }); - Map toMap() { + Map toMap(int visitId) { return { - if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(), - if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(), + "id":id, + "visitId": visitId, + if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(), + if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(), }; } factory CalibrationTool.fromMap(Map map) { return CalibrationTool( - assetsNumber: Lookup.fromJson(map['assetsSN']), - dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null : - DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000), + assetsNumber: Lookup(id: map["assetId"],name: map['assetSerialNo']), + dataOfTesting: DateTime.tryParse(map['calibrationDateOfTesters'] ?? ""), + ); + } + + CalibrationTool copyWith({ + Lookup assetsNumber, + DateTime dataOfTesting, + }) { + return CalibrationTool( + id: id, + assetsNumber: assetsNumber ?? this.assetsNumber, + dataOfTesting: dataOfTesting ?? this.dataOfTesting, ); } } \ No newline at end of file diff --git a/lib/models/pantry/lookups/contact_person.dart b/lib/models/pantry/lookups/contact_person.dart index 5231712c..156a2086 100644 --- a/lib/models/pantry/lookups/contact_person.dart +++ b/lib/models/pantry/lookups/contact_person.dart @@ -4,7 +4,7 @@ class ContactTitle extends Lookup { ContactTitle({ int id, String label - }):super(id: id,label: label); + }):super(id: id,name: label); factory ContactTitle.fromMap(Map parsedJson){ return ContactTitle( diff --git a/lib/models/pantry/lookups/contact_title.dart b/lib/models/pantry/lookups/contact_title.dart index 5231712c..156a2086 100644 --- a/lib/models/pantry/lookups/contact_title.dart +++ b/lib/models/pantry/lookups/contact_title.dart @@ -4,7 +4,7 @@ class ContactTitle extends Lookup { ContactTitle({ int id, String label - }):super(id: id,label: label); + }):super(id: id,name: label); factory ContactTitle.fromMap(Map parsedJson){ return ContactTitle( diff --git a/lib/models/pantry/pentry.dart b/lib/models/pantry/pentry.dart index cee31181..e624f9e6 100644 --- a/lib/models/pantry/pentry.dart +++ b/lib/models/pantry/pentry.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; +import 'dart:typed_data'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; @@ -13,6 +14,7 @@ class Pentry{ Lookup status; TimerModel timer; DateTime actualVisitDate; + DateTime expectedVisitDate; String travelingHours; String image; File imageFile; @@ -20,6 +22,8 @@ class Pentry{ List ppmCheckLists; List calibrationTools; List pmKits; + String signature; + Uint8List localSignature; Pentry({ this.travelingHours, @@ -27,16 +31,20 @@ class Pentry{ this.status, this.ppmVisitStatus, this.actualVisitDate, + this.expectedVisitDate, this.image, this.imageFile, // this.contacts, this.ppmCheckLists, this.calibrationTools, this.pmKits, + this.signature, + this.localSignature }); bool validate(){ if(actualVisitDate == null) return false; + if(expectedVisitDate == null) return false; if(timer == null && timer.endAt != null) return false; if(ppmVisitStatus == null) return false; //if(status == null) return false; @@ -44,18 +52,29 @@ class Pentry{ return true; } - Map toMap() { - Map map = {}; - map["visit_status"] = ppmVisitStatus?.id.toString(); - if(status != null) map["pentry_status"] = status?.id.toString(); - if(travelingHours != null) map["traveling_hours"] = travelingHours; - if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); - map["actual_date"] = (actualVisitDate.millisecondsSinceEpoch / 1000).toStringAsFixed(0); + + + Map toMap(int visitId) { + Map map = {}; + map["visitStatusId"] = ppmVisitStatus?.id.toString(); + if(status != null) map["visitStatusId"] = status?.id.toString(); + if(travelingHours != null) map["travelingHours"] = travelingHours; + //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); + map["actualDate"] = actualVisitDate.toIso8601String(); + map["expectedDate"] = expectedVisitDate.toIso8601String(); if(timer != null){ - map["start_date"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); - map["end_date"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); - map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); + map["startDate"] = timer.startAt.toIso8601String(); + map["endDate"] = timer.endAt?.toIso8601String() ?? DateTime.now().toIso8601String(); + map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); + } + if(imageFile !=null){ + map["vAttachments"]=[ + { + "attachmentName":(imageFile.path.split("/").last+base64Encode(imageFile.readAsBytesSync())) + } + ]; } + // if(contacts?.isNotEmpty == true) { // for(int i = 0;i e.toMap()).toList()); - map["calibrationTools"] = jsonEncode(calibrationTools.map((e) => e.toMap()).toList()); - map["pmKits"] = jsonEncode(pmKits.map((e) => e.toMap()).toList()); + map["vChecklists"] = ppmCheckLists.map((e) => e.toMap(visitId)).toList(); + map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList(); + map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList(); + map["signature"] = signature; return map; } @@ -78,44 +98,71 @@ class Pentry{ // } List pmKits = []; - if(map['pmKits'] != null){ - pmKits =(map['pmKits'] as List) + if(map['vKits'] != null){ + pmKits =(map['vKits'] as List) .map((e) => PMKit.fromMap(e as Map)) .toList(); } List ppmCheckLists = []; - if(map['ppmCheckLists'] != null){ - ppmCheckLists =(map['ppmCheckLists'] as List) + if(map['vChecklists'] != null){ + ppmCheckLists =(map['vChecklists'] as List) .map((e) => PPMCheckList.fromMap(e as Map)) .toList(); } List calibrationTools = []; - if(map['calibrationTools'] != null){ - calibrationTools =(map['calibrationTools'] as List) + if(map['vCalibrationTools'] != null){ + calibrationTools =(map['vCalibrationTools'] as List) .map((e) => CalibrationTool.fromMap(e as Map)) .toList(); } return Pentry( - status: Lookup.fromJson(map["pentry_status"]), - ppmVisitStatus: Lookup.fromJson(map["visit_status"]), - actualVisitDate: getDate(map["actual_date"]), - travelingHours: map["traveling_hours"], + status: Lookup(id: map["taskStatusId"],name: map["taskStatusName"]), + ppmVisitStatus: Lookup(id: map["visitStatusId"],name: map["visitStatusName"]), + actualVisitDate: DateTime.tryParse(map["actualDate"] ?? ""), + expectedVisitDate: DateTime.tryParse(map["expectedDate"] ?? ""), + travelingHours: map["travelingHours"], timer: TimerModel( - startAt: getDate(map["start_date"]), - endAt: getDate(map["end_date"]), - durationInSecond: (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 *60 + startAt: DateTime.tryParse(map["startDate"] ?? ""), + endAt: DateTime.tryParse(map["endDate"] ?? ""), + durationInSecond: (int.tryParse(map["workingHours"] ?? "") ?? 0) * 60 *60 ), // contacts: contacts, ppmCheckLists: ppmCheckLists, calibrationTools: calibrationTools, pmKits: pmKits, + signature: map["signature"], ); } - static getDate(String date){ - return date == null || date.isEmpty - ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); + Pentry copyWith({ + Lookup ppmVisitStatus, + Lookup status, + TimerModel timer, + DateTime actualVisitDate, + DateTime expectedVisitDate, + String travelingHours, + String image, + File imageFile, + List ppmCheckLists, + List calibrationTools, + List pmKits, + String signature + }) { + return Pentry( + ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus, + status: status ?? this.status, + timer: timer ?? this.timer, + actualVisitDate: actualVisitDate ?? this.actualVisitDate, + expectedVisitDate: expectedVisitDate ?? this.expectedVisitDate, + travelingHours: travelingHours ?? this.travelingHours, + image: image ?? this.image, + imageFile: imageFile ?? this.imageFile, + ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(), + calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(), + pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(), + signature: signature ?? this.signature + ); } } \ No newline at end of file diff --git a/lib/models/pantry/pm_kit.dart b/lib/models/pantry/pm_kit.dart index 0a008e5f..ddb75a40 100644 --- a/lib/models/pantry/pm_kit.dart +++ b/lib/models/pantry/pm_kit.dart @@ -1,6 +1,7 @@ import 'package:test_sa/models/lookup.dart'; class PMKit{ + int id; Lookup itemCode; String itemName; String preparationTimeFrame; @@ -10,6 +11,7 @@ class PMKit{ String quantityReserved; PMKit({ + this.id, this.itemCode, this.itemName, this.preparationTimeFrame, @@ -19,21 +21,24 @@ class PMKit{ this.quantityReserved }); - Map toMap() { + Map toMap(int visitId) { return { - if(itemCode != null) 'itemCode': (itemCode?.id).toString(), - if(itemName != null) 'itemName': itemName, - if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, - if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, - if(availability != null) 'availability': availability, - if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, - if(quantityReserved != null) 'quantityReserved': quantityReserved, + "id":id, + "visitId": visitId, + if(itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), + // if(itemName != null) 'itemName': itemName, + // if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, + // if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, + // if(availability != null) 'availability': availability, + // if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, + // if(quantityReserved != null) 'quantityReserved': quantityReserved, }; } factory PMKit.fromMap(Map map) { return PMKit( - itemCode: Lookup.fromJson(map['itemCode']), + id: map['id'], + //itemCode: Lookup.fromJson(map['itemCode']), itemName: map['itemName'] as String, preparationTimeFrame: map['preparationTimeFrame'] as String, kitFrequencyDemand: map['kitFrequencyDemand'] as String, @@ -42,4 +47,26 @@ class PMKit{ quantityReserved: map['quantityReserved'] as String, ); } + + PMKit copyWith({ + int id, + Lookup itemCode, + String itemName, + String preparationTimeFrame, + String kitFrequencyDemand, + String availability, + String quantityNeeded, + String quantityReserved, + }) { + return PMKit( + id: id ?? this.id, + itemCode: itemCode ?? this.itemCode, + itemName: itemName ?? this.itemName, + preparationTimeFrame: preparationTimeFrame ?? this.preparationTimeFrame, + kitFrequencyDemand: kitFrequencyDemand ?? this.kitFrequencyDemand, + availability: availability ?? this.availability, + quantityNeeded: quantityNeeded ?? this.quantityNeeded, + quantityReserved: quantityReserved ?? this.quantityReserved, + ); + } } \ No newline at end of file diff --git a/lib/models/pantry/ppm_check_list.dart b/lib/models/pantry/ppm_check_list.dart index 8f1a14d7..cbf750bc 100644 --- a/lib/models/pantry/ppm_check_list.dart +++ b/lib/models/pantry/ppm_check_list.dart @@ -1,33 +1,54 @@ import 'package:test_sa/models/lookup.dart'; class PPMCheckList{ + int id; Lookup status; String title; String comment; String measuredValue; PPMCheckList({ + this.id, this.title, this.status, this.comment, this.measuredValue, }); - Map toMap() { + Map toMap(int visitId) { return { - if(status != null) 'status': status?.id.toString(), - if(title != null) 'title': title, - if(comment != null) 'comment': comment, + 'id': id, + "visitId": visitId, + if(status != null) 'taskStatusId': status?.id.toString(), + if(title != null) 'task': title, + if(comment != null) 'taskComment': comment, if(measuredValue != null) 'measuredValue': measuredValue, }; } factory PPMCheckList.fromMap(Map map) { return PPMCheckList( - status: Lookup.fromJson(map['status']), - title: map['title'] as String, - comment: map['comment'] as String, + id: map['id'] as int, + status: Lookup(id: map["taskStatusId"],name: map["taskStatusName"]), + title: map['task'] as String, + comment: map['taskComment'] as String, measuredValue: map['measuredValue'] as String, ); } + + PPMCheckList copyWith({ + int id, + Lookup status, + String title, + String comment, + String measuredValue, + }) { + return PPMCheckList( + id: id ?? this.id, + status: status ?? this.status, + title: title ?? this.title, + comment: comment ?? this.comment, + measuredValue: measuredValue ?? this.measuredValue, + ); + } } \ No newline at end of file diff --git a/lib/models/part.dart b/lib/models/part.dart index d75bb493..5589d9b0 100644 --- a/lib/models/part.dart +++ b/lib/models/part.dart @@ -1,5 +1,5 @@ class Part{ - String id; + int id; String code; String name; int quantity; @@ -13,11 +13,11 @@ class Part{ factory Part.fromJson(Map parsedJson){ return Part( - id: parsedJson["nid"] ?? parsedJson["id"], - code: parsedJson["part_code"] ?? parsedJson["name"], - name: parsedJson["part_name"], - quantity: parsedJson["qty"] == null - ? 1 : int.tryParse(parsedJson["qty"].toString()) ?? 1, + id: parsedJson["id"], + code: parsedJson["partNo"], + name: parsedJson["partName"], + quantity: parsedJson["partQuantity"] == null + ? 1 : int.tryParse(parsedJson["partQuantity"].toString()) ?? 1, ); } } \ No newline at end of file diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 33bb2fd2..01b75bec 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -52,12 +52,12 @@ class ServiceReport { this.timer, }); - Map toMap(){ + Map toMap(){ Map _map = {}; if(id != null) _map["id"] = id; if(visitDate != null) _map["visit_date"] = (visitDate.millisecondsSinceEpoch ~/ 1000).toString(); if(serviceType != null) _map["service_type"] = serviceType.id.toString(); - if(status != null) _map["status"] = status.id.toString(); + if(status != null) _map["status"] = status.toMap(); if(type != null) _map["service_report_type"] = type.id.toString(); if(faultDescription != null && faultDescription.isNotEmpty) _map["fault_description"] = faultDescription; //if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours; @@ -71,18 +71,18 @@ class ServiceReport { if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; if(parts != null && parts.isNotEmpty){ Map _partsMap = {}; - parts.forEach((part) { - if(part.id.isNotEmpty) - _partsMap[part.id] = part.quantity; - }); + // parts.forEach((part) { + // if(part.id == null) + // _partsMap[part.id] = part.quantity; + // }); _map["parts"] = json.encode(_partsMap); } - if(device?.id != null && device.id != null) _map["eq_id"] = device.id; + //if(device?.id != null && device.id != null) _map["eq_id"] = device.id; if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); - if(reason != null) _map["reasons"] = reason.id.toString(); + if(reason != null) _map["reasons"] = reason.toMap(); if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; - if(callLastSituation != null) _map["call_last_situtation"] = callLastSituation.id.toString(); + if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.id.toString(); if(image != null) _map["image"] = image; if(invoiceCode != null) _map["invoice_no"] = invoiceCode; if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; @@ -102,7 +102,8 @@ class ServiceReport { if(parts == null) return false; //if(endDate == null) return false; //if(reason == null) return false; - if((device?.id == null || device.id.isEmpty) && type?.id != 1) return false; + //todo uncoment this line + //if((device?.id == null || device.id.isEmpty) && type?.id != 1) return false; //if(quantity == null || quantity.isEmpty) return false; //if(image == null) return false; return true; diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index ae6f9370..23f178a8 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -1,3 +1,4 @@ +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import '../timer_model.dart'; @@ -6,13 +7,13 @@ class ServiceRequest{ String id; String requestCode; String deviceSerialNumber; - String deviceId; + int deviceId; String deviceArName; String deviceEnName; List devicePhotos; String maintenanceIssue; String hospitalName; - String hospitalId; + int hospitalId; String departmentName; String engineerName; String date; @@ -32,6 +33,8 @@ class ServiceRequest{ String deviceNumber; Lookup priority; Lookup defectType; + Lookup type; + Lookup requestedThrough; ServiceRequest({ this.id, @@ -63,42 +66,48 @@ class ServiceRequest{ this.defectType, this.priority, this.deviceNumber, - + this.type, + this.requestedThrough, }); factory ServiceRequest.fromJson(Map parsedJson){ + List images = []; + if(parsedJson["attachmentsCallRequest"] is List){ + List list = parsedJson["attachmentsCallRequest"]; + images = list.map((e) => URLs.getFileUrl(e["attachmentsCallRequest"])).toList(); + } return ServiceRequest( - id: parsedJson["nid"], - requestCode: parsedJson["call_id"] ?? parsedJson["jobcode"] , - hospitalName: parsedJson["call_client"], - deviceNumber: parsedJson["device_no"], - deviceId: parsedJson["deviceid"], - audio: parsedJson["audio"] ?? "", - deviceArName: parsedJson["equipment_arabic_name"] == false - ? "No Name found" : parsedJson["equipment_arabic_name"], - deviceEnName: parsedJson["equipment_english_name"] == false - ? "No Name found" : parsedJson["equipment_english_name"], - devicePhotos: List.from(parsedJson["image"]), - deviceSerialNumber: parsedJson["call_sn"], - date: parsedJson["call_data"], - maintenanceIssue: parsedJson["call_complaint"] ?? parsedJson["complaint"], - statusLabel: parsedJson["status_value"], - statusValue: int.tryParse(parsedJson["status"]??"-1"), - departmentName: parsedJson["department_name"], - engineerName: parsedJson["employee_name"], - hospitalId: parsedJson["client"], - reportID: parsedJson["service_report_nid"] is String - ? parsedJson["service_report_nid"] - : null , - viewReport: parsedJson["service_report_nid"] is bool ? false : true, - deviceModel: parsedJson["device_model"], - engineerMobile: parsedJson["engineer_mobile"], - faultDescription: parsedJson["fault_desc"], - jobSheetNumber: parsedJson["job_sheet_number"], - visitDate: parsedJson["visit_date"], - nextVisitDate:parsedJson["next_visit_date"] == null - ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(parsedJson["next_visit_date"]) * 1000), - workPerformed: parsedJson["work_performed"], + id: parsedJson["id"].toString(), + requestCode: parsedJson["callNo"].toString(), + hospitalName: parsedJson["asset"]["site"]["custName"], + deviceNumber: parsedJson["asset"]["assetNumber"].toString(), + deviceId: parsedJson["asset"]["id"], + audio: URLs.getFileUrl(parsedJson["voiceNote"] ?? ""), + deviceArName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", + deviceEnName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", + devicePhotos: images, + deviceSerialNumber: parsedJson["asset"]["assetSerialNo"], + date: DateTime.tryParse(parsedJson["requestedDate"] ?? "").toString().split(" ").first, + maintenanceIssue: parsedJson["comments"], + statusLabel: parsedJson["status"] == null ? null : + parsedJson["status"]["name"], + statusValue: parsedJson["status"] == null ? null : + parsedJson["status"]["value"], + departmentName: parsedJson["asset"]["department"] != null ? + parsedJson["asset"]["department"]["name"] : "", + engineerName: parsedJson["assignedEmployee"] == null ? null : + parsedJson["assignedEmployee"]["name"], + hospitalId: parsedJson["asset"]["site"]["id"], + reportID: parsedJson["workOrder"]["id"].toString(), + viewReport: parsedJson["workOrder"] != null, + deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], + engineerMobile: parsedJson["assignedEmployee"] == null ? null : + parsedJson["assignedEmployee"]["phone"], + faultDescription: parsedJson["workOrder"]["faultDescription"], + jobSheetNumber: parsedJson["workOrder"]["jobSheetNumber"], + visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, + nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), + workPerformed: parsedJson["workOrder"]["workPerformed"], ); } } \ No newline at end of file diff --git a/lib/models/service_request/service_request_search.dart b/lib/models/service_request/service_request_search.dart index 257f25f5..cd2adf04 100644 --- a/lib/models/service_request/service_request_search.dart +++ b/lib/models/service_request/service_request_search.dart @@ -1,13 +1,18 @@ +import 'package:test_sa/models/hospital.dart'; +import 'package:test_sa/models/lookup.dart'; + class ServiceRequestSearch{ String deviceSerialNumber; + String deviceNumber; String deviceName; - String hospital; + Hospital hospital; String model; - int statusValue; + Lookup statusValue; ServiceRequestSearch({ this.deviceSerialNumber, + this.deviceNumber, this.statusValue, this.deviceName, this.model, @@ -16,31 +21,38 @@ class ServiceRequestSearch{ fromSearch(ServiceRequestSearch newSearch){ deviceSerialNumber = newSearch.deviceSerialNumber; + deviceNumber = newSearch.deviceNumber; statusValue = newSearch.statusValue; hospital = newSearch.hospital; model = newSearch.model; } - String toSearchString(){ - String _search = ""; + Map toMap(){ + Map search = {}; if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ - _search += "&sn_id=$deviceSerialNumber"; + search["assetSerialNumber"] = deviceSerialNumber; + } + + if(deviceNumber != null && deviceNumber.isNotEmpty){ + search["assetNo"] = deviceNumber; } if(statusValue != null){ - _search += "&status=$statusValue"; + search["status"] = statusValue.toMap(); } if(deviceName != null && deviceName.isNotEmpty){ - _search += "&equipment_en_name=$deviceName"; + search["assetName"] = deviceName; + } - if(hospital != null && hospital.isNotEmpty){ - _search += "&client=$hospital"; + if(hospital != null){ + search["site"] = hospital.name; } - if(model != null && model.isNotEmpty){ - _search += "&model=$model"; + + if(model != null){ + search["modelDefinition"] = model; } - return _search; + return search; } } \ No newline at end of file diff --git a/lib/models/user.dart b/lib/models/user.dart index b091856f..6aabf108 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -8,7 +8,6 @@ class User{ String userName; String password; String email; - String image; Hospital hospital; Department department; UsersTypes type; @@ -16,6 +15,7 @@ class User{ String whatsApp; String token; bool isActive; + DateTime tokenLife; User({ @@ -25,11 +25,11 @@ class User{ this.password = "", this.phoneNumber = "", this.hospital, - this.image, this.department, this.type, this.whatsApp, this.token, + this.tokenLife, this.isActive = false }); @@ -38,14 +38,14 @@ class User{ await FirebaseNotificationManger.getToken(); return { "username":userName, - "pass":password, + "password":password, "firebase_token": FirebaseNotificationManger?.token ?? "", }; } Map toUpdateProfileJson(){ Map jsonObject ={}; - if(department?.id != null && department.id.isNotEmpty) + if(department?.id != null) jsonObject["department"] = department.id; if(whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp; @@ -71,48 +71,52 @@ class User{ Map toJson(){ return { - "uid":id, - "name": userName, + "userID":id, + "username": userName, "email":email, "token":token, - "phone":phoneNumber, + "phoneNumber":phoneNumber, "whatsapp":whatsApp, - "client":hospital?.id, + "client_id":hospital?.id, "client_name":hospital?.name, - "department":department?.id, + "department_id":department?.id, "department_name":department?.name, - "password":password, - "picture":image, - "active":isActive ? 1 : 0, - "role": type == UsersTypes.engineer - ? "field_engineer" : "normal_user" , + //"password":password, + "tokenlife":tokenLife.toIso8601String(), + "active":isActive, + "userRoles": type == UsersTypes.engineer + ? "value: R-6" : "value: R-5" , // "token":token, pass is token }; } factory User.fromJson(Map parsedJson){ UsersTypes type; - switch(parsedJson["role"]){ - case "field_engineer": type = UsersTypes.engineer; break; - default: type = UsersTypes.normal_user; break; + if(parsedJson["userRoles"].toString().contains("value: R-4") + || parsedJson["userRoles"].toString().contains("value: R-5") + || parsedJson["userRoles"].toString().contains("value: R-7")){ + type = UsersTypes.normal_user; + } else { + type = UsersTypes.engineer; } + print(parsedJson); return User( - id: parsedJson["uid"], - userName: parsedJson["name"] ?? parsedJson["title"], - email: parsedJson["mail"] ?? parsedJson["email"], - hospital: Hospital( - id: parsedJson["client"], - name: parsedJson["client_name"] - ), + id: parsedJson["userID"], + userName: parsedJson["username"], + email: parsedJson["email"], + // hospital: Hospital( + // id: parsedJson["client_id"], + // name: parsedJson["client_name"] + // ), department: Department( - id: parsedJson["department"], + id: parsedJson["department_id"], name: parsedJson["department_name"], ), - image: parsedJson["picture"], - phoneNumber: parsedJson["phone"], - whatsApp: parsedJson["whatsapp"], + phoneNumber: parsedJson["phoneNumber"], + whatsApp: parsedJson["phoneNumber"], token: parsedJson["token"], - isActive: parsedJson["active"] == "1", + isActive: parsedJson["isAuthenticated"], + tokenLife: DateTime.tryParse(parsedJson["tokenlife"]??""), type:type ); } diff --git a/lib/models/visits/visit.dart b/lib/models/visits/visit.dart index da3a2143..7554ecd4 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,21 +1,22 @@ import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/timer_model.dart'; class Visit{ - String id; + int id; String serialNumber; String expectDate; String actualDate; - String hospitalId; + int hospitalId; String hospitalName; - String deviceId; + int deviceId; String deviceSerialNumber; String deviceArabicName; String deviceEnglishName; String employId; String employName; String modelAndBrand; - String contactStatus; + Pentry pentry; Lookup status; String assignTo; String deviceNumber; @@ -36,35 +37,41 @@ class Visit{ this.actualDate, this.status, this.modelAndBrand, - this.contactStatus, + this.pentry, this.images, this.assignTo, this.deviceNumber, }); factory Visit.fromJson(Map parsedJson){ + List images = []; + if(parsedJson["vAttachments"] is List){ + List list = parsedJson["vAttachments"]; + images = list.map((e) => e["attachmentURL"].toString()).toList(); + } return Visit( - id: parsedJson["nid"], - serialNumber: parsedJson["title"], - hospitalId: parsedJson["client"], - deviceNumber: parsedJson["device_no"], - hospitalName: parsedJson["client_name"], - deviceId: parsedJson["medical_equipment_nid"], - deviceSerialNumber: parsedJson["medical_equipment"], - deviceEnglishName: parsedJson["equipment_english_name"], - deviceArabicName: parsedJson["equipment_arabic_name"], - employId: parsedJson["assigned_employee"], - employName: parsedJson["assigned_employee_name"], - expectDate: parsedJson["expected_date"], - actualDate: parsedJson["actual_date"], - modelAndBrand: parsedJson["mode_brand"], - contactStatus: parsedJson["contactStatus"], - images: List.from(parsedJson["images"] ?? []), + id: parsedJson["id"], + serialNumber: parsedJson["visitCode"], + hospitalId: parsedJson["siteId"], + deviceNumber: parsedJson["assetNumber"], + hospitalName: parsedJson["siteName"], + deviceId: parsedJson["assetId"], + deviceSerialNumber: parsedJson["assetSerialNo"], + deviceEnglishName: parsedJson["assetName"], + deviceArabicName: parsedJson["assetName"], + employId: parsedJson["assignedToId"].toString(), + employName: parsedJson["assignedToName"], + expectDate: parsedJson["expectedDate"].toString().split("T").first, + actualDate: parsedJson["actualDate"].toString().split("T").first, + modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}", + // contactStatus: parsedJson["contactStatus"], + images: images, status: Lookup( - id: int.tryParse(parsedJson["status"] ?? "-1"), // actual value (0,1,2) - label: parsedJson["status_value"] // text value + id: parsedJson["visitStatusId"], // actual value (0,1,2) + name: parsedJson["visitStatusName"] // text value ), - assignTo: parsedJson["assigned_to"], + assignTo: parsedJson["assignedToName"], + pentry: Pentry.fromMap(parsedJson) ); } } \ No newline at end of file diff --git a/lib/models/visits/visits_group.dart b/lib/models/visits/visits_group.dart index abe6dfc0..3f47b8cf 100644 --- a/lib/models/visits/visits_group.dart +++ b/lib/models/visits/visits_group.dart @@ -1,43 +1,47 @@ +import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/visits/visit.dart'; class VisitsGroup{ - String userId; - String workingHours; - String travelingHours; - String jobSheetNumber; - String image; - Lookup status; - Lookup taskStatus; - DateTime date; + // String userId; + // String workingHours; + // String travelingHours; + // String jobSheetNumber; + // String image; + // Lookup status; + // Lookup taskStatus; + // DateTime date; + Engineer engineer; List visits; VisitsGroup({ - this.userId, - this.status, - this.date, - this.jobSheetNumber, - this.travelingHours, - this.workingHours, - this.visits, - this.image, - this.taskStatus, + // this.userId, + // this.status, + // this.date, + // this.jobSheetNumber, + // this.travelingHours, + // this.workingHours, + this.visits, + this.engineer, + // this.image, + // this.taskStatus, }); - Map toJson(){ - Map jsonObject = {}; - jsonObject["nids"] = visits.map((e) => e.id).toList().join(','); - if(status != null) jsonObject["status"] = status.id.toString(); - if(date != null) jsonObject["date"] = date.toString().split(" ").first; - if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) - jsonObject["job_sheet_no"] = jobSheetNumber; - if(travelingHours != null && travelingHours.isNotEmpty) - jsonObject["traveling_hours"] = travelingHours; - if(workingHours != null && workingHours.isNotEmpty) - jsonObject["working_hours"] = workingHours; - if(image != null) jsonObject["image"] = image; - if(taskStatus != null) jsonObject["task_status"] = taskStatus.id.toString(); + Map toJson(){ + Map jsonObject = {}; + jsonObject["ids"] = visits.map((e) => e.id).toList(); + jsonObject["assignedEmployeeId"] = engineer?.id; + // if(status != null) jsonObject["taskStatusId"] = status.id.toString(); + // if(date != null) jsonObject["actualDate"] = date.toIso8601String(); + // if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) + // jsonObject["jobSheetNo"] = jobSheetNumber; + // if(travelingHours != null && travelingHours.isNotEmpty) + // jsonObject["travelingHours"] = travelingHours; + // if(workingHours != null && workingHours.isNotEmpty) + // jsonObject["workingHours"] = workingHours; + // if(image != null) jsonObject["image"] = image; + // if(taskStatus != null) jsonObject["task_status"] = taskStatus.id.toString(); return jsonObject; } diff --git a/lib/models/visits/visits_search.dart b/lib/models/visits/visits_search.dart index 7cfd4ceb..737277f8 100644 --- a/lib/models/visits/visits_search.dart +++ b/lib/models/visits/visits_search.dart @@ -1,20 +1,23 @@ +import 'package:test_sa/models/hospital.dart'; +import 'package:test_sa/models/lookup.dart'; + class VisitsSearch{ String deviceSerialNumber; - String hospitalName; + Hospital hospital; String brand; - String model; - String contactStatus; + Lookup model; + Lookup contactStatus; DateTime expectedDateFrom; DateTime expectedDateTo; DateTime actualDateFrom; DateTime actualDateTo; - int statusValue; + Lookup statusValue; VisitsSearch({ this.deviceSerialNumber, this.statusValue, this.brand, - this.hospitalName, + this.hospital, this.actualDateTo, this.actualDateFrom, this.model, @@ -26,7 +29,7 @@ class VisitsSearch{ fromSearch(VisitsSearch newSearch){ deviceSerialNumber = newSearch.deviceSerialNumber; brand = newSearch.brand; - hospitalName = newSearch.hospitalName; + hospital = newSearch.hospital; actualDateTo = newSearch.actualDateTo; actualDateFrom = newSearch.actualDateFrom; model = newSearch.model; @@ -36,46 +39,47 @@ class VisitsSearch{ statusValue = newSearch.statusValue; } - String toSearchString(){ - String _search = ""; + Map toMap(){ + Map _search = {}; if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ - _search += "&sn_id=$deviceSerialNumber"; + _search["assetId"]= deviceSerialNumber; } - if(hospitalName != null && hospitalName.isNotEmpty){ - _search += "&client=$hospitalName"; + if(hospital != null){ + _search["siteId"]= hospital.id; } if(brand != null && brand.isNotEmpty){ - _search += "&brand=$brand"; + // todo get new key + _search[""]= brand; } - if(model != null && model.isNotEmpty){ - _search += "&model=$model"; + if(model != null){ + _search["modelId"]= model.id; } if(expectedDateFrom != null){ - _search += "&expected_date_from=${expectedDateFrom.millisecondsSinceEpoch ~/ 1000}"; + _search["expectedDateFrom"]= expectedDateFrom.toIso8601String(); } if(expectedDateTo != null){ - _search += "&expected_date_to=${expectedDateTo.millisecondsSinceEpoch~/1000}"; + _search["expectedDateTo"]= expectedDateTo.toIso8601String(); } if(actualDateFrom != null){ - _search += "&actual_date_from=${actualDateFrom.millisecondsSinceEpoch ~/ 1000}"; + _search["actualDateFrom"]= actualDateFrom.toIso8601String(); } if(actualDateTo != null){ - _search += "&actual_date_to=${actualDateTo.millisecondsSinceEpoch~/1000}"; + _search["actualDateTo"]= actualDateTo.toIso8601String(); } if(statusValue != null){ - _search += "&status=$statusValue"; + _search["visitStatusId"]= statusValue.id; } if(contactStatus != null){ - _search += "&assigned_to=$contactStatus"; + _search["assignedToId"]= contactStatus.id; } return _search; } diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 7b36058c..6975304b 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -108,7 +108,7 @@ class _DeviceTransferDetailsState extends State { style: Theme.of(context).textTheme.headline6 ), ), - if(_isSender) + if(_isSender || true) ASmallButton( text: _subtitle.edit, onPressed: (){ @@ -134,7 +134,7 @@ class _DeviceTransferDetailsState extends State { style: Theme.of(context).textTheme.headline6 ), ), - if(_isReceiver) + if(_isReceiver || true) ASmallButton( text: _subtitle.edit, onPressed: (){ diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index aa5562b9..30c9310a 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.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'; @@ -33,7 +33,7 @@ class _RequestDeviceTransferState extends State { SettingProvider _settingProvider; DeviceTransferProvider _deviceTransferProvider; final TextEditingController _requestedQuantityController = TextEditingController(); - final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo()); + final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo(),sender: DeviceTransferInfo()); final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -57,7 +57,7 @@ class _RequestDeviceTransferState extends State { _isLoading = true; setState(() {}); - + _formModel.sender.client.id = _userProvider.user.hospital?.id; int status = await _deviceTransferProvider.createRequest( user: _userProvider.user, host: _settingProvider.host, diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 2b407a48..7604e2ce 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -4,7 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.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'; @@ -69,22 +69,12 @@ class _UpdateDeviceTransferState extends State { _validate = false; Navigator.of(context).pop(); Navigator.of(context).pop(); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); } } @override void setState(VoidCallback fn){ - if(mounted) super.setState(() {}); + if(!mounted) super.setState(() {}); } @override @@ -207,7 +197,9 @@ class _UpdateDeviceTransferState extends State { newSignature: _signature, onSaved: (signature){ _signature = signature; + if(signature == null || signature.isEmpty) return; _formModel.signature = base64Encode(signature); + }, ), Padding( diff --git a/lib/views/pages/login.dart b/lib/views/pages/login.dart index ad8554cd..35e0570c 100644 --- a/lib/views/pages/login.dart +++ b/lib/views/pages/login.dart @@ -1,5 +1,5 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -119,13 +119,16 @@ class _LoginState extends State { user: _user, host: _settingProvider.host, ); - if(status >= 200 && status < 300){ + if(status >= 200 && status < 300 ){ _settingProvider.setUser(_userProvider.user); - if(_userProvider.user.isActive) - Navigator.of(context).pushNamed(LandPage.id); - else - Fluttertoast.showToast(msg: _subtitle.activationAlert); + Navigator.of(context).pushNamed(LandPage.id); + // if(_userProvider.user.isActive) + // Navigator.of(context).pushNamed(LandPage.id); + // else + // Fluttertoast.showToast(msg: _subtitle.activationAlert); }else{ + if(status >= 400 && status < 500) return; + String errorMessage = status == 400 ? _subtitle.wrongEmailOrPassword : HttpStatusManger.getStatusMessage( diff --git a/lib/views/pages/register.dart b/lib/views/pages/register.dart index 016fedf1..fe347039 100644 --- a/lib/views/pages/register.dart +++ b/lib/views/pages/register.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; diff --git a/lib/views/pages/splash_screen.dart b/lib/views/pages/splash_screen.dart index aea53176..9892b126 100644 --- a/lib/views/pages/splash_screen.dart +++ b/lib/views/pages/splash_screen.dart @@ -27,9 +27,12 @@ class _SplashScreenState extends State { UserProvider _userProvider; _goToUserScreen(User user){ - _userProvider.user = user; - // Navigator.of(context).pushNamed(Login.id); - Navigator.of(context).pushNamed(LandPage.id); + print(user.toJson()); + if(user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())){ + _userProvider.user = user; + // Navigator.of(context).pushNamed(Login.id); + Navigator.of(context).pushNamed(LandPage.id); + } } @override 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 33dd686a..8b053b6b 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -177,7 +177,8 @@ class _GasRefillDetailsState extends State { textScaleFactor: AppStyle.getScaleFactor(context), ), ), - StatusLabel(label: _model.status.label, + if(_model.status?.id != null) + StatusLabel(label: _model.status.name, color: AColors.getGasStatusColor(_model.status.id) ), ], diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 5f41ec48..0f4f3c41 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -1,19 +1,23 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_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'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; 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/gas_refill/gas_refill_create_details_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/gas_refill/gas_cylinder_size.dart'; +import 'package:test_sa/views/widgets/status/gas_refill/gas_cylinder_type.dart'; +import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/status/gas_refill/gas_type.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; @@ -153,19 +157,21 @@ class _RequestGasRefillState extends State { // _formModel.title = value; // }, // ), - // // const SizedBox(height: 8,), - // ASubTitle(_subtitle.status), - // if(_validate && _formModel.status == null) - // ASubTitle(_subtitle.requiredWord,color: Colors.red,), - // const SizedBox(height: 4,), - // GasStatusMenu( - // initialValue: _formModel.status, - // onSelect: (status){ - // _formModel.status = status; - // }, - // ), // const SizedBox(height: 8,), - // Divider(color: Theme.of(context).colorScheme.primary,), + ASubTitle(_subtitle.status), + if(_validate && _formModel.status == null) + ASubTitle(_subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + GasStatusMenu( + initialValue: _formModel.status ?? const Lookup( + value: 1 + ), + onSelect: (status){ + _formModel.status = status; + }, + ), + const SizedBox(height: 8,), + Divider(color: Theme.of(context).colorScheme.primary,), const SizedBox(height: 4,), const ASubTitle("Type"), if(_validate && _currentDetails.type == null) @@ -178,17 +184,28 @@ class _RequestGasRefillState extends State { }, ), - // const SizedBox(height: 8,), - // const ASubTitle("Cylinder Size"), - // if(_validate && _currentDetails.cylinderSize == null) - // ASubTitle(_subtitle.requiredWord,color: Colors.red,), - // const SizedBox(height: 4,), - // GasCylinderSizeMenu( - // initialValue: _currentDetails.cylinderSize, - // onSelect: (status){ - // _currentDetails.cylinderSize = status; - // }, - // ), + const SizedBox(height: 8,), + const ASubTitle("Cylinder Size"), + if(_validate && _currentDetails.cylinderSize == null) + ASubTitle(_subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + GasCylinderSizeMenu( + initialValue: _currentDetails.cylinderSize, + onSelect: (status){ + _currentDetails.cylinderSize = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Cylinder Type"), + if(_validate && _currentDetails.cylinderSize == null) + ASubTitle(_subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + GasCylinderTypesMenu( + initialValue: _currentDetails.cylinderType, + onSelect: (status){ + _currentDetails.cylinderType = status; + }, + ), const SizedBox(height: 8,), ASubTitle(_subtitle.quantity), if(_validate && _currentDetails.requestedQuantity == null) @@ -204,7 +221,7 @@ class _RequestGasRefillState extends State { ? null : "allow numbers only", textInputType: TextInputType.number, onSaved: (value){ - _currentDetails.requestedQuantity = int.tryParse(value); + _currentDetails.requestedQuantity = double.tryParse(value); }, ), const SizedBox(height: 8,), diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index d173219d..5bf91817 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -366,12 +366,17 @@ class _LandPageState extends State { child: Icon(Icons.person,size: 72,color: Theme.of(context).colorScheme.primary,), ), ), - Text( - _userProvider.user.userName, - style: Theme.of(context).textTheme.headline6.copyWith( - fontWeight: FontWeight.normal, + Padding( + padding: const EdgeInsets.all(8.0), + child: FittedBox( + child: Text( + _userProvider.user?.userName ?? "??", + style: Theme.of(context).textTheme.headline6.copyWith( + fontWeight: FontWeight.normal, + ), + textScaleFactor: AppStyle.getScaleFactor(context), + ), ), - textScaleFactor: AppStyle.getScaleFactor(context), ), ], ), diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index f22b09f6..0b3757a0 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index 8e0a5b78..715a1488 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -5,13 +5,15 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_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'; import 'package:test_sa/models/device/device.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -26,6 +28,8 @@ import 'package:test_sa/views/widgets/sound/record_sound.dart'; import 'package:test_sa/views/widgets/speech_to_text/speech_to_text.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_defect_types_mune.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_priority_mune.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_through_mune.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_types_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class CreateRequestPage extends StatefulWidget { static final String id = "/create-request"; @@ -163,6 +167,24 @@ class _CreateRequestPageState extends State { _serviceRequest.defectType = status; }, ), + const SizedBox(height: 8,), + const ASubTitle("Type"), + const SizedBox(height: 4,), + ServiceRequestTypesMenu( + initialValue: _serviceRequest.type, + onSelect: (status){ + _serviceRequest.type = status; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Through"), + const SizedBox(height: 4,), + ServiceRequestedThroughMenu( + initialValue: const Lookup(name: "App",value: 3), + onSelect: (status){ + _serviceRequest.requestedThrough = status; + }, + ), MultiImagesPicker( label: _subtitle.deviceImages, images: _deviceImages, @@ -204,14 +226,14 @@ class _CreateRequestPageState extends State { if(!_formKey.currentState.validate()) return; _formKey.currentState.save(); - _serviceRequest.deviceId = _device?.id ?? ""; + _serviceRequest.deviceId = _device?.id; _isLoading =true; setState(() {}); _serviceRequest.devicePhotos = _deviceImages.map( - (e) => base64Encode(e.readAsBytesSync())).toList(); + (e) => "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}").toList(); if(_serviceRequest.audio != null){ final file = File(_serviceRequest.audio); - _serviceRequest.audio = base64Encode(file.readAsBytesSync()); + _serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"; } int status = await _serviceRequestsProvider.createRequest( user: _userProvider.user, 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 33638f92..2d65c34b 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; 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 0b268fc7..4a7be338 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; @@ -273,8 +273,8 @@ class _EditServiceReportState extends State with TickerProvid ServiceReportLastCallsMenu( report: _serviceReport, onSelect: (status){ - if(status?.id == 12 - || _serviceReport.callLastSituation?.id == 12){ + if(status?.value == 12 + || _serviceReport.callLastSituation?.value == 12){ _serviceReport.callLastSituation = status; setState(() {}); } else { @@ -289,7 +289,7 @@ class _EditServiceReportState extends State with TickerProvid ), const SizedBox(height: 8,), // invoice number & code - _serviceReport.callLastSituation?.id != 12 ? const SizedBox.shrink(): + _serviceReport.callLastSituation?.value != 12 ? const SizedBox.shrink(): Row( children: [ Expanded( diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 2ada571e..c052fb68 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -61,61 +61,59 @@ class RequestDetailsPage extends StatelessWidget { ), ), ), - Visibility( - visible: _userProvider.user.type == UsersTypes.normal_user, - replacement: AIconButton( - iconData: Icons.edit, - color: AColors.white, - buttonSize: 42, - backgroundColor: AColors.green, - onPressed: () async { - showModalBottomSheet( + _userProvider.user.type == UsersTypes.normal_user ? + AIconButton( + iconData: Icons.warning_amber_rounded, + color: AColors.white, + buttonSize: 42, + backgroundColor: AColors.deepOrange, + onPressed: (){ + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) + ) + ); + }, + ) + : AIconButton( + iconData: Icons.edit, + color: AColors.white, + buttonSize: 42, + backgroundColor: AColors.green, + onPressed: () async { + showModalBottomSheet( context: context, builder: (context){ return ServiceRequestsUpdateDialog(request: serviceRequest,); }); - // DateTime picked = await showDatePicker( - // context: context, - // initialDate: DateTime.now(), - // firstDate: DateTime.now(), - // lastDate: DateTime.now().add(Duration(days: 182)) - // ); - // if(picked == null){return;} - // showDialog( - // context: context, - // barrierDismissible: false, - // builder: (BuildContext context) { - // return CupertinoAlertDialog( - // title: Text(_subtitle.updatingDots), - // content: Center(child: CircularProgressIndicator()), - // ); - // }, - // ); - // int status = await _serviceRequestsProvider.updateDate( - // user: _userProvider.user, - // host: _settingProvider.host, - // request: serviceRequest, - // newDate: picked.toString().split(" ").first - // ); - // Navigator.of(context).pop(); - // Fluttertoast.showToast( - // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), - // ); - }, - ), - child: AIconButton( - iconData: Icons.warning_amber_rounded, - color: AColors.white, - buttonSize: 42, - backgroundColor: AColors.deepOrange, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) - ) - ); - }, - ), + // DateTime picked = await showDatePicker( + // context: context, + // initialDate: DateTime.now(), + // firstDate: DateTime.now(), + // lastDate: DateTime.now().add(Duration(days: 182)) + // ); + // if(picked == null){return;} + // showDialog( + // context: context, + // barrierDismissible: false, + // builder: (BuildContext context) { + // return CupertinoAlertDialog( + // title: Text(_subtitle.updatingDots), + // content: Center(child: CircularProgressIndicator()), + // ); + // }, + // ); + // int status = await _serviceRequestsProvider.updateDate( + // user: _userProvider.user, + // host: _settingProvider.host, + // request: serviceRequest, + // newDate: picked.toString().split(" ").first + // ); + // Navigator.of(context).pop(); + // Fluttertoast.showToast( + // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), + // ); + }, ), SizedBox(width: 16,) ], diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index e535d03b..6c04d822 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -47,7 +47,7 @@ class _ServiceRequestsPageState extends State await _serviceRequestsProvider.getRequests( user: _userProvider.user, host: _settingProvider.host, - hospitalId: _userProvider.user.hospital.id, + hospitalId: _userProvider.user.hospital?.id, ); }, child: Stack( diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index 7c9201b1..39971677 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -1,12 +1,15 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_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/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/pentry.dart'; +import 'package:test_sa/models/pantry/pm_kit.dart'; +import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; @@ -61,17 +64,20 @@ class _EditPentryState extends State with SingleTickerProviderStateM ); // Navigator.of(context).pop(); }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - Fluttertoast.showToast( - msg: errorMessage, - ); + // String errorMessage = HttpStatusManger.getStatusMessage( + // status: status, subtitle: _subtitle); + // Fluttertoast.showToast( + // msg: errorMessage, + // ); } } @override void initState() { - _pentry = widget.pentry; + _pentry = widget.pentry.copyWith(); + if(_pentry.pmKits.isEmpty) _pentry.pmKits.add(PMKit()); + if(_pentry.calibrationTools.isEmpty) _pentry.calibrationTools.add(CalibrationTool()); + if(_pentry.ppmCheckLists.isEmpty) _pentry.ppmCheckLists.add(PPMCheckList()); _tabController = TabController(length: 4, vsync: this); super.initState(); } diff --git a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart index 7c1c57c2..d61c9841 100644 --- a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart +++ b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/preventive_maintenance_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -109,7 +109,7 @@ class _PreventiveMaintenanceVisitsPageState extends State ), ), Visibility( - visible: _visitsProvider.visitsSearch.toSearchString().isNotEmpty, + visible: _visitsProvider.visitsSearch.toMap().isNotEmpty, child: Padding( padding: const EdgeInsets.all(8.0), child: AButton( @@ -156,7 +156,7 @@ class _RegularVisitsPageState extends State Navigator.of(context).pop(); if(status >= 200 && status < 300){ Fluttertoast.showToast( - msg: _subtitle.regularVisitsUpdatedSuccessfully, + msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index 724f4657..ae8d66cb 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -15,6 +15,7 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/images/one_image_picker.dart'; import 'package:test_sa/views/widgets/search/filter_item.dart'; +import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; class UpdateVisitsGroupSheet extends StatefulWidget { final List visits; @@ -26,25 +27,25 @@ class UpdateVisitsGroupSheet extends StatefulWidget { } class _UpdateVisitsGroupSheetState extends State { - List status = [ - Lookup(label: "Done", id: 0,), - Lookup(label: "Not Yet", id: 1), - Lookup(label: "On Hold", id: 2,), - ]; - - List taskStatus = [ - Lookup(label: "Passed", id: 0,), - Lookup(label: "Failed", id: 1), - ]; + // List status = [ + // Lookup(name: "Done", id: 0,), + // Lookup(name: "Not Yet", id: 1), + // Lookup(name: "On Hold", id: 2,), + // ]; + // + // List taskStatus = [ + // Lookup(name: "Passed", id: 0,), + // Lookup(name: "Failed", id: 1), + // ]; VisitsGroup _group = VisitsGroup(); - File _image; + // File _image; Subtitle _subtitle; @override void initState() { super.initState(); _group.visits = widget.visits; - _group.date = DateTime.now(); + //_group.date = DateTime.now(); } @override @@ -78,123 +79,130 @@ class _UpdateVisitsGroupSheetState extends State { ), ], ), - - AOneImagePicker( - image: _image, - onPick: (image){ - _image =image; - _group.image = base64Encode(image.readAsBytesSync()); - }, - ), - SizedBox(height: 12 * AppStyle.getScaleFactor(context),), - ATextFormField( - initialValue: _group.jobSheetNumber, - hintText: _subtitle.jobSheetNumber, - style: Theme.of(context).textTheme.headline6, - onSaved: (value){ - _group.jobSheetNumber = value; - }, - ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - ATextFormField( - initialValue: _group.workingHours, - hintText: _subtitle.workingHours, - style: Theme.of(context).textTheme.headline6, - onSaved: (value){ - _group.workingHours = value; - }, - ), SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - ATextFormField( - initialValue: _group.travelingHours, - hintText: _subtitle.travelingHours, - style: Theme.of(context).textTheme.headline6, - onSaved: (value){ - _group.travelingHours = value; + EngineersMenu( + initialValue: _group.engineer, + onSelect: (engineer){ + _group.engineer = engineer; }, ), SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - Row( - children: [ - Expanded( - child: Text( - "${_subtitle.date} :", - style: Theme.of(context).textTheme.subtitle1, - textScaleFactor: AppStyle.getScaleFactor(context), - ), - ), - ADatePicker( - date: _group.date ?? DateTime.now(), - onDatePicker: (date){ - _group.date = date; - setState(() {}); - }, - ), - ], - ), - // SizedBox(height: 8 * AStyling.getScaleFactor(context),), - Text( - "${_subtitle.status} :", - style: Theme.of(context).textTheme.subtitle1, - textScaleFactor: AppStyle.getScaleFactor(context), - ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - Center( - child: Wrap( - spacing: 10, - runSpacing: 10, - children: List.generate( - status.length, - (index) { - bool isSelected = _group.status == status[index]; - return FilterItem( - isSelected: isSelected, - onSelected: (){ - if(isSelected) - _group.status = null; - else - _group.status = status[index]; - - setState(() {}); - }, - status: status[index], - ); - } - - ), - ), - ), - Text( - "${_subtitle.taskStatus} :", - style: Theme.of(context).textTheme.subtitle1, - textScaleFactor: AppStyle.getScaleFactor(context), - ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - Center( - child: Wrap( - spacing: 10, - runSpacing: 10, - children: List.generate( - taskStatus.length, - (index) { - bool isSelected = _group.taskStatus == taskStatus[index]; - return FilterItem( - isSelected: isSelected, - onSelected: (){ - if(isSelected) - _group.taskStatus = null; - else - _group.taskStatus = taskStatus[index]; - - setState(() {}); - }, - status: taskStatus[index], - ); - } - - ), - ), - ), + // AOneImagePicker( + // image: _image, + // onPick: (image){ + // _image =image; + // _group.image = base64Encode(image.readAsBytesSync()); + // }, + // ), + // SizedBox(height: 12 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.jobSheetNumber, + // hintText: _subtitle.jobSheetNumber, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.jobSheetNumber = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.workingHours, + // hintText: _subtitle.workingHours, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.workingHours = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.travelingHours, + // hintText: _subtitle.travelingHours, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.travelingHours = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Row( + // children: [ + // Expanded( + // child: Text( + // "${_subtitle.date} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // ), + // ADatePicker( + // date: _group.date ?? DateTime.now(), + // onDatePicker: (date){ + // _group.date = date; + // setState(() {}); + // }, + // ), + // ], + // ), + // // SizedBox(height: 8 * AStyling.getScaleFactor(context),), + // Text( + // "${_subtitle.status} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Center( + // child: Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // status.length, + // (index) { + // bool isSelected = _group.status == status[index]; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) + // _group.status = null; + // else + // _group.status = status[index]; + // + // setState(() {}); + // }, + // status: status[index], + // ); + // } + // + // ), + // ), + // ), + // Text( + // "${_subtitle.taskStatus} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Center( + // child: Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // taskStatus.length, + // (index) { + // bool isSelected = _group.taskStatus == taskStatus[index]; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) + // _group.taskStatus = null; + // else + // _group.taskStatus = taskStatus[index]; + // + // setState(() {}); + // }, + // status: taskStatus[index], + // ); + // } + // + // ), + // ), + // ), SizedBox(height: 8 * AppStyle.getScaleFactor(context),), Expanded( child: ListView.builder( @@ -240,10 +248,7 @@ class _UpdateVisitsGroupSheetState extends State { ), ], ), - Align( - alignment: Alignment.topRight, - ), ], ), ); diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index f2b06be0..ca876b77 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -5,6 +5,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; import 'package:test_sa/views/pages/user/visits/pantry/future_edit_pently.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; @@ -52,7 +53,7 @@ class VisitDetailsPage extends StatelessWidget { backgroundColor: AColors.green, onPressed: () async { Navigator.of(context).push( - MaterialPageRoute(builder: (_)=> FutureEditPentry(visit: visit,)) + MaterialPageRoute(builder: (_)=> EditPentry(visit: visit,pentry: visit.pentry,)) ); }, ), diff --git a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart index a042d72f..8360ba23 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart @@ -26,7 +26,7 @@ class DeviceTransferInfoSection extends StatelessWidget { ), RequestInfoRow( title: subtitle.engineerName, - info: info.name, + info: info.userName, ), RequestInfoRow( title: subtitle.workingHours, @@ -52,7 +52,7 @@ class DeviceTransferInfoSection extends StatelessWidget { RequestInfoRow( title: subtitle.status, infoWidget: StatusLabel( - label: info.status?.label, + label: info.status?.name, color: AColors.getGasStatusColor(info.status?.id) ), ), diff --git a/lib/views/widgets/device_trancfer/device_transfer_item.dart b/lib/views/widgets/device_trancfer/device_transfer_item.dart index 0cd2adbf..ea426523 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_item.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_item.dart @@ -79,7 +79,7 @@ class DeviceTransferItem extends StatelessWidget { ), StatusLabel( color: AColors.getRequestStatusColor(item.sender.status?.id), - label: item.sender.status?.label, + label: item.sender.status?.name, ) ], @@ -99,6 +99,7 @@ class DeviceTransferItem extends StatelessWidget { ], ), + if(item.sender.department.id != null) Text( item.sender.department.name, style: Theme.of(context).textTheme.bodySmall.copyWith( @@ -118,7 +119,7 @@ class DeviceTransferItem extends StatelessWidget { ), StatusLabel( color: AColors.getRequestStatusColor(item.receiver.status?.id), - label: item.receiver.status?.label, + label: item.receiver.status?.name, ) ], @@ -138,6 +139,7 @@ class DeviceTransferItem extends StatelessWidget { ], ), + if(item.receiver.department.id != null) Text( item.receiver.department.name, style: Theme.of(context).textTheme.bodySmall.copyWith( diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index ec91ae17..95952765 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -10,8 +10,8 @@ import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; class AutoCompleteDeviceField extends StatefulWidget { final Device initialValue; - final String hospitalId; - final Function(String) onPick; + final int hospitalId; + final Function(int) onPick; const AutoCompleteDeviceField({Key key, this.initialValue, this.onPick, this.hospitalId}) : super(key: key); @@ -74,7 +74,7 @@ class _AutoCompleteDeviceFieldState extends State { return await _devicesProvider.getDevicesList( host: _settingProvider.host, user: _userProvider.user, - hospitalId: widget.hospitalId, + hospitalId: widget.hospitalId ?? _userProvider.user.hospital.id, serialNumber: value, ); }, diff --git a/lib/views/widgets/equipment/auto_complete_models_field.dart b/lib/views/widgets/equipment/auto_complete_models_field.dart new file mode 100644 index 00000000..1c40a544 --- /dev/null +++ b/lib/views/widgets/equipment/auto_complete_models_field.dart @@ -0,0 +1,92 @@ +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/models/device/device.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_typeahead/flutter_typeahead.dart'; +import 'package:provider/provider.dart'; +class AutoCompleteModelField extends StatefulWidget { + final Lookup initialValue; + final Function(Lookup) onPick; + + const AutoCompleteModelField({Key key, this.initialValue, this.onPick,}) : super(key: key); + + @override + _AutoCompleteModelFieldState createState() => _AutoCompleteModelFieldState(); +} + +class _AutoCompleteModelFieldState extends State { + + SettingProvider _settingProvider; + DevicesProvider _devicesProvider; + UserProvider _userProvider; + TextEditingController _controller; + + @override + void initState() { + _controller = TextEditingController(text: widget.initialValue?.name); + super.initState(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + @override + Widget build(BuildContext context) { + _settingProvider = Provider.of(context); + _userProvider = Provider.of(context); + _devicesProvider = Provider.of(context); + //Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 16 + ), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color:AColors.black), + borderRadius: BorderRadius.circular( + AppStyle.borderRadius * AppStyle.getScaleFactor(context) + ), + boxShadow: [ + AppStyle.boxShadow + ] + ), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + + decoration: const InputDecoration( + hintText: "Model", + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + textInputAction: TextInputAction.search, + ), + suggestionsCallback: (value) async { + return await _devicesProvider.getModels( + code: value, + ); + }, + itemBuilder: (context, lookup) { + return ListTile( + title: Text(lookup.name), + ); + }, + onSuggestionSelected: (lookup) { + _controller.text = lookup.name; + widget.onPick(lookup); + }, + ), + ); + } +} diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index aac06ff1..031ab2c1 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -28,6 +28,8 @@ class _SingleDevicePickerState extends State { bool _firstTime = true; Subtitle _subtitle; + TextEditingController numberController = TextEditingController(); + TextEditingController snController = TextEditingController(); _getDevice(String result) async { if(result == null) return; showDialog( @@ -58,6 +60,8 @@ class _SingleDevicePickerState extends State { @override void dispose() { + numberController.dispose(); + snController.dispose(); super.dispose(); } @@ -68,6 +72,7 @@ class _SingleDevicePickerState extends State { _settingProvider = Provider.of(context); if(_firstTime && _devicesProvider.devices != null){ + _searchableList.clear(); _searchableList.addAll(_devicesProvider.devices); _firstTime = false; } @@ -83,7 +88,7 @@ class _SingleDevicePickerState extends State { await _devicesProvider.getEquipment( user: _userProvider.user, host: _settingProvider.host, - hospitalId: _userProvider.user.hospital.id + hospitalId: _userProvider.user.hospital?.id ); }, child: Column( @@ -95,31 +100,41 @@ class _SingleDevicePickerState extends State { children: [ ATextFormField( hintText: _subtitle.searchBySn, + controller: snController, style: Theme.of(context).textTheme.subtitle1, suffixIcon: const Icon(Icons.search_rounded), - onChange: (value){ + textInputAction: TextInputAction.search, + onAction: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment( + user: _userProvider.user, + host: _settingProvider.host, + hospitalId: _userProvider.user.hospital?.id, + serialNumber: snController.text, + number: numberController.text + ); _searchableList.clear(); - _searchableList.addAll(_devicesProvider.devices.where( - (element) => element.serialNumber.toLowerCase().contains( - value.toLowerCase() - ) - ).toList()); - setState(() {}); + _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), - onChange: (value){ + textInputAction: TextInputAction.search, + onAction: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment( + user: _userProvider.user, + host: _settingProvider.host, + hospitalId: _userProvider.user.hospital?.id, + serialNumber: snController.text, + number: numberController.text + ); _searchableList.clear(); - _searchableList.addAll(_devicesProvider.devices.where( - (element) => element.number.toLowerCase().contains( - value.toLowerCase() - ) - ).toList()); - setState(() {}); + _searchableList.addAll(_devicesProvider.devices); }, ), ], @@ -145,16 +160,16 @@ class _SingleDevicePickerState extends State { ], ), ), - floatingActionButton: FloatingActionButton( - heroTag: "some tag 2", - child: const Icon(Icons.qr_code_scanner), - onPressed: () async { - String result = await Navigator.of(context).push( - MaterialPageRoute(builder: (_)=> const ScanQr()), - ) as String; - _getDevice(result); - }, - ), + // floatingActionButton: FloatingActionButton( + // heroTag: "some tag 2", + // child: const Icon(Icons.qr_code_scanner), + // onPressed: () async { + // String result = await Navigator.of(context).push( + // MaterialPageRoute(builder: (_)=> const ScanQr()), + // ) as String; + // _getDevice(result); + // }, + // ), ); } } diff --git a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart index d246d05d..375a1b1c 100644 --- a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart @@ -15,7 +15,7 @@ class GasRefillCreateDetailsItem extends StatelessWidget { children: [ Row( children: [ - Expanded(child: Text(model.type.label)), + Expanded(child: Text(model.type.name)), IconButton( onPressed: onDelete, color: AColors.red, @@ -23,9 +23,12 @@ class GasRefillCreateDetailsItem extends StatelessWidget { ) ], ), - Row( + Wrap( + spacing: 10, children: [ - Text(model.requestedQuantity.toStringAsFixed(0)), + Text("Quantity: ${model.requestedQuantity.toStringAsFixed(0)}"), + Text("Cylinder Size: ${model.cylinderSize.name}"), + Text("Cylinder Type: ${model.cylinderType.name}"), ], ), if(model.deliveredQuantity != null) diff --git a/lib/views/widgets/gas_refill/gas_refill_item.dart b/lib/views/widgets/gas_refill/gas_refill_item.dart index e9bf3d02..e6ab7477 100644 --- a/lib/views/widgets/gas_refill/gas_refill_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_item.dart @@ -75,6 +75,7 @@ class GasRefillItem extends StatelessWidget { ), ), ), + if(item.clientName != null) Text( item.clientName, style: Theme.of(context).textTheme.subtitle2.copyWith( @@ -95,7 +96,8 @@ class GasRefillItem extends StatelessWidget { ), ), ), - StatusLabel(label: item.status.label, + if(item.status?.id != null) + StatusLabel(label: item.status.name, color: AColors.getGasStatusColor(item.status.id) ), ], diff --git a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart index 2a94a9ba..dc41e11d 100644 --- a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart @@ -22,10 +22,10 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ATitle(details.type.label), + ATitle(details.type.name), RequestInfoRow( title: "Cylinder Size", - info: details.cylinderSize.label, + info: details.cylinderSize.name, ), RequestInfoRow( title: "Requested Quantity", @@ -48,14 +48,14 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { ? null : "allow numbers only", textInputType: TextInputType.number, onSaved: (value){ - details.deliveredQuantity = int.tryParse(value); + details.deliveredQuantity = double.tryParse(value); }, ), ], ): RequestInfoRow( title: "Delivered Quantity", - info: details.deliveredQuantity.toStringAsFixed(0), + info: details.deliveredQuantity?.toStringAsFixed(0), ), //SizedBox(height: 16,) ], diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index ba860745..68444be0 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -11,10 +11,10 @@ import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; class HospitalAutoCompleteField extends StatefulWidget { final String initialValue; - final Function(String) onSearch; - final Function(String) onSave; + final Function(Hospital) onSearch; + //final Function(Hospital) onSave; - const HospitalAutoCompleteField({Key key, this.onSearch, this.initialValue, this.onSave}) : super(key: key); + const HospitalAutoCompleteField({Key key, this.onSearch, this.initialValue, }) : super(key: key); @override _HospitalAutoCompleteFieldState createState() => _HospitalAutoCompleteFieldState(); @@ -58,7 +58,6 @@ class _HospitalAutoCompleteFieldState extends State { child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( style: Theme.of(context).textTheme.headline6, - onSubmitted: widget.onSave, controller: _controller, textAlign: TextAlign.center, decoration: InputDecoration( @@ -69,9 +68,6 @@ class _HospitalAutoCompleteFieldState extends State { enabledBorder: InputBorder.none, ), textInputAction: TextInputAction.search, - onEditingComplete:(){ - widget.onSearch(_controller.text); - } ), suggestionsCallback: (vale) async { return await HospitalsProvider().getHospitalsList( @@ -80,12 +76,12 @@ class _HospitalAutoCompleteFieldState extends State { ); }, itemBuilder: (context, hospital) { - return HospitalItem( - hospital: hospital, + return ListTile( + title: Text(hospital.name), ); }, onSuggestionSelected: (hospital) { - widget.onSearch(hospital.name); + widget.onSearch(hospital); }, ), ); diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index 8ed322e0..b0002ae1 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index ea2228cd..e516bb3c 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -10,7 +10,7 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; class AutoCompleteDeviceNumberField extends StatefulWidget { final Lookup initialValue; - final String hospitalId; + final int hospitalId; final Function(Lookup) onPick; const AutoCompleteDeviceNumberField({Key key, this.initialValue, this.onPick, this.hospitalId}) : super(key: key); @@ -28,7 +28,7 @@ class _AutoCompleteDeviceNumberFieldState extends State { const SizedBox(height: 4,), AutoCompleteDeviceNumberField( initialValue: model.assetsNumber, - hospitalId: userProvider.user.hospital.id, + hospitalId: userProvider.user.hospital?.id, onPick: (number){ model.assetsNumber = number; }, diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart index 1fadc1c9..da9434e5 100644 --- a/lib/views/widgets/pentry/pentry_info_form.dart +++ b/lib/views/widgets/pentry/pentry_info_form.dart @@ -1,4 +1,7 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -6,6 +9,7 @@ import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_status_mune.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; @@ -23,7 +27,6 @@ class PentryInfoForm extends StatefulWidget { } class _PentryInfoFormState extends State { - @override Widget build(BuildContext context) { final subtitle = AppLocalization.of(context).subtitle; @@ -87,6 +90,20 @@ class _PentryInfoFormState extends State { }, ), const SizedBox(height: 8,), + const ASubTitle("Expected Visit Date"), + if(widget.enableValidate && widget.model.expectedVisitDate == null) + ASubTitle(subtitle.requiredWord,color: Colors.red,), + const SizedBox(height: 4,), + ADatePicker( + date: widget.model.expectedVisitDate, + from: DateTime.now().subtract(const Duration(days: 30)), + onDatePicker: (date){ + if(date == null) return; + widget.model.expectedVisitDate = date; + setState(() {}); + }, + ), + const SizedBox(height: 8,), const ASubTitle("Traveling Hours"), const SizedBox(height: 4,), ATextFormField( @@ -108,6 +125,20 @@ class _PentryInfoFormState extends State { }, ), const SizedBox(height: 8,), + const ASubTitle("Signature"), + ESignature( + oldSignature: widget.model.signature, + newSignature: widget.model.localSignature, + onSaved: (signature){ + widget.model.localSignature = signature; + if(signature == null || signature.isEmpty) { + widget.model.signature = null; + return; + } + widget.model.signature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + const SizedBox(height: 8,), ], ); } diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index 6fdd3b43..e0345597 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -67,84 +67,84 @@ class _PentryPMKitFormState extends State { const SizedBox(height: 4,), AutoCompletePartsField( clearAfterPick: false, - initialValue: (model.itemCode?.label ?? "").toString(), + initialValue: (model.itemCode?.name ?? "").toString(), onPick: (part){ - model.itemCode = Lookup(id: int.tryParse(part.id),label: part.code); - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Item Name"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.itemName ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.itemName = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Preparation Time Frame"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.preparationTimeFrame ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.preparationTimeFrame = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("kit Frequency Demand"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.kitFrequencyDemand ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.kitFrequencyDemand = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Availability"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.availability ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.availability = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Quantity Needed"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.quantityNeeded ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.number, - onChange: (value){ - model.quantityNeeded = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Quantity Reserved"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.quantityReserved ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.number, - onChange: (value){ - model.quantityReserved = value; + model.itemCode = Lookup(id: part.id,name: part.code); }, ), const SizedBox(height: 8,), + // const ASubTitle("Item Name"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.itemName ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.itemName = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Preparation Time Frame"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.preparationTimeFrame ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.preparationTimeFrame = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("kit Frequency Demand"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.kitFrequencyDemand ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.kitFrequencyDemand = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Availability"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.availability ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.availability = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Quantity Needed"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.quantityNeeded ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.number, + // onChange: (value){ + // model.quantityNeeded = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Quantity Reserved"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.quantityReserved ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.number, + // onChange: (value){ + // model.quantityReserved = value; + // }, + // ), + // const SizedBox(height: 8,), Divider(color: Theme.of(context).textTheme.titleMedium.color,), ], ); diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index 0c63f2ff..e46eed9d 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -59,7 +59,7 @@ class ServiceRequestItem extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - request.devicePhotos.isEmpty ? SizedBox.shrink(): + request.devicePhotos?.isEmpty != false ? SizedBox.shrink(): Column( children: [ SizedBox( diff --git a/lib/views/widgets/requests/service_request_update_dialog.dart b/lib/views/widgets/requests/service_request_update_dialog.dart index 71dd67cc..57237c10 100644 --- a/lib/views/widgets/requests/service_request_update_dialog.dart +++ b/lib/views/widgets/requests/service_request_update_dialog.dart @@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -13,7 +13,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/status/employee/employee_mune.dart'; +import 'package:test_sa/views/widgets/status/employee/assigned_to_mune.dart'; class ServiceRequestsUpdateDialog extends StatefulWidget { final ServiceRequest request; @@ -126,7 +126,7 @@ class _ServiceRequestsUpdateDialogState extends State 0.5 ? AColors.black : Colors.white, diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index a1f78945..5bb981bd 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/lookup.dart'; @@ -7,6 +8,9 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_types_mune.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../app_text_form_field.dart'; import 'filter_item.dart'; @@ -29,12 +33,12 @@ class _ServiceRequestsSearchDialogState extends State status = [ - Lookup(label: "New", id: 4,), + Lookup(name: "New", id: 4,), - Lookup(label: "Repaired", id: 6,), - Lookup(label: "Repeated", id: 8), - Lookup(label: "Closed", id: 9,), - Lookup(label: "Under Repair", id: 5,), + Lookup(name: "Repaired", id: 6,), + Lookup(name: "Repeated", id: 8), + Lookup(name: "Closed", id: 9,), + Lookup(name: "Under Repair", id: 5,), ]; final GlobalKey _formKey = GlobalKey(); @@ -55,6 +59,7 @@ class _ServiceRequestsSearchDialogState extends State with TickerProviderStateMixin{ VisitsSearch _search; List status = [ - Lookup(label: "Done", id: 0,), - Lookup(label: "Not Yet", id: 1), - Lookup(label: "On Hold", id: 2,), + Lookup(name: "Done", id: 0,), + Lookup(name: "Not Yet", id: 1), + Lookup(name: "On Hold", id: 2,), ]; List contactStatus = [ - Lookup(label: "Hospital Employee", key: "H",), - Lookup(label: "Under Warranty", key: "CW"), - Lookup(label: "Under Maintenance Contract", key: "CC",), + // Lookup(name: "Hospital Employee", value: "H",), + // Lookup(name: "Under Warranty", value: "CW"), + // Lookup(name: "Under Maintenance Contract", value: "CC",), ]; @@ -61,6 +64,8 @@ class _VisitsSearchDialogState extends State child: Form( key: _formKey, child: ListView( + // shrinkWrap: true, + // physics: const ClampingScrollPhysics(), padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), children: [ Row( @@ -76,8 +81,9 @@ class _VisitsSearchDialogState extends State ASmallButton( text: _subtitle.search, onPressed: (){ - if(!_formKey.currentState.validate()) + if(!_formKey.currentState.validate()) { return; + } _formKey.currentState.save(); Navigator.of(context).pop(_search); }, @@ -90,8 +96,9 @@ class _VisitsSearchDialogState extends State style: Theme.of(context).textTheme.headline6, textInputAction: TextInputAction.search, onAction: (){ - if(!_formKey.currentState.validate()) + if(!_formKey.currentState.validate()) { return; + } _formKey.currentState.save(); Navigator.of(context).pop(_search); }, @@ -101,99 +108,122 @@ class _VisitsSearchDialogState extends State ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), HospitalAutoCompleteField( - initialValue: _search.hospitalName, - onSave: (value){ - _search.hospitalName = value; - }, + initialValue: _search.hospital?.name, + // onSave: (value){ + // _search.hospital = value; + // }, onSearch: (value){ - _search.hospitalName = value; + _search.hospital = value; Navigator.of(context).pop(_search); }, ), + // SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _search.brand, + // hintText: _subtitle.brand, + // style: Theme.of(context).textTheme.headline6, + // textInputAction: TextInputAction.search, + // onAction: (){ + // if(!_formKey.currentState.validate()) { + // return; + // } + // _formKey.currentState.save(); + // Navigator.of(context).pop(_search); + // }, + // onSaved: (value){ + // _search.brand = value; + // }, + // ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), - ATextFormField( - initialValue: _search.brand, - hintText: _subtitle.brand, - style: Theme.of(context).textTheme.headline6, - textInputAction: TextInputAction.search, - onAction: (){ - if(!_formKey.currentState.validate()) - return; - _formKey.currentState.save(); - Navigator.of(context).pop(_search); - }, - onSaved: (value){ - _search.brand = value; - }, - ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), - ATextFormField( + AutoCompleteModelField( initialValue: _search.model, - hintText: _subtitle.model, - style: Theme.of(context).textTheme.headline6, - textInputAction: TextInputAction.search, - onAction: (){ - if(!_formKey.currentState.validate()) - return; - _formKey.currentState.save(); + onPick: (lookup){ + _search.model = lookup; Navigator.of(context).pop(_search); }, - onSaved: (value){ - _search.model = value; - }, ), + // ATextFormField( + // initialValue: _search.model, + // hintText: _subtitle.model, + // style: Theme.of(context).textTheme.headline6, + // textInputAction: TextInputAction.search, + // onAction: (){ + // if(!_formKey.currentState.validate()) { + // return; + // } + // _formKey.currentState.save(); + // Navigator.of(context).pop(_search); + // }, + // onSaved: (value){ + // _search.model = value; + // }, + // ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), ASubTitle(_subtitle.status), SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), - Wrap( - spacing: 10, - runSpacing: 10, - children: List.generate( - status.length, - (index) { - bool isSelected = _search.statusValue == status[index].id; - return FilterItem( - isSelected: isSelected, - onSelected: (){ - if(isSelected) - _search.statusValue = null; - else - _search.statusValue = status[index].id; - - setState(() {}); - }, - status: status[index], - ); - } - - ), + PentryVisitsStatusMenu( + initialValue: _search.statusValue, + onSelect: (status){ + _search.statusValue = status; + }, ), + // Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // status.length, + // (index) { + // bool isSelected = _search.statusValue == status[index].id; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) { + // _search.statusValue = null; + // } else { + // _search.statusValue = status[index].id; + // } + // + // setState(() {}); + // }, + // status: status[index], + // ); + // } + // + // ), + // ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), ASubTitle(_subtitle.contactStatus), SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), - Wrap( - spacing: 10, - runSpacing: 10, - children: List.generate( - contactStatus.length, - (index) { - bool isSelected = _search.contactStatus == contactStatus[index].key; - return FilterItem( - isSelected: isSelected, - onSelected: (){ - if(isSelected) - _search.contactStatus = null; - else - _search.contactStatus = contactStatus[index].key; - - setState(() {}); - }, - status: contactStatus[index], - ); - } - - ), + AssignedToMenu( + initialValue: _search.contactStatus, + onSelect: (status){ + _search.contactStatus = status; + }, ), + // Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // contactStatus.length, + // (index) { + // bool isSelected = _search.contactStatus == contactStatus[index]; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) { + // _search.contactStatus = null; + // } else { + // _search.contactStatus = contactStatus[index]; + // } + // + // setState(() {}); + // }, + // status: contactStatus[index], + // ); + // } + // + // ), + // ), SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), ASubTitle(_subtitle.actualDate), SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), @@ -221,7 +251,7 @@ class _VisitsSearchDialogState extends State }, ), Visibility( - visible: _search.toSearchString().isNotEmpty, + visible: _search.toMap().isNotEmpty, child: Padding( padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), child: AButton( diff --git a/lib/views/widgets/status/employee/employee_mune.dart b/lib/views/widgets/status/employee/assigned_to_mune.dart similarity index 83% rename from lib/views/widgets/status/employee/employee_mune.dart rename to lib/views/widgets/status/employee/assigned_to_mune.dart index 5ea741d4..8e4addf6 100644 --- a/lib/views/widgets/status/employee/employee_mune.dart +++ b/lib/views/widgets/status/employee/assigned_to_mune.dart @@ -1,21 +1,21 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_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 EmployeeMenu extends StatelessWidget { +class AssignedToMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; - const EmployeeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + const AssignedToMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override Widget build(BuildContext context) { final settingProvider = Provider.of(context); final userProvider = Provider.of(context); - final menuProvider = Provider.of(context); + final menuProvider = Provider.of(context); return LoadingManager( isLoading: menuProvider.isLoading, isFailedLoading: menuProvider.items == null, diff --git a/lib/views/widgets/status/employee/engineers_mune.dart b/lib/views/widgets/status/employee/engineers_mune.dart new file mode 100644 index 00000000..93b1597d --- /dev/null +++ b/lib/views/widgets/status/employee/engineers_mune.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/engineer.dart'; +import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart'; +class EngineersMenu extends StatelessWidget { + final Function(Engineer) onSelect; + final Engineer initialValue; + + const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleEngineerMenu( + initialStatus: initialValue, + engineers: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/employee/single_type_menu.dart b/lib/views/widgets/status/employee/single_type_menu.dart new file mode 100644 index 00000000..4ee21b7d --- /dev/null +++ b/lib/views/widgets/status/employee/single_type_menu.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/models/engineer.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; +class SingleEngineerMenu extends StatefulWidget { + final List engineers; + final Engineer initialStatus; + final Function(Engineer) onSelect; + + const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key); + @override + _SingleEngineerMenuState createState() => _SingleEngineerMenuState(); +} + +class _SingleEngineerMenuState extends State { + + Engineer _selectedStatus; + + @override + void didUpdateWidget(covariant SingleEngineerMenu oldWidget) { + if(widget.initialStatus != null && widget.initialStatus.id != null){ + _selectedStatus = widget.engineers?.firstWhere( + (element) { + return element == widget.initialStatus; + }); + widget.onSelect(_selectedStatus); + } else { + _selectedStatus = null; + } + super.didUpdateWidget(oldWidget); + } + + @override + void initState() { + if(widget.initialStatus != null && widget.initialStatus.id != null){ + _selectedStatus = widget.engineers?.firstWhere( + (element) { + return element == widget.initialStatus; + }); + widget.onSelect(_selectedStatus); + } + + super.initState(); + } + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 16 + ), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color:AColors.black), + borderRadius: BorderRadius.circular( + AppStyle.borderRadius * AppStyle.getScaleFactor(context) + ), + boxShadow: const [ + AppStyle.boxShadow + ] + ), + child: DropdownButton( + value: _selectedStatus, + iconSize: 24, + elevation: 16, + isExpanded: true, + hint: Text( + "Select", + style: Theme.of(context).textTheme.subtitle1, + ), + style: TextStyle( + color: Theme.of(context).primaryColor + ), + underline: SizedBox.shrink(), + onChanged: (Engineer newValue) { + setState(() { + _selectedStatus = newValue; + }); + widget.onSelect(newValue); + }, + items: widget.engineers + .map>((Engineer value) { + return DropdownMenuItem( + value: value, + child: Text( + value.name, + style: Theme.of(context).textTheme.subtitle1.copyWith( + color: Theme.of(context).primaryColor, + fontSize: 11, + //fontWeight: FontWeight.bold + ), + ), + ); + }) + .toList(), + ), + ); + } +} diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart new file mode 100644 index 00000000..7402e3a7 --- /dev/null +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_type.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/gas_refill/gas_cylinder_size_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_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 GasCylinderTypesMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const GasCylinderTypesMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/multi_status_menu.dart b/lib/views/widgets/status/multi_status_menu.dart index 99a52a87..9d925df8 100644 --- a/lib/views/widgets/status/multi_status_menu.dart +++ b/lib/views/widgets/status/multi_status_menu.dart @@ -58,7 +58,7 @@ class _MultiStatusMenuState extends State { children: [ const SizedBox(width: 12,), Text( - status.label, + status.name, style: Theme.of(context).textTheme.bodyText1.copyWith( color:Theme.of(context).colorScheme.onPrimary, ), @@ -107,12 +107,12 @@ class _MultiStatusMenuState extends State { ), suggestionsCallback: (vale) { return widget.statuses.where((Lookup option) { - return option.label.toLowerCase().contains(_controller.text); + return option.name.toLowerCase().contains(_controller.text); }); }, itemBuilder: (context, part) { return ListTile( - title: Text(part.label), + title: Text(part.name), ); }, onSuggestionSelected: (status) { diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index 8a4d1c98..c0f0633e 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -34,10 +34,9 @@ class _ServiceReportStatusMenuState extends State { 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), + isLoading: _menuProvider.isLoading == true, + isFailedLoading: _menuProvider.statuses == null, + stateCode: _menuProvider.stateCode, onRefresh: () async { if(_menuProvider.stateCode == null){ _menuProvider.reset(); @@ -46,7 +45,7 @@ class _ServiceReportStatusMenuState extends State { host: _settingProvider.host ); } - await _callsLastSituationsProvider.getCalls( + _callsLastSituationsProvider.getCalls( user: _userProvider.user, host: _settingProvider.host, serviceStatus: widget.report.status?.id.toString() @@ -56,12 +55,12 @@ class _ServiceReportStatusMenuState extends State { statuses: _menuProvider.statuses, initialStatus: widget.report.status, onSelect: (status){ - _callsLastSituationsProvider.getCalls( - user: _userProvider.user, - host: _settingProvider.host, - serviceStatus: status.id.toString() - ); - widget.report.callLastSituation = null; + // _callsLastSituationsProvider.getCalls( + // user: _userProvider.user, + // host: _settingProvider.host, + // serviceStatus: status.id.toString() + // ); + //widget.report.callLastSituation = null; widget.onSelect(status); }, ) diff --git a/lib/views/widgets/status/service_request/service_request_status_mune.dart b/lib/views/widgets/status/service_request/service_request_status_mune.dart new file mode 100644 index 00000000..b856f6c6 --- /dev/null +++ b/lib/views/widgets/status/service_request/service_request_status_mune.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:provider/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_status_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_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 ServiceRequestStatusMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const ServiceRequestStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/service_request/service_request_through_mune.dart b/lib/views/widgets/status/service_request/service_request_through_mune.dart new file mode 100644 index 00000000..4612250a --- /dev/null +++ b/lib/views/widgets/status/service_request/service_request_through_mune.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/report/service_report_priority_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_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 ServiceRequestedThroughMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const ServiceRequestedThroughMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/service_request/service_request_types_mune.dart b/lib/views/widgets/status/service_request/service_request_types_mune.dart new file mode 100644 index 00000000..223a5725 --- /dev/null +++ b/lib/views/widgets/status/service_request/service_request_types_mune.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:provider/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_through_provider.dart'; +import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_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 ServiceRequestTypesMenu extends StatelessWidget { + final Function(Lookup) onSelect; + final Lookup initialValue; + + const ServiceRequestTypesMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + final settingProvider = Provider.of(context); + final userProvider = Provider.of(context); + final menuProvider = Provider.of(context); + return LoadingManager( + isLoading: menuProvider.isLoading, + isFailedLoading: menuProvider.items == null, + stateCode: menuProvider.stateCode, + onRefresh: () async { + menuProvider.reset(); + await menuProvider.getData( + user: userProvider.user, + host: settingProvider.host + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: menuProvider.items, + onSelect: onSelect, + ) + ); + } +} diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index 6640bf19..fdf2b78d 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -16,13 +16,19 @@ class _SingleStatusMenuState extends State { Lookup _selectedStatus; + @override + void setState(VoidCallback fn) { + if(mounted) super.setState(fn); + } + @override void didUpdateWidget(covariant SingleStatusMenu oldWidget) { - if(widget.initialStatus != null){ + if(widget.initialStatus != null && widget.initialStatus.value != null){ _selectedStatus = widget.statuses?.firstWhere( (element) { - return element?.id == widget.initialStatus.id; + return element == widget.initialStatus; }); + widget.onSelect(_selectedStatus); } else { _selectedStatus = null; } @@ -31,11 +37,12 @@ class _SingleStatusMenuState extends State { @override void initState() { - if(widget.initialStatus != null){ + if(widget.initialStatus != null && widget.initialStatus.value != null){ _selectedStatus = widget.statuses?.firstWhere( (element) { - return element?.id == widget.initialStatus.id; + return element == widget.initialStatus; }); + widget.onSelect(_selectedStatus); } super.initState(); @@ -80,7 +87,7 @@ class _SingleStatusMenuState extends State { return DropdownMenuItem( value: value, child: Text( - value.label, + value.name, style: Theme.of(context).textTheme.subtitle1.copyWith( color: Theme.of(context).primaryColor, fontSize: 11, diff --git a/lib/views/widgets/visits/visit_item.dart b/lib/views/widgets/visits/visit_item.dart index a57016e6..54d9a64a 100644 --- a/lib/views/widgets/visits/visit_item.dart +++ b/lib/views/widgets/visits/visit_item.dart @@ -130,13 +130,13 @@ class VisitItem extends StatelessWidget { ), ), ), - Text( - visit.contactStatus ?? "", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: onItemColor, - fontSize: 14, - ), - ), + // Text( + // visit.contactStatus ?? "", + // style: Theme.of(context).textTheme.subtitle1.copyWith( + // color: onItemColor, + // fontSize: 14, + // ), + // ), ], ), Divider(color: onItemColor,), diff --git a/lib/views/widgets/visits/visit_status.dart b/lib/views/widgets/visits/visit_status.dart index 871287fe..5fb31918 100644 --- a/lib/views/widgets/visits/visit_status.dart +++ b/lib/views/widgets/visits/visit_status.dart @@ -31,9 +31,9 @@ class VisitStatusLabel extends StatelessWidget { ] ), child: Text( - visit.status.label == null - || visit.status.label.isEmpty - ? "no status" :visit.status.label, + visit.status.name == null + || visit.status.name.isEmpty + ? "no status" :visit.status.name, style: Theme.of(context).textTheme.subtitle2.copyWith( color: getStatusColor().computeLuminance() > 0.5 ? AColors.black : Colors.white, diff --git a/pubspec.lock b/pubspec.lock index 6dc640b6..5e3764cb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -531,7 +531,7 @@ packages: name: logger url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.3.0" matcher: dependency: transitive description: From 910e01324fdef1d998e938bfb1bcf51a78d9ad35 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 8 Apr 2023 16:05:24 +0200 Subject: [PATCH 6/9] bug fixing --- lib/controllers/api_routes/api_manager.dart | 43 +- .../api_routes/http_status_manger.dart | 2 +- lib/controllers/api_routes/urls.dart | 8 +- .../localization/localization.dart | 2 +- .../firebase_notification_manger.dart | 2 +- .../notification/notification_manger.dart | 2 +- .../providers/api/departments_provider.dart | 4 +- .../api/device_transfer_provider.dart | 14 +- .../providers/api/devices_provider.dart | 2 - .../providers/api/gas_refill_provider.dart | 12 +- .../providers/api/hospitals_provider.dart | 6 +- .../providers/api/notifications_provider.dart | 4 +- .../providers/api/parts_provider.dart | 7 +- ...reventive_maintenance_visits_provider.dart | 4 +- .../api/regular_visits_provider.dart | 8 +- .../api/service_requests_provider.dart | 63 +-- .../employee/assigned_to_provider.dart | 7 +- .../employee/engineers_provider.dart | 1 - .../gas_cylinder_size_provider.dart | 6 +- .../gas_cylinder_type_provider.dart | 6 +- .../gas_refill/gas_status_provider.dart | 6 +- .../gas_refill/gas_types_provider.dart | 6 +- .../pentry/pentry_status_provider.dart | 6 +- .../pentry/pentry_task_status_provider.dart | 6 +- .../pentry/pentry_visit_status_provider.dart | 6 +- .../service_report_defect_types_provider.dart | 6 +- .../service_report_last_calls_provider.dart | 8 +- .../service_report_priority_provider.dart | 7 +- .../service_report_reasons_provider.dart | 6 +- .../report/service_report_types_provider.dart | 6 +- .../report/service_types_provider.dart | 8 +- .../service_request_status_provider.dart | 6 +- .../service_request_through_provider.dart | 6 +- .../service_request_type_provider.dart | 6 +- .../providers/api/user_provider.dart | 6 +- lib/main.dart | 7 +- lib/models/device/device.dart | 77 ++-- lib/models/device/device_transfer.dart | 4 - lib/models/device/device_transfer_info.dart | 2 - lib/models/device/model.dart | 47 +++ lib/models/engineer.dart | 14 +- lib/models/hospital.dart | 18 + lib/models/lookup.dart | 14 +- lib/models/pantry/calibration_tools.dart | 2 +- lib/models/pantry/pentry.dart | 28 +- lib/models/pantry/pm_kit.dart | 4 +- lib/models/pantry/ppm_check_list.dart | 2 +- lib/models/part.dart | 20 +- lib/models/service_report.dart | 160 ++++--- .../service_request/service_request.dart | 10 +- lib/models/user.dart | 1 - lib/models/visits/visit.dart | 4 +- lib/models/visits/visits_group.dart | 1 - lib/views/app_style/colors.dart | 1 - .../update_device_transfer.dart | 1 - lib/views/pages/login.dart | 11 +- lib/views/pages/splash_screen.dart | 1 - .../user/gas_refill/gas_refill_details.dart | 1 - lib/views/pages/user/land_page.dart | 130 +++--- .../pages/user/requests/create_request.dart | 1 - .../report/create_service_report.dart | 396 ++++++++++-------- .../requests/report/edit_service_report.dart | 371 +++++++++------- .../pages/user/requests/request_details.dart | 110 ++--- .../pages/user/visits/pantry/edit_pentry.dart | 4 +- .../visits/update_visits_group_sheet.dart | 8 - .../pages/user/visits/visit_details.dart | 1 - lib/views/widgets/app_name_bar.dart | 2 +- lib/views/widgets/app_text_form_field.dart | 2 +- .../widgets/date_and_time/date_picker.dart | 3 +- .../date_and_time/from_to_date_bar.dart | 2 +- .../departments/department_button.dart | 4 +- .../widgets/departments/department_item.dart | 2 +- .../departments/single_department_picker.dart | 4 +- .../device_transfer_info_section.dart | 1 - .../device_trancfer/device_transfer_item.dart | 13 +- .../device_trancfer/device_transfer_list.dart | 8 +- .../widgets/e_signature/e_signature.dart | 6 +- .../auto_complete_devices_field.dart | 9 +- .../equipment/auto_complete_models_field.dart | 8 +- .../widgets/equipment/device_button.dart | 10 +- lib/views/widgets/equipment/device_item.dart | 8 +- .../equipment/single_device_picker.dart | 7 +- .../widgets/gas_refill/gas_refill_item.dart | 12 +- .../widgets/gas_refill/gas_refill_list.dart | 5 +- .../gas_refill_update_details_item.dart | 1 - .../hospital_auto_complete_field.dart | 7 +- .../widgets/hospitals/hospital_button.dart | 4 +- .../widgets/hospitals/hospital_item.dart | 2 +- .../hospitals/single_hospital_picker.dart | 4 +- .../widgets/loaders/loading_manager.dart | 2 +- .../notifications/notification_item.dart | 4 +- .../auto_complete_devices_field.dart | 2 +- .../widgets/pentry/pentry_info_form.dart | 49 ++- .../widgets/pentry/pentry_pm_kit_form.dart | 1 - .../search/service_request_search_bar.dart | 2 - .../widgets/search/visits_search_bar.dart | 1 - .../speech_to_text/speech_to_text.dart | 9 +- .../status/employee/single_type_menu.dart | 1 - .../status/gas_refill/gas_cylinder_type.dart | 1 - .../status/report/service_report_status.dart | 53 +-- .../widgets/status/report/service_status.dart | 4 +- .../service_request_status_mune.dart | 3 - .../service_request_through_mune.dart | 1 - .../service_request_types_mune.dart | 2 - .../widgets/status/single_status_menu.dart | 22 +- 105 files changed, 1089 insertions(+), 941 deletions(-) create mode 100644 lib/models/device/model.dart diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index ae4eae9c..41728339 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -19,9 +20,9 @@ class ApiManager { ) async{ Uri _url = Uri.parse(url); - print(_url); +// print(_url); http.Response response = await http.get(_url,headers: headers); - if(response.body is! List){ + if(jsonDecode(response.body) is Map){ final message = jsonDecode(response.body)["message"]; if(message != null && message.toString().isNotEmpty){ Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); @@ -43,19 +44,19 @@ class ApiManager { headers.addAll(_headers); Uri _url = Uri.parse(url); - print(_url); - print(headers); - print(json.encode(body)); +// print(_url); +// print(headers); + log(json.encode(body)); var request = http.Request('POST', _url); request.body = json.encode(body); request.headers.addAll(headers); http.StreamedResponse _streamedResponse = await request.send(); http.Response response = await http.Response.fromStream(_streamedResponse); - print(response.statusCode); - print(response.body); +// print(response.statusCode); +// log(response.body); - if(response.body is! List){ + if(jsonDecode(response.body) is Map){ final message = jsonDecode(response.body)["message"]; if(message != null && message.toString().isNotEmpty){ Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); @@ -77,18 +78,18 @@ class ApiManager { headers.addAll(_headers); Uri _url = Uri.parse(url); - print(_url); - print(headers); - print(json.encode(body)); + // print(_url); + // print(headers); + // log(json.encode(body)); var request = http.Request('PUT', _url); request.body = json.encode(body); request.headers.addAll(headers); http.StreamedResponse streamedResponse = await request.send(); http.Response response = await http.Response.fromStream(streamedResponse); - print(response.statusCode); - print(response.body); - if(response.body is! List){ + // print(response.statusCode); + // log(response.body); + if(jsonDecode(response.body) is Map){ final message = jsonDecode(response.body)["message"]; if(message != null && message.toString().isNotEmpty){ Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); @@ -110,9 +111,9 @@ class ApiManager { headers.addAll(_headers); Uri _url = Uri.parse(url); - print(_url); - print(_headers); - print(json.encode(body)); + // print(_url); + // print(_headers); + // print(json.encode(body)); var request = http.MultipartRequest('POST', _url); request.fields.addAll(body); request.headers.addAll(_headers); @@ -122,12 +123,12 @@ class ApiManager { } //request.files.addAll(_files); - print(request.files); + // print(request.files); http.StreamedResponse streamedResponse = await request.send(); http.Response response = await http.Response.fromStream(streamedResponse); - print(response.statusCode); - print(response.body); - if(response.body is! List){ + // print(response.statusCode); + // log(response.body); + if(jsonDecode(response.body) is Map){ final message = jsonDecode(response.body)["message"]; if(message != null && message.toString().isNotEmpty){ Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); diff --git a/lib/controllers/api_routes/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart index 012a9a23..0bfb2170 100644 --- a/lib/controllers/api_routes/http_status_manger.dart +++ b/lib/controllers/api_routes/http_status_manger.dart @@ -1,5 +1,5 @@ -import 'package:test_sa/models/subtitle.dart'; import 'package:meta/meta.dart'; +import 'package:test_sa/models/subtitle.dart'; class HttpStatusManger{ static String getStatusMessage({ diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 70dca275..d6607102 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -40,16 +40,16 @@ class URLs{ static get updateRequestDate => "$_baseUrl/handle/update/request"; // get // service report - static get createServiceReport => "$_baseUrl/handle/create/service/report"; // get - static get updateServiceReport => "$_baseUrl/handle/update/service/report"; // get + static get createServiceReport => "$_baseUrl/WorkOrder/AddWorkOrder"; // get + static get updateServiceReport => "$_baseUrl/WorkOrder/UpdateWorkOrder"; // get static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get - static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=34"; // get + static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get - static get getServiceTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get + static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=28"; // get static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get diff --git a/lib/controllers/localization/localization.dart b/lib/controllers/localization/localization.dart index fafc8aaf..a6e7fe82 100644 --- a/lib/controllers/localization/localization.dart +++ b/lib/controllers/localization/localization.dart @@ -1,8 +1,8 @@ import 'dart:convert'; -import 'package:test_sa/models/subtitle.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:test_sa/models/subtitle.dart'; class AppLocalization { diff --git a/lib/controllers/notification/firebase_notification_manger.dart b/lib/controllers/notification/firebase_notification_manger.dart index 19ef543e..153d28fa 100644 --- a/lib/controllers/notification/firebase_notification_manger.dart +++ b/lib/controllers/notification/firebase_notification_manger.dart @@ -1,9 +1,9 @@ import 'dart:convert'; -import 'package:test_sa/models/app_notification.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/models/app_notification.dart'; import 'notification_manger.dart'; diff --git a/lib/controllers/notification/notification_manger.dart b/lib/controllers/notification/notification_manger.dart index 8c0de712..a568d5d3 100644 --- a/lib/controllers/notification/notification_manger.dart +++ b/lib/controllers/notification/notification_manger.dart @@ -1,6 +1,6 @@ -import 'package:test_sa/views/app_style/colors.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:test_sa/views/app_style/colors.dart'; class NotificationManger{ // private constructor to avoid create object diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart index 07b0a57b..27146791 100644 --- a/lib/controllers/providers/api/departments_provider.dart +++ b/lib/controllers/providers/api/departments_provider.dart @@ -1,10 +1,10 @@ import 'dart:convert'; +import 'package:flutter/cupertino.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/department.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class DepartmentsProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index ff1b77f3..ce8920f5 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -1,22 +1,12 @@ import 'dart:convert'; +import 'package:flutter/cupertino.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/controllers/api_routes/http_status_manger.dart'; -import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device_transfer.dart'; -import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; -import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/hospital.dart'; -import 'package:test_sa/models/issue.dart'; -import 'package:test_sa/models/service_report.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/service_request/service_request_search.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class DeviceTransferProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index e957cb17..781e7c45 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -116,7 +116,6 @@ class DevicesProvider extends ChangeNotifier{ } return page; } catch(error) { - print(error); return []; } @@ -144,7 +143,6 @@ class DevicesProvider extends ChangeNotifier{ } return page; } catch(error) { - print(error); return []; } diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index da3b6077..2f460a0a 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -1,17 +1,11 @@ import 'dart:convert'; +import 'package:flutter/cupertino.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/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/issue.dart'; -import 'package:test_sa/models/service_report.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; -import 'package:test_sa/models/service_request/service_request_search.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class GasRefillProvider extends ChangeNotifier{ @@ -83,7 +77,6 @@ class GasRefillProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -127,7 +120,6 @@ class GasRefillProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index 7b19a6e1..bdcb9fa7 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -1,12 +1,12 @@ 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/hospital.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class HospitalsProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart index 36abef10..0f216a0a 100644 --- a/lib/controllers/providers/api/notifications_provider.dart +++ b/lib/controllers/providers/api/notifications_provider.dart @@ -1,10 +1,10 @@ import 'dart:convert'; +import 'package:flutter/cupertino.dart'; +import 'package:http/http.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class NotificationsProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 864adaeb..8603c860 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -1,12 +1,12 @@ 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/part.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class PartsProvider extends ChangeNotifier{ @@ -111,7 +111,6 @@ class PartsProvider extends ChangeNotifier{ } return _page; } catch(error) { - print(error); return []; } diff --git a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart index 9d209fec..feb64cd4 100644 --- a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart +++ b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart @@ -1,13 +1,13 @@ import 'dart:convert'; +import 'package:flutter/cupertino.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/user.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index d9baaec1..39119490 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -1,5 +1,8 @@ import 'dart:convert'; +import 'package:flutter/cupertino.dart'; +import 'package:http/http.dart'; +import 'package:logger/logger.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/pantry/pentry.dart'; @@ -7,9 +10,6 @@ import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; -import 'package:logger/logger.dart'; class RegularVisitsProvider extends ChangeNotifier{ @@ -164,6 +164,7 @@ class RegularVisitsProvider extends ChangeNotifier{ Map body = pentry.toMap(visit.id); body["id"] = visit.id; body["assetId"] = visit.deviceId; + body["ppmScheduleId"] = visit.ppmScheduleId; // body["token"] = user.token; // body["vChecklists"]?.addAll({}); // body["vCalibrationTools"]?.addAll({"visitId": visit.id,}); @@ -183,7 +184,6 @@ class RegularVisitsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 67f7f5ab..36e20746 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -1,8 +1,10 @@ import 'dart:convert'; +import 'package:flutter/cupertino.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/controllers/api_routes/http_status_manger.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; @@ -11,8 +13,6 @@ import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/user.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:http/http.dart'; class ServiceRequestsProvider extends ChangeNotifier{ @@ -89,7 +89,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); isLoading = false; stateCode = -1; notifyListeners(); @@ -182,7 +181,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - print(error); return -1; } @@ -255,16 +253,20 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required ServiceRequest request, }) async { Response response; - Map body = report.toMap(); - body["uid"] = user.id; - body["token"] = user.token; - body["job_id"] = request.id; + try{ - response = await post( - Uri.parse( - host+URLs.createServiceReport), - body: body, + Map body = report.toMap(request); + // body["uid"] = user.id; + // body["token"] = user.token; + response = await ApiManager.instance.post( + URLs.createServiceReport, + body: body ); + // response = await post( + // Uri.parse( + // host+URLs.createServiceReport), + // body: body, + // ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { @@ -274,7 +276,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - return -1; } @@ -322,18 +323,25 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required ServiceRequest request, }) async { Response response; - Map body = report.toMap(); - body["uid"] = user.id; - body["token"] = user.token; - body["job_id"] = request.id; - body["report_id"] = request.reportID; + //Map body = report.toMap(request); + // body["uid"] = user.id; + // body["token"] = user.token; + // body["job_id"] = request.id; + // body["report_id"] = request.reportID; try{ - response = await post( - Uri.parse( - host+URLs.updateServiceReport), - body: body, + Map body = report.toMap(request); + // body["uid"] = user.id; + // body["token"] = user.token; + response = await ApiManager.instance.put( + URLs.updateServiceReport, + body: body ); - stateCode = response.statusCode; + // response = await post( + // Uri.parse( + // host+URLs.updateServiceReport), + // body: body, + // ); + // stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { reset(); @@ -342,7 +350,6 @@ class ServiceRequestsProvider extends ChangeNotifier{ return response.statusCode; } catch(error) { - return -1; } @@ -355,7 +362,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required ServiceRequest request, }) async { Response response; - Map body = {}; + Map body = {}; body["uid"] = user.id; body["token"] = user.token; body["job_id"] = request.id; @@ -385,7 +392,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ } Future getSingleServiceReport({ - @required String reportId, + @required int reportId, @required String host, @required User user, @required Subtitle subtitle, @@ -406,7 +413,7 @@ class ServiceRequestsProvider extends ChangeNotifier{ if (response.statusCode >= 200 && response.statusCode < 300){ // If the call to the server was successful, parse the JSON. return ServiceReport.fromJson( - json.decode(utf8.decode(response.bodyBytes)),reportId); + json.decode(response.body)["data"],reportId); }else{ throw(HttpStatusManger.getStatusMessage( status: response.statusCode, subtitle: subtitle)); diff --git a/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart index 757b13f9..f0ff7e05 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class AssignedToProvider extends ChangeNotifier{ @@ -62,7 +62,6 @@ class AssignedToProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart index 67c10b26..af47a022 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart @@ -62,7 +62,6 @@ class EngineersProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart index ecf5a0c7..7952a2f6 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class GasCylinderSizesProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart index 0d1a1e0a..370370c1 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class GasCylinderTypesProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart index 6073c9fe..be389cdf 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class GasStatusProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index 3286ea00..63b0e0ed 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class GasTypesProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart index e5d769ac..335aae1d 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class PentryStatusProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart index 689f357d..5690aa83 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class PentryTaskStatusProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart index c616d746..f86f15b0 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class PentryVisitStatusProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart index 563ba8d8..775dd106 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceRequestDefectTypesProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart index b76938fd..59fc821a 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceReportLastCallsProvider extends ChangeNotifier{ @@ -43,7 +43,7 @@ class ServiceReportLastCallsProvider 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 getCalls ({String host,User user,String serviceStatus}) async { + Future getCalls ({String host,User user,int serviceStatus}) async { if(_loading == true) return -2; _loading = true; diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart index a9c566e0..d25644c9 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceRequestPriorityProvider extends ChangeNotifier{ @@ -63,7 +63,6 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; _stateCode = -1; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart index 7df11d8d..6a4808f2 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceReportReasonsProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart index f385c27e..084daf1c 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceReportTypesProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart index 9e25f2eb..48da78f4 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceStatusProvider extends ChangeNotifier{ @@ -50,7 +50,7 @@ class ServiceStatusProvider extends ChangeNotifier{ Response response; try{ response = await ApiManager.instance.get( - URLs.getServiceTypes, + URLs.getAssetTypes, ); _stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart index 4ead90e0..91b7d4ca 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceRequestStatusProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart index 592ec4dc..ec2e6720 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceRequestedThroughProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart index bcc01b4a..76e6c7c4 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart @@ -1,12 +1,12 @@ 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'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class ServiceRequestTypeProvider extends ChangeNotifier{ diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 55788923..565408d5 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -1,11 +1,10 @@ import 'dart:convert'; -import 'package:fluttertoast/fluttertoast.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/user.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; class UserProvider extends ChangeNotifier{ @@ -64,7 +63,6 @@ class UserProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } catch(error) { - print(error); _loading = false; notifyListeners(); return -1; diff --git a/lib/main.dart b/lib/main.dart index f21c35b5..0e8e832a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; @@ -37,9 +40,7 @@ import 'package:test_sa/views/pages/user/visits/preventive_maintenance_visits_pa import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:provider/provider.dart'; + import 'controllers/providers/api/parts_provider.dart'; import 'controllers/providers/api/preventive_maintenance_visits_provider.dart'; import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; diff --git a/lib/models/device/device.dart b/lib/models/device/device.dart index cf6eed07..5bcecd50 100644 --- a/lib/models/device/device.dart +++ b/lib/models/device/device.dart @@ -1,45 +1,44 @@ +import 'package:test_sa/models/hospital.dart'; +import 'package:test_sa/models/lookup.dart'; + +import 'model.dart'; + class Device{ int id; String serialNumber; String number; - String brand; - String model; - DateTime productionDate; - DateTime supplyDate; - DateTime installDate; - DateTime receivingDate; - DateTime operationDate; - DateTime warrantyDate; + // String brand; + // String model; + ModelDefinition modelDefinition; + Hospital hospital; + Device({ this.id, this.serialNumber, this.number, - this.brand, - this.model, - this.productionDate, - this.supplyDate, - this.installDate, - this.receivingDate, - this.operationDate, - this.warrantyDate, + this.hospital, + // this.brand, + // this.model, + this.modelDefinition, + }); + + + factory Device.fromJson(Map parsedJson){ + return Device( id: parsedJson["id"], serialNumber: parsedJson["assetSerialNo"], number: parsedJson["assetNumber"], - brand: parsedJson["modelDefinition"] == null ? "" : - parsedJson["modelDefinition"]["manufacturerName"], - model: parsedJson["modelDefinition"] == null ? "" : - parsedJson["modelDefinition"]["modelName"], - productionDate: getDateFromString(parsedJson["production_date"]), - supplyDate: getDateFromString(parsedJson["supply_date "]), - installDate: getDateFromString(parsedJson["install_date "]), - receivingDate: getDateFromString(parsedJson["receving_date "]), - operationDate: getDateFromString(parsedJson["operation_date "]), - warrantyDate: getDateFromString(parsedJson["warranty_date "]), + modelDefinition:ModelDefinition.fromJson(parsedJson["modelDefinition"]), + hospital:Hospital.fromJson(parsedJson["site"]), + // parsedJson["modelDefinition"] == null ? "" : + // parsedJson["modelDefinition"]["manufacturerName"], + // model: parsedJson["modelDefinition"] == null ? "" : + // parsedJson["modelDefinition"]["modelName"], ); } @@ -48,21 +47,19 @@ class Device{ id: device.id, serialNumber: device.serialNumber, number: device.number, - brand: device.brand, - model: device.model, - productionDate: device.productionDate, - supplyDate: device.supplyDate, - installDate: device.installDate, - receivingDate: device.receivingDate, - operationDate: device.operationDate, - warrantyDate: device.warrantyDate, + // brand: device.brand, + // model: device.model, ); } -} -DateTime getDateFromString(String unixDate){ - if(unixDate == null) - return null; - return DateTime.fromMillisecondsSinceEpoch( - int.parse(unixDate)); + Map toMap(Lookup assetType) { + return { + 'id': id, + 'assetSerialNo': serialNumber, + 'assetNumber': number, + 'modelDefinition': modelDefinition.toJson(), + 'site': hospital.toMap(), + 'AssetType':assetType.toMap(), + }; + } } \ No newline at end of file diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index d2e18572..d76728bf 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -1,4 +1,3 @@ -import 'package:http/http.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device.dart'; @@ -42,9 +41,6 @@ class DeviceTransfer{ } factory DeviceTransfer.fromJson(Map parsedJson){ - print(parsedJson["id"],); - print(URLs.getFileUrl(parsedJson["senderAttachmentName"]),); - print(URLs.getFileUrl(parsedJson["receiverAttachmentName"]),); return DeviceTransfer( id: parsedJson["id"], title: parsedJson["transferCode"], diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index 4475b085..05e877f5 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -1,6 +1,4 @@ -import 'package:http/http.dart'; import 'package:test_sa/models/department.dart'; -import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; diff --git a/lib/models/device/model.dart b/lib/models/device/model.dart new file mode 100644 index 00000000..bd49b250 --- /dev/null +++ b/lib/models/device/model.dart @@ -0,0 +1,47 @@ +class ModelDefinition { + int id; + String assetName; + String modelDefCode; + String modelName; + String manufacturerName; + String supplierName; + String replacementDate; + int lifeSpan; + + ModelDefinition( + {this.id, + this.assetName, + this.modelDefCode, + this.modelName, + this.manufacturerName, + this.supplierName, + this.replacementDate, + this.lifeSpan,}); + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['assetName'] = assetName; + data['modelDefCode'] = modelDefCode; + data['modelName'] = modelName; + data['manufacturerName'] = manufacturerName; + data['supplierName'] = supplierName; + data['replacementDate'] = replacementDate; + data['lifeSpan'] = lifeSpan; + return data; + } + + factory ModelDefinition.fromJson(Map map) { + if(map == null) return null; + return ModelDefinition( + id: map['id'] as int, + assetName: map['assetName'] as String, + modelDefCode: map['modelDefCode'] as String, + modelName: map['modelName'] as String, + manufacturerName: map['manufacturerName'] as String, + supplierName: map['supplierName'] as String, + replacementDate: map['replacementDate'] as String, + lifeSpan: map['lifeSpan'] as int, + ); + } +} \ No newline at end of file diff --git a/lib/models/engineer.dart b/lib/models/engineer.dart index 74916e45..d8b15f07 100644 --- a/lib/models/engineer.dart +++ b/lib/models/engineer.dart @@ -7,10 +7,12 @@ class Engineer{ this.name, }); + + factory Engineer.fromJson(Map parsedJson){ return Engineer( - id: parsedJson["userId"], - name: parsedJson["userName"], + id: parsedJson["userId"] ?? parsedJson["id"], + name: parsedJson["userName"] ?? parsedJson["name"], ); } factory Engineer.fromEngineer(Engineer department){ @@ -28,4 +30,12 @@ class Engineer{ @override int get hashCode => id.hashCode; + + Map toMap() { + return { + 'id': id, + 'name': name, + }; + } + } \ No newline at end of file diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index 432b1748..71cde19d 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -1,16 +1,23 @@ class Hospital{ int id; + int customerCode; String name; + List buildings; Hospital({ this.id, + this.customerCode, this.name, + this.buildings, }); + factory Hospital.fromJson(Map parsedJson){ return Hospital( id: parsedJson["id"], name: parsedJson["custName"], + customerCode: parsedJson["customerCode"], + buildings: parsedJson["buildings"] ); } @@ -18,6 +25,17 @@ class Hospital{ return Hospital( id: hospital?.id, name: hospital?.name, + customerCode: hospital?.customerCode, + buildings:hospital?.buildings ); } + + Map toMap() { + return { + 'id': id, + 'customerCode': customerCode, + 'custName': name, + "buildings":buildings + }; + } } \ No newline at end of file diff --git a/lib/models/lookup.dart b/lib/models/lookup.dart index dd0ba990..3d803d0e 100644 --- a/lib/models/lookup.dart +++ b/lib/models/lookup.dart @@ -44,7 +44,7 @@ class Lookup{ return Lookup( name: parsedJson["name"], id: parsedJson["id"], - value: parsedJson["value"] ?? parsedJson["id"], + value: parsedJson["value"], ); } @@ -58,10 +58,10 @@ class Lookup{ // ); // } - factory Lookup.fromIntIdJson(Map parsedJson){ - return Lookup( - name: parsedJson["value"], - id: parsedJson["id"], - ); - } + // factory Lookup.fromIntIdJson(Map parsedJson){ + // return Lookup( + // name: parsedJson["value"], + // id: parsedJson["id"], + // ); + // } } \ No newline at end of file diff --git a/lib/models/pantry/calibration_tools.dart b/lib/models/pantry/calibration_tools.dart index 9e006eac..4207c99b 100644 --- a/lib/models/pantry/calibration_tools.dart +++ b/lib/models/pantry/calibration_tools.dart @@ -13,7 +13,7 @@ class CalibrationTool{ Map toMap(int visitId) { return { - "id":id, + "id":id ?? 0, "visitId": visitId, if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(), if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(), diff --git a/lib/models/pantry/pentry.dart b/lib/models/pantry/pentry.dart index e624f9e6..0f7e1cfa 100644 --- a/lib/models/pantry/pentry.dart +++ b/lib/models/pantry/pentry.dart @@ -2,9 +2,9 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; -import 'package:test_sa/models/pantry/contact.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/timer_model.dart'; @@ -22,8 +22,10 @@ class Pentry{ List ppmCheckLists; List calibrationTools; List pmKits; - String signature; - Uint8List localSignature; + String signatureNurse; + String signatureEngineer; + Uint8List localNurseSignature; + Uint8List localEngineerSignature; Pentry({ this.travelingHours, @@ -38,8 +40,10 @@ class Pentry{ this.ppmCheckLists, this.calibrationTools, this.pmKits, - this.signature, - this.localSignature + this.signatureNurse, + this.signatureEngineer, + this.localNurseSignature, + this.localEngineerSignature }); bool validate(){ @@ -57,7 +61,7 @@ class Pentry{ Map toMap(int visitId) { Map map = {}; map["visitStatusId"] = ppmVisitStatus?.id.toString(); - if(status != null) map["visitStatusId"] = status?.id.toString(); + //if(status != null) map["visitStatusId"] = status?.id.toString(); if(travelingHours != null) map["travelingHours"] = travelingHours; //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); map["actualDate"] = actualVisitDate.toIso8601String(); @@ -85,7 +89,8 @@ class Pentry{ map["vChecklists"] = ppmCheckLists.map((e) => e.toMap(visitId)).toList(); map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList(); map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList(); - map["signature"] = signature; + map["nurseSignature"] = signatureNurse; + map["engSignature"] = signatureEngineer; return map; } @@ -132,7 +137,8 @@ class Pentry{ ppmCheckLists: ppmCheckLists, calibrationTools: calibrationTools, pmKits: pmKits, - signature: map["signature"], + signatureNurse: URLs.getFileUrl(map["nurseSignature"]) , + signatureEngineer:URLs.getFileUrl(map["engSignature"]), ); } @@ -148,7 +154,8 @@ class Pentry{ List ppmCheckLists, List calibrationTools, List pmKits, - String signature + String signatureNurse, + String signatureEngineer, }) { return Pentry( ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus, @@ -162,7 +169,8 @@ class Pentry{ ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(), calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(), pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(), - signature: signature ?? this.signature + signatureNurse: signatureNurse ?? this.signatureNurse, + signatureEngineer: signatureEngineer ?? this.signatureEngineer ); } } \ No newline at end of file diff --git a/lib/models/pantry/pm_kit.dart b/lib/models/pantry/pm_kit.dart index ddb75a40..40bcf514 100644 --- a/lib/models/pantry/pm_kit.dart +++ b/lib/models/pantry/pm_kit.dart @@ -23,7 +23,7 @@ class PMKit{ Map toMap(int visitId) { return { - "id":id, + "id":id ?? 0, "visitId": visitId, if(itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), // if(itemName != null) 'itemName': itemName, @@ -38,7 +38,7 @@ class PMKit{ factory PMKit.fromMap(Map map) { return PMKit( id: map['id'], - //itemCode: Lookup.fromJson(map['itemCode']), + itemCode: Lookup(id:map['partCatalogItemId'],name:map["partNumber"]), itemName: map['itemName'] as String, preparationTimeFrame: map['preparationTimeFrame'] as String, kitFrequencyDemand: map['kitFrequencyDemand'] as String, diff --git a/lib/models/pantry/ppm_check_list.dart b/lib/models/pantry/ppm_check_list.dart index cbf750bc..3ed03dae 100644 --- a/lib/models/pantry/ppm_check_list.dart +++ b/lib/models/pantry/ppm_check_list.dart @@ -17,7 +17,7 @@ class PPMCheckList{ Map toMap(int visitId) { return { - 'id': id, + 'id': id ?? 0, "visitId": visitId, if(status != null) 'taskStatusId': status?.id.toString(), if(title != null) 'task': title, diff --git a/lib/models/part.dart b/lib/models/part.dart index 5589d9b0..298f4359 100644 --- a/lib/models/part.dart +++ b/lib/models/part.dart @@ -1,23 +1,37 @@ class Part{ int id; + int reportPartID; String code; String name; int quantity; Part({ this.id, + this.reportPartID, this.code, this.name, this.quantity = 1, }); - factory Part.fromJson(Map parsedJson){ + Map toJson(){ + return { + "id": reportPartID ?? 0, + "sparePart":{ + "id":id, + "partNo": code, + "partName":name + }, + "qty":quantity + }; + } + + factory Part.fromJson(Map parsedJson,{Map reportJson}){ return Part( id: parsedJson["id"], + reportPartID: reportJson != null ? reportJson["id"] : null, code: parsedJson["partNo"], name: parsedJson["partName"], - quantity: parsedJson["partQuantity"] == null - ? 1 : int.tryParse(parsedJson["partQuantity"].toString()) ?? 1, + quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1, ); } } \ No newline at end of file diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 01b75bec..58eb2c98 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -1,21 +1,25 @@ -import 'dart:convert'; +import 'dart:typed_data'; +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/device/device.dart'; -import 'package:test_sa/models/part.dart'; +import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/part.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/timer_model.dart'; class ServiceReport { - String id; + int id; String operatingHours; DateTime visitDate; DateTime endDate; - Lookup serviceType; + Lookup assetType; Lookup callLastSituation; + Engineer engineer; Lookup status; Lookup type; Lookup reason; - String faultDescription; + int faultDescriptionId; String workPreformed; //String workHours; String travelingHours; @@ -27,18 +31,23 @@ class ServiceReport { String quantity; String jobSheetNumber; TimerModel timer; + String signatureNurse; + String signatureEngineer; + Uint8List localNurseSignature; + Uint8List localEngineerSignature; ServiceReport({ this.id, this.visitDate, this.endDate, - this.serviceType, + this.assetType, this.status, this.type, - this.faultDescription, + this.faultDescriptionId, //this.workHours, this.travelingHours, this.parts, + this.engineer, this.workPreformed, this.reason, this.operatingHours, @@ -50,53 +59,73 @@ class ServiceReport { this.invoiceNumber, this.quantity = "1", this.timer, + this.signatureNurse, + this.signatureEngineer, + this.localNurseSignature, + this.localEngineerSignature }); - Map toMap(){ - Map _map = {}; + Map toMap(ServiceRequest request){ + Map _map = {}; if(id != null) _map["id"] = id; - if(visitDate != null) _map["visit_date"] = (visitDate.millisecondsSinceEpoch ~/ 1000).toString(); - if(serviceType != null) _map["service_type"] = serviceType.id.toString(); - if(status != null) _map["status"] = status.toMap(); - if(type != null) _map["service_report_type"] = type.id.toString(); - if(faultDescription != null && faultDescription.isNotEmpty) _map["fault_description"] = faultDescription; + if(visitDate != null) _map["visitDate"] = visitDate.toIso8601String(); + //if(serviceType != null) _map["service_type"] = serviceType.id.toString(); + if(status != null) _map["status"] = status?.toMap(); + if(type != null) _map["typeOfWO"] = type?.toMap(); + if(assetType != null) _map["TypeOfWO"] = assetType?.toMap(); + //if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId; //if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours; if(timer != null){ - _map["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); - _map["end_time"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); - _map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); + _map["startofWorkTime"] = timer.startAt.toIso8601String(); + _map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String(); + _map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); } if(travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours; - if(workPreformed != null && workPreformed.isNotEmpty) _map["work_performed"] = workPreformed; + // if(workPreformed != null && workPreformed.isNotEmpty){ + // _map["faultDescription"] = { + // //"id":faultDescriptionId ?? 0, + // "workPerformed":workPreformed + // }; + // } if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; if(parts != null && parts.isNotEmpty){ - Map _partsMap = {}; - // parts.forEach((part) { - // if(part.id == null) - // _partsMap[part.id] = part.quantity; - // }); - _map["parts"] = json.encode(_partsMap); + _map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList(); + } + if(device != null && device.id != null){ + _map["callRequest"] = { + "id":request.id, + "asset":device?.toMap(assetType), + }; + _map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber; } - //if(device?.id != null && device.id != null) _map["eq_id"] = device.id; - if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; - if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); - if(reason != null) _map["reasons"] = reason.toMap(); - if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; - if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.id.toString(); - if(image != null) _map["image"] = image; - if(invoiceCode != null) _map["invoice_no"] = invoiceCode; - if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; + _map["AssignedEmployee"] = engineer?.toMap(); + //if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; + //if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); + if(reason != null) _map["reason"] = reason.toMap(); + //if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; + if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap(); + //if(image != null) _map["image"] = image; + //if(invoiceCode != null) _map["invoice_no"] = invoiceCode; + //if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; + if(image != null){ + _map["attachmentsWorkOrder"]=[{ + "name":image + }]; + } + _map["nurseSignature"] = signatureNurse; + _map["engSignature"] = signatureEngineer; return _map; } bool validate(){ if(visitDate == null) return false; - if(serviceType == null) return false; + //if(serviceType == null) return false; if(status == null) return false; if(type == null) return false; + if(engineer == null) return false; if(callLastSituation == null) return false; - if(callLastSituation?.id == 12){ - if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; + if(callLastSituation?.value == 12){ + // if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false; } if(parts == null) return false; @@ -109,42 +138,49 @@ class ServiceReport { return true; } - factory ServiceReport.fromJson(Map parsedJson,String id){ + factory ServiceReport.fromJson(Map parsedJson,int id){ List _parts = []; - if(parsedJson["parts"] != null){ - if(parsedJson["parts"][0]["id"] != null){ - List partsList = parsedJson["parts"]; - _parts = partsList.map((e) => Part.fromJson(e)).toList(); + if(parsedJson["sparePartsWorkOrders"] != null){ + if(parsedJson["sparePartsWorkOrders"][0]["id"] != null){ + List partsList = parsedJson["sparePartsWorkOrders"]; + _parts = partsList.map((e) => Part.fromJson( + e["sparePart"],reportJson: e)).toList(); } } return ServiceReport( id: id, - serviceType: Lookup.fromJson(parsedJson["service_type"]), - callLastSituation: Lookup.fromJson(parsedJson["call_last_situtation"]), - reason: Lookup.fromJson(parsedJson["reasons"]), - status: Lookup.fromJson(parsedJson["service_report_status"]), - type: Lookup.fromJson(parsedJson["service_report_type"]), - faultDescription: parsedJson["fault_description"], - endDate:getDate(parsedJson["end_date"]), - invoiceCode: parsedJson["invoice_code"], - invoiceNumber: parsedJson["invoice_no"], - jobSheetNumber: parsedJson["job_sheet_no"], - operatingHours: parsedJson["operation_hours"], + assetType: Lookup.fromJson(parsedJson["assetType"]), + callLastSituation: Lookup.fromJson(parsedJson["calllastSituation"]), + reason: Lookup.fromJson(parsedJson["reason"]), + status: Lookup.fromJson(parsedJson["status"]), + type: Lookup.fromJson(parsedJson["typeOfWO"]), + //faultDescriptionId: parsedJson["fault_description"], + endDate:DateTime.tryParse(parsedJson["endofWorkTime"]), + //invoiceCode: parsedJson["invoice_code"], + //invoiceNumber: parsedJson["invoice_no"], + //jobSheetNumber: parsedJson["job_sheet_no"], + //operatingHours: parsedJson["workingHours"], + engineer: Engineer.fromJson(parsedJson["assignedEmployee"]), parts: _parts, - quantity: parsedJson["nid"], - travelingHours: parsedJson["traveling_hours"], - visitDate: getDate(parsedJson["visit_date"]), + //quantity: parsedJson["nid"], + //travelingHours: parsedJson["traveling_hours"], + visitDate: DateTime.tryParse(parsedJson["visitDate"]), //workHours: parsedJson["working_hours"], timer: TimerModel( - durationInSecond: (int.tryParse(parsedJson["working_hours"] ?? "") ?? 0) * 60 *60), - workPreformed: parsedJson["work_performed"], - device: parsedJson["eq_nid"] == null ? null : Device(id: parsedJson["eq_nid"],serialNumber: parsedJson["eq_serial"]) + startAt: DateTime.tryParse(parsedJson["startofWorkTime"]), + endAt: DateTime.tryParse(parsedJson["endofWorkTime"]), + durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 *60).toInt() + ), + //workPreformed: parsedJson["work_performed"], + device: Device.fromJson(parsedJson["callRequest"]["asset"]), + signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]) , + signatureEngineer:URLs.getFileUrl(parsedJson["engSignature"]), ); } - static getDate(String date){ - return date == null || date.isEmpty - ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); - } + // static getDate(String date){ + // return date == null || date.isEmpty + // ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); + // } } \ No newline at end of file diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 23f178a8..eea5d244 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -1,8 +1,7 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; -import '../timer_model.dart'; - class ServiceRequest{ String id; String requestCode; @@ -29,12 +28,13 @@ class ServiceRequest{ String visitDate; DateTime nextVisitDate; String jobSheetNumber; - String reportID; + int reportID; String deviceNumber; Lookup priority; Lookup defectType; Lookup type; Lookup requestedThrough; + Device device; ServiceRequest({ this.id, @@ -68,6 +68,7 @@ class ServiceRequest{ this.deviceNumber, this.type, this.requestedThrough, + this.device, }); factory ServiceRequest.fromJson(Map parsedJson){ @@ -98,7 +99,7 @@ class ServiceRequest{ engineerName: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["name"], hospitalId: parsedJson["asset"]["site"]["id"], - reportID: parsedJson["workOrder"]["id"].toString(), + reportID: parsedJson["workOrder"]["workOrderId"], viewReport: parsedJson["workOrder"] != null, deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], engineerMobile: parsedJson["assignedEmployee"] == null ? null : @@ -108,6 +109,7 @@ class ServiceRequest{ visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), workPerformed: parsedJson["workOrder"]["workPerformed"], + device: Device.fromJson(parsedJson["asset"]) ); } } \ No newline at end of file diff --git a/lib/models/user.dart b/lib/models/user.dart index 6aabf108..246ed717 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -99,7 +99,6 @@ class User{ } else { type = UsersTypes.engineer; } - print(parsedJson); return User( id: parsedJson["userID"], userName: parsedJson["username"], diff --git a/lib/models/visits/visit.dart b/lib/models/visits/visit.dart index 7554ecd4..10717be1 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,6 +1,5 @@ import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pentry.dart'; -import 'package:test_sa/models/timer_model.dart'; class Visit{ int id; @@ -10,6 +9,7 @@ class Visit{ int hospitalId; String hospitalName; int deviceId; + int ppmScheduleId; String deviceSerialNumber; String deviceArabicName; String deviceEnglishName; @@ -24,6 +24,7 @@ class Visit{ Visit({ this.id, + this.ppmScheduleId, this.serialNumber, this.hospitalId, this.hospitalName, @@ -52,6 +53,7 @@ class Visit{ return Visit( id: parsedJson["id"], serialNumber: parsedJson["visitCode"], + ppmScheduleId: parsedJson["ppmScheduleId"], hospitalId: parsedJson["siteId"], deviceNumber: parsedJson["assetNumber"], hospitalName: parsedJson["siteName"], diff --git a/lib/models/visits/visits_group.dart b/lib/models/visits/visits_group.dart index 3f47b8cf..57f377ae 100644 --- a/lib/models/visits/visits_group.dart +++ b/lib/models/visits/visits_group.dart @@ -1,6 +1,5 @@ import 'package:test_sa/models/engineer.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/visits/visit.dart'; class VisitsGroup{ diff --git a/lib/views/app_style/colors.dart b/lib/views/app_style/colors.dart index 58f7d442..9a90cbc7 100644 --- a/lib/views/app_style/colors.dart +++ b/lib/views/app_style/colors.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:test_sa/models/lookup.dart'; class AColors { AColors._(); static const Color white = Color(0xffffffff); diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 7604e2ce..d3e3e479 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/api_routes/http_status_manger.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'; diff --git a/lib/views/pages/login.dart b/lib/views/pages/login.dart index 35e0570c..2f8c48fb 100644 --- a/lib/views/pages/login.dart +++ b/lib/views/pages/login.dart @@ -1,24 +1,17 @@ -import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/controllers/notification/notification_manger.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'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/pages/register.dart'; import 'package:test_sa/views/pages/user/land_page.dart'; 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/buttons/app_flat_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; - -import '../widgets/buttons/app_outlined_button.dart'; class Login extends StatefulWidget { static final String id = "/login"; @override diff --git a/lib/views/pages/splash_screen.dart b/lib/views/pages/splash_screen.dart index 9892b126..bd7a770f 100644 --- a/lib/views/pages/splash_screen.dart +++ b/lib/views/pages/splash_screen.dart @@ -27,7 +27,6 @@ class _SplashScreenState extends State { UserProvider _userProvider; _goToUserScreen(User user){ - print(user.toJson()); if(user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())){ _userProvider.user = user; // Navigator.of(context).pushNamed(Login.id); 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 8b053b6b..bed4999d 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -13,7 +13,6 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; -import 'package:test_sa/views/widgets/gas_refill/gas_refill_create_details_item.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_update_details_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index 5bf91817..e5b612e9 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -24,14 +24,12 @@ import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; -import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; import 'package:test_sa/views/pages/user/requests/create_request.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/dialogs/dialog.dart'; import 'package:test_sa/views/widgets/drawer/drawer_item.dart'; -import 'package:url_launcher/url_launcher.dart'; import '../../widgets/land_page/land_page_item.dart'; import 'profile_page.dart'; @@ -263,70 +261,70 @@ class _LandPageState extends State { ), ), ), - Align( - alignment: Alignment.bottomCenter, - child: Container( - padding: EdgeInsets.all(16), - color: AColors.primaryColor, - child: Row( - children: [ - AIconButton( - iconData: Icons.mail, - onPressed: (){ - launch("mailto:customerservice@Test SA.com"); - - }, - ), - Spacer(), - // Expanded( - // child: MaterialButton( - // splashColor: AColors.secondaryColor.withOpacity(.5), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [ - // Container( - // padding: EdgeInsets.all(12), - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular( - // 8 * AppStyle.getScaleFactor(context) - // ), - // color: AColors.onPrimaryColor - // ), - // child: Icon( - // Icons.phone_in_talk, - // color: AColors.primaryColor , - // size: 32, - // ), - // ), - // SizedBox( - // width: 12 * AppStyle.getScaleFactor(context), - // ), - // Text( - // "${_subtitle.hotLine}\n ", - // - // style: Theme.of(context).textTheme.headline6.copyWith( - // color: AColors.white, - // letterSpacing: 2.75, - // fontWeight: FontWeight.bold - // ), - // ), - // ], - // ), - // onPressed: (){ - // //launch("tel:15564"); - // }, - // ), - // ), - AIconButton( - iconData: Icons.notifications, - onPressed: (){ - Navigator.of(context).pushNamed(NotificationsPage.id); - }, - ), - ], - ), - ), - ), + // Align( + // alignment: Alignment.bottomCenter, + // child: Container( + // padding: EdgeInsets.all(16), + // color: AColors.primaryColor, + // child: Row( + // children: [ + // AIconButton( + // iconData: Icons.mail, + // onPressed: (){ + // launch("mailto:customerservice@Test SA.com"); + // + // }, + // ), + // Spacer(), + // // Expanded( + // // child: MaterialButton( + // // splashColor: AColors.secondaryColor.withOpacity(.5), + // // child: Row( + // // mainAxisAlignment: MainAxisAlignment.center, + // // children: [ + // // Container( + // // padding: EdgeInsets.all(12), + // // decoration: BoxDecoration( + // // borderRadius: BorderRadius.circular( + // // 8 * AppStyle.getScaleFactor(context) + // // ), + // // color: AColors.onPrimaryColor + // // ), + // // child: Icon( + // // Icons.phone_in_talk, + // // color: AColors.primaryColor , + // // size: 32, + // // ), + // // ), + // // SizedBox( + // // width: 12 * AppStyle.getScaleFactor(context), + // // ), + // // Text( + // // "${_subtitle.hotLine}\n ", + // // + // // style: Theme.of(context).textTheme.headline6.copyWith( + // // color: AColors.white, + // // letterSpacing: 2.75, + // // fontWeight: FontWeight.bold + // // ), + // // ), + // // ], + // // ), + // // onPressed: (){ + // // //launch("tel:15564"); + // // }, + // // ), + // // ), + // AIconButton( + // iconData: Icons.notifications, + // onPressed: (){ + // Navigator.of(context).pushNamed(NotificationsPage.id); + // }, + // ), + // ], + // ), + // ), + // ), ], ), ), diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index 715a1488..5fff68c1 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -8,7 +8,6 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_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'; 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 2d65c34b..8fe279c6 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -12,8 +12,6 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic 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'; -import 'package:test_sa/models/device/device.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; @@ -24,15 +22,17 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; 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/speech_to_text/speech_to_text.dart'; +import 'package:test_sa/views/widgets/status/employee/engineers_mune.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'; +import 'package:test_sa/views/widgets/status/report/service_report_type.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; @@ -67,11 +67,8 @@ class _CreateServiceReportState extends State with TickerPr void initState() { _serviceReport = ServiceReport( visitDate: DateTime.now(), - type: const Lookup(id: 2), - device: Device( - id: widget.request.deviceId, - serialNumber: widget.request.deviceSerialNumber, - ), + //type: const Lookup(value: 2), + device: widget.request.device, parts: [] ); super.initState(); @@ -158,25 +155,25 @@ class _CreateServiceReportState extends State with TickerPr Row( children: [ // Report Status - // Expanded( - // child: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // ASubTitle(_subtitle.reportType), - // _validate && _serviceReport.type == null ? - // ASubTitle(_subtitle.requiredWord,color: Colors.red,): - // const SizedBox.shrink(), - // const SizedBox(height: 4,), - // ServiceReportTypeMenu( - // initialValue: _serviceReport.type, - // onSelect: (status){ - // _serviceReport.type = status; - // }, - // ), - // ], - // ), - // ), - // const SizedBox(width: 8,), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.reportType), + _validate && _serviceReport.type == null ? + ASubTitle(_subtitle.requiredWord,color: Colors.red,): + const SizedBox.shrink(), + const SizedBox(height: 4,), + ServiceReportTypeMenu( + initialValue: _serviceReport.type, + onSelect: (status){ + _serviceReport.type = status; + }, + ), + ], + ), + ), + const SizedBox(width: 8,), // visit date Expanded( child: Column( @@ -231,14 +228,14 @@ class _CreateServiceReportState extends State with TickerPr ), const SizedBox(height: 8,), ASubTitle(_subtitle.serviceType), - _validate && _serviceReport.serviceType == null ? + _validate && _serviceReport.assetType == null ? ASubTitle(_subtitle.requiredWord,color: Colors.red,): const SizedBox.shrink(), const SizedBox(height: 4,), - ServiceStatusMenu( - initialValue: _serviceReport.serviceType, + ServiceAssetTypeMenu( + initialValue: _serviceReport.assetType, onSelect: (status){ - _serviceReport.serviceType = status; + _serviceReport.assetType = status; }, ), const SizedBox(height: 8,), @@ -265,36 +262,53 @@ class _CreateServiceReportState extends State with TickerPr ), ), const SizedBox(width: 8,), - Provider.of(context).isLoading == null - ? const SizedBox.shrink(): + // Provider.of(context).isLoading == null + // ? const SizedBox.shrink(): // Call's last Situation - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - - ASubTitle(_subtitle.callLastSituation), - _validate && _serviceReport.callLastSituation == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), - ServiceReportLastCallsMenu( - report: _serviceReport, - onSelect: (status){ - if(status?.id == 12 - || _serviceReport.callLastSituation?.id == 12){ - _serviceReport.callLastSituation = status; - setState(() {}); - } else { - _serviceReport.callLastSituation = status; - } - }, + Consumer( + builder: (_, provider, __) { + if(provider.isLoading == null) return const SizedBox.shrink(); + return Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.callLastSituation), + _validate && _serviceReport.callLastSituation == null ? + ASubTitle(_subtitle.requiredWord,color: Colors.red,): + const SizedBox.shrink(), + const SizedBox(height: 4,), + ServiceReportLastCallsMenu( + report: _serviceReport, + onSelect: (status){ + if(status?.value == 12 + || _serviceReport.callLastSituation?.value == 12){ + _serviceReport.callLastSituation = status; + setState(() {}); + } else { + _serviceReport.callLastSituation = status; + } + }, + ), + ], ), - ], - ), + ); + }, ), ], ), + SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + const ASubTitle("Assign Employee"), + const SizedBox(height: 8,), + _validate && _serviceReport.engineer == null ? + ASubTitle(_subtitle.requiredWord,color: Colors.red,): + const SizedBox.shrink(), + const SizedBox(height: 4,), + EngineersMenu( + initialValue: _serviceReport.engineer, + onSelect: (engineer){ + _serviceReport.engineer = engineer; + }, + ), const SizedBox(height: 8,), // invoice number & code _serviceReport.callLastSituation?.id != 12 ? const SizedBox.shrink(): @@ -346,65 +360,65 @@ class _CreateServiceReportState extends State with TickerPr ], ), - const SizedBox(height: 8,), - Row( - children: [ - ASubTitle(_subtitle.faultDescription), - Expanded( - child: SizedBox( - height: 32 * AppStyle.getScaleFactor(context), - child: SpeechToTextButton( - controller: _faultController, - mini: true, - ), - ), - ), - ], - ), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.faultDescription, - textAlign: TextAlign.center, - controller: _faultController, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.multiline, - onSaved: (value){ - _serviceReport.faultDescription = value; - }, - ), - const SizedBox(height: 8,), - Row( - children: [ - ASubTitle(_subtitle.workPreformed), - Expanded( - child: SizedBox( - height: 32 * AppStyle.getScaleFactor(context), - child: SpeechToTextButton( - controller: _workPreformedController, - mini: true, - ), - ), - ), - ], - ), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.workPreformed, - textAlign: TextAlign.center, - controller: _workPreformedController, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.multiline, - onSaved: (value){ - _serviceReport.workPreformed = value; - }, - ), - const SizedBox(height: 8,), + // const SizedBox(height: 8,), + // Row( + // children: [ + // ASubTitle(_subtitle.faultDescription), + // Expanded( + // child: SizedBox( + // height: 32 * AppStyle.getScaleFactor(context), + // child: SpeechToTextButton( + // controller: _faultController, + // mini: true, + // ), + // ), + // ), + // ], + // ), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.faultDescriptionId, + // textAlign: TextAlign.center, + // controller: _faultController, + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.hasValue(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.multiline, + // onSaved: (value){ + // _serviceReport.faultDescriptionId = value; + // }, + // ), + // const SizedBox(height: 8,), + // Row( + // children: [ + // ASubTitle(_subtitle.workPreformed), + // Expanded( + // child: SizedBox( + // height: 32 * AppStyle.getScaleFactor(context), + // child: SpeechToTextButton( + // controller: _workPreformedController, + // mini: true, + // ), + // ), + // ), + // ], + // ), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.workPreformed, + // textAlign: TextAlign.center, + // controller: _workPreformedController, + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.hasValue(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.multiline, + // onSaved: (value){ + // _serviceReport.workPreformed = value; + // }, + // ), + // const SizedBox(height: 8,), const SizedBox(height: 8,), Row( @@ -436,7 +450,7 @@ class _CreateServiceReportState extends State with TickerPr image: _image, onPick: (image){ _image =image; - _serviceReport.image = base64Encode(image.readAsBytesSync()); + _serviceReport.image = "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}"; }, ), ], @@ -454,12 +468,18 @@ class _CreateServiceReportState extends State with TickerPr children: [ ASubTitle(_subtitle.workingHours), const SizedBox(height: 8,), - AppTimer( - timer: _serviceReport.timer, - onChange: (timer) async{ - _serviceReport.timer = timer; - return true; - }, + Row( + children: [ + Expanded( + child: AppTimer( + timer: _serviceReport.timer, + onChange: (timer) async{ + _serviceReport.timer = timer; + return true; + }, + ), + ), + ], ), // ATextFormField( // initialValue: _serviceReport?.workHours, @@ -477,79 +497,102 @@ class _CreateServiceReportState extends State with TickerPr ], ), ), - const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.travelingHours), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.travelingHours, - textAlign: TextAlign.center, - hintText: "i.e 3, 3.5, 4", - style: Theme.of(context).textTheme.subtitle1, - // validator: (value) => - // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.travelingHours = value; - }, - ), - ], - ), - ), - ], - ), - const SizedBox(height: 8,), - // Operating Hours and Job Sheet Number - Row( - children: [ + // const SizedBox(width: 8,), // Expanded( // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.operatingHours), + // ASubTitle(_subtitle.travelingHours), // const SizedBox(height: 4,), // ATextFormField( - // initialValue: _serviceReport?.operatingHours, + // initialValue: _serviceReport?.travelingHours, // textAlign: TextAlign.center, // hintText: "i.e 3, 3.5, 4", // style: Theme.of(context).textTheme.subtitle1, - // validator: (value) => - // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, + // // validator: (value) => + // // Validator.isNumeric(value) + // // ? null : _subtitle.requiredWord, // textInputType: TextInputType.number, // onSaved: (value){ - // _serviceReport.operatingHours = value; + // _serviceReport.travelingHours = value; // }, // ), // ], // ), // ), - // const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.jobSheetNumber), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.jobSheetNumber, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.name, - onSaved: (value){ - _serviceReport.jobSheetNumber = value; - }, - ), - ], - ), - ), ], ), const SizedBox(height: 8,), + // Operating Hours and Job Sheet Number + // Row( + // children: [ + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.operatingHours), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.operatingHours, + // textAlign: TextAlign.center, + // hintText: "i.e 3, 3.5, 4", + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.isNumeric(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.number, + // onSaved: (value){ + // _serviceReport.operatingHours = value; + // }, + // ), + // ], + // ), + // ), + // const SizedBox(width: 8,), + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.jobSheetNumber), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.jobSheetNumber, + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.name, + // onSaved: (value){ + // _serviceReport.jobSheetNumber = value; + // }, + // ), + // ], + // ), + // ), + // ], + // ), + //const SizedBox(height: 8,), + const SizedBox(height: 8,), + const ASubTitle("Nurse Signature"), + ESignature( + oldSignature: _serviceReport.signatureNurse, + newSignature: _serviceReport.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + _serviceReport.localNurseSignature = signature; + _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Engineer Signature"), + ESignature( + oldSignature: _serviceReport.signatureEngineer, + newSignature: _serviceReport.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + _serviceReport.localNurseSignature = signature; + _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + const SizedBox(height: 8,), // Part Number and Quantity Row( children: [ @@ -596,7 +639,6 @@ class _CreateServiceReportState extends State with TickerPr } ), ), - const SizedBox(height: 16,), ], 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 4a7be338..bfc8f4f5 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -22,12 +22,13 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; 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/speech_to_text/speech_to_text.dart'; +import 'package:test_sa/views/widgets/status/employee/engineers_mune.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'; @@ -223,14 +224,28 @@ class _EditServiceReportState extends State with TickerProvid ), const SizedBox(height: 8,), ASubTitle(_subtitle.serviceType), - _validate && _serviceReport.serviceType == null ? + _validate && _serviceReport.assetType == null ? ASubTitle(_subtitle.requiredWord,color: Colors.red,): const SizedBox.shrink(), const SizedBox(height: 4,), - ServiceStatusMenu( - initialValue: _serviceReport.serviceType, + ServiceAssetTypeMenu( + initialValue: _serviceReport.assetType, onSelect: (status){ - _serviceReport.serviceType = status; + _serviceReport.assetType = status; + }, + ), + const SizedBox(height: 8,), + SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + const ASubTitle("Assign Employee"), + const SizedBox(height: 8,), + _validate && _serviceReport.engineer == null ? + ASubTitle(_subtitle.requiredWord,color: Colors.red,): + const SizedBox.shrink(), + const SizedBox(height: 4,), + EngineersMenu( + initialValue: _serviceReport.engineer, + onSelect: (engineer){ + _serviceReport.engineer = engineer; }, ), const SizedBox(height: 8,), @@ -257,33 +272,34 @@ class _EditServiceReportState extends State with TickerProvid ), ), const SizedBox(width: 8,), - Provider.of(context).isLoading == null - ? const SizedBox.shrink(): - // Call's last Situation - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - - ASubTitle(_subtitle.callLastSituation), - _validate && _serviceReport.callLastSituation == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), - ServiceReportLastCallsMenu( - report: _serviceReport, - onSelect: (status){ - if(status?.value == 12 - || _serviceReport.callLastSituation?.value == 12){ - _serviceReport.callLastSituation = status; - setState(() {}); - } else { - _serviceReport.callLastSituation = status; - } - }, + Consumer( + builder: (_, provider, __) { + if(provider.isLoading == null) return const SizedBox.shrink(); + return Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.callLastSituation), + _validate && _serviceReport.callLastSituation == null ? + ASubTitle(_subtitle.requiredWord,color: Colors.red,): + const SizedBox.shrink(), + const SizedBox(height: 4,), + ServiceReportLastCallsMenu( + report: _serviceReport, + onSelect: (status){ + if(status?.value == 12 + || _serviceReport.callLastSituation?.value == 12){ + _serviceReport.callLastSituation = status; + setState(() {}); + } else { + _serviceReport.callLastSituation = status; + } + }, + ), + ], ), - ], - ), + ); + }, ), ], ), @@ -338,65 +354,65 @@ class _EditServiceReportState extends State with TickerProvid ], ), - const SizedBox(height: 8,), - Row( - children: [ - ASubTitle(_subtitle.faultDescription), - Expanded( - child: SizedBox( - height: 32 * AppStyle.getScaleFactor(context), - child: SpeechToTextButton( - controller: _faultController, - mini: true, - ), - ), - ), - ], - ), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.faultDescription, - textAlign: TextAlign.center, - controller: _faultController, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.multiline, - onSaved: (value){ - _serviceReport.faultDescription = value; - }, - ), - const SizedBox(height: 8,), - Row( - children: [ - ASubTitle(_subtitle.workPreformed), - Expanded( - child: SizedBox( - height: 32 * AppStyle.getScaleFactor(context), - child: SpeechToTextButton( - controller: _workPreformedController, - mini: true, - ), - ), - ), - ], - ), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.workPreformed, - textAlign: TextAlign.center, - controller: _workPreformedController, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.multiline, - onSaved: (value){ - _serviceReport.workPreformed = value; - }, - ), - const SizedBox(height: 8,), + // const SizedBox(height: 8,), + // Row( + // children: [ + // ASubTitle(_subtitle.faultDescription), + // Expanded( + // child: SizedBox( + // height: 32 * AppStyle.getScaleFactor(context), + // child: SpeechToTextButton( + // controller: _faultController, + // mini: true, + // ), + // ), + // ), + // ], + // ), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.faultDescriptionId, + // textAlign: TextAlign.center, + // controller: _faultController, + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.hasValue(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.multiline, + // onSaved: (value){ + // _serviceReport.faultDescriptionId = value; + // }, + // ), + // const SizedBox(height: 8,), + // Row( + // children: [ + // ASubTitle(_subtitle.workPreformed), + // Expanded( + // child: SizedBox( + // height: 32 * AppStyle.getScaleFactor(context), + // child: SpeechToTextButton( + // controller: _workPreformedController, + // mini: true, + // ), + // ), + // ), + // ], + // ), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.workPreformed, + // textAlign: TextAlign.center, + // controller: _workPreformedController, + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.hasValue(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.multiline, + // onSaved: (value){ + // _serviceReport.workPreformed = value; + // }, + // ), + // const SizedBox(height: 8,), const SizedBox(height: 8,), Row( @@ -446,12 +462,18 @@ class _EditServiceReportState extends State with TickerProvid children: [ ASubTitle(_subtitle.workingHours), const SizedBox(height: 8,), - AppTimer( - timer: _serviceReport.timer, - onChange: (timer) async{ - _serviceReport.timer = timer; - return true; - }, + Row( + children: [ + Expanded( + child: AppTimer( + timer: _serviceReport.timer, + onChange: (timer) async{ + _serviceReport.timer = timer; + return true; + }, + ), + ), + ], ), // ATextFormField( // initialValue: _serviceReport?.workHours, @@ -469,77 +491,100 @@ class _EditServiceReportState extends State with TickerProvid ], ), ), - const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.travelingHours), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.travelingHours, - textAlign: TextAlign.center, - hintText: "i.e 3, 3.5, 4", - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.travelingHours = value; - }, - ), - ], - ), - ), + // const SizedBox(width: 8,), + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.travelingHours), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.travelingHours, + // textAlign: TextAlign.center, + // hintText: "i.e 3, 3.5, 4", + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.isNumeric(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.number, + // onSaved: (value){ + // _serviceReport.travelingHours = value; + // }, + // ), + // ], + // ), + // ), ], ), const SizedBox(height: 8,), // Operating Hours and Job Sheet Number - Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.operatingHours), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.operatingHours, - textAlign: TextAlign.center, - hintText: "i.e 3, 3.5, 4", - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.operatingHours = value; - }, - ), - ], - ), - ), - const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.jobSheetNumber), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.jobSheetNumber, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.name, - onSaved: (value){ - _serviceReport.jobSheetNumber = value; - }, - ), - ], - ), - ), - ], + // Row( + // children: [ + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.operatingHours), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.operatingHours, + // textAlign: TextAlign.center, + // hintText: "i.e 3, 3.5, 4", + // style: Theme.of(context).textTheme.subtitle1, + // validator: (value) => + // Validator.isNumeric(value) + // ? null : _subtitle.requiredWord, + // textInputType: TextInputType.number, + // onSaved: (value){ + // _serviceReport.operatingHours = value; + // }, + // ), + // ], + // ), + // ), + // const SizedBox(width: 8,), + // Expanded( + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // ASubTitle(_subtitle.jobSheetNumber), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: _serviceReport?.jobSheetNumber, + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.name, + // onSaved: (value){ + // _serviceReport.jobSheetNumber = value; + // }, + // ), + // ], + // ), + // ), + // ], + // ), + //const SizedBox(height: 8,), + const SizedBox(height: 8,), + const ASubTitle("Nurse Signature"), + ESignature( + oldSignature: _serviceReport.signatureNurse, + newSignature: _serviceReport.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + _serviceReport.localNurseSignature = signature; + _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Engineer Signature"), + ESignature( + oldSignature: _serviceReport.signatureEngineer, + newSignature: _serviceReport.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + _serviceReport.localNurseSignature = signature; + _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, ), const SizedBox(height: 8,), // Part Number and Quantity diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index c052fb68..d45692d8 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -16,7 +15,6 @@ import 'package:test_sa/views/pages/user/requests/report/create_service_report.d import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; -import 'package:test_sa/views/widgets/dialogs/dialog.dart'; import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; @@ -25,7 +23,6 @@ import 'package:test_sa/views/widgets/requests/service_request_update_dialog.dar import 'package:test_sa/views/widgets/sound/sound_player.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -import '../report_issues_page.dart'; import 'report/future_service_report.dart'; class RequestDetailsPage extends StatelessWidget { static final String id = "/call-details"; @@ -62,19 +59,20 @@ class RequestDetailsPage extends StatelessWidget { ), ), _userProvider.user.type == UsersTypes.normal_user ? - AIconButton( - iconData: Icons.warning_amber_rounded, - color: AColors.white, - buttonSize: 42, - backgroundColor: AColors.deepOrange, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) - ) - ); - }, - ) + // AIconButton( + // iconData: Icons.warning_amber_rounded, + // color: AColors.white, + // buttonSize: 42, + // backgroundColor: AColors.deepOrange, + // onPressed: (){ + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) + // ) + // ); + // }, + // ) + const SizedBox(width: 48,) : AIconButton( iconData: Icons.edit, color: AColors.white, @@ -247,44 +245,45 @@ class RequestDetailsPage extends StatelessWidget { ASoundPlayer( audio: serviceRequest.audio, ), - Center( - child: Padding( - padding: EdgeInsets.all(32), - child: AButton( - text: _subtitle.duplicateRequest, - onPressed: () async { - bool result = await showDialog( - context: context, - builder: (_) => AAlertDialog( - title: _subtitle.duplicateAlert, - content: _subtitle.duplicateAlertMessage, - ) - ); - if(result == true){ - showDialog( - context: context, - builder: (context){ - return Center(child: CircularProgressIndicator()); - } - ); - int status = await _serviceRequestsProvider.createDuplicatedReport( - host: _settingProvider.host, - user: _userProvider.user, - request: serviceRequest - ); - Navigator.of(context).pop(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle) - ) - ) - ); - } - }, - ), - ), - ) + // + // Center( + // child: Padding( + // padding: EdgeInsets.all(32), + // child: AButton( + // text: _subtitle.duplicateRequest, + // onPressed: () async { + // bool result = await showDialog( + // context: context, + // builder: (_) => AAlertDialog( + // title: _subtitle.duplicateAlert, + // content: _subtitle.duplicateAlertMessage, + // ) + // ); + // if(result == true){ + // showDialog( + // context: context, + // builder: (context){ + // return Center(child: CircularProgressIndicator()); + // } + // ); + // int status = await _serviceRequestsProvider.createDuplicatedReport( + // host: _settingProvider.host, + // user: _userProvider.user, + // request: serviceRequest + // ); + // Navigator.of(context).pop(); + // ScaffoldMessenger.of(context).showSnackBar( + // SnackBar( + // content: Text( + // HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle) + // ) + // ) + // ); + // } + // }, + // ), + // ), + // ) ], ), serviceRequest.viewReport ? @@ -307,7 +306,8 @@ class RequestDetailsPage extends StatelessWidget { title: _subtitle.jobSheetNumber, info: serviceRequest.jobSheetNumber, ), - _userProvider.user.type == UsersTypes.engineer ? + _userProvider.user.type == UsersTypes.engineer + && serviceRequest.reportID != null? Padding( padding: EdgeInsets.all(32), child: AButton( diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index 39971677..a758bb93 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -62,7 +61,8 @@ class _EditPentryState extends State with SingleTickerProviderStateM Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); - // Navigator.of(context).pop(); + Navigator.of(context).pop(); + Navigator.of(context).pop(); }else{ // String errorMessage = HttpStatusManger.getStatusMessage( // status: status, subtitle: _subtitle); diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index ae8d66cb..40ebd651 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -1,20 +1,12 @@ -import 'dart:convert'; -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -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/buttons/app_small_button.dart'; -import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/images/one_image_picker.dart'; -import 'package:test_sa/views/widgets/search/filter_item.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; class UpdateVisitsGroupSheet extends StatefulWidget { diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index ca876b77..cd400297 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -6,7 +6,6 @@ import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; -import 'package:test_sa/views/pages/user/visits/pantry/future_edit_pently.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/images/images_list.dart'; diff --git a/lib/views/widgets/app_name_bar.dart b/lib/views/widgets/app_name_bar.dart index 35a382a0..8aebd901 100644 --- a/lib/views/widgets/app_name_bar.dart +++ b/lib/views/widgets/app_name_bar.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class AppNameBar extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/lib/views/widgets/app_text_form_field.dart b/lib/views/widgets/app_text_form_field.dart index 407b351f..90885a27 100644 --- a/lib/views/widgets/app_text_form_field.dart +++ b/lib/views/widgets/app_text_form_field.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class ATextFormField extends StatefulWidget { final Function(String) onSaved; final Function(String) validator; diff --git a/lib/views/widgets/date_and_time/date_picker.dart b/lib/views/widgets/date_and_time/date_picker.dart index 70a4c82e..a3136342 100644 --- a/lib/views/widgets/date_and_time/date_picker.dart +++ b/lib/views/widgets/date_and_time/date_picker.dart @@ -1,6 +1,5 @@ -import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:flutter/material.dart'; +import 'package:test_sa/views/app_style/sizing.dart'; class ADatePicker extends StatelessWidget { final DateTime date; diff --git a/lib/views/widgets/date_and_time/from_to_date_bar.dart b/lib/views/widgets/date_and_time/from_to_date_bar.dart index 422dcbf9..4ef79e81 100644 --- a/lib/views/widgets/date_and_time/from_to_date_bar.dart +++ b/lib/views/widgets/date_and_time/from_to_date_bar.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; import 'date_picker.dart'; class FromToDateBar extends StatefulWidget { diff --git a/lib/views/widgets/departments/department_button.dart b/lib/views/widgets/departments/department_button.dart index 811f0898..1f9668b2 100644 --- a/lib/views/widgets/departments/department_button.dart +++ b/lib/views/widgets/departments/department_button.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class DepartmentButton extends StatelessWidget { final Function(Department) onDepartmentPick; final Department department; diff --git a/lib/views/widgets/departments/department_item.dart b/lib/views/widgets/departments/department_item.dart index fd37b418..4ac240e9 100644 --- a/lib/views/widgets/departments/department_item.dart +++ b/lib/views/widgets/departments/department_item.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class DepartmentItem extends StatelessWidget { final Department department; final Function(Department) onPressed; diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index fb07b393..e5fb916b 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; @@ -6,8 +8,6 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/departments/department_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import '../app_text_form_field.dart'; class SingleDepartmentPicker extends StatefulWidget { diff --git a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart index 8360ba23..03e694c4 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; diff --git a/lib/views/widgets/device_trancfer/device_transfer_item.dart b/lib/views/widgets/device_trancfer/device_transfer_item.dart index ea426523..4b2d78ce 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_item.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_item.dart @@ -1,21 +1,14 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/models/device/device_transfer.dart'; -import 'package:test_sa/models/enums/user_types.dart'; -import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart'; -import 'package:test_sa/views/pages/user/requests/report/future_service_report.dart'; -import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; class DeviceTransferItem extends StatelessWidget { final int index; final DeviceTransfer item; diff --git a/lib/views/widgets/device_trancfer/device_transfer_list.dart b/lib/views/widgets/device_trancfer/device_transfer_list.dart index ede0bc6d..18bee922 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_list.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_list.dart @@ -1,17 +1,11 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/device/device_transfer.dart'; -import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; -import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; -import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart'; -import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; -import 'package:test_sa/views/widgets/requests/service_request_item.dart'; -import 'package:flutter/material.dart'; class DeviceTransferList extends StatelessWidget { final List items; final bool nextPage; diff --git a/lib/views/widgets/e_signature/e_signature.dart b/lib/views/widgets/e_signature/e_signature.dart index 72f9d653..1136a0a3 100644 --- a/lib/views/widgets/e_signature/e_signature.dart +++ b/lib/views/widgets/e_signature/e_signature.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:signature/signature.dart'; @@ -11,7 +9,8 @@ class ESignature extends StatefulWidget { final String oldSignature; final Uint8List newSignature; final Function(Uint8List) onSaved; - const ESignature({Key key, this.oldSignature, this.onSaved, this.newSignature}) : super(key: key); + final Function(Uint8List) onChange; + const ESignature({Key key, this.oldSignature, this.onSaved,this.onChange, this.newSignature}) : super(key: key); @override State createState() => _ESignatureState(); @@ -104,6 +103,7 @@ class _ESignatureState extends State { const Spacer(), IconButton(onPressed: () async { signature = await _controller.toPngBytes(); + widget.onChange(signature); setState(() {}); }, icon: const Icon(Icons.check)), ], diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index 95952765..c11315f9 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -1,13 +1,12 @@ +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/models/device/device.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:provider/provider.dart'; class AutoCompleteDeviceField extends StatefulWidget { final Device initialValue; final int hospitalId; @@ -81,7 +80,7 @@ class _AutoCompleteDeviceFieldState extends State { itemBuilder: (context, device) { return ListTile( title: Text(device.serialNumber), - subtitle: Text(device.model+"/"+device.brand), + subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"), ); }, onSuggestionSelected: (device) { diff --git a/lib/views/widgets/equipment/auto_complete_models_field.dart b/lib/views/widgets/equipment/auto_complete_models_field.dart index 1c40a544..7f776b91 100644 --- a/lib/views/widgets/equipment/auto_complete_models_field.dart +++ b/lib/views/widgets/equipment/auto_complete_models_field.dart @@ -1,14 +1,12 @@ +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/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:provider/provider.dart'; class AutoCompleteModelField extends StatefulWidget { final Lookup initialValue; final Function(Lookup) onPick; diff --git a/lib/views/widgets/equipment/device_button.dart b/lib/views/widgets/equipment/device_button.dart index 78617fc2..80c7194a 100644 --- a/lib/views/widgets/equipment/device_button.dart +++ b/lib/views/widgets/equipment/device_button.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class DeviceButton extends StatelessWidget { final Function(Device) onDevicePick; final Device device; @@ -56,18 +56,18 @@ class DeviceButton extends StatelessWidget { ): Expanded( child: ListTile( - title: Text("${_subtitle.sn} : " + device.serialNumber, + title: Text("${_subtitle.sn} : ${device.serialNumber}", style: Theme.of(context).textTheme.subtitle1, ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Divider(color: Theme.of(context).textTheme.subtitle1.color,), - Text("${_subtitle.brand} : " + device.brand, + Text("${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", style: Theme.of(context).textTheme.subtitle2, ), Divider(color: Theme.of(context).textTheme.subtitle1.color,), - Text("${_subtitle.model} : " + device.model, + Text("${_subtitle.model} : ${device.modelDefinition.modelName}", style: Theme.of(context).textTheme.subtitle2, ), ], diff --git a/lib/views/widgets/equipment/device_item.dart b/lib/views/widgets/equipment/device_item.dart index aaa3112d..0ead41ef 100644 --- a/lib/views/widgets/equipment/device_item.dart +++ b/lib/views/widgets/equipment/device_item.dart @@ -1,9 +1,9 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class DeviceItem extends StatelessWidget { final Device device; final Function(Device) onPressed; @@ -28,7 +28,7 @@ class DeviceItem extends StatelessWidget { onPressed(device); }, child: ListTile( - title: Text("${_subtitle.sn} : " + device.serialNumber, + title: Text("${_subtitle.sn} : ${device.serialNumber}", style: Theme.of(context).textTheme.headline6.copyWith( color: AColors.white ), @@ -38,13 +38,13 @@ class DeviceItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Divider(color: Theme.of(context).scaffoldBackgroundColor,), - Text("${_subtitle.brand} : " + device.brand, + Text("${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", style: Theme.of(context).textTheme.subtitle1.copyWith( color: AColors.white ), ), Divider(color: Theme.of(context).scaffoldBackgroundColor,), - Text("${_subtitle.model} : " + device.model, + Text("${_subtitle.model} : ${device.modelDefinition.modelName}", style: Theme.of(context).textTheme.subtitle1.copyWith( color: AColors.white ), diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 031ab2c1..bf697540 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -1,3 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -7,10 +10,6 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/equipment/device_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; -import 'package:test_sa/views/widgets/qr/scan_qr.dart'; -import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -import 'package:provider/provider.dart'; import '../app_text_form_field.dart'; class SingleDevicePicker extends StatefulWidget { diff --git a/lib/views/widgets/gas_refill/gas_refill_item.dart b/lib/views/widgets/gas_refill/gas_refill_item.dart index e6ab7477..47af778b 100644 --- a/lib/views/widgets/gas_refill/gas_refill_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_item.dart @@ -1,20 +1,14 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; -import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart'; -import 'package:test_sa/views/pages/user/requests/report/future_service_report.dart'; -import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; class GasRefillItem extends StatelessWidget { final int index; final GasRefillModel item; diff --git a/lib/views/widgets/gas_refill/gas_refill_list.dart b/lib/views/widgets/gas_refill/gas_refill_list.dart index b54c2ee9..e25797d2 100644 --- a/lib/views/widgets/gas_refill/gas_refill_list.dart +++ b/lib/views/widgets/gas_refill/gas_refill_list.dart @@ -1,14 +1,11 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; -import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; -import 'package:test_sa/views/widgets/requests/service_request_item.dart'; -import 'package:flutter/material.dart'; class GasRefillList extends StatelessWidget { final List items; final bool nextPage; diff --git a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart index dc41e11d..aa9804cb 100644 --- a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart @@ -3,7 +3,6 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/subtitle.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index 68444be0..8091303c 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -1,3 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_typeahead/flutter_typeahead.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; @@ -5,10 +8,6 @@ import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:provider/provider.dart'; class HospitalAutoCompleteField extends StatefulWidget { final String initialValue; final Function(Hospital) onSearch; diff --git a/lib/views/widgets/hospitals/hospital_button.dart b/lib/views/widgets/hospitals/hospital_button.dart index 81c7d9e9..3d1f4bc0 100644 --- a/lib/views/widgets/hospitals/hospital_button.dart +++ b/lib/views/widgets/hospitals/hospital_button.dart @@ -1,11 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/hospitals/single_hospital_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class HospitalButton extends StatelessWidget { final Function(Hospital) onHospitalPick; final Hospital hospital; diff --git a/lib/views/widgets/hospitals/hospital_item.dart b/lib/views/widgets/hospitals/hospital_item.dart index 523dace6..3ee5b699 100644 --- a/lib/views/widgets/hospitals/hospital_item.dart +++ b/lib/views/widgets/hospitals/hospital_item.dart @@ -1,7 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/material.dart'; class HospitalItem extends StatelessWidget { final Hospital hospital; final Function(Hospital) onPressed; diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index f2ee3c74..27ca0861 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; @@ -6,8 +8,6 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import '../app_text_form_field.dart'; class SingleHospitalPicker extends StatefulWidget { diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index b0002ae1..d2a5273d 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -48,7 +48,7 @@ class _LoadingManagerState extends State { Subtitle subtitle = AppLocalization.of(context).subtitle; Widget placeHolder; // to load data if load not start - if(widget.isLoading == false && widget.stateCode == null){ + if(widget.isLoading != true && widget.stateCode == null){ WidgetsBinding.instance.addPostFrameCallback((timeStamp) { widget.onRefresh(); }); diff --git a/lib/views/widgets/notifications/notification_item.dart b/lib/views/widgets/notifications/notification_item.dart index e29cc3c4..f505b5d3 100644 --- a/lib/views/widgets/notifications/notification_item.dart +++ b/lib/views/widgets/notifications/notification_item.dart @@ -1,8 +1,8 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; class NotificationItem extends StatelessWidget { final AppNotification notification; final Function(AppNotification) onPressed; diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index e516bb3c..bf18fd66 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -81,7 +81,7 @@ class _AutoCompleteDeviceNumberFieldState extends State { }, ), const SizedBox(height: 8,), - const ASubTitle("Status"), - // if(widget.enableValidate && widget.model.status == null) - // ASubTitle(subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), - PentryStatusMenu( - initialValue: widget.model.status, - onSelect: (status){ - widget.model.status = status; - }, - ), + // const ASubTitle("Status"), + // // if(widget.enableValidate && widget.model.status == null) + // // ASubTitle(subtitle.requiredWord,color: Colors.red,), + // const SizedBox(height: 4,), + // PentryStatusMenu( + // initialValue: widget.model.status, + // onSelect: (status){ + // widget.model.status = status; + // }, + // ), const SizedBox(height: 8,), const ASubTitle("Actual Visit Date"), if(widget.enableValidate && widget.model.actualVisitDate == null) @@ -125,17 +124,25 @@ class _PentryInfoFormState extends State { }, ), const SizedBox(height: 8,), - const ASubTitle("Signature"), + const ASubTitle("Nurse Signature"), + ESignature( + oldSignature: widget.model.signatureNurse, + newSignature: widget.model.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + widget.model.localNurseSignature = signature; + widget.model.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + const SizedBox(height: 8,), + const ASubTitle("Engineer Signature"), ESignature( - oldSignature: widget.model.signature, - newSignature: widget.model.localSignature, - onSaved: (signature){ - widget.model.localSignature = signature; - if(signature == null || signature.isEmpty) { - widget.model.signature = null; - return; - } - widget.model.signature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + oldSignature: widget.model.signatureEngineer, + newSignature: widget.model.localNurseSignature, + onChange: (signature){ + if(signature == null || signature.isEmpty) {return;} + widget.model.localNurseSignature = signature; + widget.model.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), const SizedBox(height: 8,), diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index e0345597..c9194466 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -3,7 +3,6 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -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/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index 5bb981bd..a3f8b96d 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -9,11 +9,9 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart'; -import 'package:test_sa/views/widgets/status/service_request/service_request_types_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../app_text_form_field.dart'; -import 'filter_item.dart'; class ServiceRequestsSearchDialog extends StatefulWidget { final ServiceRequestSearch initialSearchValue; final bool expandedSearch; diff --git a/lib/views/widgets/search/visits_search_bar.dart b/lib/views/widgets/search/visits_search_bar.dart index b745fce2..77172dbb 100644 --- a/lib/views/widgets/search/visits_search_bar.dart +++ b/lib/views/widgets/search/visits_search_bar.dart @@ -15,7 +15,6 @@ import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dar import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../app_text_form_field.dart'; -import 'filter_item.dart'; class VisitsSearchDialog extends StatefulWidget { final VisitsSearch initialSearchValue; final bool expandedSearch; diff --git a/lib/views/widgets/speech_to_text/speech_to_text.dart b/lib/views/widgets/speech_to_text/speech_to_text.dart index 03e2eda1..59cabf8a 100644 --- a/lib/views/widgets/speech_to_text/speech_to_text.dart +++ b/lib/views/widgets/speech_to_text/speech_to_text.dart @@ -1,15 +1,12 @@ -import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; -import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; -import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; -import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; import 'package:speech_to_text/speech_to_text.dart'; - -import '../app_text_form_field.dart'; +import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; +import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class SpeechToTextButton extends StatefulWidget { final TextEditingController controller; diff --git a/lib/views/widgets/status/employee/single_type_menu.dart b/lib/views/widgets/status/employee/single_type_menu.dart index 4ee21b7d..ccb46c0a 100644 --- a/lib/views/widgets/status/employee/single_type_menu.dart +++ b/lib/views/widgets/status/employee/single_type_menu.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/engineer.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; class SingleEngineerMenu extends StatefulWidget { diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart index 7402e3a7..9b2c264d 100644 --- a/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index c0f0633e..12adf5d3 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -24,43 +24,46 @@ class _ServiceReportStatusMenuState extends State { bool firstTime = true; @override Widget build(BuildContext context) { - SettingProvider _settingProvider = Provider.of(context); - UserProvider _userProvider = Provider.of(context); - ServiceReportStatusProvider _menuProvider = Provider.of(context); - ServiceReportLastCallsProvider _callsLastSituationsProvider = Provider.of(context,listen: false); + SettingProvider settingProvider = Provider.of(context); + UserProvider userProvider = Provider.of(context); + ServiceReportStatusProvider menuProvider = Provider.of(context); + ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of(context); if(firstTime){ - _callsLastSituationsProvider.reset(); + callsLastSituationsProvider.reset(); firstTime = false; } return LoadingManager( - isLoading: _menuProvider.isLoading == true, - isFailedLoading: _menuProvider.statuses == null, - stateCode: _menuProvider.stateCode, + 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 { - if(_menuProvider.stateCode == null){ - _menuProvider.reset(); - await _menuProvider.getTypes( - user: _userProvider.user, - host: _settingProvider.host + await callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: widget.report.status?.id + ); + if(menuProvider.stateCode == null){ + menuProvider.reset(); + await menuProvider.getTypes( + user: userProvider.user, + host: settingProvider.host ); + setState(() {}); } - _callsLastSituationsProvider.getCalls( - user: _userProvider.user, - host: _settingProvider.host, - serviceStatus: widget.report.status?.id.toString() - ); }, child: SingleStatusMenu( - statuses: _menuProvider.statuses, + statuses: menuProvider.statuses, initialStatus: widget.report.status, onSelect: (status){ - // _callsLastSituationsProvider.getCalls( - // user: _userProvider.user, - // host: _settingProvider.host, - // serviceStatus: status.id.toString() - // ); - //widget.report.callLastSituation = null; + widget.report.callLastSituation = null; + callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: status.id + ); + widget.onSelect(status); }, ) diff --git a/lib/views/widgets/status/report/service_status.dart b/lib/views/widgets/status/report/service_status.dart index 37eb554e..3c4eb794 100644 --- a/lib/views/widgets/status/report/service_status.dart +++ b/lib/views/widgets/status/report/service_status.dart @@ -6,11 +6,11 @@ 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 ServiceStatusMenu extends StatelessWidget { +class ServiceAssetTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; - const ServiceStatusMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); + const ServiceAssetTypeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key); @override Widget build(BuildContext context) { SettingProvider _settingProvider = Provider.of(context); diff --git a/lib/views/widgets/status/service_request/service_request_status_mune.dart b/lib/views/widgets/status/service_request/service_request_status_mune.dart index b856f6c6..8ac8d1c5 100644 --- a/lib/views/widgets/status/service_request/service_request_status_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_status_mune.dart @@ -1,9 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/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_status_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_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'; diff --git a/lib/views/widgets/status/service_request/service_request_through_mune.dart b/lib/views/widgets/status/service_request/service_request_through_mune.dart index 4612250a..81a1c5b0 100644 --- a/lib/views/widgets/status/service_request/service_request_through_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_through_mune.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/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_through_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; diff --git a/lib/views/widgets/status/service_request/service_request_types_mune.dart b/lib/views/widgets/status/service_request/service_request_types_mune.dart index 223a5725..1cba8f6a 100644 --- a/lib/views/widgets/status/service_request/service_request_types_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_types_mune.dart @@ -1,7 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/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_through_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index fdf2b78d..bfe4de6d 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -23,12 +23,19 @@ class _SingleStatusMenuState extends State { @override void didUpdateWidget(covariant SingleStatusMenu oldWidget) { - if(widget.initialStatus != null && widget.initialStatus.value != null){ - _selectedStatus = widget.statuses?.firstWhere( + if(widget.initialStatus != null ){ + final result = widget.statuses?.where( (element) { return element == widget.initialStatus; }); - widget.onSelect(_selectedStatus); + if(result.isNotEmpty) { + _selectedStatus =result.first; + }else{ + _selectedStatus =null; + } + if(widget.initialStatus.id != _selectedStatus.id) { + widget.onSelect(_selectedStatus); + } } else { _selectedStatus = null; } @@ -37,12 +44,15 @@ class _SingleStatusMenuState extends State { @override void initState() { - if(widget.initialStatus != null && widget.initialStatus.value != null){ - _selectedStatus = widget.statuses?.firstWhere( + if(widget.initialStatus != null){ + final result = widget.statuses?.where( (element) { return element == widget.initialStatus; }); - widget.onSelect(_selectedStatus); + if(result.isNotEmpty) _selectedStatus = result.first; + if(widget.initialStatus.id != _selectedStatus.id) { + widget.onSelect(_selectedStatus); + } } super.initState(); From 35ae5e9002421f4e2ff7df09756f33e6671292e8 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Thu, 4 May 2023 15:35:41 +0300 Subject: [PATCH 7/9] handling null values - in get service requests and create device transfer --- lib/models/service_request/service_request.dart | 12 ++++++++---- .../device_transfer/request_device_transfer.dart | 2 +- pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index eea5d244..434f8de7 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -99,16 +99,20 @@ class ServiceRequest{ engineerName: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["name"], hospitalId: parsedJson["asset"]["site"]["id"], - reportID: parsedJson["workOrder"]["workOrderId"], + reportID: parsedJson["workOrder"] != null ? + parsedJson["workOrder"]["workOrderId"] : null, viewReport: parsedJson["workOrder"] != null, deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], engineerMobile: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["phone"], - faultDescription: parsedJson["workOrder"]["faultDescription"], - jobSheetNumber: parsedJson["workOrder"]["jobSheetNumber"], + faultDescription: parsedJson["workOrder"] != null ? + parsedJson["workOrder"]["faultDescription"] : null, + jobSheetNumber: parsedJson["workOrder"] != null ? + parsedJson["workOrder"]["jobSheetNumber"] :null, visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), - workPerformed: parsedJson["workOrder"]["workPerformed"], + workPerformed: parsedJson["workOrder"] != null ? + parsedJson["workOrder"]["workPerformed"] : null, device: Device.fromJson(parsedJson["asset"]) ); } diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index 30c9310a..cd55f5b2 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -57,7 +57,7 @@ class _RequestDeviceTransferState extends State { _isLoading = true; setState(() {}); - _formModel.sender.client.id = _userProvider.user.hospital?.id; + _formModel.sender?.client?.id = _userProvider.user?.hospital?.id; int status = await _deviceTransferProvider.createRequest( user: _userProvider.user, host: _settingProvider.host, diff --git a/pubspec.yaml b/pubspec.yaml index 6cf0797c..dd4f5b99 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.7.4+1 +version: 1.0.0+1 environment: sdk: ">=2.7.0 <3.0.0" From c5b5a8011a3e366a0ab0bf092b01cbf4881769f1 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 6 May 2023 10:40:17 +0300 Subject: [PATCH 8/9] active api auth --- lib/controllers/api_routes/api_manager.dart | 12 +++++++++++- lib/controllers/providers/api/user_provider.dart | 2 ++ lib/views/pages/user/land_page.dart | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index 41728339..ece2395a 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -5,20 +5,30 @@ import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:http/http.dart' as http; import 'package:http/http.dart'; +import 'package:test_sa/models/user.dart'; class ApiManager { ApiManager._(); - final Map _headers = {'Content-Type': 'application/json',}; + Map get _headers => { + 'Content-Type': 'application/json', + if(user != null) 'Authorization': 'Bearer ${user.token}', + }; static ApiManager instance = ApiManager._(); + User user; + Future get( String url, {Map headers,} ) async{ + headers ??= {}; + + headers.addAll(_headers); + Uri _url = Uri.parse(url); // print(_url); http.Response response = await http.get(_url,headers: headers); diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 565408d5..8adcd357 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -11,6 +11,7 @@ class UserProvider extends ChangeNotifier{ //reset provider data void reset(){ _user = null; + ApiManager.instance.user = user; _loading = false; } @@ -20,6 +21,7 @@ class UserProvider extends ChangeNotifier{ User get user => _user; set user(User user) { _user = user; + ApiManager.instance.user = user; notifyListeners(); } diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index e5b612e9..6982b955 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -238,6 +238,7 @@ class _LandPageState extends State { _regularVisitsProvider.reset(); _preventiveMaintenanceVisitsProvider.reset(); _settingProvider.resetSettings(); + _userProvider.reset(); Navigator.of(context).pop(); } }, From fab1bdf65d0c82f25619569a6bd843b0c5893fc2 Mon Sep 17 00:00:00 2001 From: MaximusAshraf <50173497+MaximusAshraf@users.noreply.github.com> Date: Sat, 6 May 2023 10:57:53 +0300 Subject: [PATCH 9/9] auth edits --- lib/controllers/api_routes/api_manager.dart | 9 +++++---- lib/controllers/providers/api/user_provider.dart | 2 +- lib/models/user.dart | 8 ++++---- lib/views/pages/user/land_page.dart | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index ece2395a..1a0a125c 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -30,7 +30,8 @@ class ApiManager { headers.addAll(_headers); Uri _url = Uri.parse(url); -// print(_url); + // print(_url); + // print(headers); http.Response response = await http.get(_url,headers: headers); if(jsonDecode(response.body) is Map){ final message = jsonDecode(response.body)["message"]; @@ -54,9 +55,9 @@ class ApiManager { headers.addAll(_headers); Uri _url = Uri.parse(url); -// print(_url); -// print(headers); - log(json.encode(body)); + // print(_url); + // print(headers); + // log(json.encode(body)); var request = http.Request('POST', _url); request.body = json.encode(body); request.headers.addAll(headers); diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 8adcd357..35634708 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -59,7 +59,7 @@ class UserProvider extends ChangeNotifier{ if(response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received _user = User.fromJson(jsonDecode(response.body)); - + ApiManager.instance.user = _user; return response.statusCode; } notifyListeners(); diff --git a/lib/models/user.dart b/lib/models/user.dart index 246ed717..aea639a8 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -103,10 +103,10 @@ class User{ id: parsedJson["userID"], userName: parsedJson["username"], email: parsedJson["email"], - // hospital: Hospital( - // id: parsedJson["client_id"], - // name: parsedJson["client_name"] - // ), + hospital: Hospital( + id: parsedJson["client_id"], + name: parsedJson["client_name"] + ), department: Department( id: parsedJson["department_id"], name: parsedJson["department_name"], diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index 6982b955..e89430c6 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -154,7 +154,7 @@ class _LandPageState extends State { mainAxisSpacing: 5, childAspectRatio: 1.15, children: [ - if (_userProvider.user.type == UsersTypes.normal_user) + if (_userProvider.user?.type == UsersTypes.normal_user) LandPageItem( text: _subtitle.newServiceRequest, icon: FontAwesomeIcons.tools,