diff --git a/lib/config/config.dart b/lib/config/config.dart index da9781e8..b5e07054 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -325,7 +325,7 @@ var UPDATE_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnari var CHANNEL = 3; var GENERAL_ID = 'Cs2020@2016\$2958'; var IP_ADDRESS = '10.20.10.20'; -var VERSION_ID = 10.7; +var VERSION_ID = 10.8; var SETUP_ID = '91877'; var LANGUAGE = 2; // var PATIENT_OUT_SA = 0; @@ -606,7 +606,7 @@ var PAYFORT_PROD_URL = 'https://paymentservices.payfort.com/FortAPI/paymentApi'; // Check If InPatient API var CHECK_IF_INPATIENT = 'Services/Patients.svc/REST/GetInPatientAdmissionInfo'; -var CHECK_IF_PATIENT_ADMITTED = 'Services/Inps.svc/REST/chekIsPatientAdmitted'; +var CHECK_IF_PATIENT_ADMITTED = 'Services/Inps.svc/REST/checkIsPatientAdmittedOrAdmissionRequest'; // Get General Instructions API var GET_GENERAL_INSTRUCTIONS = 'Services/INPs.svc/REST/getGeneralInstructions'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 95ee02e4..a2cd97fa 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1928,4 +1928,5 @@ const Map localizedValues = { "copyLink": {"en": "COPY LINK", "ar": "نسخ الوصلة:"}, "paymentLinkCopied": {"en": "Payment link copied to your clipboard!'", "ar": "تم نسخ رابط الدفع إلى الحافظة الخاصة بك!"}, "copyLinkTxt": {"en": "Or you can copy the payment link from below & send it to someone who can pay on your behalf: ", "ar": "أو يمكنك نسخ رابط الدفع من الأسفل وإرساله إلى شخص يمكنه الدفع نيابة عنك:"}, + "proErrorMessage": {"en": "Dear patient, Our staff is currently out of office, please note that our working hours are from 7:00 AM to 10:00 PM, and we'd love to help you during that time, or you can call ", "ar": "عزيزي المريض ، طاقم العمل لدينا خارج المكتب حاليًا ، يرجى ملاحظة أن ساعات العمل لدينا من 7:00 صباحًا إلى 10:00 مساءً ، ويسعدنا مساعدتك خلال هذا الوقت ، أو يمكنك الاتصال بـ <أدخل الرقم هنا>"}, }; \ No newline at end of file diff --git a/lib/core/viewModels/project_view_model.dart b/lib/core/viewModels/project_view_model.dart index 6c78da7f..fa665b36 100644 --- a/lib/core/viewModels/project_view_model.dart +++ b/lib/core/viewModels/project_view_model.dart @@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/models/Appointments/laser_body_parts.dart'; import 'package:diplomaticquarterapp/models/Authentication/register_info_response.dart'; import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_info_response_model.dart'; +import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_request_info_response_model.dart'; import 'package:diplomaticquarterapp/uitl/PlatformBridge.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:flutter/cupertino.dart'; @@ -37,8 +38,10 @@ class ProjectViewModel extends BaseViewModel { bool isLogin = false; int laserSelectionDuration; bool isPatientAdmitted = false; + bool patientHasAdmissionRequest = false; int inPatientProjectID = 0; GetAdmissionInfoResponseModel getAdmissionInfoResponseModel; + GetAdmissionRequestInfoResponseModel getAdmissionRequestInfoResponseModel; double _latitude; double _longitude; @@ -121,6 +124,11 @@ class ProjectViewModel extends BaseViewModel { notifyListeners(); } + setPatientHasAdmissionRequest(bool hasAdmissionRequest) { + this.patientHasAdmissionRequest = hasAdmissionRequest; + notifyListeners(); + } + setInPatientProjectID(int projectID) { this.inPatientProjectID = projectID; notifyListeners(); @@ -131,6 +139,11 @@ class ProjectViewModel extends BaseViewModel { notifyListeners(); } + setInPatientAdmissionRequest(GetAdmissionRequestInfoResponseModel _getAdmissionRequestInfoResponseModel) { + this.getAdmissionRequestInfoResponseModel = _getAdmissionRequestInfoResponseModel; + notifyListeners(); + } + setPrivilegeModelList({List privilege}) { this.isLoginChild = isLoginChild; privilegeRootUser = privilege; diff --git a/lib/models/InPatientServices/get_admission_request_info_response_model.dart b/lib/models/InPatientServices/get_admission_request_info_response_model.dart new file mode 100644 index 00000000..4c31c1fe --- /dev/null +++ b/lib/models/InPatientServices/get_admission_request_info_response_model.dart @@ -0,0 +1,79 @@ +class GetAdmissionRequestInfoResponseModel { + int admissionRequestNo; + String clinicName; + String doctorName; + String expectedAdmissionDate; + List medicalInstructions; + dynamic medicalInstructionsXML; + String medicalRemarks; + int projectId; + String projectName; + String setupId; + + GetAdmissionRequestInfoResponseModel( + {this.admissionRequestNo, + this.clinicName, + this.doctorName, + this.expectedAdmissionDate, + this.medicalInstructions, + this.medicalInstructionsXML, + this.medicalRemarks, + this.projectId, + this.projectName, + this.setupId}); + + GetAdmissionRequestInfoResponseModel.fromJson(Map json) { + admissionRequestNo = json['admissionRequestNo']; + clinicName = json['clinicName']; + doctorName = json['doctorName']; + expectedAdmissionDate = json['expectedAdmissionDate']; + if (json['medicaLInstructions'] != null) { + medicalInstructions = []; + json['medicaLInstructions'].forEach((v) { + medicalInstructions.add(new MedicaLInstructions.fromJson(v)); + }); + } + medicalInstructionsXML = json['medicalInstructionsXML']; + medicalRemarks = json['medicalRemarks']; + projectId = json['projectId']; + projectName = json['projectName']; + setupId = json['setupId']; + } + + Map toJson() { + final Map data = new Map(); + data['admissionRequestNo'] = this.admissionRequestNo; + data['clinicName'] = this.clinicName; + data['doctorName'] = this.doctorName; + data['expectedAdmissionDate'] = this.expectedAdmissionDate; + if (this.medicalInstructions != null) { + data['medicaLInstructions'] = + this.medicalInstructions.map((v) => v.toJson()).toList(); + } + data['medicalInstructionsXML'] = this.medicalInstructionsXML; + data['medicalRemarks'] = this.medicalRemarks; + data['projectId'] = this.projectId; + data['projectName'] = this.projectName; + data['setupId'] = this.setupId; + return data; + } +} + +class MedicaLInstructions { + String description; + int parameterCode; + + MedicaLInstructions({this.description, this.parameterCode}); + + MedicaLInstructions.fromJson(Map json) { + description = json['description']; + parameterCode = json['parameterCode']; + } + + Map toJson() { + final Map data = new Map(); + data['description'] = this.description; + data['parameterCode'] = this.parameterCode; + return data; + } +} diff --git a/lib/pages/InPatientServices/inpatient_home.dart b/lib/pages/InPatientServices/inpatient_home.dart index 683acfa6..eca5a7b8 100644 --- a/lib/pages/InPatientServices/inpatient_home.dart +++ b/lib/pages/InPatientServices/inpatient_home.dart @@ -8,14 +8,17 @@ import 'package:diplomaticquarterapp/pages/InPatientServices/meal_plan.dart'; import 'package:diplomaticquarterapp/pages/InPatientServices/medical_instructions.dart'; import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/alert_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../../models/InPatientServices/get_inpatient_advance_requests_response_model.dart'; import '../../models/InPatientServices/get_medical_instructions_response_model.dart'; @@ -61,26 +64,10 @@ class InPatientServicesHome extends StatelessWidget { List getInPatientServicesList(BuildContext context) { List serviceList = List(); - // serviceList.add( - // InkWell( - // onTap: () { - // // Navigator.push(context, FadePage(page: AdvancePaymentPage())); - // }, - // child: MedicalProfileItem( - // title: TranslationBase.of(context).admissionGeneral, - // imagePath: 'admission.svg', - // subTitle: TranslationBase.of(context).consent, - // width: 50.0, - // height: 40.0, - // isInPatient: true, - // ), - // ), - // ); - serviceList.add( InkWell( onTap: () { - openGeneralInstructions(context); + if (projectViewModel.isPatientAdmitted ? true : checkAdmissionRequestDate()) openGeneralInstructions(context); }, child: MedicalProfileItem( title: TranslationBase.of(context).generalInstructionsTitle, @@ -89,6 +76,7 @@ class InPatientServicesHome extends StatelessWidget { width: 50.0, height: 40.0, isInPatient: true, + isEnable: projectViewModel.isPatientAdmitted ? true : checkAdmissionRequestDate(), ), ), ); @@ -96,7 +84,7 @@ class InPatientServicesHome extends StatelessWidget { serviceList.add( InkWell( onTap: () { - openMedicalInstructions(context); + if (projectViewModel.isPatientAdmitted ? true : checkAdmissionRequestDate()) openMedicalInstructions(context); }, child: MedicalProfileItem( title: TranslationBase.of(context).medicalInstructionsTitle, @@ -105,6 +93,7 @@ class InPatientServicesHome extends StatelessWidget { width: 50.0, height: 40.0, isInPatient: true, + isEnable: projectViewModel.isPatientAdmitted ? true : checkAdmissionRequestDate(), ), ), ); @@ -112,16 +101,20 @@ class InPatientServicesHome extends StatelessWidget { serviceList.add( InkWell( onTap: () { - Navigator.push(context, FadePage(page: MealPlanPage())); + if (projectViewModel.isPatientAdmitted) { + Navigator.push(context, FadePage(page: MealPlanPage())); + } else { + AppToast.showErrorToast(message: "This service is only available to admitted patients"); + } }, child: MedicalProfileItem( - title: TranslationBase.of(context).mealPlanTitle, - imagePath: 'meal_plan.svg', - subTitle: TranslationBase.of(context).mealPlanSubTitle, - width: 50.0, - height: 40.0, - isInPatient: true, - ), + title: TranslationBase.of(context).mealPlanTitle, + imagePath: 'meal_plan.svg', + subTitle: TranslationBase.of(context).mealPlanSubTitle, + width: 50.0, + height: 40.0, + isInPatient: true, + isEnable: projectViewModel.isPatientAdmitted), ), ); @@ -193,7 +186,7 @@ class InPatientServicesHome extends StatelessWidget { serviceList.add( InkWell( onTap: () { - Navigator.push(context, FadePage(page: HelpPRO())); + checkCurrentTime(context); }, child: MedicalProfileItem( title: "Help", @@ -311,4 +304,30 @@ class InPatientServicesHome extends StatelessWidget { print(err); }); } + + void checkCurrentTime(BuildContext context) { + print(DateTime.now().hour); + print(DateTime.now().minute); + if (DateTime.now().hour >= 7 && DateTime.now().hour <= 22) { + Navigator.push(context, FadePage(page: HelpPRO())); + } else { + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: TranslationBase.of(context).proErrorMessage, + okText: TranslationBase.of(context).callNow, + cancelText: TranslationBase.of(context).cancel_nocaps, + okFunction: () => {ConfirmDialog.closeAlertDialog(context), launchUrl(Uri.parse("tel://" + "011 525 9553"))}, + cancelFunction: () => {}); + dialog.showAlertDialog(context); + } + } + + bool checkAdmissionRequestDate() { + print(DateUtil.convertStringToDate(projectViewModel.getAdmissionRequestInfoResponseModel.expectedAdmissionDate)); + print(DateUtil.convertStringToDate(projectViewModel.getAdmissionRequestInfoResponseModel.expectedAdmissionDate).difference(DateTime.now()).inHours); + if (DateUtil.convertStringToDate(projectViewModel.getAdmissionRequestInfoResponseModel.expectedAdmissionDate).difference(DateTime.now()).inHours > 24) { + return false; + } + return true; + } } diff --git a/lib/pages/landing/fragments/home_page_fragment2.dart b/lib/pages/landing/fragments/home_page_fragment2.dart index f8132a73..d34de11d 100644 --- a/lib/pages/landing/fragments/home_page_fragment2.dart +++ b/lib/pages/landing/fragments/home_page_fragment2.dart @@ -78,7 +78,7 @@ class _HomePageFragment2State extends State { Widget build(BuildContext context) { projectViewModel = Provider.of(context); - if (projectViewModel.isPatientAdmitted) { + if (projectViewModel.isPatientAdmitted || projectViewModel.patientHasAdmissionRequest) { initialiseInPatientHmgServices(false); } else { initialiseHmgServices(false); @@ -274,7 +274,7 @@ class _HomePageFragment2State extends State { ], ), ), - projectViewModel.isPatientAdmitted + projectViewModel.isPatientAdmitted || projectViewModel.patientHasAdmissionRequest ? Column( children: [ Padding( @@ -289,7 +289,9 @@ class _HomePageFragment2State extends State { child: AspectRatio( aspectRatio: 2.15, child: ServicesView( - new HmgServices(23, TranslationBase.of(context).InPatient, TranslationBase.of(context).inPatientServices, "assets/images/new/InPatient.svg", false), 23, true)), + new HmgServices(23, TranslationBase.of(context).InPatient, TranslationBase.of(context).inPatientServices, "assets/images/new/InPatient.svg", false), + 23, + true)), ), ), Expanded( diff --git a/lib/pages/login/confirm-login.dart b/lib/pages/login/confirm-login.dart index 1e80ec3e..3af64363 100644 --- a/lib/pages/login/confirm-login.dart +++ b/lib/pages/login/confirm-login.dart @@ -14,6 +14,7 @@ import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authent import 'package:diplomaticquarterapp/models/Authentication/select_device_imei_res.dart'; import 'package:diplomaticquarterapp/models/Authentication/send_activation_request.dart'; import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_info_response_model.dart'; +import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_request_info_response_model.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/login/register_new.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart'; @@ -674,25 +675,31 @@ class _ConfirmLogin extends State { checkIfIsInPatient() { bool isAdmitted = false; + bool hasAdmissionRequest = false; GetAdmissionInfoResponseModel getAdmissionInfoResponseModel; + GetAdmissionRequestInfoResponseModel getAdmissionRequestInfoResponseModel; ClinicListService service = new ClinicListService(); service.checkIfInPatientAPI(context).then((res) { if (res['MessageStatus'] == 1) { isAdmitted = res['isAdmitted']; + hasAdmissionRequest = res['hasAdmissionRequests']; print("IS ADMITTED: $isAdmitted"); - if (res['isAdmitted'] == true) { - print("INPATIENT!!!"); - getAdmissionInfoResponseModel = GetAdmissionInfoResponseModel.fromJson(res['PatientAdmittedInformation'][0]); - projectViewModel.setIsPatientAdmitted(true); + print("Has Admission Request: $hasAdmissionRequest"); + if (isAdmitted) { if (res['PatientAdmittedInformation'].length != 0) { + getAdmissionInfoResponseModel = GetAdmissionInfoResponseModel.fromJson(res['PatientAdmittedInformation'][0]); projectViewModel.setInPatientProjectID(res['PatientAdmittedInformation'][0]['ProjectID']); - } else { - projectViewModel.setInPatientProjectID(15); + projectViewModel.setInPatientAdmissionInfo(getAdmissionInfoResponseModel); + projectViewModel.setIsPatientAdmitted(true); + } + } + if (hasAdmissionRequest) { + if (res['MedicalInstruction'].length != 0) { + getAdmissionRequestInfoResponseModel = GetAdmissionRequestInfoResponseModel.fromJson(res['MedicalInstruction'][0]); + projectViewModel.setInPatientProjectID(res['MedicalInstruction'][0]['ProjectID']); + projectViewModel.setInPatientAdmissionRequest(getAdmissionRequestInfoResponseModel); + projectViewModel.setPatientHasAdmissionRequest(true); } - projectViewModel.setInPatientAdmissionInfo(getAdmissionInfoResponseModel); - } else { - print("OUTPATIENT!!!"); - projectViewModel.setIsPatientAdmitted(false); } } else {} }); diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index ab715836..59fcf042 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel. import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart'; import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_info_response_model.dart'; +import 'package:diplomaticquarterapp/models/InPatientServices/get_admission_request_info_response_model.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/login/confirm-login.dart'; import 'package:diplomaticquarterapp/pages/login/login-type.dart'; @@ -20,6 +21,7 @@ import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service import 'package:diplomaticquarterapp/services/family_files/family_files_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; @@ -395,25 +397,31 @@ class _Login extends State { checkIfIsInPatient() { bool isAdmitted = false; + bool hasAdmissionRequest = false; GetAdmissionInfoResponseModel getAdmissionInfoResponseModel; + GetAdmissionRequestInfoResponseModel getAdmissionRequestInfoResponseModel; ClinicListService service = new ClinicListService(); service.checkIfInPatientAPI(context).then((res) { if (res['MessageStatus'] == 1) { isAdmitted = res['isAdmitted']; + hasAdmissionRequest = res['hasAdmissionRequests']; print("IS ADMITTED: $isAdmitted"); - if (res['isAdmitted'] == true) { - print("INPATIENT!!!"); - projectViewModel.setIsPatientAdmitted(true); + print("Has Admission Request: $hasAdmissionRequest"); + if (isAdmitted) { if (res['PatientAdmittedInformation'].length != 0) { getAdmissionInfoResponseModel = GetAdmissionInfoResponseModel.fromJson(res['PatientAdmittedInformation'][0]); projectViewModel.setInPatientProjectID(res['PatientAdmittedInformation'][0]['ProjectID']); projectViewModel.setInPatientAdmissionInfo(getAdmissionInfoResponseModel); - } else { - projectViewModel.setInPatientProjectID(15); + projectViewModel.setIsPatientAdmitted(true); + } + } + if (hasAdmissionRequest) { + if (res['MedicalInstruction'].length != 0) { + getAdmissionRequestInfoResponseModel = GetAdmissionRequestInfoResponseModel.fromJson(res['MedicalInstruction'][0]); + projectViewModel.setInPatientProjectID(res['MedicalInstruction'][0]['ProjectID']); + projectViewModel.setInPatientAdmissionRequest(getAdmissionRequestInfoResponseModel); + projectViewModel.setPatientHasAdmissionRequest(true); } - } else { - print("OUTPATIENT!!!"); - projectViewModel.setIsPatientAdmitted(false); } } else {} }); diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 8ef54102..dd262ad7 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2933,6 +2933,7 @@ class TranslationBase { String get copyLink => localizedValues["copyLink"][locale.languageCode]; String get copyLinkTxt => localizedValues["copyLinkTxt"][locale.languageCode]; String get paymentLinkCopied => localizedValues["paymentLinkCopied"][locale.languageCode]; + String get proErrorMessage => localizedValues["proErrorMessage"][locale.languageCode]; }