WD: general speciality

update_flutter_3.24_vida_plus_episode_v2
taha.alam 11 months 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 SEARCH_PHYSICAL_EXAMINATION = 'Services/DoctorApplication.svc/REST/SearchPhysicalExam';
const GET_GENERAL_SPECIALITY = 'Services/DoctorApplication.svc/REST/GetGeneralSpeciality';
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,
};
}
}

@ -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/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_examination_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/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 '../model/SOAP/allergy/get_patient_allergies_list_vida_plus.dart';
import '../model/SOAP/assessment/patch_assessment_req_model.dart';
import '../model/SOAP/physical_exam/GeneralSpeciality.dart';
import 'base_view_model.dart';
class SOAPViewModel extends BaseViewModel {
@ -142,8 +144,13 @@ class SOAPViewModel extends BaseViewModel {
List<AuditDiagnosis> get auditDiagnosislist =>
_SOAPService.auditDiagnosislist;
List<GeneralSpeciality> get speciality =>
_SOAPService.generalSpeciality;
int? get episodeID => _SOAPService.episodeID;
bool get isFavorite => _SOAPService.addedToFavorite;
bool get showAudit => _SOAPService.showAuditBottomSheet;
bool get isPrescriptionOrder => _SOAPService.isPrescriptionOrder;
@ -1128,24 +1135,27 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
void addToFavoriteDiagnosis(
PatiantInformtion patientInfo, {
SearchDiagnosis? diagnosis
}) async {
void addToFavoriteDiagnosis(PatiantInformtion patientInfo,
{SearchDiagnosis? diagnosis}) async {
setState(ViewState.BusyLocal);
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
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) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
void convertPreviousDiagnosisCurrent(
PatiantInformtion paitientInfo, PatientPreviousDiagnosis diagnosis) async {
void convertPreviousDiagnosisCurrent(PatiantInformtion paitientInfo,
PatientPreviousDiagnosis diagnosis) async {
setState(ViewState.BusyLocal);
await _SOAPService.convertPreviousDiagnosisCurrent(paitientInfo,diagnosis);
await _SOAPService.convertPreviousDiagnosisCurrent(paitientInfo, diagnosis);
if (_SOAPService.hasError) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
@ -1153,8 +1163,7 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
void getPhysicalExamination(
PatiantInformtion paitientInfo) async {
void getPhysicalExamination(PatiantInformtion paitientInfo) async {
setState(ViewState.BusyLocal);
await _SOAPService.getPhysicalExamination(paitientInfo);
if (_SOAPService.hasError) {
@ -1164,14 +1173,33 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
void toggleFavorite(bool status ){
_SOAPService.addedToFavorite
= status;
void postPhysicalExamination(PatiantInformtion patientInfo,
List<PostPhysicalExaminationModel> physicalExamination) async {
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){
_SOAPService.showAuditBottomSheet
= status;
void toggleFavorite(bool status) {
_SOAPService.addedToFavorite = 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/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/viewModel/SOAP_view_model.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';
class AddDetailsToExaminationVidaPlus extends StatefulWidget {
final List<MySelectedExamination>? mySelectedExamination;
final List<GeneralSpeciality>? mySelectedExamination;
const AddDetailsToExaminationVidaPlus({super.key, this.mySelectedExamination});
@ -43,31 +44,26 @@ class _AddDetailsToExaminationVidaPlusState extends State<AddDetailsToExaminatio
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
Expanded(
child: ListView.separated(
itemBuilder: (context, index) {
return ExpandableSOAPWidget(
headerTitle:
projectViewModel.isArabic
? widget.mySelectedExamination![index].selectedExamination!.nameAr != null && widget.mySelectedExamination![index].selectedExamination!.nameAr != ""
? widget.mySelectedExamination![index].selectedExamination!.nameAr!
: widget.mySelectedExamination![index].selectedExamination!.nameEn!
: widget.mySelectedExamination![index].selectedExamination!.nameEn!,
onTap: () {
setState(() {
isSysExaminationExpand = !isSysExaminationExpand;
});
},
child: ExaminationItems(examination:widget.mySelectedExamination![index]),
isExpanded: isSysExaminationExpand,
);
},
separatorBuilder: (context, index) {
return SizedBox(height: 8,);
},
itemCount: widget?.mySelectedExamination?.length ?? 0),
),
// Expanded(
// child: ListView.separated(
// itemBuilder: (context, index) {
// return ExpandableSOAPWidget(
// headerTitle:,
// onTap: () {
// setState(() {
// isSysExaminationExpand = !isSysExaminationExpand;
// });
// },
// child: ExaminationItems(examination:widget.mySelectedExamination![index]),
// isExpanded: isSysExaminationExpand,
// );
//
// },
// 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/view_state.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/patient/patiant_info_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/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/widgets/shared/app_scaffold_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:get_it/get_it.dart';
import 'examinations_list_search_vida_plus_widget.dart';
class AddExaminationPageVidaPlus extends StatefulWidget {
final List<MySelectedExamination>? mySelectedExamination;
final Function(List<MySelectedExamination>) addSelectedExamination;
final Function(MasterKeyModel) removeExamination;
final PatiantInformtion patientInfo;
final List<PatientPhysicalExamination>? examination;
AddExaminationPageVidaPlus(
{this.mySelectedExamination,
required this.addSelectedExamination,
required this.removeExamination});
///todo handle the data if edit is added
AddExaminationPageVidaPlus({required this.patientInfo, this.examination});
@override
_AddExaminationPageVidaPlusState createState() =>
@ -28,12 +34,11 @@ class AddExaminationPageVidaPlus extends StatefulWidget {
class _AddExaminationPageVidaPlusState
extends State<AddExaminationPageVidaPlus> {
List<MySelectedExamination> mySelectedExaminationLocal = [];
List<GeneralSpeciality> mySelectedExaminationLocal = [];
@override
initState() {
super.initState();
mySelectedExaminationLocal = widget.mySelectedExamination!;
}
@override
@ -42,15 +47,16 @@ class _AddExaminationPageVidaPlusState
onModelReady: (model) async {
if (model.physicalExaminationList.length == 0) {
WidgetsBinding.instance.addPostFrameCallback((_) async {
await model.getMasterLookup(
MasterKeysService.PostPhysicalExaminationModel,
);
if (model.speciality.isEmpty) {
await model.getGeneralSpeciality(widget.patientInfo);
}
});
}
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: true,
isLoading: model.state == ViewState.Busy,
appBar: PatientSearchHeader(
title: TranslationBase.of(context).examinationPart),
backgroundColor: Colors.white,
@ -76,19 +82,42 @@ class _AddExaminationPageVidaPlusState
mainAxisSize: MainAxisSize.max,
children: [
ExaminationsListSearchVidaPlusWidget(
mySelectedExamination: widget.mySelectedExamination,
masterList: model.patientPhysicalExaminationList,
isServiceSelected: (master) =>
isServiceSelected(master),
masterList: model.speciality,
removeExamination: (selectedExamination) {
if(selectedExamination == null ) return;
setState(() {
mySelectedExaminationLocal
.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) {
if(selectedExamination == null ) return;
mySelectedExaminationLocal.insert(
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(() {});
},
),
@ -128,10 +157,7 @@ class _AddExaminationPageVidaPlusState
fontColor: Colors.white,
fontWeight: FontWeight.w600,
onPressed: () async {
Navigator.pop(context);
widget.addSelectedExamination(mySelectedExaminationLocal);
pushAddExamination(mySelectedExaminationLocal);
},
),
),
@ -141,14 +167,15 @@ class _AddExaminationPageVidaPlusState
);
}
isServiceSelected(MasterKeyModel masterKey) {
Iterable<MySelectedExamination> exam = mySelectedExaminationLocal.where(
(element) =>
masterKey.id == element.selectedExamination!.id &&
masterKey.typeId == element.selectedExamination!.typeId);
if (exam.length > 0) {
return true;
}
return false;
void pushAddExamination(
List<GeneralSpeciality> mySelectedExaminationLocal) {
Navigator.push(
context,
FadePage(
page: AddDetailsToExaminationVidaPlus(
mySelectedExamination: mySelectedExaminationLocal,
),
),
);
}
}

@ -1,6 +1,7 @@
// ignore: must_be_immutable
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/physical_exam/GeneralSpeciality.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/utils/translations_delegate_base_utils.dart';
@ -13,22 +14,16 @@ import 'package:provider/provider.dart';
// ignore: must_be_immutable
class AddExaminationVidaPlusWidget extends StatefulWidget {
MasterKeyModel? item;
final Function(MySelectedExamination) removeExamination;
final Function(MySelectedExamination) addExamination;
final bool Function(MasterKeyModel) isServiceSelected;
bool isExpand;
GeneralSpeciality? item;
final Function(GeneralSpeciality?) removeExamination;
final Function(GeneralSpeciality?) addExamination;
final Function() expandClick;
final List<MySelectedExamination>? mySelectedExamination;
final List<GeneralSpeciality>? mySelectedExamination;
AddExaminationVidaPlusWidget({
this.item,
required this.removeExamination,
required this.addExamination,
required this.isServiceSelected,
this.isExpand = false,
required this.expandClick,
this.mySelectedExamination,
});
@ -43,17 +38,7 @@ class _AddExaminationVidaPlusWidgetState extends State<AddExaminationVidaPlusWid
@override
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();
}
@ -71,18 +56,14 @@ class _AddExaminationVidaPlusWidgetState extends State<AddExaminationVidaPlusWid
child: Row(
children: [
Checkbox(
value: widget.isServiceSelected(widget.item!),
value:widget.item?.isSelected ?? false,
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!,
widget.item?.name ?? '',
color: Color(0xFF575757),
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 3.8),
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() {
setState(() {
if (widget.isServiceSelected(widget.item!)) {
if (examination.isLocal) widget.removeExamination(examination);
widget.expandClick();
} else {
examination.isNormal = status == 1;
examination.isAbnormal = status == 2;
examination.notExamined = status == 3;
examination.remark = remarksController.text;
widget.addExamination(examination);
widget.expandClick();
}
});
}
if(widget.item == null ){
if(widget.item?.isSelected == true){
widget.removeExamination(widget.item);
}else{
widget.addExamination(widget.item);
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/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/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:flutter/material.dart';
class ExaminationsListSearchVidaPlusWidget extends StatefulWidget {
final Function(MySelectedExamination) removeExamination;
final Function(MySelectedExamination) addExamination;
final bool Function(MasterKeyModel) isServiceSelected;
final List<PatientPhysicalExamination>? masterList;
final List<MySelectedExamination>? mySelectedExamination;
final Function(GeneralSpeciality?) removeExamination;
final Function(GeneralSpeciality?) addExamination;
final List<GeneralSpeciality>? masterList;
ExaminationsListSearchVidaPlusWidget({required this.removeExamination, required this.addExamination, required this.isServiceSelected, this.masterList, this.mySelectedExamination});
ExaminationsListSearchVidaPlusWidget(
{required this.removeExamination,
required this.addExamination,
this.masterList});
@override
_ExaminationsListSearchVidaPlusWidgetState createState() => _ExaminationsListSearchVidaPlusWidgetState();
_ExaminationsListSearchVidaPlusWidgetState createState() =>
_ExaminationsListSearchVidaPlusWidgetState();
}
class _ExaminationsListSearchVidaPlusWidgetState extends State<ExaminationsListSearchVidaPlusWidget> {
class _ExaminationsListSearchVidaPlusWidgetState
extends State<ExaminationsListSearchVidaPlusWidget> {
int expandedIndex = -1;
List<PatientPhysicalExamination>? items = [];
List<GeneralSpeciality>? items = [];
TextEditingController filteredSearchController = TextEditingController();
@override
@ -44,7 +47,8 @@ class _ExaminationsListSearchVidaPlusWidgetState extends State<ExaminationsListS
width: 1,
color: Color(0xFFEFEFEF),
)),
color: Colors.white,child: Padding(
color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: AppTextFieldCustom(
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) {
// return Column(
// 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/viewModel/project_view_model.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';
class ListOfExamination extends StatelessWidget {
final List<MySelectedExamination> listOfSelection;
final List<PatientPhysicalExamination> listOfSelection;
const ListOfExamination({super.key, required this.listOfSelection});
@ -20,25 +21,8 @@ class ListOfExamination extends StatelessWidget {
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (_, index) => SoapDetailItem(
title: projectViewModel.isArabic
? listOfSelection[index]
.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,
title: "${listOfSelection[index].physicalExaminationDescription}",
condition: getCondition(listOfSelection[index].physicalExaminationCondition ?? 3, context)??TranslationBase.of(context).notExamined,
remarks: listOfSelection[index].remark??'',
onSoapDetailActionClicked: (action) {
///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
: examination.isAbnormal
: condition == 1
? TranslationBase.of(context).abnormal
: 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/view_state.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/selected_items/my_selected_examination.dart';
import 'package:doctor_app_flutter/core/model/doctor/doctor_profile_model.dart';
@ -51,7 +52,7 @@ class UpdateObjectivePageVidaPlus extends StatefulWidget {
class _UpdateObjectivePageVidaPlusState
extends State<UpdateObjectivePageVidaPlus> implements ObjectiveCallBack {
bool isSysExaminationExpand = false;
List<MySelectedExamination> mySelectedExamination = [];
List<PatientPhysicalExamination> mySelectedExamination = [];
BoxDecoration containerBorderDecoration(
Color containerColor, Color borderColor) {
@ -74,37 +75,6 @@ class _UpdateObjectivePageVidaPlusState
if (model.patientPhysicalExaminationList == 0) {
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);
});
},
@ -220,177 +190,143 @@ class _UpdateObjectivePageVidaPlusState
);
}
submitUpdateObjectivePage(SOAPViewModel model) async {
if (mySelectedExamination.isNotEmpty) {
if (!model.isAddExamInProgress &&
widget.patientInfo.admissionNo != null &&
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();
widget.changeLoadingState(false);
model.isAddExamInProgress = false;
} else {
widget.changeLoadingState(true);
widget.changePageViewIndex(2);
}
}
}
} else {
Utils.showErrorToast(TranslationBase.of(context).examinationErrorMsg);
}
}
removeExamination(MasterKeyModel masterKey) {
Iterable<MySelectedExamination> history = mySelectedExamination.where(
(element) =>
masterKey.id == element.selectedExamination!.id &&
masterKey.typeId == element.selectedExamination!.typeId);
// submitUpdateObjectivePage(SOAPViewModel model) async {
// if (mySelectedExamination.isNotEmpty) {
// if (!model.isAddExamInProgress &&
// widget.patientInfo.admissionNo != null &&
// 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();
// widget.changeLoadingState(false);
// model.isAddExamInProgress = false;
// } else {
// widget.changeLoadingState(true);
// widget.changePageViewIndex(2);
// }
// }
// }
// } else {
// Utils.showErrorToast(TranslationBase.of(context).examinationErrorMsg);
// }
// }
if (history.length > 0) {
setState(() {
if (history.first.isLocal) {
mySelectedExamination.remove(history.first);
} else {
history.first.notExamined = true;
history.first.isNormal = false;
history.first.isAbnormal = false;
}
});
}
}
// removeExamination(MasterKeyModel masterKey) {
// Iterable<MySelectedExamination> history = mySelectedExamination.where(
// (element) =>
// masterKey.id == element.selectedExamination!.id &&
// masterKey.typeId == element.selectedExamination!.typeId);
//
// if (history.length > 0) {
// 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) {
Navigator.push(
context,
FadePage(
page: AddExaminationPageVidaPlus(
mySelectedExamination: mySelectedExamination,
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)),
patientInfo: widget.patientInfo,
),
),
);
}
@override
nextFunction(model) async {
await submitUpdateObjectivePage(model);
// await submitUpdateObjectivePage(model);
}
void pushAddExamination(
List<MySelectedExamination> mySelectedExaminationLocal) {
Navigator.push(
context,
FadePage(
page: AddDetailsToExaminationVidaPlus(
mySelectedExamination: mySelectedExamination,
),
),
);
}
// void pushAddExamination(
// List<MySelectedExamination> mySelectedExaminationLocal) {
// Navigator.push(
// context,
// FadePage(
// page: AddDetailsToExaminationVidaPlus(
// mySelectedExamination: mySelectedExamination,
// ),
// ),
// );
// }
}

Loading…
Cancel
Save