import 'dart:convert'; import 'package:doctor_app_flutter/client/app_client.dart'; import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/models/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/patient/get_clinic_by_project_id_request.dart'; import 'package:doctor_app_flutter/models/patient/get_doctor_by_clinic_id_request.dart'; import 'package:doctor_app_flutter/models/patient/get_list_stp_referral_frequency_request.dart'; import 'package:doctor_app_flutter/models/patient/lab_orders_res_model.dart'; import 'package:doctor_app_flutter/models/patient/lab_result.dart'; import 'package:doctor_app_flutter/models/patient/lab_result_req_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/prescription_res_model.dart'; import 'package:doctor_app_flutter/models/patient/radiology_res_model.dart'; import 'package:doctor_app_flutter/models/patient/refer_to_doctor_request.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:http_interceptor/http_client_with_interceptor.dart'; import '../client/app_client.dart'; import '../config/config.dart'; import '../interceptor/http_interceptor.dart'; import '../models/patient/lab_orders_res_model.dart'; import '../models/patient/patiant_info_model.dart'; import '../models/patient/patient_model.dart'; import '../models/patient/prescription_res_model.dart'; import '../models/patient/radiology_res_model.dart'; import '../models/patient/vital_sign_res_model.dart'; import '../util/helpers.dart'; Helpers helpers = Helpers(); class PatientsProvider with ChangeNotifier { bool isLoading = false; bool isError = false; String error = ''; List patientVitalSignList = []; List patientVitalSignOrderdSubList = []; List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; /*@author: ibrahe albitar *@Date:2/6/2020 *@desc: getPatientPrescriptions */ List labResultList = []; var patientProgressNoteList = []; var insuranceApporvalsList = []; var doctorsList = []; var clinicsList = []; var referalFrequancyList = []; DoctorsByClinicIdRequest _doctorsByClinicIdRequest = DoctorsByClinicIdRequest(); STPReferralFrequencyRequest _referralFrequencyRequest = STPReferralFrequencyRequest(); ClinicByProjectIdRequest _clinicByProjectIdRequest = ClinicByProjectIdRequest(); ReferToDoctorRequest _referToDoctorRequest = ReferToDoctorRequest(); Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); PatiantInformtion _selectedPatient; Future getPatientList(PatientModel patient, patientType) async { /* const url = BASE_URL+'DoctorApplication.svc/REST/GetMyInPatient';*/ int val = int.parse(patientType); //**********Modify url by amjad amireh for patiant type********* final url = BASE_URL + "DoctorApplication.svc/REST/" + SERVICES_PATIANT[val]; // print("a===========$url=======a"); try { final response = await client.post(url, body: json.encode({ "ProjectID": patient.ProjectID, "ClinicID": patient.ClinicID, "DoctorID": patient.DoctorID, "FirstName": patient.FirstName, "MiddleName": patient.MiddleName, "LastName": patient.LastName, "PatientMobileNumber": patient.PatientMobileNumber, "PatientIdentificationID": patient.PatientIdentificationID, "PatientID": patient.PatientID, "From": patient.From, "To": patient.To, "LanguageID": patient.LanguageID, "stamp": patient.stamp, "IPAdress": patient.IPAdress, "VersionID": patient.VersionID, "Channel": patient.Channel, "TokenID": patient.TokenID, "SessionID": patient.SessionID, "IsLoginForDoctorApp": patient.IsLoginForDoctorApp, "PatientOutSA": patient.PatientOutSA })); //********************** //*********************** return Future.value(json.decode(response.body)); } catch (err) { throw err; } } setBasicData() { isLoading = true; isError = false; error = ''; notifyListeners(); } /* *@author: Elham Rababah *@Date:27/4/2020 *@param: patient *@return: *@desc: getPatientVitalSign */ getPatientVitalSign(patient) async { setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(GET_PATIENT_VITAL_SIGN, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientVitalSignList = []; res['List_DoctorPatientVitalSign'].forEach((v) { patientVitalSignList.add(new VitalSignResModel.fromJson(v)); }); if (patientVitalSignList.length > 0) { List patientVitalSignOrderdSubListTemp = []; patientVitalSignOrderdSubListTemp = patientVitalSignList; patientVitalSignOrderdSubListTemp .sort((VitalSignResModel a, VitalSignResModel b) { return b.vitalSignDate.microsecondsSinceEpoch - a.vitalSignDate.microsecondsSinceEpoch; }); patientVitalSignOrderdSubList.clear(); for (int x = 0; x < 20; x++) { patientVitalSignOrderdSubList .add(patientVitalSignOrderdSubListTemp[x]); } } } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } /*@author: Elham Rababah *@Date:27/4/2020 *@param: patient *@return: *@desc: getLabResult Orders */ getLabResultOrders(patient) async { // isLoading = true; // notifyListeners(); setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(GET_PATIENT_LAB_OREDERS, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientLabResultOrdersList = []; res['List_GetLabOreders'].forEach((v) { patientLabResultOrdersList.add(new LabOrdersResModel.fromJson(v)); }); } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } /*@author: Elham Rababah *@Date:3/5/2020 *@param: patient *@return: *@desc: getPatientPrescriptions */ getPatientPrescriptions(patient) async { // isLoading = true; // notifyListeners(); setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(GET_PRESCRIPTION, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientPrescriptionsList = []; res['PatientPrescriptionList'].forEach((v) { patientPrescriptionsList .add(new PrescriptionResModel.fromJson(v)); }); } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } /*@author: Elham Rababah *@Date:12/5/2020 *@param: patient *@return: *@desc: getPatientRadiology */ handelCatchErrorCase(err) { isLoading = false; isError = true; error = helpers.generateContactAdminMsg(err); notifyListeners(); throw err; } /*@author: Elham Rababah *@Date:3/5/2020 *@param: patient *@return: *@desc: getPatientRadiology */ getPatientRadiology(patient) async { // isLoading = true; // notifyListeners(); setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(GET_RADIOLOGY, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientRadiologyList = []; res['List_GetRadOreders'].forEach((v) { patientRadiologyList.add(new RadiologyResModel.fromJson(v)); }); } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } getLabResult(LabOrdersResModel labOrdersResModel) async { labResultList.clear(); isLoading = true; notifyListeners(); RequestLabResult requestLabResult = RequestLabResult(); requestLabResult.sessionID = labOrdersResModel.setupID; requestLabResult.orderNo = labOrdersResModel.orderNo; requestLabResult.invoiceNo = labOrdersResModel.invoiceNo; requestLabResult.patientTypeID = labOrdersResModel.patientType; await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults', onSuccess: (dynamic response, int statusCode) { isError = false; isLoading = false; response['List_GetLabNormal'].forEach((v) { labResultList.add(new LabResult.fromJson(v)); }); }, onFailure: (String error, int statusCode) { isError = true; isLoading = false; this.error = error; }, body: requestLabResult.toJson()); notifyListeners(); } getPatientInsuranceApprovals(patient) async { setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(PATIENT_INSURANCE_APPROVALS_URL, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { //patientRadiologyList = []; insuranceApporvalsList = res['List_ApprovalMain_InPatient']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } /*@author: ibrahem albitar *@Date:2/6/2020 *@desc: getPatientProgressNote */ getPatientProgressNote(patient) async { setBasicData(); try { if (await Helpers.checkConnection()) { final response = await AppClient.post(PATIENT_PROGRESS_NOTE_URL, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientProgressNoteList = res['List_GetPregressNoteForInPatient']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } /*@author: ibrahem albitar *@Date:3/6/2020 *@desc: getDoctorsList */ getDoctorsList(String clinicId) async { String token = await sharedPref.getString(TOKEN); int projectID = await sharedPref.getInt(PROJECT_ID); setBasicData(); try { if (await Helpers.checkConnection()) { _doctorsByClinicIdRequest.projectID = projectID; _doctorsByClinicIdRequest.clinicID = clinicId; _doctorsByClinicIdRequest.tokenID = token; final response = await AppClient.post(PATIENT_GET_DOCTOR_BY_CLINIC_URL, body: json.encode(_doctorsByClinicIdRequest)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { doctorsList = res['List_Doctors_All']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } List getDoctorNameList() { var doctorNamelist = doctorsList.map((value) => value['DoctorName'].toString()).toList(); return doctorNamelist; } /*@author: ibrahem albitar *@Date:3/6/2020 *@desc: getClinicsList */ getClinicsList() async { String token = await sharedPref.getString(TOKEN); setBasicData(); try { if (await Helpers.checkConnection()) { int projectID = await sharedPref.getInt(PROJECT_ID); _clinicByProjectIdRequest.projectID = projectID; _clinicByProjectIdRequest.tokenID = token; final response = await AppClient.post(PATIENT_GET_CLINIC_BY_PROJECT_URL, body: json.encode(_clinicByProjectIdRequest)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { clinicsList = res['List_Clinic_All']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } List getClinicNameList() { var clinicsNameslist = clinicsList .map((value) => value['ClinicDescription'].toString()) .toList(); return clinicsNameslist; } /*@author: ibrahem albitar *@Date:3/6/2020 *@desc: getReferralFrequancyList */ getReferralFrequancyList() async { String token = await sharedPref.getString(TOKEN); setBasicData(); try { if (await Helpers.checkConnection()) { _referralFrequencyRequest.tokenID = token; final response = await AppClient.post(PATIENT_GET_LIST_REFERAL_URL, body: json.encode(_referralFrequencyRequest)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { referalFrequancyList = res['list_STPReferralFrequency']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } List getReferralNamesList() { var referralNamesList = referalFrequancyList .map((value) => value['Description'].toString()) .toList(); return referralNamesList; } /*@author: ibrahem albitar *@Date:3/6/2020 *@desc: referToDoctor */ referToDoctor( int selectedDoctorID, int selectedClinicID, String selectedReferralFrequancyID, int admissionNo, String extension, String doctorRemark) async { String token = await sharedPref.getString(TOKEN); int projectID = await sharedPref.getInt(PROJECT_ID); Map profile = await sharedPref.getObj(DOCTOR_PROFILE); DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile); int doctorID = doctorProfile.doctorID; int clinicId = doctorProfile.clinicID; setBasicData(); try { if (await Helpers.checkConnection()) { // _referToDoctorRequest.tokenID = token; // _referToDoctorRequest.admissionNo = admissionNo; // _referToDoctorRequest.projectID = projectID; // _referToDoctorRequest.tokenID = token; // _referToDoctorRequest.extension = extension; // _referToDoctorRequest.frequency = selectedReferralFrequancyID; // _referToDoctorRequest.patientID = // _referToDoctorRequest.priority = // _referToDoctorRequest.referralClinic = // _referToDoctorRequest.referralDoctor = // _referToDoctorRequest.referringDoctorRemarks = // _referToDoctorRequest.roomID = // _referToDoctorRequest.referringClinic = // _referToDoctorRequest.referringDoctor = final response = await AppClient.post(PATIENT_REFER_TO_DOCTOR_URL, body: json.encode(_referralFrequencyRequest)); final int statusCode = response.statusCode; isLoading = false; if (statusCode < 200 || statusCode >= 400 || json == null) { isError = true; error = 'Error While Fetching data'; } else { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { patientProgressNoteList = res['List_GetPregressNoteForInPatient']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; } } } else { isLoading = false; isError = true; error = 'Please Check The Internet Connection'; } notifyListeners(); } catch (err) { handelCatchErrorCase(err); } } }