import 'dart:async'; import 'dart:convert'; import 'dart:developer'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:http/src/response.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/helper_data_models/asset_retired/asset_retired_model.dart'; import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart'; import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/models/new_models/arrival_verification_type_model.dart'; import 'package:test_sa/models/new_models/dashboard_detail.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/service_request/spare_parts.dart'; import 'package:test_sa/models/service_request/supplier_details.dart'; import 'utilities/service_request_utils.dart'; class ServiceRequestDetailProvider extends ChangeNotifier { final pageItemNumber = 10; int lastVisitedRequestActivityId = -1; void reset() { nextPage = true; stateCode = null; } DateTime timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00 Timer? timer; bool isTimerRunning = false; bool _isNurseVerifiedEngineerArrival = false; bool get isNurseVerifiedEngineerArrival => _isNurseVerifiedEngineerArrival; set isNurseVerifiedEngineerArrival(bool value) { _isNurseVerifiedEngineerArrival = value; notifyListeners(); } bool refreshTimer = true; void startTimer() { if (isTimerRunning) return; resetTimer(); markedAsFixed = false; timer = Timer.periodic(const Duration(seconds: 1), (Timer t) { timerStartTime = timerStartTime.add(const Duration(seconds: 1)); if (refreshTimer) { notifyListeners(); } // Notify UI when time is updated }); isTimerRunning = true; notifyListeners(); // Notify UI when timer starts } void stopTimer() { resetTimer(); timer?.cancel(); isTimerRunning = false; if (!markedAsFixed) { engineerStopTimer(); } notifyListeners(); // Notify UI when timer stops } void resetTimer() { timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Reset to 00:00:00 notifyListeners(); } // Getter to get the current time DateTime get currentTime => timerStartTime; bool _isLoading = false; bool _isArrivalLoading = false; bool _isVerifyArrivalBottomSheetOpen = false; bool get isVerifyArrivalBottomSheetOpen => _isVerifyArrivalBottomSheetOpen; set isVerifyArrivalBottomSheetOpen(bool value) { _isVerifyArrivalBottomSheetOpen = value; notifyListeners(); } bool get isArrivalLoading => _isArrivalLoading; set isArrivalLoading(bool value) { _isArrivalLoading = value; notifyListeners(); } bool get isLoading => _isLoading; set isLoading(bool value) { _isLoading = value; notifyListeners(); } //UI models WorkOrderDetail? currentWorkOrder; AssetRetiredHelperModel? assetRetiredHelperModel = AssetRetiredHelperModel(); ActivityMaintenanceHelperModel? activityMaintenanceHelperModel = ActivityMaintenanceHelperModel(); SparePartHelperModel? sparePartHelperModel; List _storeAvailability = []; List get storeAvailability => _storeAvailability; set storeAvailability(List value) { _storeAvailability = value; notifyListeners(); } FixRemotelyHelperModel? fixRemotelyHelperModel = FixRemotelyHelperModel(); NeedVisitHelperModel? needVisitHelperModel = NeedVisitHelperModel(); NurseActionHelperModel? nurseActionHelperModel; EngineerRejectHelperModel? engineerRejectHelperModel = EngineerRejectHelperModel(); EngineerUpdateWorkOrderHelperModel? engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(); WorkOrderCostModel? workOrderCostModel; WorkOrderHelperModel? workOrderHelperModel; List arrivalTypeList = []; void updateAssetRetiredHelperModel(AssetRetiredHelperModel? value) { assetRetiredHelperModel = value; notifyListeners(); } void updateActivityMaintenanceHelperModel(ActivityMaintenanceHelperModel? value) { activityMaintenanceHelperModel = value; notifyListeners(); } void updateSparePartHelperModel(SparePartHelperModel? value) { sparePartHelperModel = value; notifyListeners(); } void updateFixRemotelyHelperModel(FixRemotelyHelperModel? value) { fixRemotelyHelperModel = value; notifyListeners(); } void updateNeedVisitHelperModel(NeedVisitHelperModel? value) { needVisitHelperModel = value; log("value:${value!.visitDate.toString()}"); notifyListeners(); } void updateNurseActionHelperModel(NurseActionHelperModel? value) { nurseActionHelperModel = value; notifyListeners(); } void updateEngineerRejectHelperModel(EngineerRejectHelperModel? value) { engineerRejectHelperModel = value; notifyListeners(); } void updateEngineerUpdateWorkOrderHelperModel(EngineerUpdateWorkOrderHelperModel? value) { engineerUpdateWorkOrderHelperModel = value; notifyListeners(); } void updateWorkOrderHelperModel(WorkOrderHelperModel? value) { workOrderHelperModel = value; notifyListeners(); } void updateCurrentWorkOrder(WorkOrderDetail? value) { currentWorkOrder = value; notifyListeners(); } int? stateCode; // true if there is next page in product list and false if not bool nextPage = true; TimeOfDay? _selectedTime; TimeOfDay? get selectedTime => _selectedTime; set selectedTime(TimeOfDay? value) { _selectedTime = value; notifyListeners(); } // list of user requests int _selectedListIndex = 0; int get selectedListIndex => _selectedListIndex; set selectedListIndex(int value) { _selectedListIndex = value; notifyListeners(); } bool _isReadOnlyRequest = false; bool get isReadOnlyRequest => _isReadOnlyRequest; set isReadOnlyRequest(bool value) { _isReadOnlyRequest = value; notifyListeners(); } //create workOrder nurse ..... Future createWorkOrder() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createWorkOrderUrl, body: workOrderHelperModel!.toJson(), ); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } //getWorkOrderById...... Future getWorkOrderById({required int id}) async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl + "?workOrderId=$id"); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); //need to check on value as id changed on different env. if (currentWorkOrder?.data?.status?.value == 3 || currentWorkOrder?.data?.status?.value == 5 || currentWorkOrder?.data?.status?.value == 6) { isReadOnlyRequest = true; } else { isReadOnlyRequest = false; } }else{ currentWorkOrder =null; } isLoading = false; notifyListeners(); } catch (e) { log("getWorkOrder [error] : $e"); isLoading = false; notifyListeners(); return null; } } //upload workorder attachment by engineer.. Future addWorkOrderAttachment({required int woId, required List attachments,required List otherAttachment}) async { try { List woAttachments = []; if(otherAttachment.isNotEmpty){ woAttachments.addAll(otherAttachment); } for (var file in attachments) { String fileName = ServiceRequestUtils.isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(File(file.path).readAsBytesSync())}") : file.path; woAttachments.add(WorkOrderAttachments(id: 0, name: fileName)); } isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.uploadWorkOrderAttachmentsUrl, body: WorkOrderHelperModel().toUploadAttachmentJson(woId, woAttachments)); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); } catch (e) { log("getWorkOrder [error] : $e"); isLoading = false; notifyListeners(); return null; } } //getQrCode...... Future getQrCode({required int workOrderId}) async { try { notifyListeners(); final response = await ApiManager.instance.get(URLs.getQrCodeUrl + "/$workOrderId"); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { String base64String = response.body.split(',').last; return base64String; return response.body; } isLoading = false; notifyListeners(); } catch (e) { log("getQrCode [error] : $e"); isLoading = false; notifyListeners(); return null; } return null; } //engineerAcceptWorkOrder...... Future engineerAcceptWorkOrder({required String id}) async { Response response; try { final body = {"workOrderId": id}; isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerAcceptUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerAcceptWorkOrder...... Future engineerAssignWorkOrderToHimself({required String id}) async { Response response; try { final body = {"workOrderId": id}; isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerAssignHimSelfUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerAssignedHimself...... Future engineerStopTimer() async { Response response; try { final body = {"workOrderId": currentWorkOrder?.data?.requestId}; isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerStopTimer, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerRejectWorkOrder...... Future engineerRejectWorkOrder() async { Response response; try { isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: engineerRejectHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer reject [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerFixRemotelyWorkOrder...... Future engineerFixRemotely() async { Response response; try { isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer fix remotely [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerNeedAVisitWorkOrder...... Future engineerNeedVisit() async { Response response; try { isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl, body: needVisitHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineerUpdateNeedAVisitWorkOrder...... Future engineerUpdateNeedVisit() async { Response response; try { isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerUpdateNeedVisitUrl, body: needVisitHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); notifyListeners(); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } bool markedAsFixed = false; //engineerMarkAsFixed...... Future engineerMarkAsFixed({required int workOrderId, required String feedback}) async { Response response; try { isLoading = true; notifyListeners(); Map body = {'workOrderId': workOrderId, 'feedback': feedback}; response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); markedAsFixed = true; stopTimer(); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer mark as fixed [error] : $e"); isLoading = false; notifyListeners(); return -1; } } Future reOrderActivities({required int workOrderId, required List> reOrderActivityDTOs}) async { Response response; try { isLoading = true; notifyListeners(); Map body = {'workOrderId': workOrderId, 'reOrderActivityDTOs': reOrderActivityDTOs}; response = await ApiManager.instance.put(URLs.reOrderActivity, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer mark as fixed [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineer Confirm Arrive...... Future engineerConfirmArrival({required int workOrderId, required int verificationTypeId, String? photoInfo, String? otp, String? assetNo, String? workOrderCreatedById}) async { Response response; try { //"workOrderCreatedById": "string" Map body = { "workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp, "assetNumber": assetNo, "workOrderCreatedById": workOrderCreatedById }; isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //engineer Confirm Arrive...... Future engineerSetReminder({required int workOrderId, required int reminderId}) async { Response response; try { //"workOrderCreatedById": "string" Map body = { "workOrderId": workOrderId, "setReminderId": reminderId, }; isLoading = true; notifyListeners(); response = await ApiManager.instance.post(URLs.engineerSetReminderUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //assignEngineerToWorkOrder...... Future assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async { try { final body = {"workOrderId": workOrderId, "assignedEngineerId": engineerId}; isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); stateCode = response.statusCode; CommonResponseModel commonResponseModel = CommonResponseModel(); if (response.statusCode >= 200 && response.statusCode < 300) { commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return commonResponseModel; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } //engineerUpdateWorkOrder...... Future engineerUpdateWorkOrder() async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.engineerUpdateWorkOrderUrl, body: engineerUpdateWorkOrderHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); } catch (e) { log("engineer update workorder [error] : $e"); isLoading = false; notifyListeners(); } } //engineerUpdateWorkOrder...... Future engineerUpdateCost() async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.engineerUpdateCost, body: workOrderCostModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); } catch (e) { log("engineer update workorder [error] : $e"); isLoading = false; notifyListeners(); } } //Nurse confirm reopen Future nurseReject() async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseRejectUrl, body: nurseActionHelperModel!.toJson()); stateCode = response.statusCode; CommonResponseModel commonResponseModel = CommonResponseModel(); if (response.statusCode >= 200 && response.statusCode < 300) { commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return commonResponseModel; } catch (e) { log("nurse reject [error] : $e"); isLoading = false; notifyListeners(); return CommonResponseModel(); } } //Nurse confirm arrival Future nurseConfirmEngineerArrival({required int workOrderId}) async { try { Map body = {"workOrderId": workOrderId}; isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseConfirmEngineerArrivalUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return stateCode; } catch (e) { log("nurse reject [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //Nurse confirm arrival Future nurseRejectEngineerArrival({required int workOrderId}) async { try { Map body = {"workOrderId": workOrderId}; isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseRejectEngineerArrivedUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return stateCode; } catch (e) { log("nurse reject [error] : $e"); isLoading = false; notifyListeners(); return -1; } } //Nurse confirm close Future nurseConfirm() async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseConfirmUrl, body: nurseActionHelperModel!.toJson()); stateCode = response.statusCode; WorkOrderDetail? workOrderDetail; if (response.statusCode >= 200 && response.statusCode < 300) { workOrderDetail = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return workOrderDetail; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); return null; } } Future updateActivitySparePart() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post(URLs.updateActivitySparePartUrl, body: sparePartHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } Future updateActivityMaintenance() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.put(URLs.updateActivityMaintenanceUrl, body: activityMaintenanceHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } Future> getSupplierEngineerData({required String supplierName}) async { try { Response response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=$supplierName"); stateCode = response.statusCode; List persons = []; if (response.statusCode >= 200 && response.statusCode < 300) { List categoriesListJson = json.decode(response.body)["data"][0]['suppPersons']; persons = categoriesListJson.map((item) => SuppPersons.fromJson(item)).toList(); } notifyListeners(); return persons; } catch (error) { stateCode = -1; notifyListeners(); return []; } } Future getStoreAvailabilityById({required num? partId}) async { try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.post( URLs.getSparePartAvailableQuantity + "?PartId=$partId", body: {}, ); print('response i got is ${response.body}'); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { final List data = json.decode(response.body)["data"]; storeAvailability = data.map((item) => StoreAvailability.fromJson(item)).toList(); } isLoading = false; notifyListeners(); } catch (e) { log("getStoreAvalivility [error] : $e"); isLoading = false; notifyListeners(); } } Future deleteActivitySparePart({required int id, required int workOrderId}) async { isLoading = true; notifyListeners(); var body = {'id': id, 'workOrderId': workOrderId}; try { final response = await ApiManager.instance.post(URLs.deleteActivitySparePartUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { //map to the model... // notifyListeners(); } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } Future deleteActivityMaintenance({required int id, required int workOrderId}) async { isLoading = true; notifyListeners(); var body = {'id': id, 'workOrderId': workOrderId}; try { final response = await ApiManager.instance.delete( URLs.deleteActivityMaintenanceUrl, body: body, ); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { //map to the model... } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } Future createActivitySparePart() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createActivitySparePartUrl, body: sparePartHelperModel!.toJson(), ); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); // // updateCurrentWorkOrder(currentWorkOrder); // notifyListeners(); } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } Future createActivityMaintenanceRequest() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createActivityMaintenanceUrl, body: activityMaintenanceHelperModel!.toJson(), ); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); // updateCurrentWorkOrder(currentWorkOrder); } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } //create asset retired request.. Future createActivityAssetToBeRetired() async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createActivityAssetToBeRetiredUrl, body: assetRetiredHelperModel!.toJson(), ); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = await WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } //get Arrival type...... Future getArrivalVerificationType() async { try { isArrivalLoading = true; notifyListeners(); final response = await ApiManager.instance.get(URLs.getArrivalVerificationTypeUrl); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { ArrivalVerificationTypeModel arrivalVerificationTypeModel = ArrivalVerificationTypeModel.fromJson(json.decode(response.body)); arrivalTypeList = arrivalVerificationTypeModel.data ?? []; } isArrivalLoading = false; notifyListeners(); return response.statusCode; } catch (e) { log("getArrivalVerifaction [error] : $e"); isArrivalLoading = false; notifyListeners(); return -1; } } //send otp.. Future sendOtp({required int workOrderId}) async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post(URLs.sendOtpUrl + "$workOrderId", body: {},showToast: false); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } //verify otp.. Future verifyOtp({required int workOrderId, required String otpCode}) async { isLoading = true; notifyListeners(); try { final response = await ApiManager.instance.post(URLs.verifyOtpUrl + '$workOrderId&$otpCode', body: {}); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; notifyListeners(); return -1; } } }