|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/app_state.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/location_util.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/location/GeocodeResponse.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/patient_prescriptions_response_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/prescription_delivery_response_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/prescription_detail_response_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_repo.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_delivery_order_summary_page.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/services/dialog_service.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/services/error_handler_service.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/services/navigation_service.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/map/map_utility_screen.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
|
|
|
|
|
|
|
|
|
|
class PrescriptionsViewModel extends ChangeNotifier {
|
|
|
|
|
bool isPrescriptionsOrdersLoading = false;
|
|
|
|
|
bool isPrescriptionsDetailsLoading = false;
|
|
|
|
|
|
|
|
|
|
PrescriptionsRepo prescriptionsRepo;
|
|
|
|
|
ErrorHandlerService errorHandlerService;
|
|
|
|
|
NavigationService navServices;
|
|
|
|
|
|
|
|
|
|
// Prescription Orders Lists
|
|
|
|
|
List<PatientPrescriptionsResponseModel> patientPrescriptionOrders = [];
|
|
|
|
|
|
|
|
|
|
List<PrescriptionsList> patientPrescriptionOrdersByClinic = [];
|
|
|
|
|
List<PrescriptionsList> patientPrescriptionOrdersByHospital = [];
|
|
|
|
|
List<PrescriptionsList> patientPrescriptionOrdersViewList = [];
|
|
|
|
|
|
|
|
|
|
// Prescription Details List
|
|
|
|
|
List<PrescriptionDetailResponseModel> prescriptionDetailsList = [];
|
|
|
|
|
|
|
|
|
|
bool isSortByClinic = true;
|
|
|
|
|
|
|
|
|
|
String prescriptionInstructionsPDFLink = "";
|
|
|
|
|
|
|
|
|
|
String prescriptionPDFBase64Data = "";
|
|
|
|
|
|
|
|
|
|
late GeocodeResponse locationGeocodeResponse;
|
|
|
|
|
|
|
|
|
|
bool isPrescriptionsDeliveryOrdersLoading = false;
|
|
|
|
|
List<PrescriptionDeliveryResponseModel> prescriptionsOrderList = [];
|
|
|
|
|
|
|
|
|
|
PrescriptionsViewModel({required this.prescriptionsRepo, required this.errorHandlerService, required this.navServices});
|
|
|
|
|
|
|
|
|
|
initPrescriptionsViewModel() {
|
|
|
|
|
patientPrescriptionOrders.clear();
|
|
|
|
|
patientPrescriptionOrdersByClinic.clear();
|
|
|
|
|
patientPrescriptionOrdersByHospital.clear();
|
|
|
|
|
patientPrescriptionOrdersViewList.clear();
|
|
|
|
|
prescriptionsOrderList.clear();
|
|
|
|
|
isPrescriptionsOrdersLoading = true;
|
|
|
|
|
isSortByClinic = true;
|
|
|
|
|
isPrescriptionsDeliveryOrdersLoading = true;
|
|
|
|
|
getPatientPrescriptionOrders();
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
checkIfReminderExistForPrescription(int index) async {
|
|
|
|
|
prescriptionDetailsList[index].hasReminder = await CalenderUtilsNew.instance.checkIfEventExist(prescriptionDetailsList[index].itemID?.toString() ?? "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setPrescriptionsDetailsLoading() {
|
|
|
|
|
isPrescriptionsDetailsLoading = true;
|
|
|
|
|
prescriptionDetailsList.clear();
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setPrescriptionItemReminder(bool value, PrescriptionDetailResponseModel item) {
|
|
|
|
|
int index = prescriptionDetailsList.indexOf(item);
|
|
|
|
|
if (index != -1) {
|
|
|
|
|
prescriptionDetailsList[index].hasReminder = value;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
notify() {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setIsSortByClinic(bool value) {
|
|
|
|
|
isSortByClinic = value;
|
|
|
|
|
if (isSortByClinic) {
|
|
|
|
|
patientPrescriptionOrdersViewList = patientPrescriptionOrdersByClinic;
|
|
|
|
|
} else {
|
|
|
|
|
patientPrescriptionOrdersViewList = patientPrescriptionOrdersByHospital;
|
|
|
|
|
}
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getPatientPrescriptionOrders({Function(dynamic)? onSuccess, Function(String)? onError}) async {
|
|
|
|
|
final result = await prescriptionsRepo.getPatientPrescriptionOrders(patientId: "1231755");
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
// (failure) async => await errorHandlerService.handleError(failure: failure),
|
|
|
|
|
(failure) async {
|
|
|
|
|
isPrescriptionsOrdersLoading = false;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
},
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
patientPrescriptionOrders = apiResponse.data!;
|
|
|
|
|
isPrescriptionsOrdersLoading = false;
|
|
|
|
|
|
|
|
|
|
for (var element in patientPrescriptionOrders) {
|
|
|
|
|
List<PrescriptionsList> prescriptionsByClinic = patientPrescriptionOrdersByClinic.where((elementClinic) => elementClinic.filterName == element.clinicDescription).toList();
|
|
|
|
|
|
|
|
|
|
if (prescriptionsByClinic.isNotEmpty) {
|
|
|
|
|
patientPrescriptionOrdersByClinic[patientPrescriptionOrdersByClinic.indexOf(prescriptionsByClinic[0])].prescriptionsList!.add(element);
|
|
|
|
|
} else {
|
|
|
|
|
patientPrescriptionOrdersByClinic.add(PrescriptionsList(filterName: element.clinicDescription, prescriptions: element));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<PrescriptionsList> prescriptionsByHospital = patientPrescriptionOrdersByHospital.where((elementClinic) => elementClinic.filterName == element.name).toList();
|
|
|
|
|
|
|
|
|
|
if (prescriptionsByHospital.isNotEmpty) {
|
|
|
|
|
patientPrescriptionOrdersByHospital[patientPrescriptionOrdersByHospital.indexOf(prescriptionsByHospital[0])].prescriptionsList!.add(element);
|
|
|
|
|
} else {
|
|
|
|
|
patientPrescriptionOrdersByHospital.add(PrescriptionsList(filterName: element.name, prescriptions: element));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
patientPrescriptionOrdersViewList = patientPrescriptionOrdersByClinic;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getPrescriptionDetails(PatientPrescriptionsResponseModel prescriptionsResponseModel, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
|
|
|
|
|
final result = await prescriptionsRepo.getPatientPrescriptionDetails(prescriptionsResponseModel: prescriptionsResponseModel);
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
(failure) async => await errorHandlerService.handleError(failure: failure),
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
prescriptionDetailsList = apiResponse.data!;
|
|
|
|
|
prescriptionDetailsList.forEach((element) async {
|
|
|
|
|
await checkIfReminderExistForPrescription(prescriptionDetailsList.indexOf(element));
|
|
|
|
|
});
|
|
|
|
|
isPrescriptionsDetailsLoading = false;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getPrescriptionInstructionsPDF(PatientPrescriptionsResponseModel prescriptionsResponseModel, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
|
|
|
|
|
final result = await prescriptionsRepo.getPrescriptionInstructionsPDF(prescriptionsResponseModel: prescriptionsResponseModel);
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
(failure) async {
|
|
|
|
|
onError!(failure.message);
|
|
|
|
|
},
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
onError!(apiResponse.errorMessage!);
|
|
|
|
|
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
prescriptionInstructionsPDFLink = apiResponse.data;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getPrescriptionPDFBase64(PatientPrescriptionsResponseModel prescriptionsResponseModel, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
|
|
|
|
|
final result = await prescriptionsRepo.getPrescriptionPDF(prescriptionsResponseModel: prescriptionsResponseModel, prescriptionDetailsList: prescriptionDetailsList);
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
(failure) async {
|
|
|
|
|
onError!(failure.message);
|
|
|
|
|
},
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
onError!(apiResponse.errorMessage!);
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
prescriptionPDFBase64Data = apiResponse.data;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
showError(String errorMessage) {
|
|
|
|
|
getIt<DialogService>().showErrorBottomSheet(message: errorMessage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> submitPrescriptionDeliveryRequest(
|
|
|
|
|
{required String latitude,
|
|
|
|
|
required String longitude,
|
|
|
|
|
required String appointmentNo,
|
|
|
|
|
required String dischargeID,
|
|
|
|
|
required String projectID,
|
|
|
|
|
Function(dynamic)? onSuccess,
|
|
|
|
|
Function(String)? onError}) async {
|
|
|
|
|
final result = await prescriptionsRepo.submitPrescriptionDeliveryRequest(latitude: latitude, longitude: longitude, appointmentNo: appointmentNo, dischargeID: dischargeID, projectID: projectID);
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
(failure) async {
|
|
|
|
|
onError!(failure.message);
|
|
|
|
|
},
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
onError!(apiResponse.errorMessage!);
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void initiatePrescriptionDelivery() async {
|
|
|
|
|
getIt.get<LocationUtils>().getLocation(
|
|
|
|
|
isShowConfirmDialog: true,
|
|
|
|
|
onSuccess: (position) async {
|
|
|
|
|
bool result = await navServices.push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: MapUtilityScreen(
|
|
|
|
|
confirmButtonString: LocaleKeys.next.tr(),
|
|
|
|
|
titleString: "Select Location".needTranslation,
|
|
|
|
|
subTitleString: "Please select the location for prescription delivery".needTranslation,
|
|
|
|
|
isGmsAvailable: getIt.get<AppState>().isGMSAvailable,
|
|
|
|
|
),
|
|
|
|
|
direction: AxisDirection.down),
|
|
|
|
|
);
|
|
|
|
|
print("Location Selected: $result");
|
|
|
|
|
if (result) {
|
|
|
|
|
LocationViewModel locationViewModel = getIt.get<LocationViewModel>();
|
|
|
|
|
locationGeocodeResponse = locationViewModel.geocodeResponse!;
|
|
|
|
|
navServices.push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: PrescriptionDeliveryOrderSummaryPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getPrescriptionOrdersList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
|
|
|
|
|
isPrescriptionsDeliveryOrdersLoading = true;
|
|
|
|
|
prescriptionsOrderList.clear();
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
|
|
final result = await prescriptionsRepo.getPrescriptionOrdersList();
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
|
(failure) async {
|
|
|
|
|
isPrescriptionsDeliveryOrdersLoading = false;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
onError!(failure.message);
|
|
|
|
|
},
|
|
|
|
|
(apiResponse) {
|
|
|
|
|
if (apiResponse.messageStatus == 2) {
|
|
|
|
|
isPrescriptionsDeliveryOrdersLoading = false;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
onError!(apiResponse.errorMessage!);
|
|
|
|
|
} else if (apiResponse.messageStatus == 1) {
|
|
|
|
|
isPrescriptionsDeliveryOrdersLoading = false;
|
|
|
|
|
prescriptionsOrderList = apiResponse.data!;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
if (onSuccess != null) {
|
|
|
|
|
onSuccess(apiResponse);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|