From f90df430233e5e16a1c425ffe6c2279acc6fcb9d Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Wed, 3 May 2023 08:53:16 +0300 Subject: [PATCH 1/2] Merge master into my work --- lib/api/api_client.dart | 7 +- .../preventive_maintenance_api_client.dart | 2 + lib/api/service_request_api_client.dart | 136 ++++- lib/api/visits_api_client.dart | 52 +- lib/controllers/api_routes/urls.dart | 16 +- lib/models/visits/visit.dart | 494 +++++++++++++++--- .../visits/pantry/future_edit_pently.dart | 2 +- .../visits/update_visits_group_sheet.dart | 2 +- .../pages/user/visits/visit_details.dart | 80 ++- lib/views/widgets/visits/visit_item.dart | 12 +- lib/views/widgets/visits/visit_status.dart | 4 +- 11 files changed, 651 insertions(+), 156 deletions(-) diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index 1a560f8e..1fe21ff9 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -142,8 +142,8 @@ class ApiClient { } } - if(!kReleaseMode) - { print("url:$url"); + if (!kReleaseMode) { + print("url:$url"); print("requestBody:$requestBody"); } @@ -192,6 +192,9 @@ class ApiClient { headers['Content-Type'] = 'application/json'; } } + if (!kReleaseMode) { + print(jsonObject); + } if (isFormData) { headers = {'Content-Type': 'application/x-www-form-urlencoded'}; diff --git a/lib/api/preventive_maintenance_api_client.dart b/lib/api/preventive_maintenance_api_client.dart index 00814d77..c3d99b41 100644 --- a/lib/api/preventive_maintenance_api_client.dart +++ b/lib/api/preventive_maintenance_api_client.dart @@ -19,6 +19,7 @@ class PreventiveMaintenanceApiClient { factory PreventiveMaintenanceApiClient() => _instance; Future getVisits({required int pageItemNumber, VisitsSearch? visitsSearch}) async { + print('get visits'); final response = await ApiClient().getJsonForResponse( '${URLs.host1}${URLs.getPreventiveMaintenanceVisits}', headers: {"Content-Type": "application/json; charset=utf-8"}, @@ -35,6 +36,7 @@ class PreventiveMaintenanceApiClient { } Future updateGroupOfVisits({required VisitsGroup group}) async { + print('update group of visits'); final user = UserApiClient().user; Map body = group.toJson(); body["token"] = user?.token ?? ""; diff --git a/lib/api/service_request_api_client.dart b/lib/api/service_request_api_client.dart index f34e0190..0b03b166 100644 --- a/lib/api/service_request_api_client.dart +++ b/lib/api/service_request_api_client.dart @@ -19,8 +19,11 @@ class ServiceRequestApiClient { factory ServiceRequestApiClient() => _instance; + // 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + /// ### The result will be added to [serviceRequests] Future createRequest(ServiceRequest serviceRequest) async { + print("create request"); final user = UserApiClient().user; await ApiClient().postJsonForObject( (json) { @@ -29,41 +32,135 @@ class ServiceRequestApiClient { }, '${URLs.host1}${URLs.createRequest}', { - // "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(), - // "audio": serviceRequest.audio, + "callNo": serviceRequest.id, + "callCreatedBy": {"name": serviceRequest.engineerName}, + "requestedDate": DateTime.now().millisecondsSinceEpoch.toString(), + "requestedTime": DateTime.now().millisecondsSinceEpoch.toString(), + "defectType": {"id": serviceRequest.defectType?.id, "name": serviceRequest.defectType?.label, "value": serviceRequest.defectType?.id}, + // "assets": [0], + "assignedEmployee": {"id": user?.id.toString(), "name": user?.username}, + "voiceNote": serviceRequest.audio, + // "callSiteContactPerson": [ + // {"id": 0, "employeeCode": "string", "name": "string", "telephone": "string", "job": "string", "email": "string", "land": "string", "contactUserId": "string"} + // ], + "priority": {"id": serviceRequest.priority?.id, "name": serviceRequest.priority?.label, "value": serviceRequest.priority?.id}, + // "requestedThrough": {"id": 0, "name": "string", "value": 0}, + // "typeofRequest": {"id": 0, "name": "string", "value": 0}, + // "callComments": "string", + // "noofFollowup": 0, + // "attachmentsCallRequest": [ + // {"id": "", "name": ""} + // ], + "status": {"name": serviceRequest.statusLabel, "value": serviceRequest.statusValue}, + // "callLastSituation": {"id": 0, "name": "string", "value": 0}, + // "firstAction": {"id": 0, "name": "string", "value": 0}, + // "loanAvailablity": {"id": 0, "name": "string", "value": 0}, + // "comments": "string", + // "firstActionDate": "2023-04-17T10:39:59.599Z", + "visitDate": serviceRequest.visitDate, + // "callReview": {"id": 0, "name": "string", "value": serviceRequest.} }, + // { + // "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(), + // "audio": serviceRequest.audio, + // }, ); } + // 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 + /// Get Service Requests and Fill [serviceRequests] Future> getRequests({pageItemNumber, ServiceRequestSearch? search}) async { + print("get requests xx"); final user = UserApiClient().user; - final response = await ApiClient().getJsonForResponse( - '${URLs.host1}${URLs.getServiceRequests}', - headers: {"Content-Type": "application/json; charset=utf-8"}, + print("user name : ${user?.username}"); + print("user id : ${user?.id}"); + final response = await ApiClient().postJsonForResponse( + '${URLs.host1}${URLs.getCallRequests}', + { + // "pageSize": (serviceRequests.length) ~/ pageItemNumber, + "pageNumber": pageItemNumber, + // "callId": "string", + // "requestedDateSymbol": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + // "requestedDateFrom": "2023-04-18T08:29:50.708Z", + // "requestedDateTo": "2023-04-18T08:29:50.708Z", + // "firstActionSymbol": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + // "firstActionFrom": "2023-04-18T08:29:50.708Z", + // "firstActionTo": "2023-04-18T08:29:50.708Z", + if (search?.hospital != null && (search?.hospital?.isNotEmpty ?? false)) "site": search?.hospital, + // "assetNo": "string", + if (search?.deviceSerialNumber != null && (search?.deviceSerialNumber?.isNotEmpty ?? false)) "assetSerialNumber": search?.deviceSerialNumber, + // "maintenanceSituation": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + // "status": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + "assignedEmployee": { + "id": user?.id, + "name": user?.username, + }, + // "firstActionStatus": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + if (search?.deviceName != null && (search?.deviceName?.isNotEmpty ?? false)) "assetName": search?.deviceName, + // "manufacturer": "string", + if (search?.model != null && (search?.model?.isNotEmpty ?? false)) "modelDefinition": search?.model, + // "typeOfrequest": { + // "id": 0, + // "name": "string", + // "value": 0 + // }, + // "priority": { + // "id": 0, + // "name": "string", + // "value": 0 + // } + }, // queryParameters: { - // 'uid': user?.id, + // // 'uid': user?.id, // if (user?.hospital?.id != null) 'client_nid': user?.hospital?.id, // 'token': user?.token, // 'page': '${(serviceRequests.length) ~/ pageItemNumber}', - // if (search != null) ...search.queryParameters(), + // // if (deviceSerialNumber != null && (deviceSerialNumber?.isNotEmpty ?? false)) 'sn_id': deviceSerialNumber, + // if (statusValue != null) 'status': statusValue?.toString(), + // // if (deviceName != null && (deviceName?.isNotEmpty ?? false)) 'equipment_en_name': deviceName, + // // if (hospital != null && (hospital?.isNotEmpty ?? false)) 'client': hospital, + // // if (model != null && (model?.isNotEmpty ?? false)) 'model': model, + // // if (search != null) ...search.queryParameters(), // }, ); - List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); + print(response.body); + List requestsListJson = json.decode(response.body)['data']; List serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList(); serviceRequests.addAll(serviceRequestsPage); return serviceRequestsPage; } Future getServiceById(String? requestId) async { + print("get service by id"); final user = UserApiClient().user; final response = await ApiClient().getJsonForResponse( '${URLs.host1}${URLs.getSingleServiceRequest}', @@ -76,6 +173,7 @@ class ServiceRequestApiClient { } Future createIssueReport(Issue issue) async { + print("Create Issue Report"); final user = UserApiClient().user; Map body = issue.toMap(); body["uid"] = user?.id ?? ""; @@ -84,6 +182,7 @@ class ServiceRequestApiClient { } Future updateDate({String? newDate, Lookup? employee, ServiceRequest? request}) async { + print("Update Date"); final user = UserApiClient().user; Map body = {}; body["uid"] = user?.id ?? ''; @@ -96,6 +195,7 @@ class ServiceRequestApiClient { } Future createServiceReport({required ServiceReport? report, required ServiceRequest? request}) async { + print("Create Service Report"); final user = UserApiClient().user; Map? body = report?.toMap(); body?["uid"] = user?.id ?? ""; @@ -105,6 +205,7 @@ class ServiceRequestApiClient { } Future createDuplicatedReport({required ServiceRequest request}) async { + print("Create Duplicated Report"); final user = UserApiClient().user; await ApiClient().getJsonForResponse( '${URLs.host1}${URLs.createDuplicatedReport}', @@ -113,6 +214,7 @@ class ServiceRequestApiClient { } Future updateServiceReport({required ServiceReport report, required ServiceRequest request}) async { + print("Update Service Report"); final user = UserApiClient().user; Map body = report.toMap(); body["uid"] = user?.id ?? ""; @@ -123,6 +225,7 @@ class ServiceRequestApiClient { } Future updateServiceReportTimer({required TimerModel timer, required ServiceRequest request}) async { + print("Update Service Report Timer"); final user = UserApiClient().user; Map body = {}; body["uid"] = user?.id ?? ""; @@ -136,6 +239,7 @@ class ServiceRequestApiClient { } Future getSingleServiceReport({required String reportId}) async { + print("Get Single Service Report"); final user = UserApiClient().user; final response = await ApiClient().getJsonForResponse( '${URLs.host1}${URLs.getServiceReport}', diff --git a/lib/api/visits_api_client.dart b/lib/api/visits_api_client.dart index 8bbfa309..ddd5637b 100644 --- a/lib/api/visits_api_client.dart +++ b/lib/api/visits_api_client.dart @@ -18,23 +18,49 @@ class VisitsApiClient { VisitsApiClient._internal(); factory VisitsApiClient() => _instance; - +// 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 Future getVisits({required int pageItemNumber, VisitsSearch? visitsSearch}) async { - final response = await ApiClient().getJsonForResponse( - '${URLs.host1}${URLs.getRegularVisits}', - headers: {"Content-Type": "application/json; charset=utf-8"}, - queryParameters: { - 'uid': UserApiClient().user?.id, - 'token': UserApiClient().user?.token, - 'page': '${(visits.length) ~/ pageItemNumber}', - if (visitsSearch != null) ...visitsSearch.queryParameters(), - }, - ); - List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + print("get visits"); + final response = await ApiClient().postJsonForResponse( + '${URLs.host1}${URLs.getRegularVisits}', + // headers: {"Content-Type": "application/json; charset=utf-8"}, + { + // "pageSize": 0, + "pageNumber": pageItemNumber, + // "id": 0, + // "assetId": 0, + "modelId": visitsSearch?.model, + // "ppmId": 0, + // "ppmScheduleId": 0, + // "classification": 0, + // "visitStatusId": 0, + // "deviceStatusId": 0, + // "groupLeaderReviewId": 0, + // "assignedEmployeeId": "string", + "assignedToId": visitsSearch?.contactStatus, + "expectedDateFrom": visitsSearch?.expectedDateFrom, + "expectedDateTo": visitsSearch?.expectedDateTo, + "actualDateFrom": visitsSearch?.actualDateFrom, + "actualDateTo": visitsSearch?.actualDateTo, + // "siteId": 0, + // "jobSheetNo": "string", + // "typeOfServiceId": 0, + // "planNumber": 0 + } + // queryParameters: { + // 'uid': UserApiClient().user?.id, + // 'token': UserApiClient().user?.token, + // 'page': '${(visits.length) ~/ pageItemNumber}', + // if (visitsSearch != null) ...visitsSearch.queryParameters(), + // }, + ); + // print(json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""))); + List requestsListJson = json.decode(response.body)['data']; List visitsList = requestsListJson.map((request) => Visit.fromJson(request)).toList(); visits.addAll(visitsList); } + // 4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 Future updateGroupOfVisits({required VisitsGroup group}) async { final user = UserApiClient().user; Map body = group.toJson(); @@ -59,6 +85,6 @@ class VisitsApiClient { body?["uid"] = user?.id ?? ""; body?["token"] = user?.token ?? ""; await ApiClient().postJsonForResponse('${URLs.host1}${URLs.updatePentry}/${visit?.id}', body); - visit?.status = pentry?.ppmVisitStatus; + // visit?.status = pentry?.ppmVisitStatus; } } diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 8795ecb9..21084d12 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -1,8 +1,7 @@ -class URLs{ +class URLs { URLs._(); static const host2 = "http://194.163.164.213/atoms/api"; - // static const host1 = "https://atoms.hmg.com/api"; // production url - static const host1 = "https://atomsuat.hmg.com"; // uat url + static const host1 = "https://atomsuat.hmg.com"; // API Routes static const login = "/mobile/MobileAuth/Login"; // post @@ -11,13 +10,13 @@ class URLs{ static const getHospitals = "/mobile/Customer/GetCustomers"; // get static const getDepartments = "/mobile/Department/search"; // get static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051 - static const getServiceRequests = "/return/user/calls"; // get + static const getServiceRequests = "/mobile/CallRequest/GetCallRequests"; // get static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get - static const getRegularVisits = "/return/user/ppm"; // get - static const updateRegularVisits = "/update/user/ppm"; // get + static const getRegularVisits = "/mobile/Visit/GetVisits"; // get + static const updateRegularVisits = "/mobile/Visit/UpdateVisits"; // get static const getSingleServiceRequest = "/return/call/information"; // get static const getNotifications = "/return/user/notification"; // get @@ -48,7 +47,7 @@ class URLs{ static const requestGasRefill = "/mobile/GazRefill/AddGazRefill"; // get static const updateGasRefill = "/mobile/GazRefill/UpdateGazRefill"; // get static const getGasRefill = "/mobile/GazRefill/GetGazRefills"; // get - static const generateGazRefillNo= "/mobile/GazRefill/GenerateGazRefillNumber"; + static const generateGazRefillNo = "/mobile/GazRefill/GenerateGazRefillNumber"; //device transfer static const requestDeviceTransfer = "/mobile/AssetTransfer/AddAssetTransfer"; // get @@ -65,5 +64,4 @@ class URLs{ 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/models/visits/visit.dart b/lib/models/visits/visit.dart index 02490e0e..5740d3fe 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,69 +1,433 @@ -import '../lookup.dart'; - class Visit { - String? id; - String? serialNumber; - String? expectDate; + int? id; + int? visitNo; + String? visitCode; + int? ppmId; + int? planNo; + String? planCode; + int? ppmScheduleId; + int? ppmScheduleNo; + String? ppmScheduleCode; + int? assetId; + String? assetName; + String? assetSerialNo; + String? assetNumber; + String? warrantyEndDate; + int? modelId; + String? modelName; + int? manufacturerId; + String? manufacturerName; + int? siteId; + String? siteName; + int? assignedToId; + String? assignedToName; + String? jobSheetNo; + String? assignedEmployeeId; + String? assignedEmployeeName; + String? expectedDate; String? actualDate; - String? hospitalId; - String? hospitalName; - String? deviceId; - String? deviceSerialNumber; - String? deviceArabicName; - String? deviceEnglishName; - String? employId; - String? employName; - String? modelAndBrand; - String? contactStatus; - Lookup? status; - String? assignTo; - String? deviceNumber; - List? images; - - Visit({ - this.id, - this.serialNumber, - this.hospitalId, - this.hospitalName, - this.deviceId, - this.deviceSerialNumber, - this.deviceArabicName, - this.deviceEnglishName, - this.employId, - this.employName, - this.expectDate, - this.actualDate, - this.status, - this.modelAndBrand, - this.contactStatus, - this.images, - this.assignTo, - this.deviceNumber, - }); - - factory Visit.fromJson(Map parsedJson) { - 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"] ?? []), - status: Lookup( - id: int.tryParse(parsedJson["status"] ?? "-1") ?? -1, // actual value (0,1,2) - label: parsedJson["status_value"] // text value - ), - assignTo: parsedJson["assigned_to"], - ); + String? nextDate; + String? forwardToId; + String? forwardToName; + int? maintenanceContractId; + String? contractNumber; + int? typeOfServiceId; + String? typeOfServiceName; + int? executionTimeFrameId; + String? executionTimeFrameName; + String? externalEngineer; + String? telephone; + int? groupLeaderReviewId; + String? groupLeaderReviewName; + int? timePeriodId; + String? timePeriodName; + List? vCalibrationTools; + List? vKits; + List? vContacts; + List? vChecklists; + List? vAttachments; + int? visitStatusId; + String? visitStatusName; + String? startDate; + String? endDate; + String? workingHours; + String? travelingHours; + int? deviceStatusId; + String? deviceStatusName; + String? comments; + String? workPerformed; + int? supplierId; + String? supplierName; + int? ppmSupplierId; + String? ppmSupplierName; + String? createdOn; + String? modifiedOn; + int? taskStatusId; + String? taskStatusName; + + Visit( + {this.id, + this.visitNo, + this.visitCode, + this.ppmId, + this.planNo, + this.planCode, + this.ppmScheduleId, + this.ppmScheduleNo, + this.ppmScheduleCode, + this.assetId, + this.assetName, + this.assetSerialNo, + this.assetNumber, + this.warrantyEndDate, + this.modelId, + this.modelName, + this.manufacturerId, + this.manufacturerName, + this.siteId, + this.siteName, + this.assignedToId, + this.assignedToName, + this.jobSheetNo, + this.assignedEmployeeId, + this.assignedEmployeeName, + this.expectedDate, + this.actualDate, + this.nextDate, + this.forwardToId, + this.forwardToName, + this.maintenanceContractId, + this.contractNumber, + this.typeOfServiceId, + this.typeOfServiceName, + this.executionTimeFrameId, + this.executionTimeFrameName, + this.externalEngineer, + this.telephone, + this.groupLeaderReviewId, + this.groupLeaderReviewName, + this.timePeriodId, + this.timePeriodName, + this.vCalibrationTools, + this.vKits, + this.vContacts, + this.vChecklists, + this.vAttachments, + this.visitStatusId, + this.visitStatusName, + this.startDate, + this.endDate, + this.workingHours, + this.travelingHours, + this.deviceStatusId, + this.deviceStatusName, + this.comments, + this.workPerformed, + this.supplierId, + this.supplierName, + this.ppmSupplierId, + this.ppmSupplierName, + this.createdOn, + this.modifiedOn, + this.taskStatusId, + this.taskStatusName}); + + Visit.fromJson(Map json) { + id = json['id']; + visitNo = json['visitNo']; + visitCode = json['visitCode']; + ppmId = json['ppmId']; + planNo = json['planNo']; + planCode = json['planCode']; + ppmScheduleId = json['ppmScheduleId']; + ppmScheduleNo = json['ppmScheduleNo']; + ppmScheduleCode = json['ppmScheduleCode']; + assetId = json['assetId']; + assetName = json['assetName']; + assetSerialNo = json['assetSerialNo']; + assetNumber = json['assetNumber']; + warrantyEndDate = json['warrantyEndDate']; + modelId = json['modelId']; + modelName = json['modelName']; + manufacturerId = json['manufacturerId']; + manufacturerName = json['manufacturerName']; + siteId = json['siteId']; + siteName = json['siteName']; + assignedToId = json['assignedToId']; + assignedToName = json['assignedToName']; + jobSheetNo = json['jobSheetNo']; + assignedEmployeeId = json['assignedEmployeeId']; + assignedEmployeeName = json['assignedEmployeeName']; + expectedDate = json['expectedDate']; + actualDate = json['actualDate']; + nextDate = json['nextDate']; + forwardToId = json['forwardToId']; + forwardToName = json['forwardToName']; + maintenanceContractId = json['maintenanceContractId']; + contractNumber = json['contractNumber']; + typeOfServiceId = json['typeOfServiceId']; + typeOfServiceName = json['typeOfServiceName']; + executionTimeFrameId = json['executionTimeFrameId']; + executionTimeFrameName = json['executionTimeFrameName']; + externalEngineer = json['externalEngineer']; + telephone = json['telephone']; + groupLeaderReviewId = json['groupLeaderReviewId']; + groupLeaderReviewName = json['groupLeaderReviewName']; + timePeriodId = json['timePeriodId']; + timePeriodName = json['timePeriodName']; + if (json['vCalibrationTools'] != null) { + vCalibrationTools = []; + json['vCalibrationTools'].forEach((v) { + vCalibrationTools!.add(VCalibrationTools.fromJson(v)); + }); + } + if (json['vKits'] != null) { + vKits = []; + json['vKits'].forEach((v) { + vKits!.add(VKits.fromJson(v)); + }); + } + if (json['vContacts'] != null) { + vContacts = []; + json['vContacts'].forEach((v) { + vContacts!.add(VContacts.fromJson(v)); + }); + } + if (json['vChecklists'] != null) { + vChecklists = []; + json['vChecklists'].forEach((v) { + vChecklists!.add(VChecklists.fromJson(v)); + }); + } + vAttachments = json['vAttachments'].cast(); + visitStatusId = json['visitStatusId']; + visitStatusName = json['visitStatusName']; + startDate = json['startDate']; + endDate = json['endDate']; + workingHours = json['workingHours']; + travelingHours = json['travelingHours']; + deviceStatusId = json['deviceStatusId']; + deviceStatusName = json['deviceStatusName']; + comments = json['comments']; + workPerformed = json['workPerformed']; + supplierId = json['supplierId']; + supplierName = json['supplierName']; + ppmSupplierId = json['ppmSupplierId']; + ppmSupplierName = json['ppmSupplierName']; + createdOn = json['createdOn']; + modifiedOn = json['modifiedOn']; + taskStatusId = json['taskStatusId']; + taskStatusName = json['taskStatusName']; + } + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['visitNo'] = visitNo; + data['visitCode'] = visitCode; + data['ppmId'] = ppmId; + data['planNo'] = planNo; + data['planCode'] = planCode; + data['ppmScheduleId'] = ppmScheduleId; + data['ppmScheduleNo'] = ppmScheduleNo; + data['ppmScheduleCode'] = ppmScheduleCode; + data['assetId'] = assetId; + data['assetName'] = assetName; + data['assetSerialNo'] = assetSerialNo; + data['assetNumber'] = assetNumber; + data['warrantyEndDate'] = warrantyEndDate; + data['modelId'] = modelId; + data['modelName'] = modelName; + data['manufacturerId'] = manufacturerId; + data['manufacturerName'] = manufacturerName; + data['siteId'] = siteId; + data['siteName'] = siteName; + data['assignedToId'] = assignedToId; + data['assignedToName'] = assignedToName; + data['jobSheetNo'] = jobSheetNo; + data['assignedEmployeeId'] = assignedEmployeeId; + data['assignedEmployeeName'] = assignedEmployeeName; + data['expectedDate'] = expectedDate; + data['actualDate'] = actualDate; + data['nextDate'] = nextDate; + data['forwardToId'] = forwardToId; + data['forwardToName'] = forwardToName; + data['maintenanceContractId'] = maintenanceContractId; + data['contractNumber'] = contractNumber; + data['typeOfServiceId'] = typeOfServiceId; + data['typeOfServiceName'] = typeOfServiceName; + data['executionTimeFrameId'] = executionTimeFrameId; + data['executionTimeFrameName'] = executionTimeFrameName; + data['externalEngineer'] = externalEngineer; + data['telephone'] = telephone; + data['groupLeaderReviewId'] = groupLeaderReviewId; + data['groupLeaderReviewName'] = groupLeaderReviewName; + data['timePeriodId'] = timePeriodId; + data['timePeriodName'] = timePeriodName; + if (vCalibrationTools != null) { + data['vCalibrationTools'] = vCalibrationTools!.map((v) => v.toJson()).toList(); + } + if (vKits != null) { + data['vKits'] = vKits!.map((v) => v.toJson()).toList(); + } + if (vContacts != null) { + data['vContacts'] = vContacts!.map((v) => v.toJson()).toList(); + } + if (vChecklists != null) { + data['vChecklists'] = vChecklists!.map((v) => v.toJson()).toList(); + } + data['vAttachments'] = vAttachments; + data['visitStatusId'] = visitStatusId; + data['visitStatusName'] = visitStatusName; + data['startDate'] = startDate; + data['endDate'] = endDate; + data['workingHours'] = workingHours; + data['travelingHours'] = travelingHours; + data['deviceStatusId'] = deviceStatusId; + data['deviceStatusName'] = deviceStatusName; + data['comments'] = comments; + data['workPerformed'] = workPerformed; + data['supplierId'] = supplierId; + data['supplierName'] = supplierName; + data['ppmSupplierId'] = ppmSupplierId; + data['ppmSupplierName'] = ppmSupplierName; + data['createdOn'] = createdOn; + data['modifiedOn'] = modifiedOn; + data['taskStatusId'] = taskStatusId; + data['taskStatusName'] = taskStatusName; + return data; + } +} + +class VCalibrationTools { + int? id; + int? visitId; + int? assetId; + String? assetSerialNo; + String? calibrationDateOfTesters; + + VCalibrationTools({this.id, this.visitId, this.assetId, this.assetSerialNo, this.calibrationDateOfTesters}); + + VCalibrationTools.fromJson(Map json) { + id = json['id']; + visitId = json['visitId']; + assetId = json['assetId']; + assetSerialNo = json['assetSerialNo']; + calibrationDateOfTesters = json['calibrationDateOfTesters']; + } + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['visitId'] = visitId; + data['assetId'] = assetId; + data['assetSerialNo'] = assetSerialNo; + data['calibrationDateOfTesters'] = calibrationDateOfTesters; + return data; + } +} + +class VKits { + int? id; + int? visitId; + int? partCatalogItemId; + String? partNumber; + String? oracleCode; + String? partName; + String? partName2; + + VKits({this.id, this.visitId, this.partCatalogItemId, this.partNumber, this.oracleCode, this.partName, this.partName2}); + + VKits.fromJson(Map json) { + id = json['id']; + visitId = json['visitId']; + partCatalogItemId = json['partCatalogItemId']; + partNumber = json['partNumber']; + oracleCode = json['oracleCode']; + partName = json['partName']; + partName2 = json['partName2']; + } + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['visitId'] = visitId; + data['partCatalogItemId'] = partCatalogItemId; + data['partNumber'] = partNumber; + data['oracleCode'] = oracleCode; + data['partName'] = partName; + data['partName2'] = partName2; + return data; + } +} + +class VContacts { + int? id; + int? visitId; + String? title; + String? person; + String? job; + String? email; + String? telephone; + String? landLine; + + VContacts({this.id, this.visitId, this.title, this.person, this.job, this.email, this.telephone, this.landLine}); + + VContacts.fromJson(Map json) { + id = json['id']; + visitId = json['visitId']; + title = json['title']; + person = json['person']; + job = json['job']; + email = json['email']; + telephone = json['telephone']; + landLine = json['landLine']; + } + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['visitId'] = visitId; + data['title'] = title; + data['person'] = person; + data['job'] = job; + data['email'] = email; + data['telephone'] = telephone; + data['landLine'] = landLine; + return data; + } +} + +class VChecklists { + int? id; + int? visitId; + String? task; + int? taskStatusId; + String? taskStatusName; + String? taskComment; + String? measuredValue; + + VChecklists({this.id, this.visitId, this.task, this.taskStatusId, this.taskStatusName, this.taskComment, this.measuredValue}); + + VChecklists.fromJson(Map json) { + id = json['id']; + visitId = json['visitId']; + task = json['task']; + taskStatusId = json['taskStatusId']; + taskStatusName = json['taskStatusName']; + taskComment = json['taskComment']; + measuredValue = json['measuredValue']; + } + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['visitId'] = visitId; + data['task'] = task; + data['taskStatusId'] = taskStatusId; + data['taskStatusName'] = taskStatusName; + data['taskComment'] = taskComment; + data['measuredValue'] = measuredValue; + return data; } } 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 63dd6526..9f6290e5 100644 --- a/lib/views/pages/user/visits/pantry/future_edit_pently.dart +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -30,7 +30,7 @@ class _FutureEditPentryState extends State { Subtitle subtitle = AppLocalization.of(context)!.subtitle!; return Scaffold( body: FutureBuilder( - future: RegularVisitsProvider().getPently(id: widget.visit.id), + future: RegularVisitsProvider().getPently(id: widget.visit.id.toString()), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) { return FailedLoading( 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 04a8e854..a91c2bcc 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -226,7 +226,7 @@ class _UpdateVisitsGroupSheetState extends State { children: [ Expanded( child: Text( - "${_subtitle.sn}: ${visit.deviceSerialNumber ?? _subtitle.noSerialNumberFound}", + "${_subtitle.sn}: ${visit.assetSerialNo ?? _subtitle.noSerialNumberFound}", style: Theme.of(context).textTheme.headline6?.copyWith(color: AColors.white, fontSize: 16, fontWeight: FontWeight.bold), ), ), diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index 156b7e8a..d1ae604d 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -9,8 +9,6 @@ import '../../../app_style/colors.dart'; import '../../../app_style/sizing.dart'; import '../../../widgets/buttons/app_back_button.dart'; import '../../../widgets/buttons/app_icon_button.dart'; -import '../../../widgets/images/images_list.dart'; -import '../../../widgets/loaders/image_loader.dart'; import '../../../widgets/requests/info_row.dart'; import '../../../widgets/visits/visit_status.dart'; import 'pantry/future_edit_pently.dart'; @@ -68,57 +66,57 @@ class VisitDetailsPage extends StatelessWidget { SizedBox( height: 8, ), - MaterialButton( - padding: EdgeInsets.zero, - onPressed: () { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => Scaffold( - body: InteractiveViewer( - child: Center( - child: ImageLoader( - url: visit.images?.first, - boxFit: BoxFit.contain, - ), - ), - ), - ))); - }, - child: SizedBox( - height: 140 * AppStyle.getScaleFactor(context), - width: MediaQuery.of(context).size.width, - child: ImageLoader( - url: (visit.images?.isEmpty ?? false) ? " " : visit.images?.first, - boxFit: BoxFit.cover, - ), - ), - ), + // MaterialButton( + // padding: EdgeInsets.zero, + // onPressed: () { + // Navigator.of(context).push(MaterialPageRoute( + // builder: (_) => Scaffold( + // body: InteractiveViewer( + // child: Center( + // child: ImageLoader( + // url: visit.images?.first, + // boxFit: BoxFit.contain, + // ), + // ), + // ), + // ))); + // }, + // child: SizedBox( + // height: 140 * AppStyle.getScaleFactor(context), + // width: MediaQuery.of(context).size.width, + // child: ImageLoader( + // url: (visit.images?.isEmpty ?? false) ? " " : visit.images?.first, + // boxFit: BoxFit.cover, + // ), + // ), + // ), SizedBox( height: 8, ), - SizedBox( - height: 60 * AppStyle.getScaleFactor(context), - child: ImagesList( - images: visit.images!, - ), - ), + // SizedBox( + // height: 60 * AppStyle.getScaleFactor(context), + // child: ImagesList( + // images: visit.images!, + // ), + // ), SizedBox( height: 8, ), RequestInfoRow( title: subtitle.code, - info: visit.serialNumber, + info: visit.assetSerialNo, ), RequestInfoRow( title: "Asset Number", - info: visit.deviceNumber, + info: visit.deviceStatusName, ), RequestInfoRow( title: subtitle.deviceSN, - info: visit.deviceSerialNumber, + info: visit.assetSerialNo, ), RequestInfoRow( title: subtitle.expectDate, - info: visit.expectDate, + info: visit.expectedDate, ), RequestInfoRow( title: subtitle.actualDate, @@ -143,23 +141,23 @@ class VisitDetailsPage extends StatelessWidget { ), RequestInfoRow( title: subtitle.contactStatus, - info: visit.assignTo, + info: visit.assignedToName, ), RequestInfoRow( title: subtitle.engineerName, - info: visit.employName, + info: visit.assignedEmployeeName, ), RequestInfoRow( title: subtitle.hospital, - content: visit.hospitalName, + content: visit.assetName, ), RequestInfoRow( title: subtitle.deviceArName, - content: visit.deviceArabicName, + content: visit.assetName, ), RequestInfoRow( title: subtitle.deviceEnName, - content: visit.deviceEnglishName, + content: visit.assetName, ), ], ), diff --git a/lib/views/widgets/visits/visit_item.dart b/lib/views/widgets/visits/visit_item.dart index 4dc3d715..3288e4f2 100644 --- a/lib/views/widgets/visits/visit_item.dart +++ b/lib/views/widgets/visits/visit_item.dart @@ -61,7 +61,7 @@ class VisitItem extends StatelessWidget { children: [ Expanded( child: Text( - "S.N: ${visit.deviceSerialNumber ?? "No serial number"}", + "S.N: ${visit.assetSerialNo ?? "No serial number"}", style: Theme.of(context).textTheme.titleLarge?.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold), ), ), @@ -93,7 +93,7 @@ class VisitItem extends StatelessWidget { children: [ Expanded( child: Text( - visit.hospitalName ?? "No client found", + visit.assetSerialNo ?? "No client found", style: Theme.of(context).textTheme.titleMedium?.copyWith( color: onItemColor, fontSize: 14, @@ -103,7 +103,7 @@ class VisitItem extends StatelessWidget { ], ), Text( - visit.modelAndBrand ?? "", + visit.modelName ?? "", style: Theme.of(context).textTheme.titleMedium?.copyWith( color: onItemColor, fontSize: 14, @@ -116,12 +116,12 @@ class VisitItem extends StatelessWidget { children: [ Expanded( child: Text( - visit.employName ?? "No employ found", + visit.assignedEmployeeName ?? "No employ found", style: Theme.of(context).textTheme.titleLarge?.copyWith(color: onItemColor, fontSize: 14, fontWeight: FontWeight.bold), ), ), Text( - visit.contactStatus ?? "", + visit.deviceStatusName ?? "", style: Theme.of(context).textTheme.titleMedium?.copyWith( color: onItemColor, fontSize: 14, @@ -146,7 +146,7 @@ class VisitItem extends StatelessWidget { ), ), Text( - visit.expectDate ?? subtitle?.noDateFound ?? '', + visit.expectedDate ?? subtitle?.noDateFound ?? '', style: Theme.of(context).textTheme.titleLarge?.copyWith( color: onItemColor, fontSize: 14, diff --git a/lib/views/widgets/visits/visit_status.dart b/lib/views/widgets/visits/visit_status.dart index 4c376ae8..c2137153 100644 --- a/lib/views/widgets/visits/visit_status.dart +++ b/lib/views/widgets/visits/visit_status.dart @@ -10,7 +10,7 @@ class VisitStatusLabel extends StatelessWidget { const VisitStatusLabel({Key? key, required this.visit}) : super(key: key); Color getStatusColor() { - switch (visit.status?.id) { + switch (visit.taskStatusId) { case 0: return AColors.green; case 1: @@ -33,7 +33,7 @@ class VisitStatusLabel extends StatelessWidget { boxShadow: const [AppStyle.boxShadow], ), child: Text( - visit.status?.label == null || (visit.status?.label?.isEmpty ?? false) ? "no status" : visit.status?.label ?? "", + visit.taskStatusName == null || (visit.taskStatusName?.isEmpty ?? false) ? "no status" : visit.taskStatusName ?? "", style: Theme.of(context).textTheme.titleSmall?.copyWith( color: getStatusColor().computeLuminance() > 0.5 ? AColors.black : Colors.white, ), From fe9b8215d3fc61439a73b3ff414e16008c8bf49a Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Thu, 4 May 2023 08:34:00 +0300 Subject: [PATCH 2/2] Enhancements --- lib/api/visits_api_client.dart | 9 +++++---- lib/controllers/api_routes/urls.dart | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/api/visits_api_client.dart b/lib/api/visits_api_client.dart index ddd5637b..976fdb93 100644 --- a/lib/api/visits_api_client.dart +++ b/lib/api/visits_api_client.dart @@ -63,11 +63,12 @@ class VisitsApiClient { // 4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 Future updateGroupOfVisits({required VisitsGroup group}) async { final user = UserApiClient().user; - Map body = group.toJson(); - body["token"] = user?.token ?? ""; - body["uid"] = user?.id ?? ""; + Map body = {}; + // body["token"] = user?.token ?? ""; + body['ids'] = [...(group.visits?.map((e) => e.id).toList() ?? [])]; + body["assignedEmployeeId"] = user?.id ?? ""; //userId = 397.toString(); // testing id to view data - await ApiClient().postJsonForResponse('${URLs.host1}${URLs.updateRegularVisits}', body); + await ApiClient().putJsonForResponse('${URLs.host1}${URLs.updateRegularVisits}', body); } Future getPentry(String id) async { diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 21084d12..5b5744f5 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -10,7 +10,7 @@ class URLs { static const getHospitals = "/mobile/Customer/GetCustomers"; // get static const getDepartments = "/mobile/Department/search"; // get static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051 - static const getServiceRequests = "/mobile/CallRequest/GetCallRequests"; // get + static const getCallRequests = "/mobile/CallRequest/GetCallRequests"; // get static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get