From e25dc22bd0232e3d063dc80bc0f075facfc35129 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Tue, 16 May 2023 09:11:27 +0300 Subject: [PATCH] Enhancements --- ...reventive_maintenance_visits_provider.dart | 2 +- .../api/service_requests_provider.dart | 246 +++++++----------- lib/models/service_report.dart | 183 +++++++------ 3 files changed, 201 insertions(+), 230 deletions(-) diff --git a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart index 70078a33..59bf347a 100644 --- a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart +++ b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart @@ -11,7 +11,7 @@ import 'package:test_sa/models/visits/visits_search.dart'; class PreventiveMaintenanceVisitsProvider extends ChangeNotifier { // number of items call in each request - final pageItemNumber = 50; + final pageItemNumber = 10; //reset provider data void reset() { diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index adb8212a..d80faed3 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -14,13 +14,12 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestsProvider extends ChangeNotifier{ - +class ServiceRequestsProvider extends ChangeNotifier { // number of items call in each request - final pageItemNumber = 50; + final pageItemNumber = 10; //reset provider data - void reset(){ + void reset() { serviceRequests = null; nextPage = true; stateCode = null; @@ -49,20 +48,19 @@ class ServiceRequestsProvider 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 getRequests ({ + Future getRequests({ @required String host, @required User user, @required int hospitalId, }) async { - if(isLoading == true) - return -2; + if (isLoading == true) return -2; isLoading = true; - if(serviceRequests == null) notifyListeners(); + if (serviceRequests == null) notifyListeners(); Response response; - try{ - Map body = {}; + try { + Map body = {}; body.addAll(search.toMap()); - body["pageNumber"] = (serviceRequests?.length ?? 0) ~/pageItemNumber + 1; + body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1; body["pageSize"] = pageItemNumber; response = await ApiManager.instance.post( @@ -71,30 +69,27 @@ class ServiceRequestsProvider extends ChangeNotifier{ ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(response.body)["data"]; - List serviceRequestsPage = requestsListJson.map( - (request) => ServiceRequest.fromJson(request)).toList(); + List serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList(); serviceRequests ??= []; serviceRequests.addAll(serviceRequestsPage); - if(serviceRequestsPage.length == pageItemNumber){ + if (serviceRequestsPage.length == pageItemNumber) { nextPage = true; - }else{ + } else { nextPage = false; } } isLoading = false; notifyListeners(); return response.statusCode; - - } catch(error) { + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); return -1; } - } Future getSingleServiceRequest({ @@ -104,115 +99,93 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required Subtitle subtitle, }) async { String userData = ''; - if(user != null){ - userData += "&uid="+user.id; - userData += "&token="+user.token; + if (user != null) { + userData += "&uid=" + user.id; + userData += "&token=" + user.token; } Response response; - try{ - response = await get( - Uri.parse( - host+URLs.getSingleServiceRequest - +'?call_nid=$requestId' - '$userData',) - ); - }catch(error){ - throw(HttpStatusManger.getStatusMessage( - status: -1, subtitle: subtitle)); + try { + response = await get(Uri.parse( + host + + URLs.getSingleServiceRequest + + '?call_nid=$requestId' + '$userData', + )); + } catch (error) { + throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle)); } // If the call to the server was successful, parse the JSON. - if (response.statusCode >= 200 && response.statusCode < 300){ + if (response.statusCode >= 200 && response.statusCode < 300) { // If the call to the server was successful, parse the JSON. List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList(); return _requests[0]; - }else{ - throw(HttpStatusManger.getStatusMessage( - status: response.statusCode, subtitle: subtitle)); + } else { + throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle)); } - } - Future createRequest ({ + Future createRequest({ @required String host, @required User user, @required ServiceRequest serviceRequest, }) async { - var body = { - "callCreatedBy": { - "id":user.id, - "name":user.userName - }, - "assets":serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId], + "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(), + "attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name": e}).toList(), "priority": serviceRequest.priority.toMap(), "defectType": serviceRequest.defectType.toMap(), - "typeofRequest":serviceRequest.type.toMap(), - "requestedThrough":serviceRequest.type.toMap(), + "typeofRequest": serviceRequest.type.toMap(), + "requestedThrough": serviceRequest.type.toMap(), }; - if(serviceRequest.audio != null){ + if (serviceRequest.audio != null) { body["voiceNote"] = serviceRequest.audio; } Response response; - try{ - response = await ApiManager.instance.post( - URLs.createRequest, - body: body - ); + try { + response = await ApiManager.instance.post(URLs.createRequest, body: body); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { - if(serviceRequests != null) - serviceRequests.insert( - 0, - ServiceRequest.fromJson( - json.decode(utf8.decode(response.bodyBytes))[0] - ) - ); + if (response.statusCode >= 200 && response.statusCode < 300) { + if (serviceRequests != null) serviceRequests.insert(0, ServiceRequest.fromJson(json.decode(utf8.decode(response.bodyBytes))[0])); notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future createIssueReport ({ + Future createIssueReport({ @required String host, @required User user, @required Issue issue, }) async { Response response; - Map body = issue.toMap(); + Map body = issue.toMap(); body["uid"] = user.id; body["token"] = user.token; - try{ + try { response = await post( - Uri.parse(host+URLs.createReport), + Uri.parse(host + URLs.createReport), body: body, ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { - - } + if (response.statusCode >= 200 && response.statusCode < 300) {} return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future updateDate ({ + Future updateDate({ @required String host, @required User user, @required String newDate, @@ -220,49 +193,43 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required ServiceRequest request, }) async { Response response; - Map body = {}; + Map body = {}; body["uid"] = user.id; body["token"] = user.token; body["nid"] = request.id; - if(newDate != null) body["date"] = newDate; - if(employee != null) body["ass_emp"] = employee.id.toString(); - try{ + if (newDate != null) body["date"] = newDate; + if (employee != null) body["ass_emp"] = employee.id.toString(); + try { response = await post( - Uri.parse( - //host+ - URLs.updateRequestDate - ), + Uri.parse( + //host+ + URLs.updateRequestDate), body: body, ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { request.engineerName = employee.name; notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future createServiceReport ({ + Future createServiceReport({ @required String host, @required User user, @required ServiceReport report, @required ServiceRequest request, }) async { Response response; - - try{ - Map body = report.toMap(request); + try { + Map body = report.toMap(request); // body["uid"] = user.id; // body["token"] = user.token; - response = await ApiManager.instance.post( - URLs.createServiceReport, - body: body - ); + response = await ApiManager.instance.post(URLs.createServiceReport, body: body); + print(response.body); // response = await post( // Uri.parse( // host+URLs.createServiceReport), @@ -270,54 +237,46 @@ class ServiceRequestsProvider extends ChangeNotifier{ // ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { reset(); notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future createDuplicatedReport ({ + Future createDuplicatedReport({ @required String host, @required User user, @required ServiceRequest request, }) async { Response response; String userData = ''; - if(user != null){ - userData += "&uid="+user.id; - userData += "&token="+user.token; + if (user != null) { + userData += "&uid=" + user.id; + userData += "&token=" + user.token; } - try{ + try { response = await get( - Uri.parse( - host+URLs.createDuplicatedReport - +"?nid=${request.id}" - +userData), + Uri.parse(host + URLs.createDuplicatedReport + "?nid=${request.id}" + userData), ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { reset(); notifyListeners(); } return response.statusCode; - - } catch(error) { - + } catch (error) { return -1; } - } - Future updateServiceReport ({ + Future updateServiceReport({ @required String host, @required User user, @required ServiceReport report, @@ -329,14 +288,11 @@ class ServiceRequestsProvider extends ChangeNotifier{ // body["token"] = user.token; // body["job_id"] = request.id; // body["report_id"] = request.reportID; - try{ - Map body = report.toMap(request); + try { + Map body = report.toMap(request); // body["uid"] = user.id; // body["token"] = user.token; - response = await ApiManager.instance.put( - URLs.updateServiceReport, - body: body - ); + response = await ApiManager.instance.put(URLs.updateServiceReport, body: body); // response = await post( // Uri.parse( // host+URLs.updateServiceReport), @@ -344,52 +300,46 @@ class ServiceRequestsProvider extends ChangeNotifier{ // ); // stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { reset(); notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future updateServiceReportTimer ({ + Future updateServiceReportTimer({ @required String host, @required User user, @required TimerModel timer, @required ServiceRequest request, }) async { Response response; - Map body = {}; + Map body = {}; body["uid"] = user.id; body["token"] = user.token; body["job_id"] = request.id; body["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); - body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); + body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); body["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); body["report_id"] = request.reportID; - try{ + try { response = await post( - Uri.parse( - host+URLs.updateServiceReport), + Uri.parse(host + URLs.updateServiceReport), body: body, ); //stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // reset(); // notifyListeners(); } return response.statusCode; - - } catch(error) { - + } catch (error) { return -1; } - } Future getSingleServiceReport({ @@ -398,29 +348,21 @@ class ServiceRequestsProvider extends ChangeNotifier{ @required User user, @required Subtitle subtitle, }) async { - Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReport + "?workOrderId=$reportId", - ); - - }catch(error){ - throw(HttpStatusManger.getStatusMessage( - status: -1, subtitle: subtitle)); + ); + } catch (error) { + throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle)); } // If the call to the server was successful, parse the JSON. - if (response.statusCode >= 200 && response.statusCode < 300){ + if (response.statusCode >= 200 && response.statusCode < 300) { // If the call to the server was successful, parse the JSON. - return ServiceReport.fromJson( - json.decode(response.body)["data"],reportId); - }else{ - throw(HttpStatusManger.getStatusMessage( - status: response.statusCode, subtitle: subtitle)); + return ServiceReport.fromJson(json.decode(response.body)["data"], reportId); + } else { + throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle)); } - } - - -} \ No newline at end of file +} diff --git a/lib/models/service_report.dart b/lib/models/service_report.dart index 7016d0d6..af66ca77 100644 --- a/lib/models/service_report.dart +++ b/lib/models/service_report.dart @@ -36,99 +36,133 @@ class ServiceReport { Uint8List localNurseSignature; Uint8List 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 - }); + 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}); - Map toMap(ServiceRequest request){ - Map _map = {}; - if(id != null) _map["id"] = id; - if(visitDate != null) _map["visitDate"] = visitDate.toIso8601String(); + Map toMap(ServiceRequest request) { + Map _map = {}; + if (id != null) _map["id"] = id; + if (visitDate != null) _map["visitDate"] = visitDate.toIso8601String(); //if(serviceType != null) _map["service_type"] = serviceType.id.toString(); - if(status != null) _map["status"] = status?.toMap(); - if(type != null) _map["typeOfWO"] = type?.toMap(); - if(assetType != null) _map["TypeOfWO"] = assetType?.toMap(); + 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){ + if (timer != null) { _map["startofWorkTime"] = timer.startAt.toIso8601String(); - _map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).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 (travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours; // 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){ + if (jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; + if (parts != null && parts.isNotEmpty) { _map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList(); } - if(device != null && device.id != null){ + if (device != null && device.id != null) { _map["callRequest"] = { - "id":request.id, - "asset":device?.toMap(assetType), + "id": request.id, + "asset": device?.toMap(assetType), }; _map["callRequest"]["asset"]["invoiceNumber"] = 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 (reason != null) _map["reason"] = reason.toMap(); //if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; - if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap(); + 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 - }]; + if (image != null) { + _map["attachmentsWorkOrder"] = [ + {"name": image} + ]; } _map["nurseSignature"] = signatureNurse; _map["engSignature"] = signatureEngineer; + + // ///TODO : zaid + // _map["supplier"] = { + // "id": 0, + // "suppliername": "string", + // "name": "string", + // "website": "string", + // "email": "string", + // "code": "string", + // "suppNo": 0, + // "suppStatusId": 0, + // "cityId": 0, + // "person": "string", + // "comment": "string", + // "zipcode": 0, + // "contact": "string", + // "telephones": [ + // {"id": 0, "supplierId": 0, "telephone": "string"} + // ], + // "faxes": [ + // {"id": 0, "supplierId": 0, "fax": "string"} + // ], + // "addresses": [ + // {"id": 0, "supplierId": 0, "address": "string"} + // ], + // "attachments": [ + // {"id": 0, "supplierId": 0, "attachmentName": "string", "attachmentURL": "string"} + // ], + // "suppPersons": [ + // {"id": 0, "supplierId": 0, "personName": "string", "personRoleId": 0, "contact": "string", "externalEngCode": "string", "email": "string"} + // ], + // "suppTCodes": [ + // {"id": 0, "supplierId": 0, "codeTypeId": 0, "codeValue": "string"} + // ] + // }; return _map; } - bool validate(){ - if(visitDate == null) return false; + bool validate() { + if (visitDate == null) return false; //if(serviceType == null) return false; - if(status == null) return false; - if(type == null && assetType==null) return false; - if(engineer == null) return false; - if(callLastSituation == null) return false; - if(callLastSituation?.value == 12){ - // if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; - if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false; + if (status == null) return false; + if (type == null && assetType == null) return false; + if (engineer == null) return false; + if (callLastSituation == null) 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; + if (parts == null) return false; //if(endDate == null) return false; //if(reason == null) return false; //todo uncoment this line @@ -138,16 +172,14 @@ class ServiceReport { return true; } - factory ServiceReport.fromJson(Map parsedJson,int id){ - List _parts = []; - 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(); - } - + factory ServiceReport.fromJson(Map parsedJson, int id) { + List _parts = []; + 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, assetType: Lookup.fromJson(parsedJson["assetType"]), @@ -156,7 +188,7 @@ class ServiceReport { status: Lookup.fromJson(parsedJson["status"]), type: Lookup.fromJson(parsedJson["typeOfWO"]), //faultDescriptionId: parsedJson["fault_description"], - endDate:DateTime.tryParse(parsedJson["endofWorkTime"]), + endDate: DateTime.tryParse(parsedJson["endofWorkTime"]), //invoiceCode: parsedJson["invoice_code"], //invoiceNumber: parsedJson["invoice_no"], //jobSheetNumber: parsedJson["job_sheet_no"], @@ -168,14 +200,11 @@ class ServiceReport { visitDate: DateTime.tryParse(parsedJson["visitDate"]), //workHours: parsedJson["working_hours"], timer: TimerModel( - startAt: DateTime.tryParse(parsedJson["startofWorkTime"]), - endAt: DateTime.tryParse(parsedJson["endofWorkTime"]), - durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 *60).toInt() - ), + 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"]), + device: Device.fromJson(parsedJson["callRequest"]["asset"]), + signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]), + signatureEngineer: URLs.getFileUrl(parsedJson["engSignature"]), ); } @@ -183,4 +212,4 @@ class ServiceReport { // return date == null || date.isEmpty // ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); // } -} \ No newline at end of file +}