WD: general speciality

update_flutter_3.24_vida_plus_episode_v2
taha.alam 1 year ago
parent 6392620df7
commit 5e31c9cf98

@ -328,6 +328,10 @@ const ADD_TO_FAVORITE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/Diagnosis
const MAKE_PREVIOUS_AS_CURRENT_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/ContinuePreviousEpisode'; const MAKE_PREVIOUS_AS_CURRENT_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/ContinuePreviousEpisode';
const SEARCH_PHYSICAL_EXAMINATION = 'Services/DoctorApplication.svc/REST/SearchPhysicalExam';
const GET_GENERAL_SPECIALITY = 'Services/DoctorApplication.svc/REST/GetGeneralSpeciality';
var selectedPatientType = 1; var selectedPatientType = 1;

@ -0,0 +1,24 @@
class GeneralSpeciality {
int? id;
bool? isActive;
String? name;
int? rowVersion;
bool isSelected = false;
GeneralSpeciality();
GeneralSpeciality.fromJson(Map<String, dynamic> json) {
id = json['id'];
isActive = json['isActive'];
name = json['name'];
rowVersion = json['rowVersion'];
}
Map<String, dynamic> toJson() {
return {
'id': id,
'isActive': isActive,
'name': name,
'rowVersion': rowVersion,
};
}
}

