diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index 885647d2..9e86e092 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -196,5 +196,9 @@ "maintenanceSituation": "موقع الصيانه", "currentSituation": "الموقع الحالي", "comment" : "تعليق", - "updateServiceRequest" : "تعديل طلب الخدمة" + "updateServiceRequest" : "تعديل طلب الخدمة", + "repairLocation" : "موقع الإصلاح", + "travelingExpense" : "مصاريف التنقل", + "startDate" : "وقت البدء", + "endDate" : "وقت الانتهاء" } \ No newline at end of file diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 36162c41..d66d2e7c 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -196,6 +196,9 @@ "duplicateAlertMessage": "Are you sure you want to duplicate request?", "duplicateRequest": "Duplicate Request", "comment" : "Comment", - "updateServiceRequest" : "Update Service Request" - + "updateServiceRequest" : "Update Service Request", + "repairLocation" : "Repair Location", + "travelingExpense": "Traveling Expense", + "startDate" : "Start Date", + "endDate" : "End Date" } \ No newline at end of file diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 9e7af15b..30aed29d 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -29,6 +29,7 @@ class URLs { static get getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503"; + static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504"; static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // get @@ -53,7 +54,7 @@ class URLs { static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // 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 getServiceReportLastCalls => "$_baseUrl/WorkOrder/GetLookupCallLastSituationBasedOnCase"; // 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 diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 597164e7..9bab49f5 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -284,7 +284,68 @@ class ServiceRequestsProvider extends ChangeNotifier { }) async { Response response; try { - Map body = report.toMap(request); + Map body = { + "id": 0, + "parentWOId": null, + "workOrderNo": "", + "workOrderYear": null, + "workOrderSequennce": null, + "callRequest": { + "id": request.id, + }, + "assetType": report.assetType?.toMap(), + "assignedEmployee": {"id": report.engineer.id, "name": report.engineer.name}, + "visitDate": report.visitDate?.toIso8601String() ?? "", + // "assistantEmployees": [ + // {"id": report.engineer.id, "name": report.engineer.name}, + // ], + "supplier": null, + "vendorTicketNumber": null, + "contactPersonWorkOrders": [ + { + "id": 0, + // "employeeCode": "", + "name": user.userName, + "telephone": user.phoneNumber, + // "job": "", + "email": user.email, + // "land": "", + "contactUserId": user.id, + } + ], + "calllastSituation": report.callLastSituation?.toMap(), + "currentSituation": null, + "repairLocation": report.repairLocation?.toMap(), + "reason": report.reason?.toMap(), + "startofWorkTime": report.startDate?.toIso8601String() ?? "", + "endofWorkTime": report.endDate?.toIso8601String() ?? "", + "workingHours": report.timer?.durationInSecond, + "travelingHours": report.travelingHours, + "travelingExpenses": report.travelingExpense ?? 0, + "faultDescription": { + "id": report.faultDescriptionId ?? 0, + "defectName": report.type?.name, + "workPerformed": report.workPreformed, + "estimatedTime": report.operatingHours, + }, + "sparePartsWorkOrders": report.parts + ?.map( + (p) => { + "id": p.id, + "sparePart": {"id": p.reportPartID ?? 0, "partNo": p.code, "partName": p.name}, + "qty": p.quantity + }, + ) + ?.toList(), + "reviewComment": "", + "comment": report.comment, + "attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(), + "equipmentStatus": report.status?.toMap(), + "suppEngineerWorkOrders": null, + "engSignature": report.signatureEngineer, + "nurseSignature": report.signatureNurse, + "woParentDto": null, + }; // body["uid"] = user.id; // body["token"] = user.token; response = await ApiManager.instance.post(URLs.createServiceReport, body: body); @@ -302,6 +363,7 @@ class ServiceRequestsProvider extends ChangeNotifier { } return response.statusCode; } catch (error) { + print(error); return -1; } } 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 9dc17ab0..a6f39ab8 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 @@ -42,7 +42,14 @@ 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, int serviceStatus}) async { + Future getCalls({ + String host, + User user, + int serviceStatus, + String woId, + int id, + String typeName, + }) async { if (_loading == true) return -2; _loading = true; notifyListeners(); @@ -50,7 +57,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier { try { // todo request new api from backend to make filter work response = await ApiManager.instance.get( - URLs.getServiceReportLastCalls, + "${URLs.getServiceReportLastCalls}?parentWOId=$woId&isAdd=true&id=${id ?? 0}&typeTransaction=$typeName", ); // response = await get( // Uri.parse( diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart new file mode 100644 index 00000000..c357a121 --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart @@ -0,0 +1,69 @@ +import 'dart:convert'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/user.dart'; + +class ServiceReportRepairLocationProvider extends ChangeNotifier { + //reset provider data + void reset() { + _reasons = 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 _reasons; + List get reasons => _reasons; + + // when categories in-process _loading = true + // done _loading = true + // failed _loading = false + bool _loading; + bool get isLoading => _loading; + set isLoading(bool isLoading) { + _loading = isLoading; + notifyListeners(); + } + + /// return -2 if request in progress + /// return -1 if error happen when sending request + /// return state code if request complete may be 200, 404 or 403 + /// for more details check http state manager + /// lib\controllers\http_status_manger\http_status_manger.dart + Future getTypes({String host, User user}) async { + if (_loading == true) return -2; + _loading = true; + notifyListeners(); + Response response; + try { + response = await ApiManager.instance.get( + URLs.getRepairLocation, + ); + _stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List categoriesListJson = json.decode(response.body)["data"]; + _reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); + } + _loading = false; + notifyListeners(); + return response.statusCode; + } catch (error) { + _loading = false; + _stateCode = -1; + notifyListeners(); + return -1; + } + } +} diff --git a/lib/main.dart b/lib/main.dart index 60cea674..eef23138 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -51,6 +51,7 @@ 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_repair_location_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_types_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart'; @@ -115,6 +116,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => EngineersProvider()), ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()), ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()), + ChangeNotifierProvider(create: (_) => ServiceReportRepairLocationProvider()), ], child: GestureDetector( onTap: () { diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 8abb1303..8f5b873a 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -13,8 +13,10 @@ class ServiceReport { String operatingHours; DateTime visitDate; DateTime endDate; + DateTime startDate; Lookup assetType; Lookup callLastSituation; + Lookup repairLocation; Engineer engineer; Lookup status; Lookup type; @@ -33,36 +35,43 @@ class ServiceReport { TimerModel timer; String signatureNurse; String signatureEngineer; + String comment; Uint8List localNurseSignature; Uint8List localEngineerSignature; + int travelingExpense; - ServiceReport( - {this.id, - this.visitDate, - this.endDate, - this.assetType, - this.status, - this.type, - this.faultDescriptionId, - //this.workHours, - this.travelingHours, - this.parts, - this.engineer, - this.workPreformed, - this.reason, - this.operatingHours, - this.callLastSituation, - this.jobSheetNumber, - this.image, - this.device, - this.invoiceCode, - this.invoiceNumber, - this.quantity = "1", - this.timer, - this.signatureNurse, - this.signatureEngineer, - this.localNurseSignature, - this.localEngineerSignature}); + ServiceReport({ + this.id, + this.visitDate, + this.endDate, + this.assetType, + this.status, + this.type, + this.faultDescriptionId, + //this.workHours, + this.travelingHours, + this.parts, + this.engineer, + this.workPreformed, + this.reason, + this.operatingHours, + this.callLastSituation, + this.jobSheetNumber, + this.image, + this.device, + this.invoiceCode, + this.invoiceNumber, + this.quantity = "1", + this.timer, + this.signatureNurse, + this.signatureEngineer, + this.localNurseSignature, + this.localEngineerSignature, + this.comment, + this.repairLocation, + this.travelingExpense, + this.startDate, + }); Map toMap(ServiceRequest request) { Map _map = {}; @@ -98,6 +107,7 @@ class ServiceReport { _map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber; } _map["AssignedEmployee"] = engineer?.toMap(); + _map["repairLocation"] = repairLocation?.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(); @@ -113,6 +123,10 @@ class ServiceReport { } _map["nurseSignature"] = signatureNurse; _map["engSignature"] = signatureEngineer; + _map["comment"] = comment; + _map["travelingExpense"] = travelingExpense; + _map["startofWorkTime"] = startDate; + _map["endofWorkTime"] = endDate; return _map; } @@ -140,7 +154,7 @@ class ServiceReport { factory ServiceReport.fromJson(Map parsedJson, int id) { List _parts = []; if (parsedJson["sparePartsWorkOrders"] != null) { - if (parsedJson["sparePartsWorkOrders"][0]["id"] != null) { + if ((parsedJson["sparePartsWorkOrders"]as List ).isNotEmpty && parsedJson["sparePartsWorkOrders"][0]["id"] != null) { List partsList = parsedJson["sparePartsWorkOrders"]; _parts = partsList.map((e) => Part.fromJson(e["sparePart"], reportJson: e)).toList(); } diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index aa1c8041..47613fe2 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -224,6 +224,10 @@ class Subtitle { String alert; String comment; String updateServiceRequest; + String repairLocation; + String travelingExpense; + String startDate; + String endDate; void setIssues(List issues) { issues.clear(); @@ -423,6 +427,10 @@ class Subtitle { @required this.site, @required this.maintenanceSituation, @required this.currentSituation, + @required this.repairLocation, + @required this.travelingExpense, + @required this.startDate, + @required this.endDate, }); factory Subtitle.fromJson(Map parsedJson) { @@ -615,6 +623,10 @@ class Subtitle { site: parsedJson["site"], maintenanceSituation: parsedJson["maintenanceSituation"], currentSituation: parsedJson["currentSituation"], + repairLocation: parsedJson["repairLocation"], + travelingExpense: parsedJson["travelingExpense"], + startDate: parsedJson["startDate"], + endDate: parsedJson["endDate"], ); } } 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 3afe07ba..f7ee46eb 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -2,7 +2,6 @@ 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/api_routes/http_status_manger.dart'; @@ -15,7 +14,6 @@ import 'package:test_sa/controllers/validator/validator.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,11 +31,13 @@ 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'; +import '../../../../widgets/speech_to_text/speech_to_text.dart'; +import '../../../../widgets/status/report/service_report_repair_location.dart'; + class CreateServiceReport extends StatefulWidget { static final String id = "/create-service-report"; final ServiceRequest request; @@ -279,6 +279,7 @@ class _CreateServiceReportState extends State with TickerPr ), ServiceReportStatusMenu( report: _serviceReport, + request: widget.request, onSelect: (status) { _serviceReport.status = status; }, @@ -330,7 +331,55 @@ class _CreateServiceReportState extends State with TickerPr SizedBox( height: 8 * AppStyle.getScaleFactor(context), ), - const ASubTitle("Assign Employee"), + Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const ASubTitle("Start Date"), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + ADatePicker( + date: _serviceReport.startDate, + from: DateTime.now().subtract(const Duration(days: 365)), + to: DateTime.now().add(const Duration(days: 365)), + onDatePicker: (date) { + _serviceReport.startDate = date; + setState(() {}); + }, + ), + ], + ), + ), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const ASubTitle("End Date"), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + ADatePicker( + date: _serviceReport.endDate, + from: DateTime.now().subtract(const Duration(days: 365)), + to: DateTime.now().add(const Duration(days: 365)), + onDatePicker: (date) { + _serviceReport.endDate = date; + setState(() {}); + }, + ), + ], + ), + ), + ], + ), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + const ASubTitle("Assigned Employee"), const SizedBox( height: 8, ), @@ -404,66 +453,69 @@ 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?.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( + 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?.toString(), + textAlign: TextAlign.center, + controller: _faultController, + style: Theme.of(context).textTheme.titleMedium, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + textInputType: TextInputType.multiline, + onSaved: (value) { + _serviceReport.faultDescriptionId = int.tryParse(value) ?? 0; + }, + ), + 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, @@ -509,6 +561,46 @@ class _CreateServiceReportState extends State with TickerPr ), ], ), + const SizedBox( + height: 8, + ), + ASubTitle(_subtitle.repairLocation), + const SizedBox( + height: 4, + ), + ServiceReportRepairLocation( + initialValue: _serviceReport.repairLocation, + onSelect: (status) { + _serviceReport.repairLocation = status; + }, + ), + const SizedBox( + height: 16, + ), + ATextFormField( + initialValue: _serviceReport?.travelingExpense?.toString(), + hintText: _subtitle.travelingExpense, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.titleMedium, + textInputType: TextInputType.number, + onSaved: (value) { + _serviceReport.travelingExpense = int.tryParse(value) ?? 0; + }, + ), + const SizedBox( + height: 8, + ), + ATextFormField( + initialValue: _serviceReport?.comment, + hintText: _subtitle.comment, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.titleMedium, + textInputType: TextInputType.multiline, + onSaved: (value) { + _serviceReport.comment = value; + }, + ), + const SizedBox( height: 8, ), @@ -626,10 +718,7 @@ class _CreateServiceReportState extends State with TickerPr // ), // ], // ), - //const SizedBox(height: 8,), - const SizedBox( - height: 8, - ), + const SizedBox(height: 8), const ASubTitle("Nurse Signature"), ESignature( oldSignature: _serviceReport.signatureNurse, @@ -731,7 +820,14 @@ class _CreateServiceReportState extends State with TickerPr _isLoading = true; setState(() {}); - int status = await _serviceRequestsProvider.createServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request); + int status = await _serviceRequestsProvider.createServiceReport( + user: _userProvider.user, + host: _settingProvider.host, + report: _serviceReport, + request: widget.request, + ); + print(6); + print(status); _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { 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 61692bbd..e92f4c7c 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -2,7 +2,6 @@ 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/api_routes/http_status_manger.dart'; @@ -307,6 +306,7 @@ class _EditServiceReportState extends State with TickerProvid ), ServiceReportStatusMenu( report: _serviceReport, + request: widget.request, onSelect: (status) { _serviceReport.status = status; }, diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 8f77c34b..0d17f864 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -12,6 +12,7 @@ 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/pages/user/requests/create_request.dart'; import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; @@ -84,13 +85,16 @@ class RequestDetailsPage extends StatelessWidget { buttonSize: 42, backgroundColor: AColors.green, onPressed: () async { - showModalBottomSheet( - context: context, - builder: (context) { - return ServiceRequestsUpdateDialog( - request: serviceRequest, - ); - }); + Navigator.of(context).push( + MaterialPageRoute(builder: (_) => CreateRequestPage(serviceRequest: serviceRequest)), + ); + // showModalBottomSheet( + // context: context, + // builder: (context) { + // return ServiceRequestsUpdateDialog( + // request: serviceRequest, + // ); + // }); // DateTime picked = await showDatePicker( // context: context, // initialDate: DateTime.now(), @@ -302,6 +306,7 @@ class RequestDetailsPage extends StatelessWidget { future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), builder: (context, snap) { workOrders = snap.data as List; + if (snap.connectionState == ConnectionState.waiting) return Center(child: CircularProgressIndicator()); if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) { return ListView.separated( padding: EdgeInsets.all(21), diff --git a/lib/views/widgets/status/report/service_report_repair_location.dart b/lib/views/widgets/status/report/service_report_repair_location.dart new file mode 100644 index 00000000..4892a3a7 --- /dev/null +++ b/lib/views/widgets/status/report/service_report_repair_location.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/report/service_report_repair_location_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 ServiceReportRepairLocation extends StatelessWidget { + final Lookup initialValue; + final Function(Lookup) onSelect; + + const ServiceReportRepairLocation({Key key, this.onSelect, this.initialValue}) : super(key: key); + @override + Widget build(BuildContext context) { + SettingProvider _settingProvider = Provider.of(context); + UserProvider _userProvider = Provider.of(context); + ServiceReportRepairLocationProvider _menuProvider = Provider.of(context); + return LoadingManager( + isLoading: _menuProvider.isLoading, + isFailedLoading: _menuProvider.reasons == null, + stateCode: _menuProvider.stateCode, + onRefresh: () async { + _menuProvider.reset(); + await _menuProvider.getTypes( + user: _userProvider.user, + host: _settingProvider.host, + ); + }, + child: SingleStatusMenu( + initialStatus: initialValue, + statuses: _menuProvider.reasons, + onSelect: onSelect, + )); + } +} diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index 2effae6b..5d3f797a 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -8,14 +8,16 @@ import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; class ServiceReportStatusMenu extends StatefulWidget { final Function(Lookup) onSelect; final ServiceReport report; + final ServiceRequest request; - const ServiceReportStatusMenu({Key key, this.onSelect, this.report}) : super(key: key); + const ServiceReportStatusMenu({Key key, this.onSelect, this.report, this.request}) : super(key: key); @override State createState() => _ServiceReportStatusMenuState(); @@ -39,7 +41,14 @@ class _ServiceReportStatusMenuState extends State { isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null, stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0), onRefresh: () async { - await callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: widget.report.status?.id); + await callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: widget.report.status?.id, + typeName: widget.report.type?.name, + id: widget.report.id, + woId: widget.request.id, + ); if (menuProvider.stateCode == null) { menuProvider.reset(); await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host); @@ -51,7 +60,14 @@ class _ServiceReportStatusMenuState extends State { initialStatus: widget.report.status, onSelect: (status) { widget.report.callLastSituation = null; - callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: status.id); + callsLastSituationsProvider.getCalls( + user: userProvider.user, + host: settingProvider.host, + serviceStatus: status.id, + id: widget.report.id, + woId: widget.request.id, + typeName: widget.report.type?.name, + ); widget.onSelect(status); },