diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 0d20dde2..e3428ed3 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -309,82 +309,40 @@ class ServiceRequestsProvider extends ChangeNotifier { } } - Future createServiceReport({@required ServiceReport report, @required ServiceRequest request}) async { + Future createServiceReport(BuildContext context, {@required ServiceReport report, @required User user, @required ServiceRequest request}) async { Response response; try { - // Map body = { - // "id": 0, - // "parentWOId": null, - // "workOrderNo": "", - // "workOrderYear": null, - // "workOrderSequennce": null, - // "callRequest": { - // "id": request.id, - // }, - // "assetType": report.assetType?.toJson(), - // "assignedEmployee": {"id": report.engineer?.id, "name": report.engineer?.name ?? ""}, - // "visitDate": report.returnToService?.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.userID, - // } - // ], - // "calllastSituation": report.callLastSituation?.toJson(), - // "currentSituation": null, - // "repairLocation": report.repairLocation?.toJson(), - // "reason": report.reason?.toJson(), - // "startofWorkTime": report.timer?.startAt?.toIso8601String() ?? "", - // "endofWorkTime": report.timer?.endAt?.toIso8601String() ?? "", - // "workingHours": report?.workingHours, - // "travelingHours": report.travelingHours, - // "travelingExpenses": report.travelingExpense ?? 0, - // if (report.faultDescription != null) "faultDescription": report.faultDescription.toJson(), - // "sparePartsWorkOrders": report.parts - // ?.map( - // (p) => { - // "id": p.reportPartID ?? 0, - // "sparePart": {"id": p.id, "partNo": p.partNo, "partName": p.partName}, - // "qty": p.quantity - // }, - // ) - // ?.toList(), - // "reviewComment": "", - // "comment": report.comment, - // "attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(), - // "equipmentStatus": report.equipmentStatus?.toJson(), - // "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: {}); - // response = await post( - // Uri.parse( - // host+URLs.createServiceReport), - // body: body, - // ); - + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + final body = report.toJson(); + final callRequest = CallRequest(id: num.tryParse(request?.id ?? "")).toJson(); + final contactPerson = [ + { + "id": 0, + // "employeeCode": "", + "name": user.userName, + "telephone": user.phoneNumber, + // "job": "", + "email": user.email, + // "land": "", + "contactUserId": user.userID, + } + ]; + body.update("contactPersonWorkOrders", (value) => contactPerson, ifAbsent: () => contactPerson); + body.update("callRequest", (value) => callRequest, ifAbsent: () => callRequest); + response = await ApiManager.instance.post(URLs.createServiceReport, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { reset(); notifyListeners(); + Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); + Navigator.of(context).pop(); + } else { + Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest}: ${json.decode(response.body)['message']}"); } + Navigator.pop(context); return response.statusCode; } catch (error) { + Navigator.pop(context); print(error); return -1; } diff --git a/lib/models/service_request/service_report.dart b/lib/models/service_request/service_report.dart index d97a3f97..25ae4ccb 100644 --- a/lib/models/service_request/service_report.dart +++ b/lib/models/service_request/service_report.dart @@ -228,7 +228,7 @@ class ServiceReport { ); Map toJson() { final map = {}; - map['id'] = id; + map['id'] = id ?? 0; map['parentWOId'] = parentWOId; map['workOrderNo'] = workOrderNo; map['workOrderYear'] = workOrderYear; @@ -301,4 +301,8 @@ class ServiceReport { } return map; } + + Future validate() async { + return true; + } } diff --git a/lib/views/pages/user/requests/work_order/create_service_report.dart b/lib/views/pages/user/requests/work_order/create_service_report.dart index 11ac10ea..84c9f652 100644 --- a/lib/views/pages/user/requests/work_order/create_service_report.dart +++ b/lib/views/pages/user/requests/work_order/create_service_report.dart @@ -3,7 +3,6 @@ import 'dart:developer'; import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/attachment.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.dart'; @@ -24,7 +23,6 @@ import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; -import '../../../../../controllers/api_routes/http_status_manger.dart'; import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import '../../../../../models/lookup.dart'; import '../../../../../models/service_request/spare_parts.dart'; @@ -182,6 +180,7 @@ class _CreateServiceReportState extends State with TickerPr assetId: _serviceReport.callRequest?.asset?.id, initialValue: (_serviceReport.assistantEmployees?.isNotEmpty ?? false) ? _serviceReport.assistantEmployees?.first : null, onSelect: (employee) { + log(employee.toJson().toString()); _serviceReport.assistantEmployees = [employee]; }, ), @@ -192,7 +191,6 @@ class _CreateServiceReportState extends State with TickerPr staticData: _spareParts, initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.sparePart : null, onSelect: (part) { - log(part.toJson().toString()); _serviceReport.sparePartsWorkOrders.clear(); _serviceReport.sparePartsWorkOrders.add(SparePartsWorkOrders(sparePart: part)); setState(() {}); @@ -214,12 +212,12 @@ class _CreateServiceReportState extends State with TickerPr oldSignature: _serviceReport.engSignature, newSignature: _serviceReport.localEngSignature, onSaved: (signature) { - if (signature == null || signature.isEmpty) { - setState(() {}); - return; - } + // if (signature == null || signature.isEmpty) { + // setState(() {}); + // return; + // } _serviceReport.localEngSignature = signature; - _serviceReport.engSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + _serviceReport.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null; }, ), 24.height, @@ -229,37 +227,18 @@ class _CreateServiceReportState extends State with TickerPr AppFilledButton( label: context.translation.submitRequest, onPressed: () async { - // if (!_formKey.currentState.validate()) { - // setState(() {}); - // return; - // } - // if (!(await _serviceReport.validate())) { - // setState(() {}); - // return; - // } + if ((!_formKey.currentState.validate()) || (!(await _serviceReport.validate()))) { + setState(() {}); + return; + } _formKey.currentState.save(); - - _isLoading = true; - setState(() {}); _serviceReport.attachmentsWorkOrder ??= []; + if (_files.isEmpty) _serviceReport.attachmentsWorkOrder = []; for (var file in _files) { _serviceReport.attachmentsWorkOrder.add(Attachment(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}")); } - int status = await _serviceRequestsProvider.createServiceReport(report: _serviceReport, request: widget.request); - _isLoading = false; - setState(() {}); - if (status >= 200 && status < 300) { - Fluttertoast.showToast( - msg: context.translation.successfulRequestMessage, - ); - Navigator.of(context).pop(); - Navigator.of(context).pop(); - } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text(errorMessage), - )); - } + final user = Provider.of(context, listen: false).user; + await _serviceRequestsProvider.createServiceReport(context, report: _serviceReport, request: widget.request, user: user); }, ), ],