diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index ada5f900..5a57fc1d 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -188,5 +188,6 @@ "alert": "تنبيه", "duplicateAlert": "تنبيه التكرار", "duplicateAlertMessage": "هل أنت متأكد أنك تريد تكرار الطلب؟", - "duplicateRequest": "تكرار الطلب" + "duplicateRequest": "تكرار الطلب", + "comment" : "تعليق" } \ No newline at end of file diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 2ce29fb9..a86013b2 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -188,5 +188,6 @@ "alert": "Alert", "duplicateAlert": "Duplicate Alert", "duplicateAlertMessage": "Are you sure you want to duplicate request?", - "duplicateRequest": "Duplicate Request" + "duplicateRequest": "Duplicate Request", + "comment" : "Comment" } \ 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 ddd49c7d..0361a6e2 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -133,6 +133,8 @@ class ServiceRequestsProvider extends ChangeNotifier { @required ServiceRequest serviceRequest, }) async { var body = { + "id": 0, + "calNo": "", "callCreatedBy": {"id": user.id, "name": user.userName}, "assets": serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId], "requestedDate": DateTime.now().toIso8601String(), @@ -144,7 +146,29 @@ class ServiceRequestsProvider extends ChangeNotifier { "defectType": serviceRequest.defectType.toMap(), "typeofRequest": serviceRequest.type.toMap(), "requestedThrough": serviceRequest.type.toMap(), - "reviewComment": "", + "reviewComment": serviceRequest.comment, + "voiceNote": serviceRequest.audio, + "noofFollowup": 0, + "callSiteContactPerson": [ + { + "id": 0, + "employeeCode": "string", + "name": "", + "telephone": "", + "job": "", + "email": "", + "land": "", + "contactUserId": "66e4235d-2527-471d-bbef-f29625fde43d ", + }, + ], + "status": null, + "callLastSituation": null, + "firstAction": null, + "loanAvailablity": null, + "comments": null, + "firstActionDate": null, + "visitDate": null, + "callReview": null, }; if (serviceRequest.audio != null) { body["voiceNote"] = serviceRequest.audio; diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 434f8de7..bf957294 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -2,7 +2,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'; -class ServiceRequest{ +class ServiceRequest { String id; String requestCode; String deviceSerialNumber; @@ -19,6 +19,7 @@ class ServiceRequest{ String audio; int statusValue; String statusLabel; + String comment; bool viewReport; String engineerMobile; @@ -53,7 +54,6 @@ class ServiceRequest{ this.deviceId, this.audio, this.engineerName, - this.viewReport = false, this.deviceModel, this.engineerMobile, @@ -69,11 +69,12 @@ class ServiceRequest{ this.type, this.requestedThrough, this.device, + this.comment, }); - factory ServiceRequest.fromJson(Map parsedJson){ + factory ServiceRequest.fromJson(Map parsedJson) { List images = []; - if(parsedJson["attachmentsCallRequest"] is List){ + if (parsedJson["attachmentsCallRequest"] is List) { List list = parsedJson["attachmentsCallRequest"]; images = list.map((e) => URLs.getFileUrl(e["attachmentsCallRequest"])).toList(); } @@ -85,35 +86,27 @@ class ServiceRequest{ deviceId: parsedJson["asset"]["id"], audio: URLs.getFileUrl(parsedJson["voiceNote"] ?? ""), deviceArName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", - deviceEnName: 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"], + 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"] != null ? - parsedJson["workOrder"]["workOrderId"] : null, + 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"] != null ? - parsedJson["workOrder"]["faultDescription"] : null, - jobSheetNumber: parsedJson["workOrder"] != null ? - parsedJson["workOrder"]["jobSheetNumber"] :null, + engineerMobile: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["phone"], + 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"] != null ? - parsedJson["workOrder"]["workPerformed"] : null, - device: Device.fromJson(parsedJson["asset"]) + workPerformed: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["workPerformed"] : null, + device: Device.fromJson(parsedJson["asset"]), + comment: parsedJson["reviewComment"], ); } -} \ No newline at end of file +} diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index a2f212c2..30b8efc9 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -1,6 +1,6 @@ import 'package:meta/meta.dart'; -class Subtitle{ +class Subtitle { // http requests status messages String currentlyServiceNotAvailable; String waitUntilYourRequestComplete; @@ -215,8 +215,9 @@ class Subtitle{ String duplicateAlert; String duplicateAlertMessage; String alert; + String comment; - void setIssues(List issues){ + void setIssues(List issues) { issues.clear(); issues.add(reason1); issues.add(reason2); @@ -226,6 +227,7 @@ class Subtitle{ } Subtitle({ + @required this.comment, @required this.currentlyServiceNotAvailable, @required this.waitUntilYourRequestComplete, @required this.requestCompleteSuccessfully, @@ -278,7 +280,6 @@ class Subtitle{ @required this.titleValidateMessage, @required this.to, @required this.urlNotFound, - @required this.nameExist, @required this.unitRequired, @required this.unite, @@ -384,7 +385,6 @@ class Subtitle{ @required this.pickImage, @required this.requiredImage, @required this.activationAlert, - @required this.callId, @required this.requiredWord, @required this.quantity, @@ -409,8 +409,9 @@ class Subtitle{ @required this.duplicateRequest, }); - factory Subtitle.fromJson(Map parsedJson){ + factory Subtitle.fromJson(Map parsedJson) { return Subtitle( + comment: parsedJson["comment"], currentlyServiceNotAvailable: parsedJson["server_error_message"], failedToCompleteRequest: parsedJson["failed_request_message"], requestCompleteSuccessfully: parsedJson["successful_request_message"], @@ -423,7 +424,6 @@ class Subtitle{ signOut: parsedJson["sign_out"], signOutAlert: parsedJson["logout_alert"], language: parsedJson["language"], - name: parsedJson["name"], email: parsedJson["email"], phoneNumber: parsedJson["phone_number"], @@ -437,7 +437,6 @@ class Subtitle{ passwordValidateMessage: parsedJson["password_validate_message"], confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"], phoneNumberValidateMessage: parsedJson["phone_number_validate_message"], - forgetPasswordWithMark: parsedJson["forget_password_with_mark"], showPassword: parsedJson["show_password"], wrongEmailOrPassword: parsedJson["wrong_email_or_password"], @@ -447,7 +446,6 @@ class Subtitle{ back: parsedJson["back"], search: parsedJson["search"], searchByName: parsedJson["search_by_name"], - address: parsedJson["address"], addressNotFound: parsedJson["address_not_found"], addressValidateMessage: parsedJson["address_validate_message"], @@ -466,7 +464,6 @@ class Subtitle{ titleNotFound: parsedJson["title_not_found"], titleValidateMessage: parsedJson["title_validate_message"], urlNotFound: parsedJson["url_not_found"], - date: parsedJson["date"], status: parsedJson["status"], code: parsedJson["code"], @@ -542,7 +539,6 @@ class Subtitle{ visitDate: parsedJson["visitDate"], whatsApp: parsedJson["whatsApp"], workPerformed: parsedJson["workPerformed"], - actualDate: parsedJson["actualDate"], done: parsedJson["done"], expectDate: parsedJson["expectDate"], @@ -573,7 +569,6 @@ class Subtitle{ requiredImage: parsedJson["requiredImage"], taskStatus: parsedJson["taskStatus"], activationAlert: parsedJson["activationAlert"], - attachImage: parsedJson["attachImage"], callLastSituation: parsedJson["callLastSituation"], customer: parsedJson["customer"], @@ -592,12 +587,10 @@ class Subtitle{ requiredWord: parsedJson["requiredWord"], serviceType: parsedJson["serviceType"], workPreformed: parsedJson["workPreformed"], - alert: parsedJson["alert"], duplicateAlert: parsedJson["duplicateAlert"], duplicateAlertMessage: parsedJson["duplicateAlertMessage"], duplicateRequest: parsedJson["duplicateRequest"], ); } - -} \ No newline at end of file +} diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index b5c71478..42524743 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -31,6 +31,7 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_pri 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"; @@ -50,17 +51,19 @@ class _CreateRequestPageState extends State { Subtitle _subtitle; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); - TextEditingController _controller; + TextEditingController _maintenanceController, _commentController; @override void initState() { - _controller = TextEditingController(); + _maintenanceController = TextEditingController(); + _commentController = TextEditingController(); super.initState(); } @override void dispose() { - _controller.dispose(); + _maintenanceController.dispose(); + _commentController.dispose(); super.dispose(); } @@ -136,40 +139,56 @@ class _CreateRequestPageState extends State { setState(() {}); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Priority"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestPriorityMenu( initialValue: _serviceRequest.priority, - onSelect: (status){ + onSelect: (status) { _serviceRequest.priority = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Defect Type"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestDefectTypesMenu( initialValue: _serviceRequest.defectType, - onSelect: (status){ + onSelect: (status) { _serviceRequest.defectType = status; }, ), 12.height, - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Type"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestTypesMenu( initialValue: _serviceRequest.type, - onSelect: (status){ + onSelect: (status) { _serviceRequest.type = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Through"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestedThroughMenu( - initialValue: const Lookup(name: "App",value: 3), - onSelect: (status){ + initialValue: const Lookup(name: "App", value: 3), + onSelect: (status) { _serviceRequest.requestedThrough = status; }, ), @@ -179,10 +198,10 @@ class _CreateRequestPageState extends State { images: _deviceImages, ), 12.height, - SpeechToTextButton(controller: _controller), + SpeechToTextButton(controller: _maintenanceController), 12.height, ATextFormField( - controller: _controller, + controller: _maintenanceController, initialValue: _serviceRequest.maintenanceIssue, hintText: _subtitle.maintenanceIssue, prefixIconData: FontAwesomeIcons.triangleExclamation, @@ -198,6 +217,16 @@ class _CreateRequestPageState extends State { _serviceRequest.audio = audio; }), 12.height, + ATextFormField( + controller: _commentController, + initialValue: _serviceRequest.comment, + hintText: _subtitle.comment, + style: Theme.of(context).textTheme.titleMedium, + textInputType: TextInputType.multiline, + onSaved: (value) { + _serviceRequest.comment = value; + }, + ), ], ).paddingOnly(left: 20, right: 20), Padding( @@ -210,9 +239,8 @@ class _CreateRequestPageState extends State { _serviceRequest.deviceId = _device?.id ?? ""; _isLoading = true; setState(() {}); - _serviceRequest.devicePhotos = _deviceImages.map( - (e) => "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}").toList(); - if(_serviceRequest.audio != null){ + _serviceRequest.devicePhotos = _deviceImages.map((e) => "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}").toList(); + if (_serviceRequest.audio != null) { final file = File(_serviceRequest.audio); _serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"; }