From 9ddfbd3e6692567f1f506f0c2ccacdabb5ae3886 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 25 Jan 2021 12:25:28 +0200 Subject: [PATCH 01/12] fix issue on app drawer --- lib/config/localized_values.dart | 2 +- lib/core/service/prescription_service.dart | 4 - lib/core/viewModel/patient_view_model.dart | 6 +- .../patients/patient_search_screen.dart | 15 +- lib/screens/patients/patients_screen.dart | 7 +- lib/widgets/patients/dynamic_elements.dart | 12 +- lib/widgets/shared/app_drawer_widget.dart | 225 +++++++++--------- lib/widgets/shared/drawer_item_widget.dart | 7 +- 8 files changed, 155 insertions(+), 123 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 077bd7f5..9fc39b5c 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -37,7 +37,7 @@ const Map> localizedValues = { 'lab': {'en': 'Lab', 'ar': 'المختبر'}, 'result': {'en': 'Result', 'ar': 'نتيجة'}, 'todayStatistics': {'en': 'Today Statistics', 'ar': 'إحصائيات اليوم'}, - 'arrived': {'en': 'Arrived', 'ar': 'وصل'}, + 'arrived': {'en': 'Arrival Patients', 'ar': ' المرضى الواصلين'}, 'er': {'en': 'ER', 'ar': 'حالة طوارئ'}, 'walkIn': {'en': 'Walk-in', 'ar': 'ادخل'}, 'notArrived': {'en': 'Not Arrived', 'ar': 'لم يصل'}, diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart index 0e52b16c..f09a8779 100644 --- a/lib/core/service/prescription_service.dart +++ b/lib/core/service/prescription_service.dart @@ -24,11 +24,7 @@ class PrescriptionService extends BaseService { PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel(); SearchDrugRequestModel _drugRequestModel = SearchDrugRequestModel( //search: ["Acetaminophen"], - // vidaAuthTokenID: - // "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiY2QwOWU3MTEtZDEwYy00NjZhLWEwNDctMjc4MDBmNmRkMTYxIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTYyMDMiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkhFQUQgTlVSU0VTIiwiRE9DVE9SUyIsIkhFQUQgRE9DVE9SUyIsIkFETUlOSVNUUkFUT1JTIiwiUkVDRVBUSU9OSVNUIiwiRVIgTlVSU0UiLCJJVkYgUkVDRVBUSU9OSVNUIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIklWRiBET0NUT1IiLCJJVkYgTlVSU0UiLCJJVkYgQ09PUkRJTkFUT1IiLCJJVkYgTEFCIFNUQUZGIiwiQ09OU0VOVCAiLCJNRURJQ0FMIFJFUE9SVCAtIFNJQ0sgTEVBVkUgTUFOQUdFUiJdLCJuYmYiOjE2MDkyNjQ2MTQsImV4cCI6MTYxMDEyODYxNCwiaWF0IjoxNjA5MjY0NjE0fQ.xCJ0jGtSFf36G8uZpdmHVoLfXDyP6e9mBpuOPSlzuio", search: ["Amoxicillin"], - //vidaAuthTokenID: - // "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiY2QwOWU3MTEtZDEwYy00NjZhLWEwNDctMjc4MDBmNmRkMTYxIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTYyMDMiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkhFQUQgTlVSU0VTIiwiRE9DVE9SUyIsIkhFQUQgRE9DVE9SUyIsIkFETUlOSVNUUkFUT1JTIiwiUkVDRVBUSU9OSVNUIiwiRVIgTlVSU0UiLCJJVkYgUkVDRVBUSU9OSVNUIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIklWRiBET0NUT1IiLCJJVkYgTlVSU0UiLCJJVkYgQ09PUkRJTkFUT1IiLCJJVkYgTEFCIFNUQUZGIiwiQ09OU0VOVCAiLCJNRURJQ0FMIFJFUE9SVCAtIFNJQ0sgTEVBVkUgTUFOQUdFUiJdLCJuYmYiOjE2MDkyNjQ2MTQsImV4cCI6MTYxMDEyODYxNCwiaWF0IjoxNjA5MjY0NjE0fQ.xCJ0jGtSFf36G8uZpdmHVoLfXDyP6e9mBpuOPSlzuio", ); PostPrescriptionReqModel _postPrescriptionReqModel = diff --git a/lib/core/viewModel/patient_view_model.dart b/lib/core/viewModel/patient_view_model.dart index d12ac7f5..70bf0899 100644 --- a/lib/core/viewModel/patient_view_model.dart +++ b/lib/core/viewModel/patient_view_model.dart @@ -49,18 +49,22 @@ class PatientViewModel extends BaseViewModel { _patientService.referalFrequancyList; Future getPatientList(patient, patientType, + {bool isBusyLocal = false}) async { + var localRes ; if (isBusyLocal) { setState(ViewState.BusyLocal); } else { setState(ViewState.Busy); } + localRes = await _patientService.getPatientList(patient, patientType); if (_patientService.hasError) { error = _patientService.error; setState(ViewState.Error); + } - return _patientService.getPatientList(patient, patientType); + return localRes; } diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 52fbb677..726e5050 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -44,6 +44,8 @@ class _PatientSearchScreenState extends State { bool _autoValidate = false; bool onlyArrived = true; + bool isFormSubmitted = false; + var _patientSearchFormValues = PatientModel( FirstName: "0", MiddleName: "0", @@ -64,7 +66,9 @@ class _PatientSearchScreenState extends State { PatientOutSA: false); void _validateInputs() async { - + setState(() { + isFormSubmitted = true; + }); try { if (_formKey.currentState.validate()) { @@ -73,8 +77,11 @@ class _PatientSearchScreenState extends State { if ((_patientSearchFormValues.From == "0" || _patientSearchFormValues.To == "0") && _selectedType == "7") { - helpers.showErrorToast("Please Choose The Dates"); + // helpers.showErrorToast("Please Choose The Dates"); } else { + setState(() { + isFormSubmitted = false; + }); Navigator.of(context).pushNamed(PATIENTS, arguments: { "patientSearchForm": _patientSearchFormValues, "selectedType": _selectedType @@ -112,7 +119,7 @@ class _PatientSearchScreenState extends State { children: [ Container( child: Icon( - DoctorApp.search_patient, + DoctorApp.search_patient_1, size: 100, color: Colors.black, ), @@ -403,7 +410,7 @@ class _PatientSearchScreenState extends State { ), ), (!(_selectedType == '2' || _selectedType == '4')) - ? DynamicElements(_patientSearchFormValues) + ? DynamicElements(_patientSearchFormValues, isFormSubmitted) : SizedBox( height: 0, ), diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 14f68a79..4fcabf07 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -273,7 +273,7 @@ class _PatientsScreenState extends State { patientType) .then((res) { setState(() { - _isLoading = false; + if (res != null && res['MessageStatus'] == 1) { if (val2 == 7) { @@ -302,10 +302,13 @@ class _PatientsScreenState extends State { responseModelList = new ModelResponse.fromJson(parsed).list; responseModelList2 = responseModelList; _isError = false; + } else { _isError = true; - error = model.error; //res['ErrorEndUserMessage'] ?? res['ErrorMessage']; + error = model.error??res['ErrorEndUserMessage'] ?? res['ErrorMessage']; } + + _isLoading = false; }); }).catchError((error) { setState(() { diff --git a/lib/widgets/patients/dynamic_elements.dart b/lib/widgets/patients/dynamic_elements.dart index e6688397..60b681d7 100644 --- a/lib/widgets/patients/dynamic_elements.dart +++ b/lib/widgets/patients/dynamic_elements.dart @@ -1,13 +1,15 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/custom_validation_error.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; class DynamicElements extends StatefulWidget { final PatientModel _patientSearchFormValues; - DynamicElements(this._patientSearchFormValues); + final bool isFormSubmitted; + DynamicElements(this._patientSearchFormValues, this.isFormSubmitted); @override _DynamicElementsState createState() => _DynamicElementsState(); } @@ -113,6 +115,10 @@ class _DynamicElementsState extends State { ), SizedBox( + height: 5, + ), + if(widget._patientSearchFormValues.From == "0" && widget.isFormSubmitted) + CustomValidationError(),SizedBox( height: 10, ), AppTextFormField( @@ -137,6 +143,10 @@ class _DynamicElementsState extends State { } }, ), + if(widget._patientSearchFormValues.To == "0" && widget.isFormSubmitted) + CustomValidationError(),SizedBox( + height: 10, + ), ], ); }, diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index 8a9ae52b..11664510 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,9 +1,10 @@ +import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; -import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; import '../../config/size_config.dart'; @@ -28,6 +29,7 @@ class _AppDrawerState extends State { bool _isInit = true; Helpers helpers = new Helpers(); ProjectViewModel projectsProvider; + // @override // void didChangeDependencies() { // super.didChangeDependencies(); @@ -47,119 +49,126 @@ class _AppDrawerState extends State { // margin: EdgeInsets.only(top: SizeConfig.heightMultiplier * 2), child: Drawer( child: Column(children: [ - Expanded( - flex: 4, - child: ListView(padding: EdgeInsets.zero, children: [ - Container( - height: SizeConfig.heightMultiplier * 50, - child: InkWell( - child: DrawerHeader( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - child: Image.asset('assets/images/logo.png'), - margin: EdgeInsets.only(top: 10, bottom: 15), - ), - SizedBox( - height: 1, - child: Container( - color: Colors.black26, + Expanded( + flex: 4, + child: ListView(padding: EdgeInsets.zero, children: [ + Container( + height: SizeConfig.heightMultiplier * 50, + child: InkWell( + child: DrawerHeader( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + child: Image.asset( + 'assets/images/logo.png', ), + margin: EdgeInsets.only(top: 10, bottom: 15), ), - SizedBox(height: 15), - authProvider.doctorProfile != null - ? CircleAvatar( - radius: SizeConfig.imageSizeMultiplier * 12, - backgroundImage: NetworkImage( - authProvider.doctorProfile.doctorImageURL), - backgroundColor: Colors.white, - ) - : SizedBox(), - authProvider.doctorProfile != null - ? Padding( - padding: EdgeInsets.only(top: 10), - child: AppText( - authProvider.doctorProfile?.doctorName, - fontWeight: FontWeight.bold, - color: Colors.black, - fontSize: SizeConfig.textMultiplier * 2, - )) - : SizedBox(), - AppText( - projectsProvider.isArabic - ? authProvider - .doctorProfile.titleDescriptionN ?? - "" - : authProvider - .doctorProfile?.titleDescription ?? - "", - fontWeight: FontWeight.normal, - color: Colors.black87), - RaisedButton( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(18.0), - side: BorderSide(color: Colors.red)), - child: AppText( - TranslationBase.of(context).logout, - color: Colors.white, - ), - onPressed: () async { - Navigator.pop(context); - await helpers.logout(); - }, + SizedBox( + height: 1, + child: Container( + color: Colors.black26, + ), + ), + SizedBox(height: 15), + InkWell( + onTap: (){ + Navigator.of(context).pushNamed(PROFILE, arguments: { + 'title': authProvider.doctorProfile.doctorName, + "doctorProfileall": authProvider.doctorProfile + }); + }, + child: Column( + children: [ + authProvider.doctorProfile != null + ? CircleAvatar( + radius: SizeConfig.imageSizeMultiplier * 12, + backgroundImage: NetworkImage( + authProvider.doctorProfile.doctorImageURL), + backgroundColor: Colors.white, + ) + : SizedBox(), + authProvider.doctorProfile != null + ? Padding( + padding: EdgeInsets.only(top: 10), + child: AppText( + authProvider.doctorProfile?.doctorName, + fontWeight: FontWeight.bold, + color: Colors.black, + fontSize: SizeConfig.textMultiplier * 2, + )) + : SizedBox(), + AppText( + projectsProvider.isArabic + ? authProvider + .doctorProfile.titleDescriptionN ?? + "" + : authProvider + .doctorProfile?.titleDescription ?? + "", + fontWeight: FontWeight.normal, + color: Colors.black87), + ], + ), + ), + RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(18.0), + side: BorderSide(color: Colors.red)), + child: AppText( + TranslationBase.of(context).logout, + color: Colors.white, + ), + onPressed: () async { + Navigator.pop(context); + await helpers.logout(); + }, + ), + ], ), - ], + ), ), ), - onTap: () { - //Navigator.of(context).pushNamed(PROFILE); - Navigator.of(context).pushNamed(PROFILE, arguments: { - 'title': authProvider.doctorProfile.doctorName, - "doctorProfileall": authProvider.doctorProfile - }); - }, - ), - ), - InkWell( - child: DrawerItem( - TranslationBase.of(context).settings, Icons.settings), - onTap: () { - Navigator.pop(context); - Navigator.of(context).pushNamed(SETTINGS); - }, - ), - InkWell( - child: DrawerItem( - TranslationBase.of(context).qr + - TranslationBase.of(context).reader, - DoctorApp.qr_code), - onTap: () { - Navigator.pop(context); - Navigator.of(context).pushNamed(QR_READER); - }, + InkWell( + child: DrawerItem( + TranslationBase.of(context).settings, Icons.settings), + onTap: () { + Navigator.pop(context); + Navigator.of(context).pushNamed(SETTINGS); + }, + ), + InkWell( + child: DrawerItem( + TranslationBase.of(context).qr + + TranslationBase.of(context).reader, + DoctorApp.qr_code), + onTap: () { + Navigator.pop(context); + Navigator.of(context).pushNamed(QR_READER); + }, + ), + ]), ), - ]), - ), - Expanded( - flex: 1, - child: Column(children: [ - Container( - // This align moves the children to the bottom - child: Align( - alignment: FractionalOffset.bottomCenter, - child: Container( - child: Column( - children: [ - Text("Powered by"), - Image.asset( - 'assets/images/cs_logo_container.png', - width: SizeConfig.imageSizeMultiplier * 30, - ) - ], - )))) - ])) - ])), + Expanded( + flex: 1, + child: Column(children: [ + Container( + // This align moves the children to the bottom + child: Align( + alignment: FractionalOffset.bottomCenter, + child: Container( + child: Column( + children: [ + Text("Powered by"), + Image.asset( + 'assets/images/cs_logo_container.png', + width: SizeConfig.imageSizeMultiplier * 30, + ) + ], + )))) + ])) + ])), ), width: SizeConfig.realScreenWidth * 0.60, margin: 0, diff --git a/lib/widgets/shared/drawer_item_widget.dart b/lib/widgets/shared/drawer_item_widget.dart index c4fe25c1..9696aa1f 100644 --- a/lib/widgets/shared/drawer_item_widget.dart +++ b/lib/widgets/shared/drawer_item_widget.dart @@ -28,7 +28,7 @@ class _DrawerItemState extends State { return Container( margin: EdgeInsets.only(top: 5, bottom: 5, left: 10, right: 10), child: Row( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Icon( widget.icon, @@ -37,12 +37,15 @@ class _DrawerItemState extends State { ), Column( crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, children: [ AppText( widget.title, color: widget.color ?? Colors.black, // fontWeight: FontWeight.bold, - margin: 5, + // margin: 5, + marginLeft: 5, + marginRight: 5, fontSize: SizeConfig.textMultiplier * 2.3, ), AppText( From 68d27a451de1d9646ea8bc72e0d6aac4db42452c Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 25 Jan 2021 15:15:30 +0200 Subject: [PATCH 02/12] fix general issue --- lib/config/localized_values.dart | 4 +-- lib/screens/dashboard_screen.dart | 14 ++-------- lib/screens/settings/settings_screen.dart | 5 ++-- .../profile/profile-welcome-widget.dart | 3 ++- .../subjective/update_allergies_widget.dart | 24 ++++++++--------- .../subjective/update_history_widget.dart | 26 +++++++++---------- 6 files changed, 33 insertions(+), 43 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 9fc39b5c..ad82f0eb 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -29,7 +29,7 @@ const Map> localizedValues = { 'en': 'Answer/Suggestions', 'ar': 'ملاحضات وتفاصيل العيادة' }, - 'outPatients': {'en': 'Out-Patients', 'ar': 'ةالمريض الخارجي'}, + 'outPatients': {'en': 'Out-Patients', 'ar': 'المريض الخارجي'}, 'searchPatient': {'en': 'Search Patient', 'ar': 'البحث عن مريض'}, 'searchAbout': {'en': 'Search', 'ar': 'البحث عن'}, 'patient': {'en': 'Patient', 'ar': ' مريض'}, @@ -44,7 +44,7 @@ const Map> localizedValues = { 'radiology': {'en': 'Radiology', 'ar': 'الأشعة'}, 'service': {'en': 'Service', 'ar': 'خدمة'}, 'referral': {'en': 'Referral', 'ar': 'االإحالة'}, - 'inPatient': {'en': 'In-Patient', 'ar': 'االمريض الداخلي'}, + 'inPatient': {'en': 'In-Patient', 'ar': 'المريض الداخلي'}, 'operations': {'en': 'Operations', 'ar': 'عمليات'}, 'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'}, 'searchMedicine': {'en': 'Search Medicine', 'ar': 'بحث عن الدواء'}, diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 85dd440d..fc9a8bf8 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -141,16 +141,6 @@ class _DashboardScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - Row( - children: [ - AppText( - TranslationBase.of(context).welcome, - fontSize: - SizeConfig.textMultiplier * 1.7, - color: Colors.white, - ) - ], - ), SizedBox( height: 4, ), @@ -1201,8 +1191,8 @@ class DashboardItem extends StatelessWidget { height: height != null ? height : MediaQuery.of(context).orientation == Orientation.portrait - ? MediaQuery.of(context).size.height * 0.19 - : MediaQuery.of(context).size.height * 0.35, + ? MediaQuery.of(context).size.height * 0.20 + : MediaQuery.of(context).size.height * 0.36, decoration: BoxDecoration( color: !hasBorder ? color != null diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 7d41d662..16d53831 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/hospital_view_model.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; @@ -34,7 +35,7 @@ class SettingsScreen extends StatelessWidget { child: AnimatedContainer( duration: Duration(milliseconds: 350), decoration: BoxDecoration( - color: !projectsProvider.isArabic ? HexColor('#58434F') : Colors.transparent, + color: !projectsProvider.isArabic ? AppGlobal.appPrimaryColor : Colors.transparent, border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) ), child: Center(child: AppText(TranslationBase.of(context).lanEnglish, color: !projectsProvider.isArabic ? Colors.white : Colors.grey[500])) @@ -47,7 +48,7 @@ class SettingsScreen extends StatelessWidget { child: AnimatedContainer( duration: Duration(milliseconds: 350), decoration: BoxDecoration( - color: projectsProvider.isArabic ? HexColor('#58434F') : Colors.transparent, + color: projectsProvider.isArabic ? AppGlobal.appPrimaryColor : Colors.transparent, border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) ), child: Center(child: AppText(TranslationBase.of(context).lanArabic, color: projectsProvider.isArabic ? Colors.white : Colors.grey[500],)) diff --git a/lib/widgets/patients/profile/profile-welcome-widget.dart b/lib/widgets/patients/profile/profile-welcome-widget.dart index fae705f4..ce05b83e 100644 --- a/lib/widgets/patients/profile/profile-welcome-widget.dart +++ b/lib/widgets/patients/profile/profile-welcome-widget.dart @@ -43,7 +43,8 @@ final double height; mainAxisAlignment: MainAxisAlignment.start, children: [ AppText( - 'Dr. ${authProvider.doctorProfile.doctorName}', + TranslationBase.of(context).dr + + ' ${authProvider.doctorProfile.doctorName}', fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.5, color: Colors.white, diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart index 38a0896b..df0cb683 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart @@ -83,19 +83,17 @@ class _UpdateAllergiesWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - child: Expanded( - child: Texts( - projectViewModel.isArabic - ? selectedAllergy.selectedAllergy.nameAr - : selectedAllergy.selectedAllergy.nameEn - .toUpperCase(), - variant: "bodyText", - textDecoration: selectedAllergy.isChecked - ? null - : TextDecoration.lineThrough, - bold: true, - color: Colors.black), - ), + child: Texts( + projectViewModel.isArabic + ? selectedAllergy.selectedAllergy.nameAr + : selectedAllergy.selectedAllergy.nameEn + .toUpperCase(), + variant: "bodyText", + textDecoration: selectedAllergy.isChecked + ? null + : TextDecoration.lineThrough, + bold: true, + color: Colors.black), width: MediaQuery.of(context).size.width * 0.5, ), Texts( diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart index 81217025..de5d2fb2 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart @@ -83,18 +83,16 @@ class _UpdateHistoryWidgetState extends State mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( - child: Expanded( - child: Texts( - projectViewModel.isArabic - ? myHistory.selectedHistory.nameAr - : myHistory.selectedHistory.nameEn, - variant: "bodyText", - textDecoration: myHistory.isChecked - ? null - : TextDecoration.lineThrough, - bold: true, - color: Colors.black), - ), + child: Texts( + projectViewModel.isArabic + ? myHistory.selectedHistory.nameAr + : myHistory.selectedHistory.nameEn, + variant: "bodyText", + textDecoration: myHistory.isChecked + ? null + : TextDecoration.lineThrough, + bold: true, + color: Colors.black), width: MediaQuery.of(context).size.width * 0.7, ), if (myHistory.isChecked) @@ -212,7 +210,9 @@ class _PriorityBarState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: _priorities.map((item,) { bool _isActive = _priorities[_activePriority] == item ? true : false; - index++; + if(index <2){ + index++; + } return Expanded( child: InkWell( child: Center( From fb8381ea6157bda8c5d40f72e4cfe96a4db77dd5 Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Mon, 25 Jan 2021 16:10:21 +0200 Subject: [PATCH 03/12] bugs fix --- lib/core/model/procedure/ControlsModel.dart | 18 +++ .../procedure/post_procedure_req_model.dart | 21 +-- .../update_procedure_request_model.dart | 75 ++++++++++ lib/core/service/procedure_service.dart | 6 +- lib/core/viewModel/procedure_View_model.dart | 9 +- lib/screens/base/base_view.dart | 4 +- .../prescription/add_prescription_form.dart | 139 ++++++------------ .../prescription/prescription_screen.dart | 80 +++++++++- lib/screens/procedures/procedure_screen.dart | 39 +++-- lib/util/dr_app_toast_msg.dart | 10 +- 10 files changed, 259 insertions(+), 142 deletions(-) create mode 100644 lib/core/model/procedure/ControlsModel.dart create mode 100644 lib/core/model/procedure/update_procedure_request_model.dart diff --git a/lib/core/model/procedure/ControlsModel.dart b/lib/core/model/procedure/ControlsModel.dart new file mode 100644 index 00000000..b3e8ae9c --- /dev/null +++ b/lib/core/model/procedure/ControlsModel.dart @@ -0,0 +1,18 @@ +class Controls { + String code; + String controlValue; + + Controls({this.code, this.controlValue}); + + Controls.fromJson(Map json) { + code = json['Code']; + controlValue = json['ControlValue']; + } + + Map toJson() { + final Map data = new Map(); + data['Code'] = this.code; + data['ControlValue'] = this.controlValue; + return data; + } +} diff --git a/lib/core/model/procedure/post_procedure_req_model.dart b/lib/core/model/procedure/post_procedure_req_model.dart index 52f62a11..b12563f8 100644 --- a/lib/core/model/procedure/post_procedure_req_model.dart +++ b/lib/core/model/procedure/post_procedure_req_model.dart @@ -1,3 +1,5 @@ +import 'ControlsModel.dart'; + class PostProcedureReqModel { int patientMRN; int appointmentNo; @@ -66,22 +68,3 @@ class Procedures { return data; } } - -class Controls { - String code; - String controlValue; - - Controls({this.code, this.controlValue}); - - Controls.fromJson(Map json) { - code = json['Code']; - controlValue = json['ControlValue']; - } - - Map toJson() { - final Map data = new Map(); - data['Code'] = this.code; - data['ControlValue'] = this.controlValue; - return data; - } -} diff --git a/lib/core/model/procedure/update_procedure_request_model.dart b/lib/core/model/procedure/update_procedure_request_model.dart new file mode 100644 index 00000000..aee39879 --- /dev/null +++ b/lib/core/model/procedure/update_procedure_request_model.dart @@ -0,0 +1,75 @@ +import 'ControlsModel.dart'; + +class UpdateProcedureRequestModel { + int orderNo; + int patientMRN; + int appointmentNo; + int episodeID; + int lineItemNo; + ProcedureDetail procedureDetail; + String vidaAuthTokenID; + + UpdateProcedureRequestModel( + {this.orderNo, + this.patientMRN, + this.appointmentNo, + this.episodeID, + this.lineItemNo, + this.procedureDetail, + this.vidaAuthTokenID}); + + UpdateProcedureRequestModel.fromJson(Map json) { + orderNo = json['OrderNo']; + patientMRN = json['PatientMRN']; + appointmentNo = json['AppointmentNo']; + episodeID = json['EpisodeID']; + lineItemNo = json['LineItemNo']; + procedureDetail = json['procedureDetail'] != null + ? new ProcedureDetail.fromJson(json['procedureDetail']) + : null; + vidaAuthTokenID = json['VidaAuthTokenID']; + } + + Map toJson() { + final Map data = new Map(); + data['OrderNo'] = this.orderNo; + data['PatientMRN'] = this.patientMRN; + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + data['LineItemNo'] = this.lineItemNo; + if (this.procedureDetail != null) { + data['procedureDetail'] = this.procedureDetail.toJson(); + } + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + return data; + } +} + +class ProcedureDetail { + String procedure; + String category; + List controls; + + ProcedureDetail({this.procedure, this.category, this.controls}); + + ProcedureDetail.fromJson(Map json) { + procedure = json['Procedure']; + category = json['Category']; + if (json['Controls'] != null) { + controls = new List(); + json['Controls'].forEach((v) { + controls.add(new Controls.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['Procedure'] = this.procedure; + data['Category'] = this.category; + if (this.controls != null) { + data['Controls'] = this.controls.map((v) => v.toJson()).toList(); + } + return data; + } +} diff --git a/lib/core/service/procedure_service.dart b/lib/core/service/procedure_service.dart index 89fe6be3..515e0e50 100644 --- a/lib/core/service/procedure_service.dart +++ b/lib/core/service/procedure_service.dart @@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_re import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/get_procedure_req_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/service/base/base_service.dart'; import 'package:flutter/foundation.dart'; @@ -104,7 +105,8 @@ class ProcedureService extends BaseService { }, body: postProcedureReqModel.toJson()); } - Future updateProcedure(PostProcedureReqModel postProcedureReqModel) async { + Future updateProcedure( + UpdateProcedureRequestModel updateProcedureRequestModel) async { hasError = false; _procedureList.clear(); await baseAppClient.post(UPDATE_PROCEDURE, @@ -113,6 +115,6 @@ class ProcedureService extends BaseService { }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: postProcedureReqModel.toJson()); + }, body: updateProcedureRequestModel.toJson()); } } diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index 5c253025..6be63be0 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -3,6 +3,7 @@ import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dar import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/service/procedure_service.dart'; import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; import 'package:doctor_app_flutter/locator.dart'; @@ -61,7 +62,6 @@ class ProcedureViewModel extends BaseViewModel { if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); - await getProcedure(mrn: mrn); } else { await getProcedure(mrn: mrn); setState(ViewState.Idle); @@ -69,16 +69,17 @@ class ProcedureViewModel extends BaseViewModel { } Future updateProcedure( - {PostProcedureReqModel postProcedureReqModel, int mrn}) async { + {UpdateProcedureRequestModel updateProcedureRequestModel, + int mrn}) async { hasError = false; //_insuranceCardService.clearInsuranceCard(); setState(ViewState.Busy); - await _procedureService.updateProcedure(postProcedureReqModel); + await _procedureService.updateProcedure(updateProcedureRequestModel); if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); - await getProcedure(mrn: mrn); + // await getProcedure(mrn: mrn); } } diff --git a/lib/screens/base/base_view.dart b/lib/screens/base/base_view.dart index cf24b47f..7a5c93e6 100644 --- a/lib/screens/base/base_view.dart +++ b/lib/screens/base/base_view.dart @@ -33,8 +33,8 @@ class _BaseViewState extends State> { @override Widget build(BuildContext context) { - return ChangeNotifierProvider( - create: (BuildContext context) => model, + return ChangeNotifierProvider.value( + value: model, child: Consumer(builder: widget.builder), ); } diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index 53d78b1e..c519d134 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -1,6 +1,5 @@ import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; @@ -8,29 +7,21 @@ import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; -import 'package:doctor_app_flutter/models/livecare/transfer_to_admin.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/screens/prescription/drugtodrug.dart'; -import 'package:doctor_app_flutter/screens/prescription/prescription_screen.dart'; -import 'package:doctor_app_flutter/screens/prescription/prescription_warnings.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:doctor_app_flutter/widgets/patients/dynamic_elements.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; -import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; -import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; -import 'package:intl/intl.dart'; addPrescriptionForm(context, PrescriptionViewModel model, PatiantInformtion patient, prescription) { @@ -198,14 +189,25 @@ class _PrescriptionFormWidgetState extends State { dynamic route25 = {"id": 37, "name": "Inserted into Vagina"}; dynamic route26 = {"id": 36, "name": "Inserted into Rectum"}; dynamic route27 = {"id": 31, "name": "In Each Nostril"}; - dynamic frequency1 = {"id": 1, "name": "2 Times a day"}; - dynamic frequency2 = {"id": 2, "name": "3 Times a day"}; - dynamic frequency3 = {"id": 3, "name": "4 Times a day"}; + dynamic frequency1 = {"id": 2, "name": "2 Times a day"}; + dynamic frequency2 = {"id": 3, "name": "3 Times a day"}; + dynamic frequency3 = {"id": 4, "name": "4 Times a day"}; dynamic frequency4 = {"id": 8, "name": "As Needed"}; dynamic frequency5 = {"id": 9, "name": "Bed Time"}; dynamic frequency6 = {"id": 11, "name": "Every Other Day"}; dynamic frequency7 = {"id": 29, "name": "Every Eight Hours"}; dynamic frequency8 = {"id": 34, "name": "As Directed"}; + dynamic frequency9 = {"id": 22, "name": "Once Per Month"}; + dynamic frequency10 = {"id": 2, "name": "3 Times a day"}; + dynamic frequency11 = {"id": 21, "name": "Every 3 hours"}; + dynamic frequency12 = {"id": 20, "name": "Once a Week"}; + dynamic frequency13 = {"id": 12, "name": "Every Half Hour"}; + dynamic frequency14 = {"id": 10, "name": "4 Times a Day"}; + dynamic frequency15 = {"id": 24, "name": "Once Every 2 Months"}; + dynamic frequency16 = {"id": 25, "name": "Every One Hour"}; + dynamic frequency17 = {"id": 26, "name": "Every Two Hours"}; + dynamic frequency18 = {"id": 28, "name": "Every Six Hours"}; + dynamic duration1 = {"id": 1, "name": "For 1 Day"}; dynamic duration2 = {"id": 2, "name": "For 2 Days"}; dynamic duration3 = {"id": 3, "name": "For 3 Days"}; @@ -234,6 +236,15 @@ class _PrescriptionFormWidgetState extends State { dynamic doseTime10 = {"id": 10, "name": "While wake"}; dynamic doseTime11 = {"id": 12, "name": "Any Time"}; dynamic doseTime12 = {"id": 21, "name": "Bed Time"}; + dynamic doseTime13 = {"id": 13, "name": "30 Minutes Before Meals"}; + dynamic doseTime14 = {"id": 14, "name": "1 Hour Before Meals"}; + dynamic doseTime15 = {"id": 15, "name": "2 Hours After Meal"}; + dynamic doseTime16 = {"id": 16, "name": "After Breakfast"}; + dynamic doseTime17 = {"id": 17, "name": "Before Lunch"}; + dynamic doseTime18 = {"id": 18, "name": "After Lunch"}; + dynamic doseTime19 = {"id": 20, "name": "After Dinner"}; + dynamic doseTime20 = {"id": 21, "name": "Bed Time"}; + dynamic doseTime21 = {"id": 11, "name": "Now"}; dynamic indication1 = {"id": 545, "name": "Gingival Hyperplasia"}; dynamic indication2 = {"id": 546, "name": "Mild Drowsiness"}; dynamic indication3 = {"id": 547, "name": "Hypertrichosis"}; @@ -273,6 +284,17 @@ class _PrescriptionFormWidgetState extends State { doseTimeList.add(doseTime9); doseTimeList.add(doseTime10); doseTimeList.add(doseTime11); + doseTimeList.add(doseTime12); + doseTimeList.add(doseTime13); + doseTimeList.add(doseTime14); + doseTimeList.add(doseTime15); + doseTimeList.add(doseTime16); + doseTimeList.add(doseTime17); + doseTimeList.add(doseTime18); + doseTimeList.add(doseTime19); + doseTimeList.add(doseTime20); + doseTimeList.add(doseTime21); + doseTimeList.add(doseTime12); frequencyList.add(frequency1); frequencyList.add(frequency2); @@ -282,6 +304,16 @@ class _PrescriptionFormWidgetState extends State { frequencyList.add(frequency6); frequencyList.add(frequency7); frequencyList.add(frequency8); + frequencyList.add(frequency9); + frequencyList.add(frequency10); + frequencyList.add(frequency11); + frequencyList.add(frequency12); + frequencyList.add(frequency13); + frequencyList.add(frequency14); + frequencyList.add(frequency15); + frequencyList.add(frequency16); + frequencyList.add(frequency17); + frequencyList.add(frequency18); routeList.add(route1); routeList.add(route2); routeList.add(route3); @@ -484,46 +516,6 @@ class _PrescriptionFormWidgetState extends State { ], ), ), - // Container( - // height: screenSize.height * 0.070, - // child: InkWell( - // onTap: referToList != null - // ? () { - // ListSelectDialog dialog = - // ListSelectDialog( - // list: referToList, - // attributeName: 'name', - // attributeValueId: 'id', - // okText: - // TranslationBase.of(context) - // .ok, - // okFunction: (selectedValue) { - // setState(() { - // type = selectedValue; - // _selectedBranch = null; - // }); - // }, - // ); - // showDialog( - // barrierDismissible: false, - // context: context, - // builder: - // (BuildContext context) { - // return dialog; - // }, - // ); - // } - // : null, - // child: TextField( - // decoration: textFieldSelectorDecoration( - // TranslationBase.of(context) - // .orderType, - // type != null ? type['name'] : null, - // true), - // enabled: false, - // ), - // ), - // ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, @@ -863,15 +855,13 @@ class _PrescriptionFormWidgetState extends State { // formKey.currentState.save(); // Navigator.pop(context); // openDrugToDrug(); - if (strength == null || - route == null || + if (route == null || frequency == null || indication == null || doseTime == null || duration == null || selectedDate == null || - units == null || - _selectedMedication == null) { + units == null) { DrAppToastMsg.showErrorToast( "Please Fill All Fields"); return; @@ -1023,41 +1013,4 @@ class _PrescriptionFormWidgetState extends State { ); }); } - - // searchData(String str, PrescriptionViewModel model) { - // var strExist = str.length > 0 ? true : false; - // - // if (strExist) { - // filteredNotesList = null; - // filteredNotesList = model.drugsList - // .where((note) => - // note["GenericName"].toString().contains(str.toUpperCase())) - // .toList(); - // setState(() { - // notesList = filteredNotesList; - // }); - // } else { - // setState(() { - // notesList = model.drugsList; - // }); - // } - // } - - searchMedicine(context, PrescriptionViewModel model, String str) async { - FocusScope.of(context).unfocus(); - // if (searchController.text.isEmpty()) { - // helpers.showErrorToast(TranslationBase.of(context).typeMedicineName); - // //"Type Medicine Name") - // return; - // } - if (searchController.text.length < 0) { - helpers.showErrorToast(TranslationBase.of(context).moreThan3Letter); - return; - } - - GifLoaderDialogUtils.showMyDialog(context); - - await model.getDrugs(drugName: searchController.text); - GifLoaderDialogUtils.hideDialog(context); - } } diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 00fc38b8..4208c599 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -49,14 +49,24 @@ class _NewPrescriptionScreenState extends State { doseTimeList = List(); frequencyList = List(); - dynamic frequency1 = {"id": 1, "name": "2 Times a day"}; - dynamic frequency2 = {"id": 2, "name": "3 Times a day"}; - dynamic frequency3 = {"id": 3, "name": "4 Times a day"}; + dynamic frequency1 = {"id": 2, "name": "2 Times a day"}; + dynamic frequency2 = {"id": 3, "name": "3 Times a day"}; + dynamic frequency3 = {"id": 4, "name": "4 Times a day"}; dynamic frequency4 = {"id": 8, "name": "As Needed"}; dynamic frequency5 = {"id": 9, "name": "Bed Time"}; dynamic frequency6 = {"id": 11, "name": "Every Other Day"}; dynamic frequency7 = {"id": 29, "name": "Every Eight Hours"}; dynamic frequency8 = {"id": 34, "name": "As Directed"}; + dynamic frequency9 = {"id": 22, "name": "Once Per Month"}; + dynamic frequency10 = {"id": 2, "name": "3 Times a day"}; + dynamic frequency11 = {"id": 21, "name": "Every 3 hours"}; + dynamic frequency12 = {"id": 20, "name": "Once a Week"}; + dynamic frequency13 = {"id": 12, "name": "Every Half Hour"}; + dynamic frequency14 = {"id": 10, "name": "4 Times a Day"}; + dynamic frequency15 = {"id": 24, "name": "Once Every 2 Months"}; + dynamic frequency16 = {"id": 25, "name": "Every One Hour"}; + dynamic frequency17 = {"id": 26, "name": "Every Two Hours"}; + dynamic frequency18 = {"id": 28, "name": "Every Six Hours"}; dynamic doseTime1 = {"id": 1, "name": "Before Meals"}; dynamic doseTime2 = {"id": 2, "name": "After Meals"}; dynamic doseTime3 = {"id": 3, "name": "With Meals"}; @@ -69,6 +79,15 @@ class _NewPrescriptionScreenState extends State { dynamic doseTime10 = {"id": 10, "name": "While wake"}; dynamic doseTime11 = {"id": 12, "name": "Any Time"}; dynamic doseTime12 = {"id": 21, "name": "Bed Time"}; + dynamic doseTime13 = {"id": 13, "name": "30 Minutes Before Meals"}; + dynamic doseTime14 = {"id": 14, "name": "1 Hour Before Meals"}; + dynamic doseTime15 = {"id": 15, "name": "2 Hours After Meal"}; + dynamic doseTime16 = {"id": 16, "name": "After Breakfast"}; + dynamic doseTime17 = {"id": 17, "name": "Before Lunch"}; + dynamic doseTime18 = {"id": 18, "name": "After Lunch"}; + dynamic doseTime19 = {"id": 20, "name": "After Dinner"}; + dynamic doseTime20 = {"id": 21, "name": "Bed Time"}; + dynamic doseTime21 = {"id": 11, "name": "Now"}; dynamic route1 = {"id": 7, "name": "By Mouth"}; dynamic route2 = {"id": 10, "name": "Inhale by Mouth"}; dynamic route3 = {"id": 15, "name": "for INJECTION"}; @@ -78,6 +97,24 @@ class _NewPrescriptionScreenState extends State { dynamic route7 = {"id": 27, "name": "In Both EYES"}; dynamic route8 = {"id": 28, "name": "In Both Ears"}; dynamic route9 = {"id": 32, "name": "Intramuscular"}; + dynamic route10 = {"id": 60, "name": "TRANSDERMAL"}; + dynamic route11 = {"id": 59, "name": "OROPHARYNGEAL"}; + dynamic route12 = {"id": 15, "name": "for INJECTION"}; + dynamic route13 = {"id": 58, "name": "SUBCUTANEOUS"}; + dynamic route14 = {"id": 57, "name": "NASOGASTRIC"}; + dynamic route15 = {"id": 56, "name": "IRRIGATION"}; + dynamic route16 = {"id": 55, "name": "INTRAVITREAL"}; + dynamic route17 = {"id": 54, "name": "INTRAVENOUS BOLUS"}; + dynamic route18 = {"id": 51, "name": "EPIDURAL"}; + dynamic route19 = {"id": 47, "name": "Parenteral"}; + dynamic route20 = {"id": 43, "name": "IM"}; + dynamic route21 = {"id": 42, "name": "IV"}; + dynamic route22 = {"id": 41, "name": "Sublingual"}; + dynamic route23 = {"id": 40, "name": "For Nebulization"}; + dynamic route24 = {"id": 39, "name": "Nasal"}; + dynamic route25 = {"id": 37, "name": "Inserted into Vagina"}; + dynamic route26 = {"id": 36, "name": "Inserted into Rectum"}; + dynamic route27 = {"id": 31, "name": "In Each Nostril"}; frequencyList.add(frequency1); frequencyList.add(frequency2); @@ -87,6 +124,16 @@ class _NewPrescriptionScreenState extends State { frequencyList.add(frequency6); frequencyList.add(frequency7); frequencyList.add(frequency8); + frequencyList.add(frequency9); + frequencyList.add(frequency10); + frequencyList.add(frequency11); + frequencyList.add(frequency12); + frequencyList.add(frequency13); + frequencyList.add(frequency14); + frequencyList.add(frequency15); + frequencyList.add(frequency16); + frequencyList.add(frequency17); + frequencyList.add(frequency18); doseTimeList.add(doseTime1); doseTimeList.add(doseTime2); doseTimeList.add(doseTime3); @@ -99,6 +146,15 @@ class _NewPrescriptionScreenState extends State { doseTimeList.add(doseTime10); doseTimeList.add(doseTime11); doseTimeList.add(doseTime12); + doseTimeList.add(doseTime13); + doseTimeList.add(doseTime14); + doseTimeList.add(doseTime15); + doseTimeList.add(doseTime16); + doseTimeList.add(doseTime17); + doseTimeList.add(doseTime18); + doseTimeList.add(doseTime19); + doseTimeList.add(doseTime20); + doseTimeList.add(doseTime21); routeList.add(route1); routeList.add(route2); routeList.add(route3); @@ -108,6 +164,24 @@ class _NewPrescriptionScreenState extends State { routeList.add(route7); routeList.add(route8); routeList.add(route9); + routeList.add(route10); + routeList.add(route11); + routeList.add(route12); + routeList.add(route13); + routeList.add(route14); + routeList.add(route15); + routeList.add(route16); + routeList.add(route17); + routeList.add(route18); + routeList.add(route19); + routeList.add(route20); + routeList.add(route21); + routeList.add(route22); + routeList.add(route23); + routeList.add(route24); + routeList.add(route25); + routeList.add(route26); + routeList.add(route27); } Widget build(BuildContext context) { diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart index 5483ffd9..b78bf65d 100644 --- a/lib/screens/procedures/procedure_screen.dart +++ b/lib/screens/procedures/procedure_screen.dart @@ -2,8 +2,10 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; @@ -676,10 +678,11 @@ postProcedure( postProcedureReqModel.episodeID = patient.episodeNo; postProcedureReqModel.patientMRN = patient.patientMRN; - - controls.add( - Controls(code: remarks.isEmpty ? '' : remarks, controlValue: 'test'), - ); + entityList.forEach((element) { + controls.add( + Controls(code: "remarks", controlValue: remarks.isEmpty ? '' : remarks), + ); + }); entityList.forEach((element) { controlsProcedure.add(Procedures( @@ -693,6 +696,7 @@ postProcedure( if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); + model.getProcedure(mrn: patient.patientMRN); } else if (model.state == ViewState.Idle) { DrAppToastMsg.showSuccesToast('procedure has been added'); } @@ -704,30 +708,37 @@ updateProcedure( String procedureId, PatiantInformtion patient, String categorieId}) async { - PostProcedureReqModel updateProcedureReqModel = new PostProcedureReqModel(); + UpdateProcedureRequestModel updateProcedureReqModel = + new UpdateProcedureRequestModel(); List controls = List(); - List controlsProcedure = List(); + ProcedureDetail controlsProcedure = new ProcedureDetail(); updateProcedureReqModel.appointmentNo = patient.appointmentNo; updateProcedureReqModel.episodeID = patient.episodeNo; updateProcedureReqModel.patientMRN = patient.patientMRN; + updateProcedureReqModel.lineItemNo = 1; + updateProcedureReqModel.orderNo = 0; controls.add( - Controls( - code: remarks.isEmpty ? '' : remarks, - controlValue: 'Testing', - ), + Controls(code: "02", controlValue: remarks.isEmpty ? '' : remarks), ); - controlsProcedure.add(Procedures( - category: categorieId, procedure: procedureId, controls: controls)); - updateProcedureReqModel.procedures = controlsProcedure; + + controlsProcedure.procedure = procedureId; + controlsProcedure.category = categorieId; + controlsProcedure.controls = controls; + + // controlsProcedure.add(ProcedureDetail( + // category: categorieId, procedure: procedureId, controls: controls)); + updateProcedureReqModel.procedureDetail = controlsProcedure; await model.updateProcedure( - postProcedureReqModel: updateProcedureReqModel, mrn: patient.patientMRN); + updateProcedureRequestModel: updateProcedureReqModel, + mrn: patient.patientMRN); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); + model.getProcedure(mrn: patient.patientMRN); } else if (model.state == ViewState.Idle) { DrAppToastMsg.showSuccesToast('procedure has been updated'); } diff --git a/lib/util/dr_app_toast_msg.dart b/lib/util/dr_app_toast_msg.dart index 09259b45..48addfba 100644 --- a/lib/util/dr_app_toast_msg.dart +++ b/lib/util/dr_app_toast_msg.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; - class DrAppToastMsg { + +class DrAppToastMsg { void showLongToast(msg) { FlutterFlexibleToast.showToast( message: msg, @@ -8,7 +9,7 @@ import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; ); } - static void showSuccesToast(msg) { + static void showSuccesToast(msg) { FlutterFlexibleToast.showToast( message: msg, toastLength: Toast.LENGTH_SHORT, @@ -19,7 +20,6 @@ import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; textColor: Colors.white); } - static void showErrorToast(msg) { FlutterFlexibleToast.showToast( message: msg, @@ -29,7 +29,7 @@ import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; icon: ICON.CLOSE, fontSize: 16, imageSize: 35, - timeInSeconds: 110, + timeInSeconds: 185, textColor: Colors.white); } @@ -75,4 +75,4 @@ import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; void cancelToast(msg) { FlutterFlexibleToast.cancel(); } -} \ No newline at end of file +} From 13c879654b353f377ee75dda50a495f9c149c0e6 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 10:35:23 +0200 Subject: [PATCH 04/12] DA-250: fix age --- lib/screens/patients/patients_screen.dart | 6 +++--- lib/util/date-utils.dart | 18 +++++++++++++++++ .../profile/patient_profile_widget.dart | 20 ++----------------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 4fcabf07..1a55153e 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -17,6 +17,7 @@ import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; @@ -615,9 +616,8 @@ class _PatientsScreenState extends State { .white, ), AppText( - item - .age - .toString(), + " ${DateUtils.getAgeByBirthday(item.dateofBirth)}", + fontSize: 1.8 * SizeConfig .textMultiplier, diff --git a/lib/util/date-utils.dart b/lib/util/date-utils.dart index c414cd51..bfa406c6 100644 --- a/lib/util/date-utils.dart +++ b/lib/util/date-utils.dart @@ -216,5 +216,23 @@ class DateUtils { return 12; } } + + static String getAgeByBirthday(dynamic birthday){ + // https://leechy.dev/calculate-dates-diff-in-dart + DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); + final now = DateTime.now(); + int years = now.year - birthDate .year; + int months = now.month - birthDate.month; + int days = now.day - birthDate.day; + if (months < 0 || (months == 0 && days < 0)) { + years--; + months += (days < 0 ? 11 : 12); + } + if (days < 0) { + final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); + days = now.difference(monthAgo).inDays + 1; + } + return "$years Yr $months Mnth $days Day"; + } } diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index 225decf4..b8fcf89c 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -18,23 +18,7 @@ import './profile_medical_info_widget.dart'; class PatientProfileWidget extends StatelessWidget { PatiantInformtion patient; - String getPatientAge(dynamic birthday){ - // https://leechy.dev/calculate-dates-diff-in-dart - DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); - final now = DateTime.now(); - int years = now.year - birthDate .year; - int months = now.month - birthDate.month; - int days = now.day - birthDate.day; - if (months < 0 || (months == 0 && days < 0)) { - years--; - months += (days < 0 ? 11 : 12); - } - if (days < 0) { - final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); - days = now.difference(monthAgo).inDays + 1; - } - return "$years Yr $months Mnth $days Day"; - } + @override Widget build(BuildContext context) { @@ -133,7 +117,7 @@ class PatientProfileWidget extends StatelessWidget { height: 4, ), AppText( - "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${getPatientAge(patient.dateofBirth)/*patient.age*/}", + "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${DateUtils.getAgeByBirthday(patient.dateofBirth)/*patient.age*/}", fontWeight: FontWeight.normal, fontSize: 1.6 * SizeConfig.textMultiplier, ), From b9eaee188727fe31a69e15e8d429fa73d6080683 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 10:46:14 +0200 Subject: [PATCH 05/12] fix design --- .../profile/patient_orders_screen.dart | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/screens/patients/profile/patient_orders_screen.dart b/lib/screens/patients/profile/patient_orders_screen.dart index 09834d50..d193b6ef 100644 --- a/lib/screens/patients/profile/patient_orders_screen.dart +++ b/lib/screens/patients/profile/patient_orders_screen.dart @@ -128,18 +128,24 @@ class _PatientsOrdersState extends State { ), ), children: [ - Divider( - color: Colors.black, - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - AppText( - notesList[index]["Notes"], - margin: 5, - ) - ], + Divider( + color: Colors.black, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + notesList[index]["Notes"], + margin: 5, + ), + ], + ) + ], ), ], )); From 905818b5322c51c0fd2af2dfc7f7bfa37479c199 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 12:44:06 +0200 Subject: [PATCH 06/12] add admission no to orders --- lib/screens/patients/profile/patient_orders_screen.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/screens/patients/profile/patient_orders_screen.dart b/lib/screens/patients/profile/patient_orders_screen.dart index d193b6ef..a7182546 100644 --- a/lib/screens/patients/profile/patient_orders_screen.dart +++ b/lib/screens/patients/profile/patient_orders_screen.dart @@ -117,6 +117,12 @@ class _PatientsOrdersState extends State { marginBottom: 5, fontWeight: FontWeight.bold, ), + AppText( + notesList[index] + ["AdmissionNo"], + marginLeft: 10, + color: Colors.grey[600], + ), AppText( convertDateFormat( notesList[index] From 913ffc30523db97ca18c3c87630113025b976231 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 15:44:22 +0200 Subject: [PATCH 07/12] Fix DA-260,DA-267 --- ios/Runner/GoogleService-Info.plist | 36 +++++++++++++++++++ lib/config/localized_values.dart | 2 +- .../soap_update/update_assessment_page.dart | 6 ++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 ios/Runner/GoogleService-Info.plist diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..0c093a2a --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r + API_KEY + AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs + GCM_SENDER_ID + 864393916058 + PLIST_VERSION + 1 + BUNDLE_ID + com.cloud.diplomaticquarterapp + PROJECT_ID + diplomaticquarter-d2385 + STORAGE_BUCKET + diplomaticquarter-d2385.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:864393916058:ios:13f787bbfe6051f8b97923 + DATABASE_URL + https://diplomaticquarter-d2385.firebaseio.com + + \ No newline at end of file diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index ad82f0eb..1a62467c 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -215,7 +215,7 @@ const Map> localizedValues = { 'en': 'Please fill all fields..!', 'ar': 'الرجاء ملأ جميع الحقول..!' }, - 'replay2': {'en': 'Replay', 'ar': 'رد الطبيب'}, + 'replay2': {'en': 'Reply', 'ar': 'رد الطبيب'}, 'logout': {'en': 'Logout', 'ar': 'تسجيل خروج'}, 'pharmaciesList': {'en': 'Pharmacies List', 'ar': 'قائمة الصيدليات'}, 'price': {'en': 'Price', 'ar': 'السعر'}, diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index e6e1a908..bafa5af4 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -309,6 +309,12 @@ class _UpdateAssessmentPageState extends State { SizedBox( height: 6, ), + AppText( + TranslationBase.of(context).remarks, + fontWeight: FontWeight + .bold, + fontSize: 16, + ), Container( width: MediaQuery .of(context) From d7c3024baf4a86ed80c9c140dc63356b3ccaa706 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 15:44:55 +0200 Subject: [PATCH 08/12] remove GoogleService-Info.plist --- ios/Runner/GoogleService-Info.plist | 36 ----------------------------- 1 file changed, 36 deletions(-) delete mode 100644 ios/Runner/GoogleService-Info.plist diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index 0c093a2a..00000000 --- a/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CLIENT_ID - 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r - API_KEY - AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs - GCM_SENDER_ID - 864393916058 - PLIST_VERSION - 1 - BUNDLE_ID - com.cloud.diplomaticquarterapp - PROJECT_ID - diplomaticquarter-d2385 - STORAGE_BUCKET - diplomaticquarter-d2385.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:864393916058:ios:13f787bbfe6051f8b97923 - DATABASE_URL - https://diplomaticquarter-d2385.firebaseio.com - - \ No newline at end of file From c065dbbdb3b115f7f46850dd3166c09e7762e226 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 16:07:16 +0200 Subject: [PATCH 09/12] Fixed DA:266 --- lib/config/localized_values.dart | 4 ++ lib/util/translations_delegate_base.dart | 2 + .../soap_update/update_assessment_page.dart | 56 +++++++++++++++---- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 1a62467c..a9498b2a 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -666,4 +666,8 @@ const Map> localizedValues = { 'en': "You have to add chief complaint fields correctly .", 'ar': "يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" }, + 'ICDName': { + 'en': "ICDName", + 'ar': "اسم ال ICD" + }, }; diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 2c3be5b1..c3c40e36 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1036,6 +1036,8 @@ class TranslationBase { String get chiefComplaintErrorMsg => localizedValues['chiefComplaintErrorMsg'][locale.languageCode]; +String get ICDName => + localizedValues['ICDName'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index bafa5af4..61bf27f3 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -210,7 +210,7 @@ class _UpdateAssessmentPageState extends State { assessment.createdOn !=null?DateTime.parse(assessment.createdOn).day.toString():DateTime.now().day.toString(), fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( Helpers.getMonth(assessment.createdOn !=null?DateTime.parse(assessment.createdOn).month:DateTime.now().month).toUpperCase(), @@ -225,6 +225,32 @@ class _UpdateAssessmentPageState extends State { crossAxisAlignment: CrossAxisAlignment .start, children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + TranslationBase.of(context).ICDName +" : ", + fontWeight: FontWeight + .bold, + fontSize: 13, + ), + Container( + width: MediaQuery + .of(context) + .size + .width * 0.29, + child: AppText( + assessment + .selectedICD.description + .toString(), + fontSize: 10, + color: Colors.grey, + ), + ), + ], + ), Row( mainAxisAlignment: MainAxisAlignment.start, @@ -233,7 +259,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).appointmentNo, fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( assessment @@ -248,15 +274,21 @@ class _UpdateAssessmentPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ + AppText( + TranslationBase.of(context).condition + " : ", + fontWeight: FontWeight + .bold, + fontSize: 13, + ), AppText( projectViewModel.isArabic?assessment .selectedDiagnosisCondition .nameAr : assessment .selectedDiagnosisCondition .nameEn, - fontWeight: FontWeight - .bold, - fontSize: 16, + fontSize: 10, + color: Colors.grey, + ), ], ), @@ -268,7 +300,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).dType+' : ', fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( projectViewModel.isArabic?assessment @@ -290,7 +322,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).doc, fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( assessment.doctorName??'', @@ -310,16 +342,16 @@ class _UpdateAssessmentPageState extends State { height: 6, ), AppText( - TranslationBase.of(context).remarks, + TranslationBase.of(context).remarks + " : ", fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), Container( width: MediaQuery .of(context) .size - .width * 0.5, + .width * 0.38, child: AppText( assessment.remark ?? "", fontSize: 10, @@ -341,7 +373,7 @@ class _UpdateAssessmentPageState extends State { "ICD : ".toUpperCase(), fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), Container( child: AppText( @@ -526,7 +558,7 @@ class _AddAssessmentDetailsState extends State { AppText( TranslationBase.of(context).addAssessmentDetails.toUpperCase(), fontWeight: FontWeight.bold, - fontSize: 16, + fontSize: 13, ), SizedBox( height: 16, From fd17fc46082dbbd60d799ef81deb2bfe844931e7 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 16:22:06 +0200 Subject: [PATCH 10/12] enforce user to add date in case referral --- lib/screens/patients/patient_search_screen.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 726e5050..39f7fe65 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -76,7 +76,9 @@ class _PatientSearchScreenState extends State { if ((_patientSearchFormValues.From == "0" || _patientSearchFormValues.To == "0") && - _selectedType == "7") { + _selectedType == "7" || ((_patientSearchFormValues.From == "0" || + _patientSearchFormValues.To == "0") && + _selectedType == "6") ) { // helpers.showErrorToast("Please Choose The Dates"); } else { setState(() { From ac9fd8c936c1f12a3e9c8298579be0d85fb90eb5 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Tue, 26 Jan 2021 16:53:42 +0200 Subject: [PATCH 11/12] samll fixes for labels and msges --- lib/config/localized_values.dart | 10 ++- .../viewModel/patient-referral-viewmodel.dart | 2 +- .../patient-vital-sign-viewmodel.dart | 37 +++++---- .../referral/my-referral-detail-screen.dart | 16 +++- lib/util/translations_delegate_base.dart | 4 + .../patient-referral-item-widget.dart | 82 +++++++++++++------ 6 files changed, 108 insertions(+), 43 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 602ed1b9..91401655 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -49,7 +49,7 @@ const Map> localizedValues = { 'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'}, 'searchMedicine': {'en': 'Search Medicine', 'ar': 'بحث عن الدواء'}, 'myReferralPatient': {'en': 'My Referral Patient', 'ar': 'مرضى الاحالة'}, - 'referPatient': {'en': 'Refer Patient', 'ar': 'إحالة مريض'}, + 'referPatient': {'en': 'Referral Patient', 'ar': 'إحالة مريض'}, 'myReferral': {'en': 'My Referral', 'ar': 'إحالة'}, 'myReferredPatient': {'en': 'My Referred Patient', 'ar': 'مرضاي المحالين'}, 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, @@ -666,4 +666,12 @@ const Map> localizedValues = { 'en': "You have to add chief complaint fields correctly .", 'ar': "يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" }, + 'referralStatus': { + 'en': "Referral Status : ", + 'ar': "حالة الإحالة :" + }, + 'referralRemark': { + 'en': "Referral Remark : ", + 'ar': "ملاحظة الإحالة :" + }, }; diff --git a/lib/core/viewModel/patient-referral-viewmodel.dart b/lib/core/viewModel/patient-referral-viewmodel.dart index a1fc73fb..abe39224 100644 --- a/lib/core/viewModel/patient-referral-viewmodel.dart +++ b/lib/core/viewModel/patient-referral-viewmodel.dart @@ -131,7 +131,7 @@ class PatientReferralViewModel extends BaseViewModel { await _referralPatientService.responseReferral(pendingReferral, isAccepted); if (_referralPatientService.hasError) { error = _referralPatientService.error; - setState(ViewState.Error); + setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); } diff --git a/lib/core/viewModel/patient-vital-sign-viewmodel.dart b/lib/core/viewModel/patient-vital-sign-viewmodel.dart index 4e656d6d..2def78db 100644 --- a/lib/core/viewModel/patient-vital-sign-viewmodel.dart +++ b/lib/core/viewModel/patient-vital-sign-viewmodel.dart @@ -6,6 +6,7 @@ import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-history.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/util/date-utils.dart'; import '../../locator.dart'; @@ -13,7 +14,9 @@ class VitalSignsViewModel extends BaseViewModel { VitalSignsService _vitalSignService = locator(); VitalSignData get patientVitalSigns => _vitalSignService.patientVitalSigns; - List get patientVitalSignsHistory => _vitalSignService.patientVitalSignsHistory; + + List get patientVitalSignsHistory => + _vitalSignService.patientVitalSignsHistory; String heightCm = "0"; String weightKg = "0"; @@ -34,8 +37,16 @@ class VitalSignsViewModel extends BaseViewModel { } } - Future getPatientVitalSignHistory(PatiantInformtion patient, String from, String to) async { + Future getPatientVitalSignHistory( + PatiantInformtion patient, String from, String to) async { setState(ViewState.Busy); + if (from == null || from == "0") { + from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); + } + if (to == null || to == "0") { + to = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); + } + await _vitalSignService.getPatientVitalSignsHistory(patient, from, to); if (_vitalSignService.hasError) { error = _vitalSignService.error; @@ -48,9 +59,7 @@ class VitalSignsViewModel extends BaseViewModel { if (weightKg == "0" || weightKg == null || weightKg == 'null') { weightKg = element.weightKg.toString(); } - if (bodyMax == "0" || - bodyMax == null || - bodyMax == 'null') { + if (bodyMax == "0" || bodyMax == null || bodyMax == 'null') { bodyMax = element.bodyMassIndex.toString(); } if (temperatureCelcius == "0" || @@ -84,24 +93,24 @@ class VitalSignsViewModel extends BaseViewModel { return "Normal"; } else if (bodyMassIndex <= 30) { return "Overweight"; - } else { // > 30.0 + } else { + // > 30.0 return "Obese"; } } - String getTempratureMethod(int temperatureCelciusMethod){ - // temperatureCelciusMethod ( vital sign response field )- master 2005 - if(temperatureCelciusMethod == 1){ + String getTempratureMethod(int temperatureCelciusMethod) { + // temperatureCelciusMethod ( vital sign response field )- master 2005 + if (temperatureCelciusMethod == 1) { return "Oral"; - } else if(temperatureCelciusMethod == 2){ + } else if (temperatureCelciusMethod == 2) { return "Axilla"; - } else if(temperatureCelciusMethod == 3){ + } else if (temperatureCelciusMethod == 3) { return "Rectal"; - } else if(temperatureCelciusMethod == 4){ + } else if (temperatureCelciusMethod == 4) { return "Tympanic"; - } else if(temperatureCelciusMethod == 5){ + } else if (temperatureCelciusMethod == 5) { return "Temporal"; } } - } diff --git a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart index a0cb98b3..9d3c9f00 100644 --- a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart @@ -1,9 +1,11 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/PendingReferral.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; +import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/patient-referral-item-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart'; @@ -144,8 +146,11 @@ class MyReferralDetailScreen extends StatelessWidget { fontSize: 16, hPadding: 8, vPadding: 12, - handler: () { - model.responseReferral(pendingReferral, true); + handler: () async { + await model.responseReferral(pendingReferral, true); + if(model.state == ViewState.ErrorLocal){ + DrAppToastMsg.showErrorToast(model.error); + } }, ), ), @@ -160,8 +165,11 @@ class MyReferralDetailScreen extends StatelessWidget { fontSize: 16, hPadding: 8, vPadding: 12, - handler: () { - model.responseReferral(pendingReferral, false); + handler: () async { + await model.responseReferral(pendingReferral, true); + if(model.state == ViewState.ErrorLocal){ + DrAppToastMsg.showErrorToast(model.error); + } }, ), ), diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 2c3be5b1..43a51237 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1036,6 +1036,10 @@ class TranslationBase { String get chiefComplaintErrorMsg => localizedValues['chiefComplaintErrorMsg'][locale.languageCode]; + String get referralStatus => + localizedValues['referralStatus'][locale.languageCode]; + String get referralRemark => + localizedValues['referralRemark'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index 17f33793..fb8276c8 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -37,25 +37,36 @@ class PatientReferralItemWidget extends StatelessWidget { children: [ Center( child: AppText( - "${patientName}", + patientName != null ? "${patientName}" : "", color: Colors.black, fontWeight: FontWeight.bold, fontSize: 16, ), ), if (referralStatus != null) - Container( - color: Color(0xFF4BA821), - padding: EdgeInsets.all(4), - child: AppText( - referralStatus - /*referralStatus == "46" - ? TranslationBase.of(context).approved - : TranslationBase.of(context).rejected*/, - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 12, - ), + Row( + children: [ + AppText( + TranslationBase.of(context).referralStatus, + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + Container( + color: Color(0xFF4BA821), + padding: EdgeInsets.all(4), + child: AppText( + referralStatus + /*referralStatus == "46" + ? TranslationBase.of(context).approved + : TranslationBase.of(context).rejected*/ + , + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], ), SizedBox( height: 8, @@ -83,11 +94,26 @@ class PatientReferralItemWidget extends StatelessWidget { SizedBox( height: 8, ), - AppText( - "${TranslationBase.of(context).dr} $referralDoctorName", - color: Colors.black, - fontWeight: FontWeight.bold, - fontSize: 12, + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "${TranslationBase.of(context).referralDoctor} : ", + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + Expanded( + child: AppText( + referralDoctorName != null + ? "${TranslationBase.of(context).dr} $referralDoctorName" + : "", + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], ), SizedBox( height: 8, @@ -112,11 +138,21 @@ class PatientReferralItemWidget extends StatelessWidget { SizedBox( height: 8, ), - AppText( - remark, - color: Colors.grey, - fontWeight: FontWeight.normal, - fontSize: 12, + Row( + children: [ + AppText( + TranslationBase.of(context).referralRemark, + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + AppText( + remark, + color: Colors.grey, + fontWeight: FontWeight.normal, + fontSize: 12, + ), + ], ), SizedBox( height: 16, From 35bc8c03a46c58799da8c764e1c94459dec198aa Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Tue, 26 Jan 2021 17:52:03 +0200 Subject: [PATCH 12/12] bug fixing --- .../medical-file/medical_file_page.dart | 178 ++--- .../prescription/add_prescription_form.dart | 34 +- .../prescription/prescription_screen.dart | 660 ++++++++++++------ lib/screens/procedures/procedure_screen.dart | 67 +- lib/util/dr_app_toast_msg.dart | 2 +- 5 files changed, 612 insertions(+), 329 deletions(-) diff --git a/lib/screens/medical-file/medical_file_page.dart b/lib/screens/medical-file/medical_file_page.dart index 54d978e3..a5fab36e 100644 --- a/lib/screens/medical-file/medical_file_page.dart +++ b/lib/screens/medical-file/medical_file_page.dart @@ -41,97 +41,109 @@ class _MedicalFilePageState extends State { thickness: 1.0, color: Colors.grey, ), - if (model.medicalFileList.length != 0) - ListView.builder( - //physics: , - physics: NeverScrollableScrollPhysics(), - scrollDirection: Axis.vertical, - shrinkWrap: true, - itemCount: model - .medicalFileList[0].entityList[0].timelines.length, - itemBuilder: (BuildContext ctxt, int index) { - return Padding( - padding: EdgeInsets.symmetric( - horizontal: 12.0, vertical: 8.0), - child: InkWell( - child: Container( - child: Column( - children: [ - Row( - children: [ - AppText( - TranslationBase.of(context).branch + - ": ", - fontWeight: FontWeight.w700, - ), - AppText(model - .medicalFileList[0] - .entityList[0] - .timelines[index] - .projectName), - ], - ), - Row( - children: [ - AppText( - TranslationBase.of(context) - .doctorName - .toUpperCase() + - ": ", - fontWeight: FontWeight.w700, - ), - Expanded( - child: AppText( + (model.medicalFileList.length != 0 && + model.medicalFileList != null) + ? ListView.builder( + //physics: , + physics: NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + shrinkWrap: true, + itemCount: model.medicalFileList[0].entityList[0] + .timelines.length, + itemBuilder: (BuildContext ctxt, int index) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: 12.0, vertical: 8.0), + child: InkWell( + child: Container( + child: Column( + children: [ + Row( + children: [ + AppText( + TranslationBase.of(context).branch + + ": ", + fontWeight: FontWeight.w700, + ), + AppText(model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .projectName), + ], + ), + Row( + children: [ + AppText( + TranslationBase.of(context) + .doctorName + .toUpperCase() + + ": ", + fontWeight: FontWeight.w700, + ), + Expanded( + child: AppText( + model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .doctorName, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + Row( + children: [ + AppText( + TranslationBase.of(context) + .clinicName + + ": ", + fontWeight: FontWeight.w700, + ), + AppText( model .medicalFileList[0] .entityList[0] .timelines[index] - .doctorName, - fontWeight: FontWeight.w700, + .clinicName, ), - ), - ], - ), - Row( - children: [ - AppText( - TranslationBase.of(context) - .clinicName + - ": ", - fontWeight: FontWeight.w700, - ), - AppText( - model.medicalFileList[0].entityList[0] - .timelines[index].clinicName, - ), - ], - ), - SizedBox(height: 10.0), - Divider( - height: 1.0, - thickness: 1.0, - color: Colors.grey.shade400, - ) - ], + ], + ), + SizedBox(height: 10.0), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey.shade400, + ) + ], + ), ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + MedicalFileDetails( + age: patient.age, + firstName: patient.firstName, + lastName: patient.lastName, + gender: patient.genderDescription, + encounterNumber: index, + pp: patient.patientMRN, + )), + ); + }, ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => MedicalFileDetails( - age: patient.age, - firstName: patient.firstName, - lastName: patient.lastName, - gender: patient.genderDescription, - encounterNumber: index, - pp: patient.patientMRN, - )), - ); - }, + ); + }) + : Center( + child: Container( + child: AppText( + 'THERES NO MEDICAL FILE FOR THIS Patient', ), - ); - }) + ), + ) ], ), ), diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index c519d134..1d481904 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -22,6 +22,7 @@ import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dar import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; +import 'package:flutter/services.dart'; addPrescriptionForm(context, PrescriptionViewModel model, PatiantInformtion patient, prescription) { @@ -101,6 +102,7 @@ class _PrescriptionFormWidgetState extends State { TextEditingController instructionController = TextEditingController(); DateTime selectedDate; dynamic selectedDrug; + int strengthChar; GetMedicationResponseModel _selectedMedication; GlobalKey key = new GlobalKey>(); @@ -525,21 +527,33 @@ class _PrescriptionFormWidgetState extends State { Container( width: MediaQuery.of(context).size.width * - 0.650, + 0.550, child: TextFields( + inputFormatters: [ + LengthLimitingTextInputFormatter(4) + ], hintText: TranslationBase.of(context) .strength, controller: strengthController, keyboardType: TextInputType.number, - validator: (value) { - if (value.isEmpty && - strengthController.text.length > - 4) - return TranslationBase.of(context) - .emptyMessage; - else - return null; + onChanged: (String value) { + setState(() { + strengthChar = value.length; + }); + if (strengthChar >= 4) { + DrAppToastMsg.showErrorToast( + "Only 4 Digits allowed for strength"); + } }, + // validator: (value) { + // if (value.isEmpty && + // strengthController.text.length > + // 4) + // return TranslationBase.of(context) + // .emptyMessage; + // else + // return null; + // }, ), ), SizedBox( @@ -548,7 +562,7 @@ class _PrescriptionFormWidgetState extends State { Container( width: MediaQuery.of(context).size.width * - 0.250, + 0.350, child: InkWell( onTap: unitsList != null ? () { diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 4208c599..2b71ab8e 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -22,6 +22,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; class NewPrescriptionScreen extends StatefulWidget { @@ -32,15 +33,21 @@ class NewPrescriptionScreen extends StatefulWidget { class _NewPrescriptionScreenState extends State { PersistentBottomSheetController _controller; final _scaffoldKey = GlobalKey(); + TextEditingController strengthController = TextEditingController(); int testNum = 0; + int strengthChar; PatiantInformtion patient; dynamic route; dynamic doseTime; dynamic frequencyUpdate; + dynamic updatedDuration; + dynamic units; List doseTimeList; List routeList; List frequencyList; + List durationList; + List unitsList; @override void initState() { @@ -48,7 +55,12 @@ class _NewPrescriptionScreenState extends State { routeList = List(); doseTimeList = List(); frequencyList = List(); + durationList = List(); + unitsList = List(); + dynamic unit1 = {"id": 1, "name": "MG"}; + dynamic unit2 = {"id": 2, "name": "MCG"}; + dynamic unit3 = {"id": 3, "name": "GM"}; dynamic frequency1 = {"id": 2, "name": "2 Times a day"}; dynamic frequency2 = {"id": 3, "name": "3 Times a day"}; dynamic frequency3 = {"id": 4, "name": "4 Times a day"}; @@ -115,7 +127,39 @@ class _NewPrescriptionScreenState extends State { dynamic route25 = {"id": 37, "name": "Inserted into Vagina"}; dynamic route26 = {"id": 36, "name": "Inserted into Rectum"}; dynamic route27 = {"id": 31, "name": "In Each Nostril"}; + dynamic duration1 = {"id": 1, "name": "For 1 Day"}; + dynamic duration2 = {"id": 2, "name": "For 2 Days"}; + dynamic duration3 = {"id": 3, "name": "For 3 Days"}; + dynamic duration4 = {"id": 4, "name": "For 4 Days"}; + dynamic duration5 = {"id": 5, "name": "For 5 Days"}; + dynamic duration6 = {"id": 6, "name": "For 6 Days"}; + dynamic duration7 = {"id": 7, "name": "For 7 Days"}; + dynamic duration8 = {"id": 8, "name": "For 8 Days"}; + dynamic duration9 = {"id": 9, "name": "For 9 Days"}; + dynamic duration10 = {"id": 10, "name": "For 10 Days"}; + dynamic duration11 = {"id": 14, "name": "For 14 Days"}; + dynamic duration12 = {"id": 21, "name": "For 21 Days"}; + dynamic duration13 = {"id": 30, "name": "For 30 Days"}; + dynamic duration14 = {"id": 45, "name": "For 45 Days"}; + dynamic duration15 = {"id": 60, "name": "For 60 Days"}; + dynamic duration16 = {"id": 90, "name": "For 90 Days"}; + durationList.add(duration1); + durationList.add(duration2); + durationList.add(duration3); + durationList.add(duration4); + durationList.add(duration5); + durationList.add(duration6); + durationList.add(duration7); + durationList.add(duration8); + durationList.add(duration9); + durationList.add(duration10); + durationList.add(duration11); + durationList.add(duration12); + durationList.add(duration13); + durationList.add(duration14); + durationList.add(duration15); + durationList.add(duration16); frequencyList.add(frequency1); frequencyList.add(frequency2); frequencyList.add(frequency3); @@ -182,6 +226,9 @@ class _NewPrescriptionScreenState extends State { routeList.add(route25); routeList.add(route26); routeList.add(route27); + unitsList.add(unit1); + unitsList.add(unit2); + unitsList.add(unit3); } Widget build(BuildContext context) { @@ -442,7 +489,7 @@ class _NewPrescriptionScreenState extends State { context) .size .height * - 0.282, + 0.295, width: MediaQuery.of( context) .size @@ -582,13 +629,18 @@ class _NewPrescriptionScreenState extends State { children: [ Expanded( child: - AppText( - model - .prescriptionList[0] - .entityList[index] - .remarks, - fontSize: - 14.0, + Container( + height: + 30, + child: + AppText( + model + .prescriptionList[0] + .entityList[index] + .remarks, + fontSize: + 11.5, + ), ), ), ], @@ -792,213 +844,389 @@ class _NewPrescriptionScreenState extends State { builder: (BuildContext context) { return StatefulBuilder(builder: (BuildContext context, StateSetter setState /*You can rename this!*/) { - return Container( - height: MediaQuery.of(context).size.height * 0.73, - child: Form( - child: Padding( - padding: - EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - drugName.toUpperCase(), - fontWeight: FontWeight.w900, - ), - SizedBox( - height: 30.0, - ), - Column( - children: [ - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: routeList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: routeList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - route = selectedValue; - }); - if (route == null) { - route = route['id']; - } - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).route, - route != null ? route['name'] : null, - true), - enabled: false, - ), + return DraggableScrollableSheet( + initialChildSize: 0.90, + maxChildSize: 0.90, + minChildSize: 0.6, + builder: + (BuildContext context, ScrollController scrollController) { + return Container( + height: MediaQuery.of(context).size.height * 1.0, + child: Form( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 20.0, vertical: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + drugName.toUpperCase(), + fontWeight: FontWeight.w900, ), - ), - SizedBox( - height: 12.0, - ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: doseTimeList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: doseTimeList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - doseTime = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).doseTime, - doseTime != null - ? doseTime['name'] - : null, - true), - enabled: false, - ), + SizedBox( + height: 10.0, ), - ), - SizedBox( - height: 12.0, - ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: frequencyList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: frequencyList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - frequencyUpdate = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).frequency, - frequencyUpdate != null - ? frequencyUpdate['name'] + Column( + children: [ + Container( + height: MediaQuery.of(context).size.height * + 0.070, + width: double.infinity, + child: Row( + children: [ + Container( + width: MediaQuery.of(context) + .size + .width * + 0.550, + child: TextFields( + inputFormatters: [ + LengthLimitingTextInputFormatter( + 4) + ], + hintText: + TranslationBase.of(context) + .strength, + controller: strengthController, + keyboardType: TextInputType.number, + onChanged: (String value) { + setState(() { + strengthChar = value.length; + }); + if (strengthChar >= 4) { + DrAppToastMsg.showErrorToast( + "Only 4 Digits allowed for strength"); + } + }, + // validator: (value) { + // if (value.isEmpty && + // strengthController.text.length > + // 4) + // return TranslationBase.of(context) + // .emptyMessage; + // else + // return null; + // }, + ), + ), + SizedBox( + width: 10.0, + ), + Container( + width: MediaQuery.of(context) + .size + .width * + 0.3200, + child: InkWell( + onTap: unitsList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: unitsList, + attributeName: 'name', + attributeValueId: 'id', + okText: + TranslationBase.of( + context) + .ok, + okFunction: + (selectedValue) { + setState(() { + units = selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext + context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: + textFieldSelectorDecoration( + 'UNIT Type', + units != null + ? units['name'] + : null, + true), + enabled: false, + ), + ), + ), + ], + ), + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: routeList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: routeList, + attributeName: 'name', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + route = selectedValue; + }); + if (route == null) { + route = route['id']; + } + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: + (BuildContext context) { + return dialog; + }, + ); + } : null, - true), - enabled: false, - ), - ), - ), - SizedBox( - height: 12.0, - ), - Container( - decoration: BoxDecoration( - borderRadius: - BorderRadius.all(Radius.circular(6.0)), - border: Border.all( - width: 1.0, color: HexColor("#CCCCCC"))), - child: TextFields( - hintText: remarks, - controller: remarksController, - maxLines: 7, - minLines: 4, - ), - ), - SizedBox( - height: 12.0, - ), - SizedBox( - height: MediaQuery.of(context).size.height * 0.12, - ), - Container( - margin: EdgeInsets.all( - SizeConfig.widthMultiplier * 2), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: 'update prescription'.toUpperCase(), - onPressed: () { - updatePrescription( - doseUnit: doseUnit, - doseStreangth: doseStreangth, - duration: duration, - startDate: startDate, - doseId: dose, - frequencyId: frequency, - routeId: rouat, - patient: patient, - model: model, - drugId: drugId, - remarks: remarksController.text, - route: route != null - ? route['id'].toString() - : rouat, - frequency: frequencyUpdate != null - ? frequencyUpdate['id'].toString() - : frequency, - dose: doseTime != null - ? doseTime['id'].toString() - : dose, - enteredRemarks: enteredRemarks); - Navigator.pop(context); - }, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context).route, + route != null + ? route['name'] + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: doseTimeList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: doseTimeList, + attributeName: 'name', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + doseTime = selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: + (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context) + .doseTime, + doseTime != null + ? doseTime['name'] + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: frequencyList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: frequencyList, + attributeName: 'name', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + frequencyUpdate = + selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: + (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context) + .frequency, + frequencyUpdate != null + ? frequencyUpdate['name'] + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: durationList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: durationList, + attributeName: 'name', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + updatedDuration = + selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: + (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context) + .duration, + updatedDuration != null + ? updatedDuration['name'] + .toString() + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0)), + border: Border.all( + width: 1.0, + color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: remarks, + controller: remarksController, + maxLines: 7, + minLines: 4, + ), + ), + SizedBox( + height: 12.0, + ), + SizedBox( + height: MediaQuery.of(context).size.height * + 0.12, + ), + Container( + margin: EdgeInsets.all( + SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: 'update prescription' + .toUpperCase(), + onPressed: () { + updatePrescription( + newDoseStreangth: + strengthController + .text.isNotEmpty + ? strengthController + .text + : doseStreangth, + newUnit: units != null + ? units['id'].toString() + : doseUnit, + doseUnit: doseUnit, + doseStreangth: doseStreangth, + duration: duration, + startDate: startDate, + doseId: dose, + frequencyId: frequency, + routeId: rouat, + patient: patient, + model: model, + newDuration: updatedDuration != + null + ? updatedDuration['id'] + .toString() + : duration, + drugId: drugId, + remarks: remarksController.text, + route: route != null + ? route['id'].toString() + : rouat, + frequency: frequencyUpdate != null + ? frequencyUpdate['id'] + .toString() + : frequency, + dose: doseTime != null + ? doseTime['id'].toString() + : dose, + enteredRemarks: enteredRemarks); + Navigator.pop(context); + }, + ), + ], + ), ), ], ), - ), - ], + ], + ), ), - ], - ), - ), - )); + )); + }); }); }); } @@ -1016,7 +1244,10 @@ class _NewPrescriptionScreenState extends State { String startDate, String doseUnit, String doseStreangth, + String newDoseStreangth, String duration, + String newDuration, + String newUnit, String enteredRemarks, PatiantInformtion patient}) async { //PrescriptionViewModel model = PrescriptionViewModel(); @@ -1031,10 +1262,13 @@ class _NewPrescriptionScreenState extends State { sss.add(PrescriptionRequestModel( covered: true, - dose: int.parse( - doseStreangth), //frequency.isNotEmpty ? int.parse(dose) : 1, + dose: newDoseStreangth.isNotEmpty + ? int.parse(newDoseStreangth) + : int.parse( + doseStreangth), //frequency.isNotEmpty ? int.parse(dose) : 1, itemId: drugId, - doseUnitId: int.parse(doseUnit), + doseUnitId: + newUnit.isNotEmpty ? int.parse(newUnit) : int.parse(doseUnit), route: route.isNotEmpty ? int.parse(route) : int.parse(routeId), frequency: frequency.isNotEmpty ? int.parse(frequency) @@ -1043,7 +1277,9 @@ class _NewPrescriptionScreenState extends State { approvalRequired: true, icdcode10Id: "test2", doseTime: dose.isNotEmpty ? int.parse(dose) : int.parse(doseId), - duration: int.parse(duration), + duration: newDuration.isNotEmpty + ? int.parse(newDuration) + : int.parse(duration), doseStartDate: startDate)); updatePrescriptionReqModel.prescriptionRequestModel = sss; //postProcedureReqModel.procedures = controlsProcedure; diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart index b78bf65d..05850316 100644 --- a/lib/screens/procedures/procedure_screen.dart +++ b/lib/screens/procedures/procedure_screen.dart @@ -1,14 +1,14 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; -import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; +import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.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/screens/procedures/entity_list_checkbox_search_widget.dart'; @@ -16,17 +16,12 @@ import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.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:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; -import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart'; -import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; -import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -46,6 +41,7 @@ class _ProcedureScreenState extends State { } TextEditingController procedureController = TextEditingController(); + @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; @@ -269,8 +265,16 @@ class _ProcedureScreenState extends State { .spaceBetween, children: [ Container( - height: 120.0, - width: 45.0, + height: MediaQuery.of( + context) + .size + .height * + 0.18, + width: MediaQuery.of( + context) + .size + .width * + 0.135, child: Column( children: [ AppText( @@ -312,8 +316,16 @@ class _ProcedureScreenState extends State { ), Expanded( child: Container( - height: 120, - width: 325.0, + height: MediaQuery.of( + context) + .size + .height * + 0.2, + width: MediaQuery.of( + context) + .size + .width * + 0.05, child: Column( children: [ Row( @@ -415,26 +427,35 @@ class _ProcedureScreenState extends State { children: [ Expanded( child: - AppText( - model - .procedureList[ - 0] - .entityList[ - index] - .remarks - .toString(), - fontSize: - 13.5, + Container( + height: MediaQuery.of(context) + .size + .height * + 0.052, + width: MediaQuery.of(context) + .size + .width * + 0.10, + child: + AppText( + model + .procedureList[0] + .entityList[index] + .remarks + .toString(), + fontSize: + 11.5, + ), ), ), ], ), SizedBox( - height: 10.0, + height: 20.0, ), Divider( - height: 5.0, + height: 1.0, thickness: 1.0, color: Colors.grey, diff --git a/lib/util/dr_app_toast_msg.dart b/lib/util/dr_app_toast_msg.dart index 48addfba..e4cfa65b 100644 --- a/lib/util/dr_app_toast_msg.dart +++ b/lib/util/dr_app_toast_msg.dart @@ -29,7 +29,7 @@ class DrAppToastMsg { icon: ICON.CLOSE, fontSize: 16, imageSize: 35, - timeInSeconds: 185, + timeInSeconds: 9000, textColor: Colors.white); }