diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index f2880c93..adc3c25e 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -375,4 +375,7 @@ const Map> localizedValues = { 'fio2': {'en': "FIO2(%)", 'ar': 'FIO2(%)'}, 'sao2': {'en': "SAO2(%)", 'ar': 'SAO2(%)'}, 'painManagement': {'en': "Pain Management", 'ar': 'إدارة الألم'}, + 'admission': {'en': "Admission", 'ar': 'قبول'}, + 'request': {'en': "Request", 'ar': 'طلب'}, + 'admissionRequest': {'en': "Admission Request", 'ar': 'طلب قبول'}, }; diff --git a/lib/core/service/admission-request-service.dart b/lib/core/service/admission-request-service.dart index e69de29b..e98ac048 100644 --- a/lib/core/service/admission-request-service.dart +++ b/lib/core/service/admission-request-service.dart @@ -0,0 +1,5 @@ +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; + +class AdmissionRequestService extends BaseService { + +} \ No newline at end of file diff --git a/lib/core/viewModel/patient-admission-request-viewmodel.dart b/lib/core/viewModel/patient-admission-request-viewmodel.dart index e69de29b..28aaae8a 100644 --- a/lib/core/viewModel/patient-admission-request-viewmodel.dart +++ b/lib/core/viewModel/patient-admission-request-viewmodel.dart @@ -0,0 +1,9 @@ +import 'package:doctor_app_flutter/core/service/admission-request-service.dart'; +import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; + +import '../../locator.dart'; + +class AdmissionRequestViewModel extends BaseViewModel{ + + AdmissionRequestService _admissionRequestService = locator(); +} \ No newline at end of file diff --git a/lib/core/viewModel/patient-vital-sign-viewmodel.dart b/lib/core/viewModel/patient-vital-sign-viewmodel.dart index 05c98f0e..e58ad089 100644 --- a/lib/core/viewModel/patient-vital-sign-viewmodel.dart +++ b/lib/core/viewModel/patient-vital-sign-viewmodel.dart @@ -18,14 +18,16 @@ class VitalSignsViewModel extends BaseViewModel { Future getPatientArrivalList(String date, PatiantInformtion patient, {String fromDate}) async { - setState(ViewState.Busy); + // TODO when arrival list work un comment below lines + /* setState(ViewState.Busy); await _vitalSignService.getPatientArrivalList(date, fromDate: fromDate); if (_vitalSignService.hasError) { error = _vitalSignService.error; setState(ViewState.Error); } else { await getPatientVitalSign(patient); - } + }*/ + makeVitalSignDemoData(); } PatientArrivalEntity getPatientAppointmentEntity(PatiantInformtion patient) { @@ -60,41 +62,73 @@ class VitalSignsViewModel extends BaseViewModel { setState(ViewState.Error); } else { if (patientVitalSigns == null) { - _vitalSignService.patientVitalSigns = VitalSignData( - appointmentNo: 2016053265, - bloodPressureCuffLocation: 0, - bloodPressureCuffSize: 0, - bloodPressureHigher: 38, - bloodPressureLower: 32, - bloodPressurePatientPosition: 1, - bodyMassIndex: 31.11, - fio2: 0, - headCircumCm: 0, - heightCm: 150, - idealBodyWeightLbs: -2, - isPainManagementDone: false, - isVitalsRequired: true, - leanBodyWeightLbs: 0, - painCharacter: null, - painDuration: null, - painFrequency: null, - painLocation: null, - painScore: 0, - patientMRN: 3333274, - patientType: 1, - pulseBeatPerMinute: 0, - pulseRhythm: 0, - respirationBeatPerMinute: 0, - respirationPattern: 0, - sao2: 0, - status: 47, - temperatureCelcius: 40, - temperatureCelciusMethod: 1, - waistSizeInch: 39, - weightKg: 70, - ); + makeVitalSignDemoData(); } setState(ViewState.Idle); } } + + makeVitalSignDemoData(){ + _vitalSignService.patientVitalSigns = VitalSignData( + appointmentNo: 2016053265, + bloodPressureCuffLocation: 0, + bloodPressureCuffSize: 0, + bloodPressureHigher: 38, + bloodPressureLower: 32, + bloodPressurePatientPosition: 1, + bodyMassIndex: 31.11, + fio2: 0, + headCircumCm: 0, + heightCm: 150, + idealBodyWeightLbs: -2, + isPainManagementDone: false, + isVitalsRequired: true, + leanBodyWeightLbs: 0, + painCharacter: null, + painDuration: null, + painFrequency: null, + painLocation: null, + painScore: 0, + patientMRN: 3333274, + patientType: 1, + pulseBeatPerMinute: 0, + pulseRhythm: 0, + respirationBeatPerMinute: 0, + respirationPattern: 0, + sao2: 0, + status: 47, + temperatureCelcius: 40, + temperatureCelciusMethod: 1, + waistSizeInch: 39, + weightKg: 70, + ); + } + + String getBMI(double bodyMassIndex) { + if (bodyMassIndex <= 18.5) { + return "Underweight"; + } else if (bodyMassIndex <= 25.0) { + return "Normal"; + } else if (bodyMassIndex <= 30) { + return "Overweight"; + } else { // > 30.0 + return "Obese"; + } + } + + String getTempratureMethod(int temperatureCelciusMethod){ + // temperatureCelciusMethod ( vital sign response field )- master 2005 + if(temperatureCelciusMethod == 1){ + return "Oral"; + } else if(temperatureCelciusMethod == 2){ + return "Axilla"; + } else if(temperatureCelciusMethod == 3){ + return "Rectal"; + } else if(temperatureCelciusMethod == 4){ + return "Tympanic"; + } else if(temperatureCelciusMethod == 5){ + return "Temporal"; + } + } + } diff --git a/lib/locator.dart b/lib/locator.dart index 8bbf00b0..8c67b703 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -11,6 +11,7 @@ import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart'; import 'package:get_it/get_it.dart'; import 'core/service/SOAP_service.dart'; +import 'core/service/admission-request-service.dart'; import 'core/service/doctor_reply_service.dart'; import 'core/service/medicine_service.dart'; import 'core/service/patient-vital-signs-service.dart'; @@ -21,6 +22,7 @@ import 'core/service/schedule_service.dart'; import 'core/viewModel/SOAP_view_model.dart'; import 'core/viewModel/doctor_replay_view_model.dart'; import 'core/viewModel/medicine_view_model.dart'; +import 'core/viewModel/patient-admission-request-viewmodel.dart'; import 'core/viewModel/patient-vital-sign-viewmodel.dart'; import 'core/viewModel/patient-referral-viewmodel.dart'; import 'core/viewModel/referral_view_model.dart'; @@ -45,6 +47,7 @@ void setupLocator() { locator.registerLazySingleton(() => PrescriptionService()); locator.registerLazySingleton(() => ProcedureService()); locator.registerLazySingleton(() => VitalSignsService()); + locator.registerLazySingleton(() => AdmissionRequestService()); /// View Model locator.registerFactory(() => DoctorReplayViewModel()); @@ -60,4 +63,5 @@ void setupLocator() { locator.registerFactory(() => PrescriptionViewModel()); locator.registerFactory(() => ProcedureViewModel()); locator.registerFactory(() => VitalSignsViewModel()); + locator.registerFactory(() => AdmissionRequestViewModel()); } diff --git a/lib/routes.dart b/lib/routes.dart index ff0a60e9..8792e206 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -41,6 +41,7 @@ import './screens/settings/settings_screen.dart'; import 'landing_page.dart'; import 'screens/doctor/doctor_reply_screen.dart'; import 'screens/live_care/panding_list.dart'; +import 'screens/patients/profile/admission-request/admission-request-detail-screen.dart'; import 'screens/patients/profile/referral/my-referral-detail-screen.dart'; import 'screens/patients/profile/referral/refer-patient-screen.dart'; import 'screens/prescription/prescription_screen.dart'; @@ -81,6 +82,7 @@ const String PATIENT_INSURANCE_APPROVALS = const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details'; const String CREATE_EPISODE = 'patients/create-episode'; const String PATIENT_VITAL_SIGN = 'patients/vital-sign-data'; +const String PATIENT_ADMISSION_REQUEST = 'patients/admission-request'; const String BODY_MEASUREMENTS = 'patients/body-measurements'; const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details'; @@ -124,6 +126,7 @@ var routes = { PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(), VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), PATIENT_VITAL_SIGN: (_) => PatientVitalSignScreen(), + PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(), CREATE_EPISODE: (_) => AddSOAPIndex(), BODY_MEASUREMENTS: (_) => VitalSignItemDetailsScreen(), IN_PATIENT_PRESCRIPTIONS_DETAILS: (_) => InpatientPrescriptionDetailsScreen(), diff --git a/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart b/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart index e69de29b..dd628abf 100644 --- a/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart @@ -0,0 +1,49 @@ +import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart'; +import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class AdmissionRequestDetailScreen extends StatefulWidget { + @override + _AdmissionRequestDetailScreenState createState() => _AdmissionRequestDetailScreenState(); +} + +class _AdmissionRequestDetailScreenState extends State { + @override + Widget build(BuildContext context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + + return BaseView( + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + appBarTitle: TranslationBase.of(context).admissionRequest, + body: Column( + children: [ + SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + PatientPageHeaderWidget(patient), + ], + ), + ), + Container( + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: AppButton( + title: TranslationBase.of(context).refer, + color: HexColor("#B8382B"), + onPressed: null, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/screens/patients/profile/vital_sign/vital-signs-screen.dart b/lib/screens/patients/profile/vital_sign/vital-signs-screen.dart index c6b183b7..107e2e6b 100644 --- a/lib/screens/patients/profile/vital_sign/vital-signs-screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital-signs-screen.dart @@ -207,6 +207,21 @@ class PatientVitalSignScreen extends StatelessWidget { color: Colors.grey.shade800, fontWeight: FontWeight.normal, ), + SizedBox( + width: 8, + ), + Container( + color: Colors.green, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 2, horizontal: 8), + child: AppText( + "${model.getBMI(model.patientVitalSigns.bodyMassIndex)}", + fontSize: SizeConfig.textMultiplier * 2, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ) ], ), ], @@ -251,7 +266,7 @@ class PatientVitalSignScreen extends StatelessWidget { SizedBox( height: 16, ), - TemperatureWidget(model.patientVitalSigns), + TemperatureWidget(model, model.patientVitalSigns), SizedBox( height: 16, ), @@ -349,9 +364,10 @@ class PatientVitalSignScreen extends StatelessWidget { } class TemperatureWidget extends StatefulWidget { + final VitalSignsViewModel model; final VitalSignData vitalSign; - TemperatureWidget(this.vitalSign); + TemperatureWidget(this.model, this.vitalSign); @override _TemperatureWidgetState createState() => _TemperatureWidgetState(); @@ -450,7 +466,7 @@ class _TemperatureWidgetState extends State { width: 8, ), AppText( - "${widget.vitalSign.temperatureCelciusMethod}", + "${widget.model.getTempratureMethod(widget.vitalSign.temperatureCelciusMethod)}", fontSize: SizeConfig.textMultiplier * 2, color: Colors.grey.shade800, fontWeight: FontWeight.normal, diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 19818a0c..46f8a249 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -412,6 +412,9 @@ class TranslationBase { String get fio2 => localizedValues['fio2'][locale.languageCode]; String get sao2 => localizedValues['sao2'][locale.languageCode]; String get painManagement => localizedValues['painManagement'][locale.languageCode]; + String get admission => localizedValues['admission'][locale.languageCode]; + String get request => localizedValues['request'][locale.languageCode]; + String get admissionRequest => localizedValues['admissionRequest'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 5833f0d2..e76fe406 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -75,10 +75,17 @@ class ProfileMedicalInfoWidget extends StatelessWidget { PatientProfileButton( key: key, patient: patient, - route: PATIENT_INSURANCE_APPROVALS, - nameLine1: TranslationBase.of(context).insurance, - nameLine2: TranslationBase.of(context).approvals, - icon: 'lab.png'), + route: PATIENT_ADMISSION_REQUEST, + nameLine1: TranslationBase.of(context).admission, + nameLine2: TranslationBase.of(context).request, + icon: 'heartbeat.png'), + // PatientProfileButton( + // key: key, + // patient: patient, + // route: PATIENT_INSURANCE_APPROVALS, + // nameLine1: TranslationBase.of(context).insurance, + // nameLine2: TranslationBase.of(context).approvals, + // icon: 'lab.png'), PatientProfileButton( key: key, patient: patient,