@ -12,7 +12,9 @@ import 'package:doctor_app_flutter/core/model/SOAP/chief_complaint/search_chief_
import 'package:doctor_app_flutter/core/model/SOAP/general_get_req_for_SOAP.dart'; import 'package:doctor_app_flutter/core/model/SOAP/general_get_req_for_SOAP.dart';
import 'package:doctor_app_flutter/core/model/SOAP/Assessment/get_assessment_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/Assessment/get_assessment_req_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/get_hopi_details.dart'; import 'package:doctor_app_flutter/core/model/SOAP/get_hopi_details.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_examination_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/chief_complaint/get_chief_complaint_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/chief_complaint/get_chief_complaint_req_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/chief_complaint/get_chief_complaint_res_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/chief_complaint/get_chief_complaint_res_model.dart';
@ -55,6 +57,7 @@ class SOAPService extends LookupService {
List<AuditDiagnosis> auditDiagnosislist = []; List<AuditDiagnosis> auditDiagnosislist = [];
List<SearchDiagnosis> searchDiagnosisList = []; List<SearchDiagnosis> searchDiagnosisList = [];
List<PatientPhysicalExamination> patientPhysicalExaminationList = []; List<PatientPhysicalExamination> patientPhysicalExaminationList = [];
List<GeneralSpeciality> generalSpeciality = [];
Map<String, dynamic> diagnosisTypeList = {}; Map<String, dynamic> diagnosisTypeList = {};
Map<String, dynamic> conditionTypeList = {}; Map<String, dynamic> conditionTypeList = {};
List<String> icdVersionList = []; List<String> icdVersionList = [];
@ -77,8 +80,7 @@ class SOAPService extends LookupService {
}, body: postEpisodeReqModel.toJson()); }, body: postEpisodeReqModel.toJson());
} }
Future postEpisodeForInPatient( Future postEpisodeForInPatient(PostEpisodeForInpatientRequestModel
PostEpisodeForInpatientRequestModel
postEpisodeForInpatientRequestModel) async { postEpisodeForInpatientRequestModel) async {
hasError = false; hasError = false;
@ -279,7 +281,8 @@ class SOAPService extends LookupService {
print("Success"); print("Success");
patientChiefComplaintList.clear(); patientChiefComplaintList.clear();
response['List_ChiefComplaint']['entityList'].forEach((v) { response['List_ChiefComplaint']['entityList'].forEach((v) {
patientChiefComplaintList.add(GetChiefComplaintResModel.fromJson(v)); patientChiefComplaintList.add(
GetChiefComplaintResModel.fromJson(v));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
@ -310,7 +313,8 @@ class SOAPService extends LookupService {
print("Success"); print("Success");
patientProgressNoteList.clear(); patientProgressNoteList.clear();
response['ProgressNoteList']['entityList'].forEach((v) { response['ProgressNoteList']['entityList'].forEach((v) {
patientProgressNoteList.add(GetPatientProgressNoteResModel.fromJson(v)); patientProgressNoteList.add(
GetPatientProgressNoteResModel.fromJson(v));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
@ -405,8 +409,8 @@ class SOAPService extends LookupService {
}, body: {"AllergyName": searchKey}); }, body: {"AllergyName": searchKey});
} }
Future addAllergies( Future addAllergies(AllergiesListVidaPlus allergy,
AllergiesListVidaPlus allergy, PatiantInformtion patientInfo) async { PatiantInformtion patientInfo) async {
allergy.allergyReactionDTOs!.forEach((value) { allergy.allergyReactionDTOs!.forEach((value) {
value.patientID = patientInfo.patientMRN; value.patientID = patientInfo.patientMRN;
value.pomrid = int.parse(patientInfo.pomrId!); value.pomrid = int.parse(patientInfo.pomrId!);
@ -447,8 +451,8 @@ class SOAPService extends LookupService {
}); });
} }
Future resolveAllergies( Future resolveAllergies(PatientAllergiesVidaPlus allergy,
PatientAllergiesVidaPlus allergy, PatiantInformtion patientInfo) async { PatiantInformtion patientInfo) async {
/*changed request parameters based on the vida plus requested */ /*changed request parameters based on the vida plus requested */
var doctorProfile = await sharedPref.getObj(LOGGED_IN_USER); var doctorProfile = await sharedPref.getObj(LOGGED_IN_USER);
@ -496,8 +500,8 @@ class SOAPService extends LookupService {
}); });
} }
Future updateAllergies( Future updateAllergies(AllergiesListVidaPlus allergy,
AllergiesListVidaPlus allergy, PatiantInformtion patientInfo) async { PatiantInformtion patientInfo) async {
allergy.allergyReactionDTOs!.forEach((value) { allergy.allergyReactionDTOs!.forEach((value) {
value.patientID = patientInfo.patientMRN; value.patientID = patientInfo.patientMRN;
value.pomrid = patientInfo.episodeNo; value.pomrid = patientInfo.episodeNo;
@ -548,9 +552,7 @@ class SOAPService extends LookupService {
"patientId": patient.patientMRN, "patientId": patient.patientMRN,
"patientPomrId": patient.pomrId, "patientPomrId": patient.pomrId,
}; };
Map<String, dynamic> finalRequest = {} Map<String, dynamic> finalRequest = {}..addAll(request)..addAll(req);
..addAll(request)
..addAll(req);
hasError = false; hasError = false;
await baseAppClient.post(CREATE_HOPI, await baseAppClient.post(CREATE_HOPI,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
@ -600,8 +602,8 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
postChiefComplaintVidaPlus( postChiefComplaintVidaPlus(PatiantInformtion patient,
PatiantInformtion patient, String cheifComplaint) async { String cheifComplaint) async {
Map<String, dynamic> request = { Map<String, dynamic> request = {
"ListCreateChiefComplaint": [ "ListCreateChiefComplaint": [
{ {
@ -634,7 +636,8 @@ class SOAPService extends LookupService {
searchChiefComplaintListVidaPlus.clear(); searchChiefComplaintListVidaPlus.clear();
// //
response['List_SearchChiefComplaint']['resultData'].forEach((v) { response['List_SearchChiefComplaint']['resultData'].forEach((v) {
searchChiefComplaintListVidaPlus.add(SearchChiefComplaint.fromJson(v)); searchChiefComplaintListVidaPlus.add(
SearchChiefComplaint.fromJson(v));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
searchChiefComplaintListVidaPlus.clear(); searchChiefComplaintListVidaPlus.clear();
@ -653,7 +656,8 @@ class SOAPService extends LookupService {
await baseAppClient.post(SEARCH_DIAGNOSIS, await baseAppClient.post(SEARCH_DIAGNOSIS,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['List_Diagnosis']['resultData'] response['List_Diagnosis']['resultData']
.forEach((v) => searchDiagnosisList.add(SearchDiagnosis.fromJson(v))); .forEach((v) =>
searchDiagnosisList.add(SearchDiagnosis.fromJson(v)));
_processData(); _processData();
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
searchChiefComplaintListVidaPlus.clear(); searchChiefComplaintListVidaPlus.clear();
@ -689,7 +693,8 @@ class SOAPService extends LookupService {
await baseAppClient.post(DIAGNOSIS_TYPE, await baseAppClient.post(DIAGNOSIS_TYPE,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['ListDiagnosisTypeModel']['resultData'] response['ListDiagnosisTypeModel']['resultData']
.forEach((v) => diagnosisTypeList[v['name']] = v['diagnosisType']); .forEach((v) =>
diagnosisTypeList[v['name']] = v['diagnosisType']);
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
searchChiefComplaintListVidaPlus.clear(); searchChiefComplaintListVidaPlus.clear();
hasError = true; hasError = true;
@ -713,10 +718,8 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
auditDiagnosis( auditDiagnosis(PatiantInformtion patient,
PatiantInformtion patient, String patientProblemRevisionID,) async {
String patientProblemRevisionID,
) async {
Map<String, dynamic> request = { Map<String, dynamic> request = {
"patientProblemRevisionId": patientProblemRevisionID, "patientProblemRevisionId": patientProblemRevisionID,
"ProjectID": patient.projectId "ProjectID": patient.projectId
@ -726,7 +729,8 @@ class SOAPService extends LookupService {
await baseAppClient.post(AUDIT_DIAGNOSIS, await baseAppClient.post(AUDIT_DIAGNOSIS,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['ListDaignosisAudit']['resultData'] response['ListDaignosisAudit']['resultData']
.forEach((v) => auditDiagnosislist.add(AuditDiagnosis.fromJson(v))); .forEach((v) =>
auditDiagnosislist.add(AuditDiagnosis.fromJson(v)));
showAuditBottomSheet = auditDiagnosislist.isNotEmpty; showAuditBottomSheet = auditDiagnosislist.isNotEmpty;
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
auditDiagnosislist.clear(); auditDiagnosislist.clear();
@ -786,7 +790,8 @@ class SOAPService extends LookupService {
patientPreviousDiagnosisList.clear(); patientPreviousDiagnosisList.clear();
await baseAppClient.post(REMOVE_DIAGNOSIS, await baseAppClient.post(REMOVE_DIAGNOSIS,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
DrAppToastMsg.showSuccesToast(response['ListDiagnosisRemove']['message']); DrAppToastMsg.showSuccesToast(
response['ListDiagnosisRemove']['message']);
//todo get the current diagnosis after the delete if it is successful //todo get the current diagnosis after the delete if it is successful
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
patientPreviousDiagnosisList.clear(); patientPreviousDiagnosisList.clear();
@ -795,9 +800,7 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
favoriteDiagnosis( favoriteDiagnosis(PatiantInformtion patientInfo,) async {
PatiantInformtion patientInfo,
) async {
Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER); Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER);
Map<String, dynamic> request = { Map<String, dynamic> request = {
@ -813,7 +816,8 @@ class SOAPService extends LookupService {
await baseAppClient.post(FAVORITE_DIAGNOSIS, await baseAppClient.post(FAVORITE_DIAGNOSIS,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['ListDiagnosisGetFavourite']['resultData'].forEach((v) => response['ListDiagnosisGetFavourite']['resultData'].forEach((v) =>
favoriteDiagnosisDetailsList.add(FavoriteDiseaseDetails.fromJson(v))); favoriteDiagnosisDetailsList.add(
FavoriteDiseaseDetails.fromJson(v)));
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
favoriteDiagnosisDetailsList.clear(); favoriteDiagnosisDetailsList.clear();
hasError = true; hasError = true;
@ -821,9 +825,7 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
getPhysicalExamination( getPhysicalExamination(PatiantInformtion patientInfo,) async {
PatiantInformtion patientInfo,
) async {
Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER); Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER);
Map<String, dynamic> request = { Map<String, dynamic> request = {
@ -831,14 +833,15 @@ class SOAPService extends LookupService {
"pomrId": patientInfo.pomrId, "pomrId": patientInfo.pomrId,
"hospitalId": patientInfo.projectId, "hospitalId": patientInfo.projectId,
"hospitalGroupId": await sharedPref.getString(DOCTOR_SETUP_ID), "hospitalGroupId": await sharedPref.getString(DOCTOR_SETUP_ID),
"ProjectID":patientInfo.projectId "ProjectID": patientInfo.projectId
}; };
hasError = false; hasError = false;
patientPhysicalExaminationList.clear(); patientPhysicalExaminationList.clear();
await baseAppClient.post(FAVORITE_DIAGNOSIS, await baseAppClient.post(SEARCH_PHYSICAL_EXAMINATION,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['ListPhysicalExam']['resultData'].forEach((v) => response['ListPhysicalExam']['resultData'].forEach((v) =>
patientPhysicalExaminationList.add(PatientPhysicalExamination.fromJson(v))); patientPhysicalExaminationList.add(
PatientPhysicalExamination.fromJson(v)));
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
physicalExaminationList.clear(); physicalExaminationList.clear();
hasError = true; hasError = true;
@ -846,6 +849,45 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
postPhysicalExamination(PatiantInformtion patientInfo,List<PostPhysicalExaminationModel> physicalExamination) async {
var jsonListOfPhysicalExamination = [];
physicalExamination.forEach((value)=>jsonListOfPhysicalExamination.add(value.toJson()));
Map<String, dynamic> request = {
"ProjectID": patientInfo.patientId,
"listCreatPhysicalExam": jsonListOfPhysicalExamination
};
hasError = false;
await baseAppClient.post(SEARCH_PHYSICAL_EXAMINATION,
onSuccess: (dynamic response, int statusCode) {
DrAppToastMsg.showSuccesToast(
response['ListPhysicalExam']['message']);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: request);
}
getGeneralSpeciality(PatiantInformtion patientInfo) async {
Map<String, dynamic> request = {
"ProjectID": patientInfo.patientId,
};
hasError = false;
generalSpeciality.clear();
await baseAppClient.post(GET_GENERAL_SPECIALITY,
onSuccess: (dynamic response, int statusCode) {
response['ListGeneralSpeciality']['resultData'].forEach((v) =>
generalSpeciality.add(
GeneralSpeciality.fromJson(v)));
}, onFailure: (String error, int statusCode) {
hasError = true;
generalSpeciality.clear();
super.error = error;
}, body: request);
}
addToFavoriteDiagnosis(PatiantInformtion paitientInfo, String doctorName, addToFavoriteDiagnosis(PatiantInformtion paitientInfo, String doctorName,
String subFavoriteCode, String? userId) async { String subFavoriteCode, String? userId) async {
Map<String, dynamic> request = { Map<String, dynamic> request = {
@ -882,7 +924,8 @@ class SOAPService extends LookupService {
}, body: request); }, body: request);
} }
convertPreviousDiagnosisCurrent(PatiantInformtion paitientInfo, PatientPreviousDiagnosis diagnosis) async { convertPreviousDiagnosisCurrent(PatiantInformtion paitientInfo,
PatientPreviousDiagnosis diagnosis) async {
Map<String, dynamic> request = { Map<String, dynamic> request = {
"patientProblemRevisionId": diagnosis.patientProblemRevisionId, "patientProblemRevisionId": diagnosis.patientProblemRevisionId,
"patientId": paitientInfo.patientId, "patientId": paitientInfo.patientId,
@ -895,7 +938,7 @@ class SOAPService extends LookupService {
"clinicGroupId": diagnosis.clinicGroupId, "clinicGroupId": diagnosis.clinicGroupId,
"clinicId": diagnosis.clinicId, "clinicId": diagnosis.clinicId,
"isSelected": true, "isSelected": true,
"ProjectID":paitientInfo.projectId "ProjectID": paitientInfo.projectId
}; };
hasError = false; hasError = false;
addedToFavorite = false; addedToFavorite = false;

@ -29,6 +29,7 @@ import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/get_physical_ex
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/get_physical_exam_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/get_physical_exam_req_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_exam_request_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_exam_request_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_examination_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/post_episode_req_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/progress_note/GetGetProgressNoteResModel.dart'; import 'package:doctor_app_flutter/core/model/SOAP/progress_note/GetGetProgressNoteResModel.dart';
import 'package:doctor_app_flutter/core/model/SOAP/progress_note/get_progress_note_req_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/progress_note/get_progress_note_req_model.dart';
@ -48,6 +49,7 @@ import 'package:doctor_app_flutter/screens/patients/profile/soap_update/subjecti
import '../../locator.dart'; import '../../locator.dart';
import '../model/SOAP/allergy/get_patient_allergies_list_vida_plus.dart'; import '../model/SOAP/allergy/get_patient_allergies_list_vida_plus.dart';
import '../model/SOAP/assessment/patch_assessment_req_model.dart'; import '../model/SOAP/assessment/patch_assessment_req_model.dart';
import '../model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'base_view_model.dart'; import 'base_view_model.dart';
class SOAPViewModel extends BaseViewModel { class SOAPViewModel extends BaseViewModel {
@ -142,8 +144,13 @@ class SOAPViewModel extends BaseViewModel {
List<AuditDiagnosis> get auditDiagnosislist => List<AuditDiagnosis> get auditDiagnosislist =>
_SOAPService.auditDiagnosislist; _SOAPService.auditDiagnosislist;
List<GeneralSpeciality> get speciality =>
_SOAPService.generalSpeciality;
int? get episodeID => _SOAPService.episodeID; int? get episodeID => _SOAPService.episodeID;
bool get isFavorite => _SOAPService.addedToFavorite; bool get isFavorite => _SOAPService.addedToFavorite;
bool get showAudit => _SOAPService.showAuditBottomSheet; bool get showAudit => _SOAPService.showAuditBottomSheet;
bool get isPrescriptionOrder => _SOAPService.isPrescriptionOrder; bool get isPrescriptionOrder => _SOAPService.isPrescriptionOrder;
@ -1128,24 +1135,27 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
void addToFavoriteDiagnosis( void addToFavoriteDiagnosis(PatiantInformtion patientInfo,
PatiantInformtion patientInfo, { {SearchDiagnosis? diagnosis}) async {
SearchDiagnosis? diagnosis
}) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE); Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER); Map<String, dynamic>? user = await sharedPref.getObj(LOGGED_IN_USER);
await _SOAPService.addToFavoriteDiagnosis(patientInfo,profile?['DoctorName'] ??'',diagnosis?.diseasesBCode ?? '',user?['List_MemberInformation'][0]['MemberID'] ??''); await _SOAPService.addToFavoriteDiagnosis(
patientInfo,
profile?['DoctorName'] ?? '',
diagnosis?.diseasesBCode ?? '',
user?['List_MemberInformation'][0]['MemberID'] ?? '');
if (_SOAPService.hasError) { if (_SOAPService.hasError) {
error = _SOAPService.error; error = _SOAPService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
void convertPreviousDiagnosisCurrent(
PatiantInformtion paitientInfo, PatientPreviousDiagnosis diagnosis) async { void convertPreviousDiagnosisCurrent(PatiantInformtion paitientInfo,
PatientPreviousDiagnosis diagnosis) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _SOAPService.convertPreviousDiagnosisCurrent(paitientInfo,diagnosis); await _SOAPService.convertPreviousDiagnosisCurrent(paitientInfo, diagnosis);
if (_SOAPService.hasError) { if (_SOAPService.hasError) {
error = _SOAPService.error; error = _SOAPService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
@ -1153,8 +1163,7 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
void getPhysicalExamination( void getPhysicalExamination(PatiantInformtion paitientInfo) async {
PatiantInformtion paitientInfo) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _SOAPService.getPhysicalExamination(paitientInfo); await _SOAPService.getPhysicalExamination(paitientInfo);
if (_SOAPService.hasError) { if (_SOAPService.hasError) {
@ -1164,14 +1173,33 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
void toggleFavorite(bool status ){ void postPhysicalExamination(PatiantInformtion patientInfo,
_SOAPService.addedToFavorite List<PostPhysicalExaminationModel> physicalExamination) async {
= status; setState(ViewState.BusyLocal);
await _SOAPService.postPhysicalExamination(
patientInfo, physicalExamination);
if (_SOAPService.hasError) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
void getGeneralSpeciality(PatiantInformtion patientInfo) async {
setState(ViewState.BusyLocal);
await _SOAPService.getGeneralSpeciality(
patientInfo);
if (_SOAPService.hasError) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
} }
void toggleShowBottomSheetValue(bool status){ void toggleFavorite(bool status) {
_SOAPService.showAuditBottomSheet _SOAPService.addedToFavorite = status;
= status;
} }
void toggleShowBottomSheetValue(bool status) {
_SOAPService.showAuditBottomSheet = status;
}
} }

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
@ -15,7 +16,7 @@ import 'package:provider/provider.dart';
import '../../../../../core/viewModel/project_view_model.dart'; import '../../../../../core/viewModel/project_view_model.dart';
class AddDetailsToExaminationVidaPlus extends StatefulWidget { class AddDetailsToExaminationVidaPlus extends StatefulWidget {
final List<MySelectedExamination>? mySelectedExamination; final List<GeneralSpeciality>? mySelectedExamination;
const AddDetailsToExaminationVidaPlus({super.key, this.mySelectedExamination}); const AddDetailsToExaminationVidaPlus({super.key, this.mySelectedExamination});
@ -43,31 +44,26 @@ class _AddDetailsToExaminationVidaPlusState extends State<AddDetailsToExaminatio
padding: const EdgeInsets.all(20.0), padding: const EdgeInsets.all(20.0),
child: Column( child: Column(
children: [ children: [
Expanded( // Expanded(
child: ListView.separated( // child: ListView.separated(
itemBuilder: (context, index) { // itemBuilder: (context, index) {
return ExpandableSOAPWidget( // return ExpandableSOAPWidget(
headerTitle: // headerTitle:,
projectViewModel.isArabic // onTap: () {
? widget.mySelectedExamination![index].selectedExamination!.nameAr != null && widget.mySelectedExamination![index].selectedExamination!.nameAr != "" // setState(() {
? widget.mySelectedExamination![index].selectedExamination!.nameAr! // isSysExaminationExpand = !isSysExaminationExpand;
: widget.mySelectedExamination![index].selectedExamination!.nameEn! // });
: widget.mySelectedExamination![index].selectedExamination!.nameEn!, // },
onTap: () { // child: ExaminationItems(examination:widget.mySelectedExamination![index]),
setState(() { // isExpanded: isSysExaminationExpand,
isSysExaminationExpand = !isSysExaminationExpand; // );
}); //
}, // },
child: ExaminationItems(examination:widget.mySelectedExamination![index]), // separatorBuilder: (context, index) {
isExpanded: isSysExaminationExpand, // return SizedBox(height: 8,);
); // },
// itemCount: widget?.mySelectedExamination?.length ?? 0),
}, // ),
separatorBuilder: (context, index) {
return SizedBox(height: 8,);
},
itemCount: widget?.mySelectedExamination?.length ?? 0),
),
], ],
), ),
))); )));

@ -1,25 +1,31 @@
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_header.dart'; import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_header.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/objective/add_details_to_examination_vida_plus.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'examinations_list_search_vida_plus_widget.dart'; import 'examinations_list_search_vida_plus_widget.dart';
class AddExaminationPageVidaPlus extends StatefulWidget { class AddExaminationPageVidaPlus extends StatefulWidget {
final List<MySelectedExamination>? mySelectedExamination; final PatiantInformtion patientInfo;
final Function(List<MySelectedExamination>) addSelectedExamination; final List<PatientPhysicalExamination>? examination;
final Function(MasterKeyModel) removeExamination;
AddExaminationPageVidaPlus( ///todo handle the data if edit is added
{this.mySelectedExamination, AddExaminationPageVidaPlus({required this.patientInfo, this.examination});
required this.addSelectedExamination,
required this.removeExamination});
@override @override
_AddExaminationPageVidaPlusState createState() => _AddExaminationPageVidaPlusState createState() =>
@ -28,12 +34,11 @@ class AddExaminationPageVidaPlus extends StatefulWidget {
class _AddExaminationPageVidaPlusState class _AddExaminationPageVidaPlusState
extends State<AddExaminationPageVidaPlus> { extends State<AddExaminationPageVidaPlus> {
List<MySelectedExamination> mySelectedExaminationLocal = []; List<GeneralSpeciality> mySelectedExaminationLocal = [];
@override @override
initState() { initState() {
super.initState(); super.initState();
mySelectedExaminationLocal = widget.mySelectedExamination!;
} }
@override @override
@ -42,15 +47,16 @@ class _AddExaminationPageVidaPlusState
onModelReady: (model) async { onModelReady: (model) async {
if (model.physicalExaminationList.length == 0) { if (model.physicalExaminationList.length == 0) {
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
await model.getMasterLookup( if (model.speciality.isEmpty) {
MasterKeysService.PostPhysicalExaminationModel, await model.getGeneralSpeciality(widget.patientInfo);
); }
}); });
} }
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true, isShowAppBar: true,
isLoading: model.state == ViewState.Busy,
appBar: PatientSearchHeader( appBar: PatientSearchHeader(
title: TranslationBase.of(context).examinationPart), title: TranslationBase.of(context).examinationPart),
backgroundColor: Colors.white, backgroundColor: Colors.white,
@ -76,19 +82,42 @@ class _AddExaminationPageVidaPlusState
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
ExaminationsListSearchVidaPlusWidget( ExaminationsListSearchVidaPlusWidget(
mySelectedExamination: widget.mySelectedExamination, masterList: model.speciality,
masterList: model.patientPhysicalExaminationList,
isServiceSelected: (master) =>
isServiceSelected(master),
removeExamination: (selectedExamination) { removeExamination: (selectedExamination) {
if(selectedExamination == null ) return;
setState(() { setState(() {
mySelectedExaminationLocal mySelectedExaminationLocal
.remove(selectedExamination); .remove(selectedExamination);
// Find the object by its ID
try {
final speciality =
model.speciality.firstWhere(
(speciality) =>
speciality.id == selectedExamination.id,
orElse: () => throw Exception(
'Speciality with ID ${selectedExamination.id} not found!'),
);
speciality.isSelected = false;
} catch (e) {}
}); });
}, },
addExamination: (selectedExamination) { addExamination: (selectedExamination) {
if(selectedExamination == null ) return;
mySelectedExaminationLocal.insert( mySelectedExaminationLocal.insert(
0, selectedExamination); 0, selectedExamination);
try {
final speciality = model.speciality.firstWhere(
(speciality) =>
speciality.id == selectedExamination.id,
orElse: () => throw Exception(
'Speciality with ID ${selectedExamination.id} not found!'),
);
speciality.isSelected = true;
} catch (e) {}
//setState(() {}); //setState(() {});
}, },
), ),
@ -128,10 +157,7 @@ class _AddExaminationPageVidaPlusState
fontColor: Colors.white, fontColor: Colors.white,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
onPressed: () async { onPressed: () async {
Navigator.pop(context); pushAddExamination(mySelectedExaminationLocal);
widget.addSelectedExamination(mySelectedExaminationLocal);
}, },
), ),
), ),
@ -141,14 +167,15 @@ class _AddExaminationPageVidaPlusState
); );
} }
isServiceSelected(MasterKeyModel masterKey) { void pushAddExamination(
Iterable<MySelectedExamination> exam = mySelectedExaminationLocal.where( List<GeneralSpeciality> mySelectedExaminationLocal) {
(element) => Navigator.push(
masterKey.id == element.selectedExamination!.id && context,
masterKey.typeId == element.selectedExamination!.typeId); FadePage(
if (exam.length > 0) { page: AddDetailsToExaminationVidaPlus(
return true; mySelectedExamination: mySelectedExaminationLocal,
} ),
return false; ),
);
} }
} }

@ -1,6 +1,7 @@
// ignore: must_be_immutable // ignore: must_be_immutable
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
@ -13,22 +14,16 @@ import 'package:provider/provider.dart';
// ignore: must_be_immutable // ignore: must_be_immutable
class AddExaminationVidaPlusWidget extends StatefulWidget { class AddExaminationVidaPlusWidget extends StatefulWidget {
MasterKeyModel? item; GeneralSpeciality? item;
final Function(MySelectedExamination) removeExamination; final Function(GeneralSpeciality?) removeExamination;
final Function(MySelectedExamination) addExamination; final Function(GeneralSpeciality?) addExamination;
final bool Function(MasterKeyModel) isServiceSelected;
bool isExpand;
final Function() expandClick; final List<GeneralSpeciality>? mySelectedExamination;
final List<MySelectedExamination>? mySelectedExamination;
AddExaminationVidaPlusWidget({ AddExaminationVidaPlusWidget({
this.item, this.item,
required this.removeExamination, required this.removeExamination,
required this.addExamination, required this.addExamination,
required this.isServiceSelected,
this.isExpand = false,
required this.expandClick,
this.mySelectedExamination, this.mySelectedExamination,
}); });
@ -43,17 +38,7 @@ class _AddExaminationVidaPlusWidgetState extends State<AddExaminationVidaPlusWid
@override @override
void initState() { void initState() {
if (getSelectedExam(widget.item!) != null) {
examination = getSelectedExam(widget.item!)!;
status = examination.isNormal
? 1
: examination.isAbnormal
? 2
: 3;
remarksController.text = examination.remark!;
} else {
examination.selectedExamination = widget.item;
}
super.initState(); super.initState();
} }
@ -71,18 +56,14 @@ class _AddExaminationVidaPlusWidgetState extends State<AddExaminationVidaPlusWid
child: Row( child: Row(
children: [ children: [
Checkbox( Checkbox(
value: widget.isServiceSelected(widget.item!), value:widget.item?.isSelected ?? false,
activeColor: Colors.red[800], activeColor: Colors.red[800],
onChanged: (bool? newValue) { onChanged: (bool? newValue) {
onExamTap(); onExamTap();
}), }),
Container( Container(
child: AppText( child: AppText(
projectViewModel.isArabic widget.item?.name ?? '',
? widget.item!.nameAr != null && widget.item!.nameAr != ""
? widget.item!.nameAr!
: widget.item!.nameEn!
: widget.item!.nameEn!,
color: Color(0xFF575757), color: Color(0xFF575757),
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 3.8), fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 3.8),
letterSpacing: -0.56, letterSpacing: -0.56,
@ -93,226 +74,17 @@ class _AddExaminationVidaPlusWidgetState extends State<AddExaminationVidaPlusWid
), ),
], ],
); );
// return Container(
// child: HeaderBodyExpandableNotifier(
// headerWidget: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// InkWell(
// onTap: () {
// onExamTap();
// },
// child: Row(
// children: [
// Checkbox(
// value: widget.isServiceSelected(widget.item!),
// activeColor: Colors.red[800],
// onChanged: (bool? newValue) {
// onExamTap();
// }),
// Container(
// child: AppText(
// projectViewModel.isArabic
// ? widget.item!.nameAr != null && widget.item!.nameAr != ""
// ? widget.item!.nameAr!
// : widget.item!.nameEn!
// : widget.item!.nameEn!,
// color: Color(0xFF575757),
// fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 3.8),
// letterSpacing: -0.56,
// ),
// ),
// ],
// ),
// ),
// Container(
// margin: EdgeInsets.symmetric(horizontal: 8),
// child: InkWell(
// onTap: widget.expandClick,
// child: Icon(widget.isExpand ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down),
// ),
// ),
// ],
// ),
// bodyWidget: Container(
// padding: EdgeInsets.symmetric(horizontal: 12),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Container(
// margin: EdgeInsets.only(bottom: 8),
// child: AppText(
// TranslationBase.of(context).status,
// fontWeight: FontWeight.bold,
// fontFamily: 'Poppins',
// fontSize: SizeConfig.textMultiplier! * 1.6,
// ),
// ),
// Row(
// children: [
// Expanded(
// child: InkWell(
// onTap: () {
// setState(() {
// status = 1;
// });
// examination.isNormal = true;
// examination.isAbnormal = false;
// examination.notExamined = false;
// },
// child: Row(
// children: [
// Container(
// padding: EdgeInsets.all(2.0),
// margin: EdgeInsets.symmetric(horizontal: 6),
// width: 20,
// height: 20,
// decoration: BoxDecoration(
// color: Colors.white,
// shape: BoxShape.circle,
// border: Border.all(color: Colors.grey, width: 1),
// ),
// child: Container(
// decoration: BoxDecoration(
// color: status == 1 ? HexColor("#D02127") : Colors.white,
// shape: BoxShape.circle,
// ),
// ),
// ),
// AppText(
// TranslationBase.of(context).normal,
// fontWeight: FontWeight.normal,
// fontFamily: 'Poppins',
// fontSize: SizeConfig.textMultiplier! * 1.6,
// ),
// ],
// ),
// )),
// Expanded(
// child: InkWell(
// onTap: () {
// setState(() {
// status = 2;
// });
// examination.isNormal = false;
// examination.isAbnormal = true;
// examination.notExamined = false;
// },
// child: Row(
// children: [
// Container(
// padding: EdgeInsets.all(2.0),
// margin: EdgeInsets.symmetric(horizontal: 6),
// width: 20,
// height: 20,
// decoration: BoxDecoration(
// color: Colors.white,
// shape: BoxShape.circle,
// border: Border.all(color: Colors.grey, width: 1),
// ),
// child: Container(
// decoration: BoxDecoration(
// color: status == 2 ? HexColor("#D02127") : Colors.white,
// shape: BoxShape.circle,
// ),
// ),
// ),
// AppText(
// TranslationBase.of(context).abnormal,
// fontWeight: FontWeight.normal,
// fontFamily: 'Poppins',
// fontSize: SizeConfig.textMultiplier! * 1.6,
// ),
// ],
// ),
// )),
// if (!examination.isLocal)
// Expanded(
// child: InkWell(
// onTap: () {
// setState(() {
// status = 3;
// });
// examination.isNormal = false;
// examination.isAbnormal = false;
// examination.notExamined = true;
// },
// child: Row(
// children: [
// Container(
// padding: EdgeInsets.all(2.0),
// margin: EdgeInsets.symmetric(horizontal: 6),
// width: 20,
// height: 20,
// decoration: BoxDecoration(
// color: Colors.white,
// shape: BoxShape.circle,
// border: Border.all(color: Colors.grey, width: 1),
// ),
// child: Container(
// decoration: BoxDecoration(
// color: status == 3 ? HexColor("#D02127") : Colors.white,
// shape: BoxShape.circle,
// ),
// ),
// ),
// Expanded(
// child: AppText(
// TranslationBase.of(context).notExamined,
// fontWeight: FontWeight.normal,
// fontFamily: 'Poppins',
// fontSize: SizeConfig.textMultiplier! * 1.6,
// ),
// ),
// ],
// ),
// )),
// ],
// ),
// Container(
// margin: EdgeInsets.only(top: 8),
// child: AppTextFieldCustom(
// hintText: TranslationBase.of(context).remarks,
// controller: remarksController,
// minLines: 2,
// maxLines: 4,
// inputType: TextInputType.multiline,
// onChanged: (value) {
// examination.remark = value;
// },
// onClick: () {},
// onFieldSubmitted: () {},
// ),
// ),
// ],
// ),
// ),
// isExpand: widget.isExpand,
// ),
// );
} }
onExamTap() { onExamTap() {
setState(() { if(widget.item == null ){
if (widget.isServiceSelected(widget.item!)) { if(widget.item?.isSelected == true){
if (examination.isLocal) widget.removeExamination(examination); widget.removeExamination(widget.item);
widget.expandClick(); }else{
} else { widget.addExamination(widget.item);
examination.isNormal = status == 1;
examination.isAbnormal = status == 2;
examination.notExamined = status == 3;
examination.remark = remarksController.text;
widget.addExamination(examination);
widget.expandClick();
}
});
}
MySelectedExamination? getSelectedExam(MasterKeyModel masterKey) {
Iterable<MySelectedExamination> exam = widget.mySelectedExamination!.where((element) => masterKey.id == element.selectedExamination!.id && masterKey.typeId == element.selectedExamination!.typeId);
if (exam.length > 0) {
return exam.first;
} }
return null;
} }
}
} }

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/objective/add_examination_vida_plus_widget.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/objective/add_examination_vida_plus_widget.dart';
@ -8,23 +9,25 @@ import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dar
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ExaminationsListSearchVidaPlusWidget extends StatefulWidget { class ExaminationsListSearchVidaPlusWidget extends StatefulWidget {
final Function(MySelectedExamination) removeExamination; final Function(GeneralSpeciality?) removeExamination;
final Function(MySelectedExamination) addExamination; final Function(GeneralSpeciality?) addExamination;
final bool Function(MasterKeyModel) isServiceSelected; final List<GeneralSpeciality>? masterList;
final List<PatientPhysicalExamination>? masterList;
final List<MySelectedExamination>? mySelectedExamination;
ExaminationsListSearchVidaPlusWidget({required this.removeExamination, required this.addExamination, required this.isServiceSelected, this.masterList, this.mySelectedExamination}); ExaminationsListSearchVidaPlusWidget(
{required this.removeExamination,
required this.addExamination,
this.masterList});
@override @override
_ExaminationsListSearchVidaPlusWidgetState createState() => _ExaminationsListSearchVidaPlusWidgetState(); _ExaminationsListSearchVidaPlusWidgetState createState() =>
_ExaminationsListSearchVidaPlusWidgetState();
} }
class _ExaminationsListSearchVidaPlusWidgetState extends State<ExaminationsListSearchVidaPlusWidget> { class _ExaminationsListSearchVidaPlusWidgetState
extends State<ExaminationsListSearchVidaPlusWidget> {
int expandedIndex = -1; int expandedIndex = -1;
List<PatientPhysicalExamination>? items = []; List<GeneralSpeciality>? items = [];
TextEditingController filteredSearchController = TextEditingController(); TextEditingController filteredSearchController = TextEditingController();
@override @override
@ -44,7 +47,8 @@ class _ExaminationsListSearchVidaPlusWidgetState extends State<ExaminationsListS
width: 1, width: 1,
color: Color(0xFFEFEFEF), color: Color(0xFFEFEFEF),
)), )),
color: Colors.white,child: Padding( color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: AppTextFieldCustom( child: AppTextFieldCustom(
height: Utils.getTextFieldHeight(), height: Utils.getTextFieldHeight(),
@ -67,6 +71,16 @@ class _ExaminationsListSearchVidaPlusWidgetState extends State<ExaminationsListS
), ),
), ),
), ),
ListView.separated(
itemCount: items?.length ?? 0,
itemBuilder: (_, index) => AddExaminationVidaPlusWidget(
item: items![index],
addExamination: widget.addExamination,
removeExamination: widget.removeExamination,
),
separatorBuilder: (_, __) => Divider(),
)
// ...items!.mapIndexed((index, item) { // ...items!.mapIndexed((index, item) {
// return Column( // return Column(
// children: [ // children: [

@ -1,3 +1,4 @@
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/widgets/SoapDetailItem.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/widgets/SoapDetailItem.dart';
@ -8,7 +9,7 @@ import 'package:provider/provider.dart';
import '../../../../../utils/translations_delegate_base_utils.dart'; import '../../../../../utils/translations_delegate_base_utils.dart';
class ListOfExamination extends StatelessWidget { class ListOfExamination extends StatelessWidget {
final List<MySelectedExamination> listOfSelection; final List<PatientPhysicalExamination> listOfSelection;
const ListOfExamination({super.key, required this.listOfSelection}); const ListOfExamination({super.key, required this.listOfSelection});
@ -20,25 +21,8 @@ class ListOfExamination extends StatelessWidget {
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (_, index) => SoapDetailItem( itemBuilder: (_, index) => SoapDetailItem(
title: projectViewModel.isArabic title: "${listOfSelection[index].physicalExaminationDescription}",
? listOfSelection[index] condition: getCondition(listOfSelection[index].physicalExaminationCondition ?? 3, context)??TranslationBase.of(context).notExamined,
.selectedExamination!
.nameAr !=
null &&
listOfSelection[index]
.selectedExamination!
.nameAr !=
""
? listOfSelection[index]
.selectedExamination!
.nameAr!
: listOfSelection[index]
.selectedExamination!
.nameEn!
: listOfSelection[index]
.selectedExamination!
.nameEn!,
condition: getCondition(listOfSelection[index], context)??TranslationBase.of(context).notExamined,
remarks: listOfSelection[index].remark??'', remarks: listOfSelection[index].remark??'',
onSoapDetailActionClicked: (action) { onSoapDetailActionClicked: (action) {
///todo handle the event as per the actiion ///todo handle the event as per the actiion
@ -51,9 +35,9 @@ class ListOfExamination extends StatelessWidget {
); );
} }
String? getCondition(MySelectedExamination examination, BuildContext context) => examination.isNormal String? getCondition(int condition, BuildContext context) => condition ==0
? TranslationBase.of(context).normal ? TranslationBase.of(context).normal
: examination.isAbnormal : condition == 1
? TranslationBase.of(context).abnormal ? TranslationBase.of(context).abnormal
: TranslationBase.of(context).notExamined; : TranslationBase.of(context).notExamined;
} }

@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/patient_physical_examination.dart';
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_exam_request_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/post_physical_exam_request_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart'; import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/model/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/core/model/doctor/doctor_profile_model.dart';
@ -51,7 +52,7 @@ class UpdateObjectivePageVidaPlus extends StatefulWidget {
class _UpdateObjectivePageVidaPlusState class _UpdateObjectivePageVidaPlusState
extends State<UpdateObjectivePageVidaPlus> implements ObjectiveCallBack { extends State<UpdateObjectivePageVidaPlus> implements ObjectiveCallBack {
bool isSysExaminationExpand = false; bool isSysExaminationExpand = false;
List<MySelectedExamination> mySelectedExamination = []; List<PatientPhysicalExamination> mySelectedExamination = [];
BoxDecoration containerBorderDecoration( BoxDecoration containerBorderDecoration(
Color containerColor, Color borderColor) { Color containerColor, Color borderColor) {
@ -74,37 +75,6 @@ class _UpdateObjectivePageVidaPlusState
if (model.patientPhysicalExaminationList == 0) { if (model.patientPhysicalExaminationList == 0) {
model.getPhysicalExamination(widget.patientInfo); model.getPhysicalExamination(widget.patientInfo);
} }
// model.getPatientPhysicalExam(widget.patientInfo);
model.setObjectiveCallBack(this);
mySelectedExamination.clear();
model.isAddExamInProgress = true;
await model.getPatientPhysicalExam(widget.patientInfo);
if (model.patientPhysicalExamList.isNotEmpty) {
if (model.physicalExaminationList.length == 0) {
await model
.getMasterLookup(MasterKeysService.PostPhysicalExaminationModel);
}
model.patientPhysicalExamList.forEach((element) {
MasterKeyModel? examMaster = model.getOneMasterKey(
masterKeys: MasterKeysService.PostPhysicalExaminationModel,
id: element.examId,
);
MySelectedExamination tempEam =
SoapUtils.generateMySelectedExamination(
examination: examMaster,
remark: element.remarks,
isNormal: element.isNormal,
createdBy: element.createdBy,
createdOn: element.createdOn,
editedOn: element.editedOn,
notExamined: element.notExamined,
isNew: element.isNew,
isLocal: false,
isAbnormal: element.isAbnormal,
);
mySelectedExamination.add(tempEam);
});
}
widget.changeLoadingState(false); widget.changeLoadingState(false);
}); });
}, },
@ -220,177 +190,143 @@ class _UpdateObjectivePageVidaPlusState
); );
} }
submitUpdateObjectivePage(SOAPViewModel model) async { // submitUpdateObjectivePage(SOAPViewModel model) async {
if (mySelectedExamination.isNotEmpty) { // if (mySelectedExamination.isNotEmpty) {
if (!model.isAddExamInProgress && // if (!model.isAddExamInProgress &&
widget.patientInfo.admissionNo != null && // widget.patientInfo.admissionNo != null &&
widget.patientInfo.admissionNo!.isNotEmpty) { // widget.patientInfo.admissionNo!.isNotEmpty) {
Navigator.of(context).pop();
} else {
widget.changeLoadingState(true);
Map<String, dynamic> profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
PostPhysicalExamRequestModel postPhysicalExamRequestModel =
new PostPhysicalExamRequestModel();
mySelectedExamination.forEach((exam) {
if (postPhysicalExamRequestModel
.listHisProgNotePhysicalExaminationVM ==
null)
postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM =
[];
ListHisProgNotePhysicalExaminationVM
listHisProgNotePhysicalExaminationVM =
ListHisProgNotePhysicalExaminationVM(
patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo == null
? 0
: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo == null
? 0
: widget.patientInfo.appointmentNo,
remarks: exam.remark ?? '',
createdBy: exam.createdBy ?? doctorProfile.doctorID,
createdOn: exam.createdOn ?? DateTime.now().toIso8601String(),
editedBy: doctorProfile.doctorID,
editedOn: DateTime.now().toIso8601String(),
examId: exam.selectedExamination!.id,
examType: exam.selectedExamination!.typeId,
isAbnormal: exam.isAbnormal,
isNormal: exam.isNormal,
notExamined: exam.notExamined,
examinationType: exam.isNormal
? 1
: exam.isAbnormal
? 2
: 3,
examinationTypeName: exam.isNormal
? "Normal"
: exam.isAbnormal
? 'AbNormal'
: "Not Examined",
isNew: exam.isNew,
);
if (widget.patientInfo.admissionNo != null &&
widget.patientInfo.admissionNo!.isNotEmpty) {
listHisProgNotePhysicalExaminationVM.admissionNo =
int.parse(widget.patientInfo.admissionNo!);
} else {
listHisProgNotePhysicalExaminationVM.admissionNo = 0;
}
postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM!
.add(listHisProgNotePhysicalExaminationVM);
});
if (model.patientPhysicalExamList.isEmpty) {
await model.postPhysicalExam(postPhysicalExamRequestModel);
} else {
await model.patchPhysicalExam(postPhysicalExamRequestModel);
}
if (model.state == ViewState.ErrorLocal) {
widget.changeLoadingState(false);
Utils.showErrorToast(model.error);
if (widget.patientInfo.admissionNo != null &&
widget.patientInfo.admissionNo!.isNotEmpty) {
// Navigator.of(context).pop();
model.isAddExamInProgress = false;
}
} else {
if (widget.patientInfo.admissionNo != null &&
widget.patientInfo.admissionNo!.isNotEmpty) {
// Navigator.of(context).pop(); // Navigator.of(context).pop();
widget.changeLoadingState(false); // } else {
model.isAddExamInProgress = false; // widget.changeLoadingState(true);
} else { // Map<String, dynamic> profile = await sharedPref.getObj(DOCTOR_PROFILE);
widget.changeLoadingState(true); //
widget.changePageViewIndex(2); // DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
} // PostPhysicalExamRequestModel postPhysicalExamRequestModel =
} // new PostPhysicalExamRequestModel();
} // mySelectedExamination.forEach((exam) {
} else { // if (postPhysicalExamRequestModel
Utils.showErrorToast(TranslationBase.of(context).examinationErrorMsg); // .listHisProgNotePhysicalExaminationVM ==
} // null)
} // postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM =
// [];
removeExamination(MasterKeyModel masterKey) { // ListHisProgNotePhysicalExaminationVM
Iterable<MySelectedExamination> history = mySelectedExamination.where( // listHisProgNotePhysicalExaminationVM =
(element) => // ListHisProgNotePhysicalExaminationVM(
masterKey.id == element.selectedExamination!.id && // patientMRN: widget.patientInfo.patientMRN,
masterKey.typeId == element.selectedExamination!.typeId); // episodeId: widget.patientInfo.episodeNo == null
// ? 0
// : widget.patientInfo.episodeNo,
// appointmentNo: widget.patientInfo.appointmentNo == null
// ? 0
// : widget.patientInfo.appointmentNo,
// remarks: exam.remark ?? '',
// createdBy: exam.createdBy ?? doctorProfile.doctorID,
// createdOn: exam.createdOn ?? DateTime.now().toIso8601String(),
// editedBy: doctorProfile.doctorID,
// editedOn: DateTime.now().toIso8601String(),
// examId: exam.selectedExamination!.id,
// examType: exam.selectedExamination!.typeId,
// isAbnormal: exam.isAbnormal,
// isNormal: exam.isNormal,
// notExamined: exam.notExamined,
// examinationType: exam.isNormal
// ? 1
// : exam.isAbnormal
// ? 2
// : 3,
// examinationTypeName: exam.isNormal
// ? "Normal"
// : exam.isAbnormal
// ? 'AbNormal'
// : "Not Examined",
// isNew: exam.isNew,
// );
// if (widget.patientInfo.admissionNo != null &&
// widget.patientInfo.admissionNo!.isNotEmpty) {
// listHisProgNotePhysicalExaminationVM.admissionNo =
// int.parse(widget.patientInfo.admissionNo!);
// } else {
// listHisProgNotePhysicalExaminationVM.admissionNo = 0;
// }
// postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM!
// .add(listHisProgNotePhysicalExaminationVM);
// });
//
// if (model.patientPhysicalExamList.isEmpty) {
// await model.postPhysicalExam(postPhysicalExamRequestModel);
// } else {
// await model.patchPhysicalExam(postPhysicalExamRequestModel);
// }
//
// if (model.state == ViewState.ErrorLocal) {
// widget.changeLoadingState(false);
// Utils.showErrorToast(model.error);
// if (widget.patientInfo.admissionNo != null &&
// widget.patientInfo.admissionNo!.isNotEmpty) {
// // Navigator.of(context).pop();
// model.isAddExamInProgress = false;
// }
// } else {
// if (widget.patientInfo.admissionNo != null &&
// widget.patientInfo.admissionNo!.isNotEmpty) {
// // Navigator.of(context).pop();
// widget.changeLoadingState(false);
// model.isAddExamInProgress = false;
// } else {
// widget.changeLoadingState(true);
// widget.changePageViewIndex(2);
// }
// }
// }
// } else {
// Utils.showErrorToast(TranslationBase.of(context).examinationErrorMsg);
// }
// }
if (history.length > 0) { // removeExamination(MasterKeyModel masterKey) {
setState(() { // Iterable<MySelectedExamination> history = mySelectedExamination.where(
if (history.first.isLocal) { // (element) =>
mySelectedExamination.remove(history.first); // masterKey.id == element.selectedExamination!.id &&
} else { // masterKey.typeId == element.selectedExamination!.typeId);
history.first.notExamined = true; //
history.first.isNormal = false; // if (history.length > 0) {
history.first.isAbnormal = false; // setState(() {
} // if (history.first.isLocal) {
}); // mySelectedExamination.remove(history.first);
} // } else {
} // history.first.notExamined = true;
// history.first.isNormal = false;
// history.first.isAbnormal = false;
// }
// });
// }
// }
openExaminationList(BuildContext context) { openExaminationList(BuildContext context) {
Navigator.push( Navigator.push(
context, context,
FadePage( FadePage(
page: AddExaminationPageVidaPlus( page: AddExaminationPageVidaPlus(
mySelectedExamination: mySelectedExamination, patientInfo: widget.patientInfo,
addSelectedExamination: ),
(List<MySelectedExamination> mySelectedExaminationLocal) {
pushAddExamination(mySelectedExaminationLocal);
// mySelectedExaminationLocal.forEach((element) {
// if (mySelectedExamination.singleWhere(
// (it) =>
// it.selectedExamination!.id ==
// element.selectedExamination!.id,
// orElse: () => MySelectedExamination()) ==
// MySelectedExamination()) {
// mySelectedExamination.insert(0, element);
// }
// });
/// remove items.
// List<MySelectedExamination> removedList = [];
// mySelectedExamination.forEach((element) {
// if (mySelectedExaminationLocal.singleWhere(
// (it) =>
// it.selectedExamination!.id ==
// element.selectedExamination!.id,
// orElse: () => MySelectedExamination()) ==
// MySelectedExamination()) {
// removedList.add(element);
// }
// });
// removedList.forEach((element) {
// removeExamination(element.selectedExamination!);
// });
// Navigator.of(context).pop();
// setState(() {});
},
removeExamination: (masterKey) => removeExamination(masterKey)),
), ),
); );
} }
@override @override
nextFunction(model) async { nextFunction(model) async {
await submitUpdateObjectivePage(model); // await submitUpdateObjectivePage(model);
} }
void pushAddExamination( // void pushAddExamination(
List<MySelectedExamination> mySelectedExaminationLocal) { // List<MySelectedExamination> mySelectedExaminationLocal) {
Navigator.push( // Navigator.push(
context, // context,
FadePage( // FadePage(
page: AddDetailsToExaminationVidaPlus( // page: AddDetailsToExaminationVidaPlus(
mySelectedExamination: mySelectedExamination, // mySelectedExamination: mySelectedExamination,
), // ),
), // ),
); // );
} // }
} }

Loading…
Cancel
Save