import 'dart:async'; import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/GetCMCAllOrdersResponseModel.dart'; import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/parmacyModule/parmacy_module_service.dart'; import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/models/rrt/service_price.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/pharmacyAddress_service.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import '../base_view_model.dart'; class RRTService extends BaseService {} class _RRTServiceData { List pendingOrders = []; List completedOrders = []; ServicePrice servicePrice; } class RRTViewModel extends BaseViewModel { var _service = RRTService(); var _pharmacy_service = locator(); var _pharmacy_address_service = locator(); CustomerAddressesService _customerAddressesService = locator(); List get addressesList => _customerAddressesService.addressesList; _RRTServiceData rrtServiceData = _RRTServiceData(); Future<_RRTServiceData> loadRequiredData() async { await getServicePrice(); // await getAllOrders(); await getAllOrdersRC(); return rrtServiceData; } Future createOrder(Map body) async { body['IdentificationNo'] = user.patientIdentificationNo; body['NationalityID'] = user.nationalityID; body['CreatedBy'] = user.patientIdentificationType; body['OrderServiceID'] = 5; var localRes; int requestNo; await _service.baseAppClient.post(PATIENT_ER_INSERT_PRES_ORDER, body: body, onSuccess: (response, statusCode) { requestNo = response['RequestNo']; }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return requestNo; } Future createOrderRC(Map body) async { // body['IdentificationNo'] = user.patientIdentificationNo; // body['NationalityID'] = user.nationalityID; // body['CreatedBy'] = user.patientIdentificationType; // body['OrderServiceID'] = 5; var localRes; int requestNo; await _service.baseAppClient.post(ADD_RRT_ORDER_RC, isRCService: true, body: body, onSuccess: (response, statusCode) { requestNo = response['response']; }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return requestNo; } // Service ID: 4 == RRT Future<_RRTServiceData> getAllOrders() async { await _service.baseAppClient.post(GET_PRESCRIPTIONS_ALL_ORDERS, body: {}, onSuccess: (response, statusCode) { var data = response["PatientER_GetPatientAllPresOrdersList"]; rrtServiceData.completedOrders.clear(); rrtServiceData.pendingOrders.clear(); if (data != null && data is List) { data.forEach((json) { if (json["ServiceID"] == 5) { if (json["Status"] == 1 || json["Status"] == 2) { // Pending rrtServiceData.pendingOrders.add(GetCMCAllOrdersResponseModel.fromJson(json)); } rrtServiceData.completedOrders.add(GetCMCAllOrdersResponseModel.fromJson(json)); } }); } }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return rrtServiceData; } Future<_RRTServiceData> getAllOrdersRC() async { await _service.baseAppClient.post(GET_ALL_RRT_ORDERS_RC, isRCService: true, body: {}, onSuccess: (response, statusCode) { var data = response["response"]; rrtServiceData.completedOrders.clear(); rrtServiceData.pendingOrders.clear(); if (data != null && data is List) { data.forEach((json) { if (json["StatusId"] == 1 || json["StatusId"] == 2) { // Pending rrtServiceData.pendingOrders.add(GetCMCAllOrdersResponseModel.fromJson(json)); } rrtServiceData.completedOrders.add(GetCMCAllOrdersResponseModel.fromJson(json)); }); } }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return rrtServiceData; } Future getOrderDetails() async { return null; } Future getAllQuestions() async { dynamic response_; await _service.baseAppClient.post(GET_ALL_RRT_QUESTIONS, body: {}, onSuccess: (response, statusCode) { response_ = response; }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return response_; } Future getServicePrice() async { Map body = {"IdentificationNo": user.patientIdentificationNo}; ServicePrice servicePrice; await _service.baseAppClient.post(GET_RRT_SERVICE_PRICE, body: body, onSuccess: (response, statusCode) { var data = response['PatientE_RealRRT_GetServicePriceList']; if (data != null && data is List) { var priceData = data.first; if (priceData != null) { servicePrice = ServicePrice.fromJson(priceData); rrtServiceData.servicePrice = servicePrice; } } }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); }); return servicePrice; } Future cancelOrder(PrescriptionsOrder order, {String reason = ""}) async { var body = {"PresOrderID": order.iD, "PresOrderStatus": 4, "EditedBy": 3, "RejectionReason": reason}; var success = false; await _service.baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER, body: body, onSuccess: (response, statusCode) { success = true; rrtServiceData.pendingOrders.remove(order); }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); success = false; }); return Future.value(success); } Future cancelOrderRC(GetCMCAllOrdersResponseModel order, {String reason = ""}) async { Map body = {"Id": order.iD, "ClickButton": 14}; var success = false; await _service.baseAppClient.post(UPDATE_RRT_ORDER_RC, isRCService: true, body: body, onSuccess: (response, statusCode) { success = true; rrtServiceData.pendingOrders.remove(order); }, onFailure: (error, statusCode) { AppToast.showErrorToast(message: error); success = false; }); return Future.value(success); } Future> getAddresses() async { Object error; try { var token = await sharedPref.getString(PHARMACY_AUTORZIE_TOKEN); if (token == null) await _pharmacy_service.generatePharmacyToken(); await _pharmacy_service.makeVerifyCustomer({'PatientID': user.patientID.toString()}); await _pharmacy_address_service.getAddresses(); return _pharmacy_address_service.addresses; } catch (e) { error = e; } Future.error(error); } Future getCustomerAddresses() async { setState(ViewState.Busy); await _customerAddressesService.getCustomerAddresses(); if (_customerAddressesService.hasError) { error = _customerAddressesService.error; setState(ViewState.ErrorLocal); } else { setState(ViewState.Idle); } } Future getCustomerInfo() async { setState(ViewState.Busy); await _pharmacy_service.generatePharmacyToken(); if (_customerAddressesService.hasError) { error = _customerAddressesService.error; await _pharmacy_service.createUser(); setState(ViewState.ErrorLocal); } else { await _pharmacy_service.createUser(); await getCustomerAddresses(); } // setState(ViewState.Busy); // await _pharmacy_service.generatePharmacyToken(); // if (_customerAddressesService.hasError) { // error = _customerAddressesService.error; // await _pharmacy_service.createUser(); // await getCustomerAddresses(); // setState(ViewState.ErrorLocal); // } else { // await _customerAddressesService.getCustomerInfo(); // await getCustomerAddresses(); // } } }