|
|
|
|
@ -1,30 +1,34 @@
|
|
|
|
|
import 'package:doctor_app_flutter/config/config.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/enum/filter_type.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/labs/LabOrderResult.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/enum/view_state.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/labs/lab_order_result.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/labs/lab_result.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/labs/patient_lab_special_result.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart' as cpe;
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'
|
|
|
|
|
as cpe;
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/procedure_templateModel.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/procedure_template_details_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/radiology/final_radiology.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/service/patient_medical_file/lab_order/labs_service.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/service/patient_medical_file/procedure/procedure_service.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/service/patient_medical_file/radiology/radiology_service.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/locator.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/screens/procedures/ProcedureType.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/util/helpers.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/screens/procedures/procedure_type.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
|
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
|
import '../../widgets/shared/loader/gif_loader_dialog_utils.dart';
|
|
|
|
|
|
|
|
|
|
class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
//TODO Hussam clean it
|
|
|
|
|
@ -68,15 +72,17 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
List<ProcedureTempleteDetailsModel> get procedureTemplateDetails =>
|
|
|
|
|
_procedureService.templateDetailsList;
|
|
|
|
|
|
|
|
|
|
List<PatientLabOrdersList> _patientLabOrdersListClinic = List();
|
|
|
|
|
List<PatientLabOrdersList> _patientLabOrdersListHospital = List();
|
|
|
|
|
|
|
|
|
|
Future getProcedure({int mrn, String patientType, int appointmentNo}) async {
|
|
|
|
|
Future getProcedure(
|
|
|
|
|
{int mrn,
|
|
|
|
|
String patientType,
|
|
|
|
|
int appointmentNo,
|
|
|
|
|
bool isLocalBusy = false}) async {
|
|
|
|
|
hasError = false;
|
|
|
|
|
await getDoctorProfile();
|
|
|
|
|
|
|
|
|
|
//_insuranceCardService.clearInsuranceCard();
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
if (isLocalBusy)
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
else
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _procedureService.getProcedure(
|
|
|
|
|
mrn: mrn, appointmentNo: appointmentNo);
|
|
|
|
|
if (_procedureService.hasError) {
|
|
|
|
|
@ -90,10 +96,16 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future getProcedureCategory(
|
|
|
|
|
{String categoryName, String categoryID, patientId}) async {
|
|
|
|
|
{String categoryName,
|
|
|
|
|
String categoryID,
|
|
|
|
|
patientId,
|
|
|
|
|
bool isLocalBusy = false}) async {
|
|
|
|
|
if (categoryName == null) return;
|
|
|
|
|
hasError = false;
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
if (isLocalBusy)
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
else
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _procedureService.getProcedureCategory(
|
|
|
|
|
categoryName: categoryName,
|
|
|
|
|
categoryID: categoryID,
|
|
|
|
|
@ -117,19 +129,23 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future getProcedureTemplate({String categoryID, bool isLocalBusy = false, BuildContext context}) async {
|
|
|
|
|
Future getProcedureTemplate(
|
|
|
|
|
{String categoryID,
|
|
|
|
|
bool isLocalBusy = false,
|
|
|
|
|
BuildContext context}) async {
|
|
|
|
|
if (isLocalBusy) {
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
} else {
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
}
|
|
|
|
|
await _procedureService.getProcedureTemplate(categoryID: categoryID, isLocalBusy: false);
|
|
|
|
|
await _procedureService.getProcedureTemplate(
|
|
|
|
|
categoryID: categoryID, isLocalBusy: false);
|
|
|
|
|
if (_procedureService.hasError) {
|
|
|
|
|
error = _procedureService.error;
|
|
|
|
|
setState(ViewState.ErrorLocal);
|
|
|
|
|
} else
|
|
|
|
|
setTemplateListDependOnId();
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setTemplateListDependOnId() {
|
|
|
|
|
@ -169,27 +185,33 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future postProcedure(
|
|
|
|
|
PostProcedureReqModel postProcedureReqModel, int mrn) async {
|
|
|
|
|
Future postProcedure(PostProcedureReqModel postProcedureReqModel, int mrn,
|
|
|
|
|
{bool isLocalBusy = false}) async {
|
|
|
|
|
hasError = false;
|
|
|
|
|
//_insuranceCardService.clearInsuranceCard();
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
if (isLocalBusy)
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
else
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _procedureService.postProcedure(postProcedureReqModel);
|
|
|
|
|
if (_procedureService.hasError) {
|
|
|
|
|
error = _procedureService.error;
|
|
|
|
|
setState(ViewState.ErrorLocal);
|
|
|
|
|
} else {
|
|
|
|
|
await getProcedure(mrn: mrn);
|
|
|
|
|
await getProcedure(mrn: mrn, isLocalBusy:isLocalBusy);
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future valadteProcedure(
|
|
|
|
|
ProcedureValadteRequestModel procedureValadteRequestModel) async {
|
|
|
|
|
Future validationProcedure(
|
|
|
|
|
ProcedureValidationRequestModel procedureValidateRequestModel,
|
|
|
|
|
{bool isLocalBusy = false}) async {
|
|
|
|
|
hasError = false;
|
|
|
|
|
//_insuranceCardService.clearInsuranceCard();
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _procedureService.valadteProcedure(procedureValadteRequestModel);
|
|
|
|
|
if (isLocalBusy) {
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
} else {
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
}
|
|
|
|
|
await _procedureService.validationProcedure(procedureValidateRequestModel);
|
|
|
|
|
if (_procedureService.hasError) {
|
|
|
|
|
error = _procedureService.error;
|
|
|
|
|
setState(ViewState.ErrorLocal);
|
|
|
|
|
@ -200,9 +222,9 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
|
|
|
|
|
Future updateProcedure(
|
|
|
|
|
{UpdateProcedureRequestModel updateProcedureRequestModel,
|
|
|
|
|
int mrn}) async {
|
|
|
|
|
int mrn, bool isLocalBusy = false}) async {
|
|
|
|
|
hasError = false;
|
|
|
|
|
//_insuranceCardService.clearInsuranceCard();
|
|
|
|
|
if(isLocalBusy)setState(ViewState.BusyLocal); else
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _procedureService.updateProcedure(updateProcedureRequestModel);
|
|
|
|
|
if (_procedureService.hasError) {
|
|
|
|
|
@ -368,15 +390,23 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
DrAppToastMsg.showSuccesToast(mes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future preparePostProcedure(
|
|
|
|
|
{String remarks,
|
|
|
|
|
String orderType,
|
|
|
|
|
PatiantInformtion patient,
|
|
|
|
|
List<cpe.EntityList> entityList,
|
|
|
|
|
ProcedureType procedureType}) async {
|
|
|
|
|
Future preparePostProcedure({
|
|
|
|
|
String remarks,
|
|
|
|
|
String orderType,
|
|
|
|
|
PatiantInformtion patient,
|
|
|
|
|
List<cpe.EntityList> entityList,
|
|
|
|
|
ProcedureType procedureType,
|
|
|
|
|
bool isLocalBusy = false,
|
|
|
|
|
}) async {
|
|
|
|
|
///TODO Roaa Move it to function
|
|
|
|
|
if (isLocalBusy) {
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
} else {
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
}
|
|
|
|
|
PostProcedureReqModel postProcedureReqModel = new PostProcedureReqModel();
|
|
|
|
|
ProcedureValadteRequestModel procedureValadteRequestModel =
|
|
|
|
|
new ProcedureValadteRequestModel();
|
|
|
|
|
ProcedureValidationRequestModel procedureValadteRequestModel =
|
|
|
|
|
new ProcedureValidationRequestModel();
|
|
|
|
|
procedureValadteRequestModel.patientMRN = patient.patientMRN;
|
|
|
|
|
procedureValadteRequestModel.episodeID = patient.episodeNo;
|
|
|
|
|
procedureValadteRequestModel.appointmentNo = patient.appointmentNo;
|
|
|
|
|
@ -409,28 +439,131 @@ class ProcedureViewModel extends BaseViewModel {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
postProcedureReqModel.procedures = controlsProcedure;
|
|
|
|
|
await valadteProcedure(procedureValadteRequestModel);
|
|
|
|
|
await validationProcedure(procedureValadteRequestModel,
|
|
|
|
|
isLocalBusy: isLocalBusy);
|
|
|
|
|
if (state == ViewState.Idle) {
|
|
|
|
|
if (valadteProcedureList[0].entityList.length == 0) {
|
|
|
|
|
await postProcedure(postProcedureReqModel, patient.patientMRN);
|
|
|
|
|
await postProcedure(postProcedureReqModel, patient.patientMRN,
|
|
|
|
|
isLocalBusy: isLocalBusy);
|
|
|
|
|
|
|
|
|
|
if (state == ViewState.ErrorLocal) {
|
|
|
|
|
Helpers.showErrorToast(error);
|
|
|
|
|
getProcedure(mrn: patient.patientMRN);
|
|
|
|
|
Utils.showErrorToast(error);
|
|
|
|
|
getProcedure(mrn: patient.patientMRN, isLocalBusy: isLocalBusy);
|
|
|
|
|
} else if (state == ViewState.Idle) {
|
|
|
|
|
DrAppToastMsg.showSuccesToast('procedure has been added');
|
|
|
|
|
if (Navigator.canPop(AppGlobal.CONTEX))
|
|
|
|
|
Navigator.pop(AppGlobal.CONTEX);
|
|
|
|
|
if (Navigator.canPop(AppGlobal.CONTEX))
|
|
|
|
|
Navigator.pop(AppGlobal.CONTEX);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (state == ViewState.ErrorLocal) {
|
|
|
|
|
Helpers.showErrorToast(error);
|
|
|
|
|
Utils.showErrorToast(error);
|
|
|
|
|
getProcedure(mrn: patient.patientMRN);
|
|
|
|
|
} else if (state == ViewState.Idle) {
|
|
|
|
|
Helpers.showErrorToast(
|
|
|
|
|
Utils.showErrorToast(
|
|
|
|
|
valadteProcedureList[0].entityList[0].warringMessages);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Helpers.showErrorToast(error);
|
|
|
|
|
Utils.showErrorToast(error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool isEntityListSelected(
|
|
|
|
|
cpe.EntityList masterKey, List<cpe.EntityList> entityList) {
|
|
|
|
|
Iterable<cpe.EntityList> history = entityList
|
|
|
|
|
.where((element) => masterKey.procedureId == element.procedureId);
|
|
|
|
|
if (history.length > 0) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool isProcedureEntityListSelected(ProcedureTempleteDetailsModel masterKey,
|
|
|
|
|
List<ProcedureTempleteDetailsModel> entityList) {
|
|
|
|
|
Iterable<ProcedureTempleteDetailsModel> history = entityList.where(
|
|
|
|
|
(element) =>
|
|
|
|
|
masterKey.templateID == element.templateID &&
|
|
|
|
|
masterKey.procedureName == element.procedureName);
|
|
|
|
|
if (history.length > 0) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future addProcedures(
|
|
|
|
|
ProcedureViewModel model,
|
|
|
|
|
List<ProcedureTempleteDetailsModel> items,
|
|
|
|
|
PatiantInformtion patient,
|
|
|
|
|
TextEditingController remarksController,
|
|
|
|
|
{bool isLocalBusy = false}) async {
|
|
|
|
|
if (isLocalBusy) {
|
|
|
|
|
setState(ViewState.BusyLocal);
|
|
|
|
|
} else {
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
}
|
|
|
|
|
List<cpe.EntityList> entityList = List();
|
|
|
|
|
items.forEach((element) {
|
|
|
|
|
entityList.add(
|
|
|
|
|
cpe.EntityList(
|
|
|
|
|
procedureId: element.procedureID,
|
|
|
|
|
remarks: element.remarks,
|
|
|
|
|
categoryID: element.categoryID,
|
|
|
|
|
type: element.type,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
await locator<AnalyticsService>().logEvent(
|
|
|
|
|
eventCategory: "Procedure Checkout Screen",
|
|
|
|
|
eventAction: "Add New Procedure",
|
|
|
|
|
);
|
|
|
|
|
await model.preparePostProcedure(
|
|
|
|
|
entityList: entityList,
|
|
|
|
|
patient: patient,
|
|
|
|
|
remarks: remarksController.text,
|
|
|
|
|
isLocalBusy: isLocalBusy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future filterSearchResults(String query, List<cpe.EntityList> masterList,
|
|
|
|
|
List<cpe.EntityList> items) async {
|
|
|
|
|
List<cpe.EntityList> dummySearchList = List();
|
|
|
|
|
dummySearchList.addAll(masterList);
|
|
|
|
|
if (query.isNotEmpty) {
|
|
|
|
|
List<cpe.EntityList> dummyListData = List();
|
|
|
|
|
dummySearchList.forEach((item) {
|
|
|
|
|
if (item.procedureName.toLowerCase().contains(query.toLowerCase())) {
|
|
|
|
|
dummyListData.add(item);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
items.clear();
|
|
|
|
|
items.addAll(dummyListData);
|
|
|
|
|
} else {
|
|
|
|
|
items.clear();
|
|
|
|
|
items.addAll(masterList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void filterProcedureSearchResults(
|
|
|
|
|
String query,
|
|
|
|
|
List<ProcedureTempleteModel> masterList,
|
|
|
|
|
List<ProcedureTempleteModel> items) {
|
|
|
|
|
List<ProcedureTempleteModel> dummySearchList = List();
|
|
|
|
|
if(masterList!= null)
|
|
|
|
|
dummySearchList.addAll(masterList);
|
|
|
|
|
if (query.isNotEmpty) {
|
|
|
|
|
List<ProcedureTempleteModel> dummyListData = List();
|
|
|
|
|
dummySearchList.forEach((item) {
|
|
|
|
|
if (item.templateName.toLowerCase().contains(query.toLowerCase())) {
|
|
|
|
|
dummyListData.add(item);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
items.clear();
|
|
|
|
|
items.addAll(dummyListData);
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
items.clear();
|
|
|
|
|
items.addAll(masterList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|