diff --git a/assets/fonts/DoctorApp.ttf b/assets/fonts/DoctorApp.ttf index 22539da0..7c3f1bf1 100644 Binary files a/assets/fonts/DoctorApp.ttf and b/assets/fonts/DoctorApp.ttf differ diff --git a/lib/client/base_app_client.dart b/lib/client/base_app_client.dart index c1438159..e38db07c 100644 --- a/lib/client/base_app_client.dart +++ b/lib/client/base_app_client.dart @@ -96,8 +96,9 @@ class BaseAppClient { } else { var parsed = json.decode(response.body.toString()); if (!parsed['IsAuthenticated']) { - await helpers.logout(); - helpers.showErrorToast('Your session expired Please login agian'); + onFailure(getError(parsed), statusCode); + //await helpers.logout(); + //helpers.showErrorToast('Your session expired Please login agian'); } else if (parsed['MessageStatus'] == 1) { if (!parsed['IsAuthenticated']) onFailure(getError(parsed), statusCode); diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 77836895..077bd7f5 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -7,7 +7,7 @@ const Map> localizedValues = { 'theDoctor': {'en': 'Doctor', 'ar': 'الطبيب'}, 'reply': {'en': 'Reply', 'ar': 'رد'}, 'time': {'en': 'Time', 'ar': 'الوقت'}, - 'fileNo': {'en': 'File No:', 'ar': 'رقم الملف:'}, + 'fileNo': {'en': 'File No : ', 'ar': 'رقم الملف :'}, 'mobileNo': {'en': 'Mobile No', 'ar': 'رقم الموبايل'}, 'messagesScreenToolbarTitle': {'en': 'Messages', 'ar': 'الرسائل'}, 'mySchedule': {'en': 'Schedule', 'ar': 'جدولي'}, @@ -329,7 +329,7 @@ const Map> localizedValues = { 'referredFrom': {'en': "Referred From", 'ar': 'محال من'}, 'branch': {'en': "Branch", 'ar': 'الفرع'}, 'chooseAppointment': {'en': "Choose Appointment", 'ar': 'اختر موعد'}, - 'appointmentNo': {'en': "Appointment #:", 'ar': '# الموعد:'}, + 'appointmentNo': {'en': "Appointment # : ", 'ar': '# الموعد:'}, 'refer': {'en': "REFER", 'ar': 'إحالة'}, 'rejected': {'en': "Rejected", 'ar': 'مرفوض'}, 'sameBranch': {'en': "Same Branch", 'ar': 'نفس الفرع'}, @@ -582,14 +582,14 @@ const Map> localizedValues = { }, 'searchExamination': {'en': "Search Examination", 'ar': "فحص البحث"}, 'addExamination': {'en': "Add Examination", 'ar': "اضافه"}, - 'doc': {'en': "Doc :", 'ar': " د: "}, + 'doc': {'en': "Doc : ", 'ar': " د : "}, 'patientNoDetailErrMsg': { 'en': "There is no detail for this patient", 'ar': "لا توجد تفاصيل لهذا المريض" }, - 'allergicTO': {'en': "ALLERGIC TO ", 'ar':" حساس من" }, - 'normal': {'en': "Normal", 'ar':"عادي" }, - 'abnormal': {'en': "Abnormal", 'ar':" غير عادي" }, + 'allergicTO': {'en': "ALLERGIC TO ", 'ar': " حساس من"}, + 'normal': {'en': "Normal", 'ar': "عادي"}, + 'abnormal': {'en': "Abnormal", 'ar': " غير عادي"}, "systolic-lng": {"en": "Systolic", "ar": "الإنقباض"}, "diastolic-lng": {"en": "Diastolic", "ar": "الإنبساط"}, "mass": {"en": "Mass", "ar": "كتلة"}, @@ -620,19 +620,50 @@ const Map> localizedValues = { }, 'updateProcedure': {'en': "Update Procedure", 'ar': "تحديث العملية"}, 'orderProcedure': {'en': "order procedure", 'ar': "طلب العمليات"}, - 'nameOrICD': {'en': "Name or ICD", 'ar':"الاسم او  ICD" }, - 'dType': {'en': "Type", 'ar':"النوع" }, - 'addAssessmentDetails': {'en': "Add Assessment Details", 'ar':"أضف تفاصيل التقييم" }, - 'progressNoteSOAP': {'en': "Progress Note", 'ar':"ملاحظة التقدم" }, - 'addProgressNote': {'en': "Add Progress Note", 'ar':"أضف ملاحظة التقدم" }, - 'createdBy': {'en': "Created By :", 'ar':"أضيفت : " }, - 'editedBy': {'en': "Edited By :", 'ar':"عدلت : " }, - 'currentMedications': {'en': "Current Medications", 'ar':"الأدوية الحالية" }, - 'noItem': {'en': "No items exists in this list", 'ar':"لا توجد عناصر في هذه القائمة" }, - 'postUcafSuccessMsg': {'en': "UCAF request send successfully", 'ar':"تم ارسال طلب UCAF بنجاح" }, - 'vitalSignDetailEmpty': {'en': "There is no data for this vital sign", 'ar':"لا توجد بيانات لهذه العلامة الحيوية" }, - 'assessmentErrorMsg': {'en': "You have to add at least one assessment.", 'ar':"يجب عليك إضافة تقييم واحد على الأقل." }, - 'examinationErrorMsg': {'en': "You have to add at least one examination.", 'ar':"يجب عليك إضافة الفحص واحد على الأقل." }, - 'progressNoteErrorMsg': {'en': "You have to add progress Note.", 'ar':"يجب عليك إضافة ملاحظة التقدم." }, - 'chiefComplaintErrorMsg': {'en': "You have to add chief complaint fields correctly .", 'ar':"يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" }, + 'nameOrICD': {'en': "Name or ICD", 'ar': "الاسم او  ICD"}, + 'dType': {'en': "Type", 'ar': "النوع"}, + 'addAssessmentDetails': { + 'en': "Add Assessment Details", + 'ar': "أضف تفاصيل التقييم" + }, + 'progressNoteSOAP': {'en': "Progress Note", 'ar': "ملاحظة التقدم"}, + 'addProgressNote': {'en': "Add Progress Note", 'ar': "أضف ملاحظة التقدم"}, + 'createdBy': {'en': "Created By :", 'ar': "أضيفت : "}, + 'editedBy': {'en': "Edited By :", 'ar': "عدلت : "}, + 'currentMedications': {'en': "Current Medications", 'ar': "الأدوية الحالية"}, + 'noItem': { + 'en': "No items exists in this list", + 'ar': "لا توجد عناصر في هذه القائمة" + }, + 'postUcafSuccessMsg': { + 'en': "UCAF request send successfully", + 'ar': "تم ارسال طلب UCAF بنجاح" + }, + 'vitalSignDetailEmpty': { + 'en': "There is no data for this vital sign", + 'ar': "لا توجد بيانات لهذه العلامة الحيوية" + }, + 'onlyOfftimeHoliday': { + 'en': "You can only apply holiday or offtime from mobile app", + 'ar': "يمكنك فقط تطبيق عطلة أو إجازة من تطبيق الهاتف" + }, + 'active': {'en': "Active", 'ar': "نشيط"}, + 'hold': {'en': "Hold", 'ar': "معلق"}, + 'loading': {'en': "Loading...", 'ar': "جار التحميل..."}, + 'assessmentErrorMsg': { + 'en': "You have to add at least one assessment.", + 'ar': "يجب عليك إضافة تقييم واحد على الأقل." + }, + 'examinationErrorMsg': { + 'en': "You have to add at least one examination.", + 'ar': "يجب عليك إضافة الفحص واحد على الأقل." + }, + 'progressNoteErrorMsg': { + 'en': "You have to add progress Note.", + 'ar': "يجب عليك إضافة ملاحظة التقدم." + }, + 'chiefComplaintErrorMsg': { + 'en': "You have to add chief complaint fields correctly .", + 'ar': "يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" + }, }; diff --git a/lib/core/service/SOAP_service.dart b/lib/core/service/SOAP_service.dart index abb832c7..d0cebe77 100644 --- a/lib/core/service/SOAP_service.dart +++ b/lib/core/service/SOAP_service.dart @@ -217,7 +217,9 @@ class SOAPService extends LookupService { await baseAppClient.post (GET_ALLERGY, onSuccess: (dynamic response, int statusCode) { + print("Success"); patientAllergiesList.clear(); + response['List_Allergies']['entityList'].forEach((v) { patientAllergiesList.add(GetAllergiesResModel.fromJson(v)); }); diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart index 98c6143b..ac25579c 100644 --- a/lib/core/service/prescription_service.dart +++ b/lib/core/service/prescription_service.dart @@ -120,7 +120,60 @@ class PrescriptionService extends BaseService { List prescription) async { Map request = { "Prescription": { - "objPatientInfo": {"Gender": patient.gender, "Age": patient.age}, + "objPatientInfo": {"Gender": "Male", "Age": "21/06/1967"}, + "objVitalSign": {"Height": "180", "Weight": "37"}, + "objPrescriptionItems": [ + { + "DrugId": "83-20-00-30-20-03-03", + "DrugName": "WARFARIN 1 MG TAB 28'S (N)", + "Dose": "1", + "DoseType": "04", + "Unit": "actuation(s)", + "FrequencyType": "1/3/Day", + "Duration": "3/Day", + "IsScreen": "true" + }, + { + "DrugId": "64-20-00-10-00-03-15", + "DrugName": "PANADOL 500 MG TAB 24'S(DIS)", + "Dose": "1", + "DoseType": "04", + "Unit": "MG", + "FrequencyType": "3/1/Day", + "Duration": "4/Day", + "RouteID": "24", + "IsScreen": "true" + } + ], + "objAllergies": { + "Allergy": { + "objProperties": {"Id": "26", "Name": "phenoxymethylpenicillin"} + } + }, + "objDiagnosis": { + "Diagnosis": { + "objProperties": {"Id": "A01.1", "Name": "Paratyphoid fever A"} + } + }, + "IsDoctor": "false", + "IsPharmacist": "false" + }, + "IPAdress": "10.10.10.10", + "Channel": 9, + "LanguageID": 2, + "VersionID": 5.3, + "SessionID": "BlUSkYymTt", + "IsLoginForDoctorApp": true, + "PatientOutSA": 0, + "TokenID": "@dm!n", + "OutSA": true + }; + Map requestN = { + "Prescription": { + "objPatientInfo": { + "Gender": patient.gender == 1 ? 'Male' : 'Female', + "Age": patient.age + }, "objVitalSign": {"Height": vital.heightCm, "Weight": vital.weightKg}, "objPrescriptionItems": prescription[0].entityList, "objAllergies": allergy, diff --git a/lib/core/service/sickleave_service.dart b/lib/core/service/sickleave_service.dart index 63a7496c..15d77d5c 100644 --- a/lib/core/service/sickleave_service.dart +++ b/lib/core/service/sickleave_service.dart @@ -100,7 +100,7 @@ class SickLeaveService extends BaseService { hasError = true; super.error = error; }, - body: {'PatientMRN': patientMRN}, + body: {'PatientMRN': patientMRN, "Status": 0}, ); } diff --git a/lib/core/viewModel/SOAP_view_model.dart b/lib/core/viewModel/SOAP_view_model.dart index 2c312ade..076f379c 100644 --- a/lib/core/viewModel/SOAP_view_model.dart +++ b/lib/core/viewModel/SOAP_view_model.dart @@ -237,13 +237,18 @@ class SOAPViewModel extends BaseViewModel { setState(ViewState.Idle); } - - Future getPatientAllergy(GeneralGetReqForSOAP generalGetReqForSOAP) async { - - setState(ViewState.Busy); + Future getPatientAllergy(GeneralGetReqForSOAP generalGetReqForSOAP, + {isLocalBusy = false}) async { + if (isLocalBusy) { + setState(ViewState.BusyLocal); + } else + setState(ViewState.Busy); await _SOAPService.getPatientAllergy(generalGetReqForSOAP); if (_SOAPService.hasError) { error = _SOAPService.error; + if (isLocalBusy) { + setState(ViewState.ErrorLocal); + } else setState(ViewState.Error); } else setState(ViewState.Idle); diff --git a/lib/core/viewModel/patient_view_model.dart b/lib/core/viewModel/patient_view_model.dart index 2fcdc779..d12ac7f5 100644 --- a/lib/core/viewModel/patient_view_model.dart +++ b/lib/core/viewModel/patient_view_model.dart @@ -2,7 +2,6 @@ import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/service/patient_service.dart'; import 'package:doctor_app_flutter/models/patient/lab_orders/lab_orders_res_model.dart'; import 'package:doctor_app_flutter/models/patient/lab_result/lab_result.dart'; -import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/models/patient/prescription/prescription_report.dart'; import 'package:doctor_app_flutter/models/patient/prescription/prescription_report_for_in_patient.dart'; import 'package:doctor_app_flutter/models/patient/prescription/prescription_res_model.dart'; @@ -56,16 +55,13 @@ class PatientViewModel extends BaseViewModel { } else { setState(ViewState.Busy); } - return _patientService.getPatientList(patient, patientType); + if (_patientService.hasError) { error = _patientService.error; - if (isBusyLocal) { - setState(ViewState.ErrorLocal); - } else { - setState(ViewState.Error); - } - } else - setState(ViewState.Idle); + setState(ViewState.Error); + } + return _patientService.getPatientList(patient, patientType); + } Future getPatientVitalSign(patient) async { diff --git a/lib/core/viewModel/project_view_model.dart b/lib/core/viewModel/project_view_model.dart index aed67d83..e144042e 100644 --- a/lib/core/viewModel/project_view_model.dart +++ b/lib/core/viewModel/project_view_model.dart @@ -114,18 +114,17 @@ class ProjectViewModel with ChangeNotifier { } void getProfile() async { - // Map profile = await sharedPref.getObj(DOCTOR_PROFILE); - // DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile); - // ProfileReqModel docInfo = new ProfileReqModel( - // doctorID: doctorProfile.doctorID, - // clinicID: doctorProfile.clinicID, - // license: true, - // projectID: doctorProfile.projectID, - // tokenID: '', - // languageID: 2); + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile); + ProfileReqModel docInfo = new ProfileReqModel( + doctorID: doctorProfile.doctorID, + clinicID: doctorProfile.clinicID, + license: true, + projectID: doctorProfile.projectID, + ); Provider.of(AppGlobal.CONTEX, listen: false) - .getDocProfiles(ProfileReqModel().toJson()) + .getDocProfiles(docInfo.toJson()) .then((res) async { sharedPref.setObj(DOCTOR_PROFILE, res['DoctorProfileList'][0]); }).catchError((err) { diff --git a/lib/icons_app/config.json b/lib/icons_app/config.json index ede09595..15dda748 100644 --- a/lib/icons_app/config.json +++ b/lib/icons_app/config.json @@ -412,6 +412,20 @@ "leaves" ] }, + { + "uid": "4477771717c5280f9030b8e410040eda", + "css": "search_patient-1", + "code": 59465, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1142.7 436.8A165.2 165.2 0 1 0 1307.8 601.9 165.4 165.4 0 0 0 1142.7 436.8ZM1142.7 748.8A146.9 146.9 0 1 1 1289.5 601.9 147 147 0 0 1 1142.7 748.8ZM1023.4 611.1H1041.7A110.3 110.3 0 0 1 1151.8 500.9V482.7A128.5 128.5 0 0 0 1023.4 611.1ZM1476.4 883.8L1489.3 870.9 1357.9 739.4 1345 752.4 1322 729.4A219.8 219.8 0 1 0 1270.1 781.5L1293.1 804.5 1280.2 817.4 1411.4 948.7 1424.4 935.7 1306 817.3 1357.9 765.4ZM1142.6 803.9A201.9 201.9 0 1 1 1344.4 602 202.2 202.2 0 0 1 1142.6 803.9ZM1306 791.3L1284.7 770.1A220.1 220.1 0 0 0 1310.7 744.1L1332.1 765.5ZM48.4 483.9H301.4A96.4 96.4 0 0 1 276.7 346.5 305.1 305.1 0 0 1 257.9 242V201.9A201.8 201.8 0 0 1 564.5 29.2 201.8 201.8 0 0 1 871 201.8V205.4L887 177.2 957.1 299.9A80.6 80.6 0 0 1 869.7 417.5 96.9 96.9 0 0 1 785.1 499.2 226.4 226.4 0 0 1 645.1 662.2V696.2L780.4 720.8A267.4 267.4 0 0 1 999.9 983.9V999.9H129V983.9A267.4 267.4 0 0 1 348.6 720.8L483.9 696.2V662.3A224.6 224.6 0 0 1 396.8 602.3C396 602.6 395.1 602.8 394.3 603.1A92.8 92.8 0 0 1 352.9 612.9H48.4A48.4 48.4 0 0 1 0 564.5V532.3A48.4 48.4 0 0 1 48.4 483.9ZM339.5 465.8C339.3 461.1 338.7 456.4 338.7 451.7V341A64.2 64.2 0 0 0 339.5 465.7ZM838.7 242V201.9A169.6 169.6 0 0 0 575.1 60.8L564.5 67.8 554 60.8A169.6 169.6 0 0 0 290.3 201.9V242A273.2 273.2 0 0 0 302.3 322.2 96.2 96.2 0 0 1 338.7 308.1V282.4L403.2 234V193.5A32.3 32.3 0 0 1 435.5 161.3H693.5A32.3 32.3 0 0 1 725.8 193.5V233.9L790.3 282.3V307.8A95.4 95.4 0 0 1 810.8 313.9 78.8 78.8 0 0 1 817 299.9L837.7 263.6C838.3 256.4 838.7 249.2 838.7 242ZM435.5 290.4H693.6V193.5H435.5ZM887.9 387.2A47.6 47.6 0 0 0 929.3 316L887.1 242.2 844.9 315.9A47.6 47.6 0 0 0 887.6 387.1ZM838.8 403.2A79.4 79.4 0 0 1 807.4 348.1 63.2 63.2 0 0 0 790.4 340.9V451.6C790.4 456.4 790 461 789.7 465.7A64.5 64.5 0 0 0 838.7 403.2ZM758.1 451.6V298.4L725.9 274.3V290.4A32.3 32.3 0 0 1 693.6 322.6H435.5A32.3 32.3 0 0 1 403.2 290.4V274.3L370.9 298.4V451.6A195.2 195.2 0 0 0 374.4 486.4 92.8 92.8 0 0 1 394.3 493.6 60.6 60.6 0 0 0 421.2 500H532.2A48.4 48.4 0 1 1 532.2 596.7H436.9A193.2 193.2 0 0 0 758.1 451.6ZM532.3 564.5A16 16 0 1 0 532.3 532.2H516.3V564.5ZM637.4 727.6A80.7 80.7 0 0 1 583.6 771.6 64.5 64.5 0 0 0 645.1 806.4C680.7 806.4 709.6 784.7 709.6 758A36.4 36.4 0 0 0 704.4 739.7ZM161.8 967.8H967.2A235 235 0 0 0 774.7 752.6L740.8 746.5A64.8 64.8 0 0 1 742 758.2C742 802.6 698.6 838.8 645.2 838.8A102.9 102.9 0 0 1 564.6 802.6 102.9 102.9 0 0 1 483.9 838.7C430.4 838.7 387.1 802.5 387.1 758.1A65.9 65.9 0 0 1 388.2 746.4L354.4 752.6A235 235 0 0 0 161.8 967.8ZM424.5 739.9A36.4 36.4 0 0 0 419.4 758.2C419.4 784.9 448.3 806.6 483.9 806.6A64.5 64.5 0 0 0 545.4 771.8 80.6 80.6 0 0 1 491.6 727.7ZM516 677.4V693.4A48.4 48.4 0 1 0 612.8 693.4V672.1A222.6 222.6 0 0 1 516 672.1ZM379.6 574.3A92.9 92.9 0 0 1 421 564.5H483.9V532.3H421.2A93.1 93.1 0 0 1 379.9 522.5 60.6 60.6 0 0 0 352.9 516H129V580.5H352.9A60.6 60.6 0 0 0 379.9 574.3ZM32.1 564.5A16 16 0 0 0 48.1 580.5H96.8V516H48.4A16 16 0 0 0 32.4 532ZM524.9 368.4L507 341.5 410.3 406.1 428.2 432.9ZM718.5 405.8L621.8 341.3 603.9 368.1 700.6 432.7Z", + "width": 1489 + }, + "search": [ + "search_patient" + ] + }, { "uid": "740f78c2b53c8cc100a8b0d283bbd34f", "css": "home_icon-1", diff --git a/lib/icons_app/doctor_app_icons.dart b/lib/icons_app/doctor_app_icons.dart index ef01c934..7c05c223 100644 --- a/lib/icons_app/doctor_app_icons.dart +++ b/lib/icons_app/doctor_app_icons.dart @@ -1,5 +1,5 @@ /// Flutter icons DoctorApp -/// Copyright (C) 2020 by original authors @ fluttericon.com, fontello.com +/// Copyright (C) 2021 by original authors @ fluttericon.com, fontello.com /// This font was generated by FlutterIcon.com, which is derived from Fontello. /// /// To use this font, place it in your fonts/ directory and include the @@ -11,7 +11,7 @@ /// fonts: /// - asset: fonts/DoctorApp.ttf /// -/// +/// /// import 'package:flutter/widgets.dart'; @@ -19,64 +19,36 @@ class DoctorApp { DoctorApp._(); static const _kFontFam = 'DoctorApp'; - static const String _kFontPkg = null; + static const _kFontPkg = null; - static const IconData female_icon = - IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData male = - IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData reject_icon = - IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData home_icon_active = - IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData menu_icon = - IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData menu_icon_active = - IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData message_icon = - IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData message_icon_active = - IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData scdedule_icon_active = - IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData schedule_icon = - IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData discharge_patient = - IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData approved_icon = - IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData pending_icon = - IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData in_patient_white = - IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData lab_results = - IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData home_icon = - IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData operations = - IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData out_patient = - IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData patient = - IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData qr_code = - IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData radiology = - IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData referral = - IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData search_patient = - IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData mail = - IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData medicine_search = - IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData referred = - IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData sync_icon = - IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData drawer_icon = - IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg); - static const IconData leaves = - IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData female_icon = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData male = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData reject_icon = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon_active = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon_active = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon_active = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData scdedule_icon_active = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule_icon = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData discharge_patient = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData approved_icon = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData pending_icon = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData in_patient_white = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData lab_results = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData operations = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData out_patient = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData patient = IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_code = IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData radiology = IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referral = IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_patient = IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData mail = IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData medicine_search = IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referred = IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData sync_icon = IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData drawer_icon = IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData leaves = IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_patient_1 = IconData(0xe849, fontFamily: _kFontFam, fontPackage: _kFontPkg); } diff --git a/lib/models/SOAP/GetAllergiesResModel.dart b/lib/models/SOAP/GetAllergiesResModel.dart index a403bd2e..1eeca63e 100644 --- a/lib/models/SOAP/GetAllergiesResModel.dart +++ b/lib/models/SOAP/GetAllergiesResModel.dart @@ -11,6 +11,7 @@ class GetAllergiesResModel { bool isUpdatedByNurse; int severity; String severityName; + String remarks; GetAllergiesResModel( {this.allergyDiseaseId, @@ -24,7 +25,7 @@ class GetAllergiesResModel { this.isChecked, this.isUpdatedByNurse, this.severity, - this.severityName}); + this.severityName, this.remarks=''}); GetAllergiesResModel.fromJson(Map json) { allergyDiseaseId = json['allergyDiseaseId']; @@ -39,6 +40,7 @@ class GetAllergiesResModel { isUpdatedByNurse = json['isUpdatedByNurse']; severity = json['severity']; severityName = json['severityName']; + remarks = json['remarks']; } Map toJson() { @@ -55,6 +57,7 @@ class GetAllergiesResModel { data['isUpdatedByNurse'] = this.isUpdatedByNurse; data['severity'] = this.severity; data['severityName'] = this.severityName; + data['remarks'] = this.remarks; return data; } } diff --git a/lib/models/patient/patiant_info_model.dart b/lib/models/patient/patiant_info_model.dart index f7c4b0a2..3547a73d 100644 --- a/lib/models/patient/patiant_info_model.dart +++ b/lib/models/patient/patiant_info_model.dart @@ -42,6 +42,7 @@ class PatiantInformtion { int patientMRN; String admissionNo; String admissionDate; + String createdOn; String roomId; String bedId; String nursingStationId; @@ -77,6 +78,7 @@ class PatiantInformtion { this.patientType, this.admissionNo, this.admissionDate, + this.createdOn, this.roomId, this.bedId, this.nursingStationId, @@ -129,6 +131,7 @@ class PatiantInformtion { patientType: json["PatientType"]?? json["patientType"], admissionNo: json["AdmissionNo"]?? json["admissionNo"], admissionDate: json["AdmissionDate"]?? json["admissionDate"], + createdOn: json["CreatedOn"]?? json["CreatedOn"], roomId: json["RoomID"]?? json["roomID"], bedId: json["BedID"]?? json["bedID"], nursingStationId: json["NursingStationID"]?? json["nursingStationID"], @@ -158,10 +161,4 @@ class PatiantInformtion { patientMRN :json['patientMRN'] ?? json['PatientMRN'], ); - - - - - - } diff --git a/lib/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart b/lib/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart index 66890a8f..1d0da9c5 100644 --- a/lib/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart +++ b/lib/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart @@ -6,15 +6,17 @@ class GetPatientArrivalListRequestModel { int pageIndex; int pageSize; int clinicID; + int patientMRN; GetPatientArrivalListRequestModel( {this.vidaAuthTokenID, - this.from, - this.to, - this.doctorID, - this.pageIndex, - this.pageSize, - this.clinicID}); + this.from, + this.to, + this.doctorID, + this.pageIndex, + this.pageSize, + this.clinicID, + this.patientMRN}); GetPatientArrivalListRequestModel.fromJson(Map json) { vidaAuthTokenID = json['VidaAuthTokenID']; @@ -24,6 +26,7 @@ class GetPatientArrivalListRequestModel { pageIndex = json['PageIndex']; pageSize = json['PageSize']; clinicID = json['ClinicID']; + patientMRN = json['PatientMRN']; } Map toJson() { @@ -35,6 +38,8 @@ class GetPatientArrivalListRequestModel { data['PageSize'] = this.pageSize; data['ClinicID'] = this.clinicID; data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['PatientMRN'] = this.patientMRN; + return data; } diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index 1ed441e4..84121abf 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -9,6 +9,7 @@ import 'package:doctor_app_flutter/core/viewModel/imei_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/screens/auth/verification_methods_screen.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_loader_widget.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -120,18 +121,9 @@ class _LoginsreenState extends State { ), ], ) - - // : Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // AuthHeader(loginType.unknownUser), - // KnownUserLogin(), - // ], - // ), ])) ]) - : Center(child: CircularProgressIndicator()), + : Center(child: AppLoaderWidget()), ), )); } diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 18ad7d8d..85dd440d 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -116,7 +116,7 @@ class _DashboardScreenState extends State { IsLoginForDoctorApp: true, PatientOutSA: false); return BaseView( - //onModelReady: (model) => model.getDashboard(), + onModelReady: (model) => model.getDashboard(), builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: false, @@ -804,7 +804,7 @@ class _DashboardScreenState extends State { children: [ Center( child: Icon( - DoctorApp.search_patient, + DoctorApp.search_patient_1, size: 50, color: Colors.black, ), diff --git a/lib/screens/medical-file/medical_file_page.dart b/lib/screens/medical-file/medical_file_page.dart index 069dfbc2..54d978e3 100644 --- a/lib/screens/medical-file/medical_file_page.dart +++ b/lib/screens/medical-file/medical_file_page.dart @@ -4,6 +4,7 @@ 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/medical-file/medical_file_details.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; @@ -34,57 +35,7 @@ class _MedicalFilePageState extends State { child: Container( child: Column( children: [ - Padding( - padding: EdgeInsets.all(8.0), - child: Row( - children: [ - AvatarWidget( - Icon( - patient.genderDescription == "Male" - ? DoctorApp.male - : DoctorApp.female_icon, - size: 70, - color: Colors.white, - ), - ), - SizedBox( - width: 20, - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - patient.firstName + ' ' + patient.lastName, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - Row( - children: [ - AppText( - TranslationBase.of(context).fileNo, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - SizedBox( - width: 5.0, - ), - AppText( - patient.age.toString(), - color: Colors.black, - fontWeight: FontWeight.normal, - ), - ], - ), - AppText( - "ALLERGIC TO: FOOD, ASPIRIN", - color: Color(0xFFB9382C), - fontWeight: FontWeight.bold, - ), - ], - ) - ], - ), - ), + PatientPageHeaderWidget(patient), Divider( height: 1.0, thickness: 1.0, diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index 5e26e65b..f08f52cb 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -117,7 +117,7 @@ class _MedicineSearchState extends State { Widget build(BuildContext context) { return BaseView( onModelReady: (model) async { - if(model.allMedicationList.isNotEmpty) + if(model.allMedicationList.length == 0) await model.getMedicationList(); }, builder: (_, model, w) => @@ -214,13 +214,15 @@ class _MedicineSearchState extends State { .startsWith(input.toLowerCase()), ) : TextField( + minLines: 2, + maxLines: 2, decoration: textFieldSelectorDecoration( TranslationBase .of(context) .searchMedicineNameHere, _selectedMedication != null ? _selectedMedication.description + - ('${_selectedMedication.genericName}') + (' (${_selectedMedication.genericName} )') : null, true, icon: EvaIcons.search), @@ -245,72 +247,6 @@ class _MedicineSearchState extends State { ], ), ), - Column( - children: [ - Container( - margin: EdgeInsets.only( - left: SizeConfig.heightMultiplier * 2), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - TranslationBase - .of(context) - .youCanFind + - model.pharmacyItemsList.length - .toString() + - " " + - TranslationBase - .of(context) - .itemsInSearch, - fontWeight: FontWeight.bold, - ), - ], - ), - ), - Container( - height: MediaQuery - .of(context) - .size - .height * 0.35, - child: Container( - child: ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - itemCount: model.pharmacyItemsList == null - ? 0 - : model.pharmacyItemsList.length, - itemBuilder: (BuildContext context, - int index) { - return InkWell( - child: MedicineItemWidget( - label: model.pharmacyItemsList[index] - ["ItemDescription"], - url: model.pharmacyItemsList[index] - ["ImageSRCUrl"], - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - PharmaciesListScreen( - itemID: - model.pharmacyItemsList[ - index]["ItemID"], - url: model - .pharmacyItemsList[ - index]["ImageSRCUrl"]), - ), - ); - }, - ); - }, - ), - ), - ), - ], - ), ], ), ), @@ -337,10 +273,19 @@ class _MedicineSearchState extends State { return; } - GifLoaderDialogUtils.showMyDialog(context); - - await model.getMedicineItem(_selectedMedication.description); - GifLoaderDialogUtils.hideDialog(context); + // GifLoaderDialogUtils.showMyDialog(context); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + PharmaciesListScreen( + itemID:_selectedMedication.itemId, + selectedMedication: _selectedMedication, + ), + ), + ); + // await model.getMedicineItem(_selectedMedication.description); + // GifLoaderDialogUtils.hideDialog(context); } diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index 2433487f..61bd7ad4 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; @@ -22,9 +23,11 @@ class PharmaciesListScreen extends StatefulWidget { final int itemID; final String url; + final GetMedicationResponseModel selectedMedication; // In the constructor, require a item id. - PharmaciesListScreen({Key key, @required this.itemID, this.url}) + PharmaciesListScreen( + {Key key, @required this.itemID, this.url, this.selectedMedication}) : super(key: key); @override @@ -49,18 +52,25 @@ class _PharmaciesListState extends State { Widget build(BuildContext context) { projectsProvider = Provider.of(context); return BaseView( - onModelReady: (model) => model.getPharmaciesList(widget.itemID), - builder: (_, model, w) => AppScaffold( - baseViewModel: model, - appBarTitle: TranslationBase.of(context).pharmaciesList, - body: Container( - height: SizeConfig.screenHeight, - child: ListView( - shrinkWrap: true, - scrollDirection: Axis.vertical, - physics: const AlwaysScrollableScrollPhysics(), - children: [ - model.pharmaciesList.length > 0 + onModelReady: (model) async { + await model.getPharmaciesList(widget.selectedMedication.itemId); + await model.getMedicineItem(widget.selectedMedication.description); + + }, + builder: (_, model, w) => + AppScaffold( + baseViewModel: model, + appBarTitle: TranslationBase + .of(context) + .pharmaciesList, + body: Container( + height: SizeConfig.screenHeight, + child: ListView( + shrinkWrap: true, + scrollDirection: Axis.vertical, + physics: const AlwaysScrollableScrollPhysics(), + children: [ + model.pharmaciesList.length > 0 && model.pharmacyItemsList.length > 0 ? RoundedContainer( child: Row( children: [ @@ -69,9 +79,10 @@ class _PharmaciesListState extends State { child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(7)), - child: widget.url != null + child: model.pharmacyItemsList[0] + ["ImageSRCUrl"]!= null ? Image.network( - widget.url, + model.pharmacyItemsList[0]["ImageSRCUrl"], height: SizeConfig.imageSizeMultiplier * 21, diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 57abe393..14f68a79 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -262,7 +262,7 @@ class _PatientsScreenState extends State { GetPatientArrivalListRequestModel getPatientArrivalListRequestModel; if (val2 == 7) { getPatientArrivalListRequestModel = GetPatientArrivalListRequestModel( - from: patient.From, to: patient.To, pageIndex: 0, pageSize: 0); + from: patient.From, to: patient.To, pageIndex: 0, pageSize: 0,patientMRN: patient.getPatientID); } model diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index b5c248b9..53d78b1e 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -860,10 +860,11 @@ class _PrescriptionFormWidgetState extends State { title: TranslationBase.of(context) .addMedication, onPressed: () { - formKey.currentState.save(); - Navigator.pop(context); - //openDrugToDrug(); - if (route == null || + // formKey.currentState.save(); + // Navigator.pop(context); + // openDrugToDrug(); + if (strength == null || + route == null || frequency == null || indication == null || doseTime == null || diff --git a/lib/screens/reschedule-leaves/add-rescheduleleave.dart b/lib/screens/reschedule-leaves/add-rescheduleleave.dart index 685259b4..b4ebecf4 100644 --- a/lib/screens/reschedule-leaves/add-rescheduleleave.dart +++ b/lib/screens/reschedule-leaves/add-rescheduleleave.dart @@ -210,7 +210,7 @@ class AddRescheduleLeavScreen extends StatelessWidget { ], ), ), - (item.status == 1) + (item.status == 2) ? Expanded( flex: 1, child: IconButton( diff --git a/lib/screens/reschedule-leaves/reschedule_leave.dart b/lib/screens/reschedule-leaves/reschedule_leave.dart index 5d546c04..f0bf122f 100644 --- a/lib/screens/reschedule-leaves/reschedule_leave.dart +++ b/lib/screens/reschedule-leaves/reschedule_leave.dart @@ -54,8 +54,8 @@ class _RescheduleLeaveScreen extends State { var clinicID; var fromTime; var toTime; - TextEditingController _controller4; - TextEditingController _controller5; + TextEditingController _controller4 = new TextEditingController(); + TextEditingController _controller5 = new TextEditingController(); void _presentDatePicker(id) { var date = new DateTime.now(); var initialDate = id == 'fromDate' @@ -718,10 +718,16 @@ class _RescheduleLeaveScreen extends State { ? TranslationBase.of(context).update : TranslationBase.of(context).add, onPressed: () { - if (widget.isUpdate == true) { - updateRecheduleLeave(model2); + if (offTime == '1' || offTime == '2') { + if (widget.isUpdate == true) { + updateRecheduleLeave(model2); + } else { + addRecheduleLeave(model2); + } } else { - addRecheduleLeave(model2); + DrAppToastMsg.showErrorToast( + TranslationBase.of(context) + .onlyOfftimeHoliday); } }, ), @@ -750,9 +756,21 @@ class _RescheduleLeaveScreen extends State { this.profile = p; if (widget.updateData != null) { this.clinicID = widget.updateData.clinicId; + final df = new DateFormat('HH:mm:ss'); + final dateFormat = new DateFormat('yyyy-MM-dd'); - _toDateController.text = widget.updateData.dateTimeFrom; - _toDateController2.text = widget.updateData.dateTimeTo; + _toDateController.text = + dateFormat.format(DateTime.parse(widget.updateData.dateTimeFrom)); + //df.format(DateTime.parse(widget.updateData.dateTimeFrom)); + this.fromTime = + df.format(DateTime.parse(widget.updateData.dateTimeFrom)); + this.toTime = df.format(DateTime.parse(widget.updateData.dateTimeTo)); + _toDateController2.text = + dateFormat.format(DateTime.parse(widget.updateData.dateTimeTo)); + _controller5.text = toTime; + _controller4.text = fromTime; + toDate = _toDateController2.text; + fromDate = _toDateController.text; } }); } @@ -827,20 +845,29 @@ class _RescheduleLeaveScreen extends State { } updateRecheduleLeave(model) { - final df = new DateFormat('yyyy-MM-ddThh:mm:ss'); + final df = new DateFormat('yyyy-MM-ddTHH:MM:ss'); final dateFormat = new DateFormat('yyyy-MM-dd'); - + var fromDates = fromDate; + var toDates = toDate; if (offTime == '1') { - fromDate = dateFormat.format(fromDate) + 'T' + fromTime + '00'; - toDate = dateFormat.format(fromDate) + 'T' + toTime + '00'; + fromDate = df.format(DateTime.parse(fromDates)) + + 'T' + + fromTime + + ':' + + DateTime.now().second.toString(); + toDate = df.format(DateTime.parse(fromDates)) + + 'T' + + toTime + + ':' + + DateTime.now().second.toString(); } else { - fromDate = df.format(fromDate); - toDate = df.format(toDate); + fromDate = df.format(fromDates); + toDate = df.format(toDates); } Map request = { "Requisition": { - "requisitionNo": 0, + "requisitionNo": widget.updateData.requisitionNo, "requisitionType": offTime, "clinicId": this.profile['ClinicID'], "doctorId": this.profile['DoctorID'], diff --git a/lib/screens/sick-leave/add-sickleave.dart b/lib/screens/sick-leave/add-sickleave.dart index d456f2a6..93353d85 100644 --- a/lib/screens/sick-leave/add-sickleave.dart +++ b/lib/screens/sick-leave/add-sickleave.dart @@ -56,20 +56,22 @@ class AddSickLeavScreen extends StatelessWidget { item.status == 1 ? TranslationBase.of( context) - .approved + .hold : item.status == 2 ? TranslationBase.of( context) - .extended + .active : TranslationBase.of( context) - .pending, + .all, fontWeight: FontWeight.bold, color: Colors.white, ), color: item.status == 1 - ? Colors.green - : Colors.yellow[800], + ? Colors.yellow[800] + : item.status == 2 + ? Colors.green + : Colors.black, ), Row( children: [ @@ -96,7 +98,7 @@ class AddSickLeavScreen extends StatelessWidget { ), Row(children: [ AppText( - item.remarks, + item.remarks ?? "", ) ]), ], diff --git a/lib/util/helpers.dart b/lib/util/helpers.dart index a7229ca2..07709fc9 100644 --- a/lib/util/helpers.dart +++ b/lib/util/helpers.dart @@ -317,7 +317,7 @@ class Helpers { listOfHours.forEach((element) { WorkingHours workingHours = WorkingHours(); var from = element.substring( - element.indexOf('m ') + 2, element.indexOf('To') - 2); + element.indexOf('m ') + 2, element.indexOf('To') - 1); workingHours.from = from.trim(); var to = element.substring(element.indexOf('To') + 2); workingHours.to = to.trim(); diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index b513b14b..2c3be5b1 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -997,11 +997,9 @@ class TranslationBase { String get orderProcedure => localizedValues['orderProcedure'][locale.languageCode]; - String get nameOrICD => - localizedValues['nameOrICD'][locale.languageCode]; + String get nameOrICD => localizedValues['nameOrICD'][locale.languageCode]; - String get dType => - localizedValues['dType'][locale.languageCode]; + String get dType => localizedValues['dType'][locale.languageCode]; String get addAssessmentDetails => localizedValues['addAssessmentDetails'][locale.languageCode]; @@ -1012,19 +1010,21 @@ class TranslationBase { String get addProgressNote => localizedValues['addProgressNote'][locale.languageCode]; - String get createdBy => - localizedValues['createdBy'][locale.languageCode]; + String get createdBy => localizedValues['createdBy'][locale.languageCode]; - String get editedBy => - localizedValues['editedBy'][locale.languageCode]; + String get editedBy => localizedValues['editedBy'][locale.languageCode]; String get currentMedications => localizedValues['currentMedications'][locale.languageCode]; - String get noItem => - localizedValues['noItem'][locale.languageCode]; + String get noItem => localizedValues['noItem'][locale.languageCode]; String get postUcafSuccessMsg => localizedValues['postUcafSuccessMsg'][locale.languageCode]; String get vitalSignDetailEmpty => localizedValues['vitalSignDetailEmpty'][locale.languageCode]; + String get onlyOfftimeHoliday => + localizedValues['onlyOfftimeHoliday'][locale.languageCode]; + String get active => localizedValues['active'][locale.languageCode]; + String get hold => localizedValues['hold'][locale.languageCode]; + String get loading => localizedValues['loading'][locale.languageCode]; String get assessmentErrorMsg => localizedValues['assessmentErrorMsg'][locale.languageCode]; diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index 3aac5cdd..4f496010 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/lookups/hospital_lookup.dart'; import 'package:doctor_app_flutter/screens/auth/verification_methods_screen.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_loader_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; @@ -41,7 +42,7 @@ class _LoginFormState extends State { bool _isInit = true; FocusNode focusPass = FocusNode(); FocusNode focusProject = FocusNode(); - + HospitalViewModel projectsProv; var userInfo = UserModel( userID: '', password: '', @@ -56,24 +57,13 @@ class _LoginFormState extends State { @override void initState() { super.initState(); - initPlatformState(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - authProv = Provider.of(context); - - if (_isInit) { - if (projectsList.length == 0) { - getProjectsList(); - } - } - _isInit = false; } @override Widget build(BuildContext context) { + authProv = Provider.of(context); + projectsProv = Provider.of(context); + getProjects(); return Form( key: loginFormKey, child: Container( @@ -128,25 +118,33 @@ class _LoginFormState extends State { }, ), buildSizedBox(), - TextFormField( - focusNode: focusProject, - controller: projectIdController, - onTap: () { - helpers.showCupertinoPicker( - context, projectsList, 'Name', onSelectProject); - }, - showCursor: false, - readOnly: true, - decoration: buildInputDecoration( - context, - TranslationBase.of(context).selectYourProject, - 'assets/images/password_icon.png'), - validator: (value) { - if (value.isEmpty) { - return TranslationBase.of(context).pleaseEnterYourProject; - } - return null; - }), + projectsList.length > 0 + ? TextFormField( + focusNode: focusProject, + controller: projectIdController, + onTap: () { + helpers.showCupertinoPicker( + context, projectsList, 'Name', onSelectProject); + }, + showCursor: false, + readOnly: true, + decoration: buildInputDecoration( + context, + TranslationBase.of(context).selectYourProject, + 'assets/images/password_icon.png'), + validator: (value) { + if (value.isEmpty) { + return TranslationBase.of(context) + .pleaseEnterYourProject; + } + return null; + }) + : TextFormField( + readOnly: true, + decoration: buildInputDecoration( + context, + TranslationBase.of(context).loading, + 'assets/images/password_icon.png')), buildSizedBox(), Row( mainAxisAlignment: MainAxisAlignment.end, @@ -325,8 +323,9 @@ class _LoginFormState extends State { } getProjectsList() { - HospitalViewModel projectsProv = Provider.of(context); + //showLoading(); projectsProv.getProjectsList().then((res) { + //hideLoading(); if (res['MessageStatus'] == 1) { setState(() { projectsList = res['ListProject']; @@ -371,4 +370,13 @@ class _LoginFormState extends State { hideLoading() { Navigator.pop(context); } + + getProjects() { + if (_isInit) { + if (projectsList.length == 0) { + getProjectsList(); + } + } + _isInit = false; + } } diff --git a/lib/widgets/auth/verification_methods.dart b/lib/widgets/auth/verification_methods.dart index adc35982..b5111704 100644 --- a/lib/widgets/auth/verification_methods.dart +++ b/lib/widgets/auth/verification_methods.dart @@ -71,6 +71,7 @@ class _VerificationMethodsState extends State { void initState() { super.initState(); _loggedUserFuture = getSharedPref(); + _getAvailableBiometrics(); } Future getSharedPref() async { @@ -117,199 +118,188 @@ class _VerificationMethodsState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - height: SizeConfig.realScreenHeight * 0.6, - child: Column( - children: [ - user != null && isMoreOption == false - ? Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AppText( - TranslationBase.of(context) - .welcomeBack + - ' ' + - user.doctorName, - fontSize: - SizeConfig.textMultiplier * 3.5, - ), - SizedBox( - height: 20, - ), - AppText( - TranslationBase.of(context) - .accountInfo, - fontSize: - SizeConfig.textMultiplier * 2.5, - ), - SizedBox( - height: 20, - ), - Card( - color: Colors.grey[300], - child: Row( - children: [ - Flexible( - child: ListTile( - title: Text( + // height: SizeConfig.realScreenHeight * 0.6, + child: Column( + children: [ + user != null && isMoreOption == false + ? Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + TranslationBase.of(context) + .welcomeBack + + ' ' + + user.doctorName, + fontSize: + SizeConfig.textMultiplier * 3.5, + ), + SizedBox( + height: 20, + ), + AppText( + TranslationBase.of(context).accountInfo, + fontSize: + SizeConfig.textMultiplier * 2.5, + ), + SizedBox( + height: 20, + ), + Card( + color: Colors.grey[300], + child: Row( + children: [ + Flexible( + child: ListTile( + title: Text( + TranslationBase.of(context) + .lastLoginAt, + textAlign: TextAlign.center, + overflow: + TextOverflow.ellipsis, + ), + subtitle: Text( + user.editedOn != null + ? formatDate(Helpers + .convertStringToDate( + user.editedOn)) + : user.createdOn != null + ? formatDate(Helpers + .convertStringToDate(user + .createdOn)) + : '--', + overflow: + TextOverflow.ellipsis, + textAlign: + TextAlign.center), + )), + Flexible( + child: ListTile( + title: Text( TranslationBase.of(context) - .lastLoginAt, - textAlign: TextAlign.center, + .lastLoginWith, overflow: TextOverflow.ellipsis, - ), - subtitle: Text( - user.editedOn != null - ? formatDate(Helpers - .convertStringToDate( - user - .editedOn)) - : user.createdOn != - null - ? formatDate(Helpers - .convertStringToDate(user - .createdOn)) - : '--', - overflow: - TextOverflow.ellipsis, - textAlign: - TextAlign.center), - )), - Flexible( - child: ListTile( - title: Text( - TranslationBase.of( - context) - .lastLoginWith, - overflow: - TextOverflow.ellipsis, - textAlign: - TextAlign.center), - subtitle: Text( - getType(user.logInTypeID, - context), - overflow: - TextOverflow.ellipsis, - textAlign: - TextAlign.center), - )) - ], - )), - ], - ) - : Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - this.onlySMSBox == false - ? AppText( - TranslationBase.of(context) - .verifyLoginWith, - fontSize: SizeConfig - .textMultiplier * - 3.5, - textAlign: TextAlign.left, - ) - : AppText( - TranslationBase.of(context) - .verifyFingerprint2, - fontSize: SizeConfig - .textMultiplier * - 2.5, - textAlign: TextAlign.start, - ), - ]), - user != null && isMoreOption == false - ? Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded( - child: InkWell( - onTap: () => { - authenticateUser( - 3, - BiometricType - .face - .index, - authProv) - }, - child: getButton( - user.logInTypeID, - authProv))), - Expanded( - child: - getButton(5, authProv)) - ]) - ]) - : Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - onlySMSBox == false - ? Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded( - child: getButton( - 3, authProv)), - Expanded( - child: getButton( - 4, authProv)) - ], - ) - : SizedBox(), - Row( + textAlign: + TextAlign.center), + subtitle: Text( + getType(user.logInTypeID, + context), + overflow: + TextOverflow.ellipsis, + textAlign: + TextAlign.center), + )) + ], + )), + ], + ) + : Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + this.onlySMSBox == false + ? AppText( + TranslationBase.of(context) + .verifyLoginWith, + fontSize: + SizeConfig.textMultiplier * + 3.5, + textAlign: TextAlign.left, + ) + : AppText( + TranslationBase.of(context) + .verifyFingerprint2, + fontSize: + SizeConfig.textMultiplier * + 2.5, + textAlign: TextAlign.start, + ), + ]), + user != null && isMoreOption == false + ? Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( - child: - getButton(1, authProv)), + child: InkWell( + onTap: () => { + authenticateUser( + 3, + BiometricType + .face.index, + authProv) + }, + child: getButton( + user.logInTypeID, + authProv))), Expanded( - child: getButton(2, authProv)) - ], - ), - ]), - Expanded( - flex: 1, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, + child: getButton(5, authProv)) + ]) + ]) + : Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + onlySMSBox == false + ? Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: getButton( + 3, authProv)), + Expanded( + child: getButton( + 4, authProv)) + ], + ) + : SizedBox(), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: getButton(1, authProv)), + Expanded( + child: getButton(2, authProv)) + ], + ), + ]), + + // ) + ], + ), + ), + Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + user != null + ? Row( children: [ - user != null - ? Row( - children: [ - Expanded( - child: Button( - title: - TranslationBase.of(context) - .useAnotherAccount, - onTap: () { - Navigator.of(context) - .pushNamed(LOGIN); - }, - )), - ], - ) - : SizedBox(), + Expanded( + child: Button( + title: TranslationBase.of(context) + .useAnotherAccount, + onTap: () { + Navigator.of(context).pushNamed(LOGIN); + }, + )), ], - ), - ) - ], - )) + ) + : SizedBox(), + ], + ), ], ), )); @@ -499,9 +489,10 @@ class _VerificationMethodsState extends State { authenticateUser(3, BiometricType.fingerprint.index, authProv) }, child: RoundedContainer( - backgroundColor: BiometricType.fingerprint.index == 1 - ? Colors.white - : Colors.white.withOpacity(.7), + backgroundColor: + checkIfBiometricAvailable(BiometricType.fingerprint) + ? Colors.white + : Colors.white.withOpacity(.7), borderColor: Colors.grey, showBorder: true, child: Padding( @@ -566,9 +557,7 @@ class _VerificationMethodsState extends State { }) }, child: RoundedContainer( - backgroundColor: BiometricType.fingerprint.index == 1 - ? Colors.white - : Colors.white.withOpacity(.7), + backgroundColor: Colors.white, borderColor: Colors.grey, showBorder: true, child: Padding( @@ -756,11 +745,11 @@ class _VerificationMethodsState extends State { getDocProfiles(clinic, authProv); } } else { - //changeLoadingStata(false); + Navigator.pop(context); helpers.showErrorToast(res['ErrorEndUserMessage']); } }).catchError((err) { - //changeLoadingStata(false); + Navigator.pop(context); helpers.showErrorToast(err); }); } diff --git a/lib/widgets/doctor/my_schedule_widget.dart b/lib/widgets/doctor/my_schedule_widget.dart index 4e4c6b8c..34ec97db 100644 --- a/lib/widgets/doctor/my_schedule_widget.dart +++ b/lib/widgets/doctor/my_schedule_widget.dart @@ -24,13 +24,15 @@ class MyScheduleWidget extends StatelessWidget { Column( children: [ Divider( - height: 10, + height: 1, color: Colors.grey, thickness: 1.0, ), - Text('${workingHoursTable.date.day}') ], ), + SizedBox( + height: 10, + ), Row( children: [ AppText( @@ -50,44 +52,19 @@ class MyScheduleWidget extends StatelessWidget { return Container( child: Column( children: [ - Row( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 5, - ), - AppText( - work.from + ' - ', - fontSize: 2.0 * SizeConfig.textMultiplier, - fontWeight: FontWeight.w300, - ) - ], - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 5, - ), - AppText( - work.to, - fontSize: 2.0 * SizeConfig.textMultiplier, - fontWeight: FontWeight.w300, - ), - ], - ), - ], + SizedBox( + height: 5, + ), + AppText( + work.from + ' - ' + work.to, + fontSize: 2.0 * SizeConfig.textMultiplier, + fontWeight: FontWeight.w300, ) ], ), ); }).toList(), ), - SizedBox( - width: 8, - ) ], ), ), diff --git a/lib/widgets/otp/sms-popup.dart b/lib/widgets/otp/sms-popup.dart index dfcb33cd..fb5a9a0c 100644 --- a/lib/widgets/otp/sms-popup.dart +++ b/lib/widgets/otp/sms-popup.dart @@ -52,7 +52,7 @@ class SMSOTP { String errorMsg; ProjectViewModel projectProvider; String displayTime = ''; - + bool isClosed = false; displayDialog(BuildContext context) async { return showDialog( context: context, @@ -65,6 +65,7 @@ class SMSOTP { IconButton( icon: Icon(Icons.close), onPressed: () { + this.isClosed = true; Navigator.pop(context); this.onFailure(); }, @@ -307,7 +308,7 @@ class SMSOTP { timer = Future.delayed(Duration(seconds: 1), () { if (this.remainingTime > 0) { - startTimer(setState); + if (isClosed == false) startTimer(setState); } else { Navigator.pop(context); } diff --git a/lib/widgets/patients/profile/patient-page-header-widget.dart b/lib/widgets/patients/profile/patient-page-header-widget.dart index abd2f5ad..6457b8cb 100644 --- a/lib/widgets/patients/profile/patient-page-header-widget.dart +++ b/lib/widgets/patients/profile/patient-page-header-widget.dart @@ -91,7 +91,7 @@ class PatientPageHeaderWidget extends StatelessWidget { ), ], ), - model.patientAllergiesList.isNotEmpty ?AppText( + model.patientAllergiesList.isNotEmpty && model.getAllergicNames(projectViewModel.isArabic)!='' ?AppText( TranslationBase.of(context).allergicTO +" : "+model.getAllergicNames(projectViewModel.isArabic), color: Color(0xFFB9382C), fontWeight: FontWeight.bold, diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index bab7cc84..225decf4 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -94,7 +94,7 @@ class PatientProfileWidget extends StatelessWidget { fontWeight: FontWeight.bold, ), SizedBox( - width: 20, + width: 4, ), AppText( patient.patientId.toString(), @@ -254,8 +254,8 @@ class PatientProfileWidget extends StatelessWidget { ), Expanded( child: AppText( - patient.admissionDate != null - ? "${DateUtils.convertDateFromServerFormat(patient.admissionDate, 'EEEE dd, MMMM yyyy hh:mm a')}" + patient.createdOn != null + ? "${DateUtils.convertDateFromServerFormat(patient.createdOn, 'EEEE dd, MMMM yyyy hh:mm a')}" : "", color: Colors.black, fontWeight: FontWeight.normal, @@ -310,10 +310,10 @@ class PatientProfileWidget extends StatelessWidget { ), ), AppText( - patient.admissionDate != null + patient.createdOn != null ? DateUtils .differenceBetweenServerDateAndCurrent( - patient.admissionDate) + patient.createdOn) : "", color: Colors.black, fontWeight: FontWeight.normal, diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 5c64c70a..e839a0b9 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -91,14 +91,13 @@ class ProfileMedicalInfoWidget extends StatelessWidget { nameLine1: TranslationBase.of(context).lab, nameLine2: TranslationBase.of(context).result, icon: 'lab.png'), - if (int.parse(patientType) == 7 || int.parse(patientType) == 6) - PatientProfileButton( - key: key, - patient: patient, - route: MEDICAL_FILE, - nameLine1: TranslationBase.of(context).previewHealth, - nameLine2: TranslationBase.of(context).summaryReport, - icon: 'radiology-1.png'), + PatientProfileButton( + key: key, + patient: patient, + route: MEDICAL_FILE, + nameLine1: TranslationBase.of(context).previewHealth, + nameLine2: TranslationBase.of(context).summaryReport, + icon: 'radiology-1.png'), if (selectedPatientType != 0 && selectedPatientType != 5 && selectedPatientType != 7) @@ -149,7 +148,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget { nameLine1: TranslationBase.of(context).orders, nameLine2: TranslationBase.of(context).list, icon: 'radiology-1.png'), - if (selectedPatientType != 0 && selectedPatientType != 5) + if (int.parse(patientType) == 7 || int.parse(patientType) == 6) PatientProfileButton( key: key, patient: patient, diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart index 184b4391..f4ad30ab 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart @@ -181,6 +181,7 @@ class _UpdateSubjectivePageState extends State { selectedAllergy: selectedAllergy, isChecked: element.isChecked, createdBy: element.createdBy, + remark: element.remarks, selectedAllergySeverity: selectedAllergySeverity); if (selectedAllergy != null && selectedAllergySeverity != null) widget.myAllergiesList.add(mySelectedAllergy); @@ -522,7 +523,6 @@ class _UpdateSubjectivePageState extends State { if (postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM == null) postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM = []; - //TODO: make static value dynamic postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM.add( ListHisProgNotePatientAllergyDiseaseVM( allergyDiseaseId: allergy.selectedAllergy.id, @@ -545,6 +545,14 @@ class _UpdateSubjectivePageState extends State { await model.patchAllergy(postAllergyRequestModel); } + GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP( + patientMRN: widget.patientInfo.patientMRN, + episodeId: widget.patientInfo.episodeNo, + appointmentNo: widget.patientInfo.appointmentNo, + doctorID: '', + editedBy: ''); + await model.getPatientAllergy(generalGetReqForSOAP, isLocalBusy : true); + if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); } 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 7bcea474..e6e1a908 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -1,5 +1,6 @@ import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; @@ -8,6 +9,7 @@ import 'package:doctor_app_flutter/models/SOAP/GetAssessmentReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_assement.dart'; import 'package:doctor_app_flutter/models/SOAP/post_assessment_request_model.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/util/helpers.dart'; @@ -263,7 +265,7 @@ class _UpdateAssessmentPageState extends State { MainAxisAlignment.start, children: [ AppText( - TranslationBase.of(context).dType+':', + TranslationBase.of(context).dType+' : ', fontWeight: FontWeight .bold, fontSize: 16, @@ -330,7 +332,7 @@ class _UpdateAssessmentPageState extends State { children: [ AppText( - "ICD: ".toUpperCase(), + "ICD : ".toUpperCase(), fontWeight: FontWeight .bold, fontSize: 16, @@ -788,7 +790,11 @@ class _AddAssessmentDetailsState extends State { helpers .showErrorToast(model.error); } else { + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + + DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile); mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code; + mySelectedAssessment.doctorName = doctorProfile.doctorName; if (!isUpdate) { // widget.mySelectedAssessmentList.add(mySelectedAssessment); diff --git a/lib/widgets/patients/profile/soap_update/update_plan_page.dart b/lib/widgets/patients/profile/soap_update/update_plan_page.dart index 06cbfc06..04b2b73d 100644 --- a/lib/widgets/patients/profile/soap_update/update_plan_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_plan_page.dart @@ -132,7 +132,7 @@ class _UpdatePlanPageState extends State { ), Column( children: [ - if(widget.patientProgressNote==null) + if(widget.patientProgressNote.planNote == null) Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), @@ -161,7 +161,7 @@ class _UpdatePlanPageState extends State { SizedBox( height: 20, ), - if (progressNoteController.text !='') + if ( widget.patientProgressNote.planNote != null) Container( margin: EdgeInsets.only(left: 5, right: 5, top: 15), @@ -308,12 +308,16 @@ class _UpdatePlanPageState extends State { patientMRN: widget.patientInfo.patientMRN, episodeId: widget.patientInfo.episodeNo, appointmentNo: widget.patientInfo.appointmentNo, - planNote: progressNoteController.text, doctorID: '', editedBy: ''); + planNote: widget.patientProgressNote.planNote, doctorID: '', editedBy: ''); if(model.patientProgressNoteList.isEmpty){ await model.postProgressNote(postProgressNoteRequestModel); }else { + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + + DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile); + postProgressNoteRequestModel.editedBy =doctorProfile.doctorID; await model.patchProgressNote(postProgressNoteRequestModel); } @@ -335,12 +339,12 @@ class _UpdatePlanPageState extends State { context: context, builder: (context) { return FractionallySizedBox( - heightFactor: 0.5, + heightFactor: 0.6, child: Container( child: FractionallySizedBox( widthFactor: 0.9, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + child: ListView( + // crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: 16, @@ -355,6 +359,7 @@ class _UpdatePlanPageState extends State { ), Container( margin: EdgeInsets.only(left: 0, right: 0, top: 15), + child: TextFields( hintText: TranslationBase.of(context).addProgressNote, fontSize: 13.5, @@ -383,6 +388,7 @@ class _UpdatePlanPageState extends State { widget.patientProgressNote.createdByName = widget.patientProgressNote.createdByName??doctorProfile.doctorName; widget.patientProgressNote.editedByName=doctorProfile.doctorName; widget.patientProgressNote.createdOn= DateTime.now().toString() ; + widget.patientProgressNote.planNote = progressNoteController.text; setState(() { print(progressNoteController.text); }); diff --git a/lib/widgets/patients/profile/soap_update/update_soap_index.dart b/lib/widgets/patients/profile/soap_update/update_soap_index.dart index 7b68b4f3..61e5a4b4 100644 --- a/lib/widgets/patients/profile/soap_update/update_soap_index.dart +++ b/lib/widgets/patients/profile/soap_update/update_soap_index.dart @@ -37,6 +37,7 @@ class _UpdateSoapIndexState extends State GetPatientProgressNoteResModel patientProgressNote = GetPatientProgressNoteResModel(); changePageViewIndex(pageIndex) { + changeLoadingState(true); _controller.jumpToPage(pageIndex); } diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index 808e09dc..8a9ae52b 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,3 +1,4 @@ +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'; @@ -26,6 +27,7 @@ class AppDrawer extends StatefulWidget { class _AppDrawerState extends State { bool _isInit = true; Helpers helpers = new Helpers(); + ProjectViewModel projectsProvider; // @override // void didChangeDependencies() { // super.didChangeDependencies(); @@ -38,6 +40,7 @@ class _AppDrawerState extends State { @override Widget build(BuildContext context) { AuthViewModel authProvider = Provider.of(context); + projectsProvider = Provider.of(context); return RoundedContainer( child: Container( color: Colors.white, @@ -84,7 +87,13 @@ class _AppDrawerState extends State { )) : SizedBox(), AppText( - "Director of medical records", //TODO: Make The Dr Title Dynamic and check overflow issue. + projectsProvider.isArabic + ? authProvider + .doctorProfile.titleDescriptionN ?? + "" + : authProvider + .doctorProfile?.titleDescription ?? + "", fontWeight: FontWeight.normal, color: Colors.black87), RaisedButton( diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index 4ddd7873..d60edb9f 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -1,11 +1,12 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/viewModel/base_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/routes.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; -import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; + import '../../widgets/shared/app_loader_widget.dart'; import 'app_texts_widget.dart'; import 'network_base_view.dart'; @@ -64,20 +65,21 @@ class AppScaffold extends StatelessWidget { children: [body, buildAppLoaderWidget(isLoading)]) : Center( child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.asset( - "assets/images/undraw_connected_world_wuay.png", - height: 250, - ), - AppText('No Internet Connection') - ], - ), - )); + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + "assets/images/undraw_connected_world_wuay.png", + height: 250, + ), + AppText('No Internet Connection') + ], + ), + ), + ); } - Widget buildAppLoaderWidget(bool isloading) { - return isloading ? AppLoaderWidget() : Container(); + Widget buildAppLoaderWidget(bool isLoading) { + return isLoading ? AppLoaderWidget() : Container(); } }