From c1212c2c6ae4564a3c85caebfb749ebe18658122 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 29 Apr 2025 11:02:40 +0300 Subject: [PATCH] Dental updates & fixes, Update to stores VersionID 18.3 --- lib/config/config.dart | 7 +- .../BookAppointment/DentalComplaints.dart | 131 +++++++++++++----- lib/pages/BookAppointment/DoctorProfile.dart | 3 +- .../components/SearchByClinic.dart | 44 ++---- .../login/user-login-agreement-page.dart | 28 +++- 5 files changed, 134 insertions(+), 79 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index e634298a..7faa9202 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -22,12 +22,13 @@ var PACKAGES_ORDER_HISTORY = '/api/orders/items'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; // var BASE_URL = 'http://10.50.100.198:2018/'; // var BASE_URL = 'https://uat.hmgwebservices.com/'; -// var BASE_URL = 'https://hmgwebservices.com/'; +var BASE_URL = 'https://hmgwebservices.com/'; +// var BASE_URL = 'http://10.201.204.103/'; // var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/'; -var BASE_URL = 'https://webservices.hmg.com/'; +// var BASE_URL = 'https://webservices.hmg.com/'; // var BASE_URL = 'http://10.50.100.198:4422/'; @@ -353,7 +354,7 @@ var CAN_PAY_FOR_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/CanPayForWal var CHANNEL = 3; var GENERAL_ID = 'Cs2020@2016\$2958'; var IP_ADDRESS = '10.20.10.20'; -var VERSION_ID = 18.2; +var VERSION_ID = 18.3; var SETUP_ID = '91877'; var LANGUAGE = 2; // var PATIENT_OUT_SA = 0; diff --git a/lib/pages/BookAppointment/DentalComplaints.dart b/lib/pages/BookAppointment/DentalComplaints.dart index 62a9ddea..609e2d1e 100644 --- a/lib/pages/BookAppointment/DentalComplaints.dart +++ b/lib/pages/BookAppointment/DentalComplaints.dart @@ -28,11 +28,7 @@ class DentalComplaints extends StatefulWidget { bool isDoctorNameSearch; bool isFromHospitalSearchPage; - DentalComplaints( - {required this.searchInfo, - this.onSelectedMethod, - this.isDoctorNameSearch = false, - this.isFromHospitalSearchPage = false}); + DentalComplaints({required this.searchInfo, this.onSelectedMethod, this.isDoctorNameSearch = false, this.isFromHospitalSearchPage = false}); @override _DentalComplaintsState createState() => _DentalComplaintsState(); @@ -53,6 +49,8 @@ class _DentalComplaintsState extends State { late ProjectViewModel projectViewModel; + bool isDoctorsList = false; + @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) => checkIfHasDentalPlan()); @@ -71,36 +69,66 @@ class _DentalComplaintsState extends State { backgroundColor: CustomColors.appBackgroudGreyColor, body: Container( child: !hasDentalPlan - ? ListView.separated( - itemCount: complaintsList.length, - itemBuilder: (BuildContext context, int index) { - return Container( - child: DentalComplaintCard( - listDentalChiefComplain: complaintsList[index], - languageID: languageID, - isDoctorNameSearch: widget.isDoctorNameSearch, - onSelectedMethod: widget.onSelectedMethod, - isFromHospitalSearchPage: widget.isFromHospitalSearchPage, - onDoctorFetched: widget.isFromHospitalSearchPage - ? (doctorsList) { - Navigator.pop(context, doctorsList); - } - : null, - )..logAnalytics = () { - final info = widget.searchInfo; - locator() - .appointment - .book_appointment_chief_complaints(appointment_type: 'regular', hospital: info.hospital, clinic: info.clinic, treatment: complaintsList[index]); - }, - ); - }, - separatorBuilder: (BuildContext context, int index) { - return Padding( - padding: const EdgeInsets.only(left: 14, right: 14), - child: mDivider(CustomColors.devider), - ); - }, - ) + ? isDoctorsList + ? Container( + child: SingleChildScrollView( + child: Column( + children: [ + ...List.generate( + patientDoctorAppointmentListHospital.length, + (index) => Padding( + padding: const EdgeInsets.all(14.0), + child: AppExpandableNotifier( + isExpand: true, + title: + patientDoctorAppointmentListHospital[index].filterName! + " - " + patientDoctorAppointmentListHospital[index].distanceInKMs! + " " + TranslationBase.of(context).km, + bodyWidget: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList!.map((doctor) { + return DoctorView( + doctor: doctor, + isLiveCareAppointment: false, + isContinueDentalPlan: hasDentalPlan, + ); + }).toList(), + )), + ), + ) + ], + ), + ), + ) + : ListView.separated( + itemCount: complaintsList.length, + itemBuilder: (BuildContext context, int index) { + return Container( + child: DentalComplaintCard( + listDentalChiefComplain: complaintsList[index], + languageID: languageID, + isDoctorNameSearch: widget.isDoctorNameSearch, + onSelectedMethod: widget.onSelectedMethod, + isFromHospitalSearchPage: widget.isFromHospitalSearchPage, + onDoctorFetched: widget.isFromHospitalSearchPage + ? (doctorsList) { + Navigator.pop(context, doctorsList); + } + : null, + )..logAnalytics = () { + final info = widget.searchInfo; + locator() + .appointment + .book_appointment_chief_complaints(appointment_type: 'regular', hospital: info.hospital, clinic: info.clinic, treatment: complaintsList[index]); + }, + ); + }, + separatorBuilder: (BuildContext context, int index) { + return Padding( + padding: const EdgeInsets.only(left: 14, right: 14), + child: mDivider(CustomColors.devider), + ); + }, + ) : Container( child: SingleChildScrollView( child: Column( @@ -284,9 +312,36 @@ class _DentalComplaintsState extends State { GifLoaderDialogUtils.hideDialog(context); if (res['MessageStatus'] == 1) { setState(() { - res['List_DentalChiefComplain'].forEach((v) { - complaintsList.add(new ListDentalChiefComplain.fromJson(v)); - }); + if (res['DoctorList'].length != 0) { + isDoctorsList = true; + doctorsList.clear(); + res['DoctorList'].forEach((v) { + doctorsList.add(new DoctorList.fromJson(v)); + }); + doctorsList.forEach((element) { + List doctorByHospital = patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + patientDoctorAppointmentListHospital[patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList!.add(element); + } else { + patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList( + filterName: element.projectName, + distanceInKMs: element.projectDistanceInKiloMeters.toString(), + projectTopName: element.projectTopName, + projectBottomName: element.projectBottomName, + patientDoctorAppointment: element)); + } + }); + } else { + isDoctorsList = false; + res['List_DentalChiefComplain'].forEach((v) { + complaintsList.add(new ListDentalChiefComplain.fromJson(v)); + }); + } }); } else {} }).catchError((err) { diff --git a/lib/pages/BookAppointment/DoctorProfile.dart b/lib/pages/BookAppointment/DoctorProfile.dart index 77a7b74e..2072109b 100644 --- a/lib/pages/BookAppointment/DoctorProfile.dart +++ b/lib/pages/BookAppointment/DoctorProfile.dart @@ -539,7 +539,8 @@ class _DoctorProfileState extends State with TickerProviderStateM } else { if (DocAvailableAppointments.areSlotsAvailable) { if (projectViewModel.isLogin) { - if (widget.isDoctorNameSearch && widget.doctor.clinicID == 17 && projectViewModel.user!.age! > 12) { + // if (widget.isDoctorNameSearch && widget.doctor.clinicID == 17 && projectViewModel.user!.age! > 12) { + if (widget.isDoctorNameSearch && widget.doctor.clinicID == 17) { navigateToDentalComplaints(context); } else if (widget.isDoctorNameSearch && widget.doctor.clinicID == 253) { navigateToLaserClinic(context); diff --git a/lib/pages/BookAppointment/components/SearchByClinic.dart b/lib/pages/BookAppointment/components/SearchByClinic.dart index 7e8f345f..53bc10f2 100644 --- a/lib/pages/BookAppointment/components/SearchByClinic.dart +++ b/lib/pages/BookAppointment/components/SearchByClinic.dart @@ -640,14 +640,7 @@ class _SearchByClinicState extends State { List _patientDoctorAppointmentListHospital = []; DoctorsListService service = new DoctorsListService(); - service - .getDoctorsList( - clinicID, - projectDropdownValue != "" ? int.parse(projectDropdownValue!) : 0, - nearestAppo, - languageID, - context) - .then((res) async { + service.getDoctorsList(clinicID, projectDropdownValue != "" ? int.parse(projectDropdownValue!) : 0, nearestAppo, languageID, context).then((res) async { GifLoaderDialogUtils.hideDialog(context); RegionList regionHospitalList = RegionList(); @@ -661,21 +654,12 @@ class _SearchByClinicState extends State { if (nearestAppo) { doctorsList.forEach((element) { List doctorByHospital = - _patientDoctorAppointmentListHospital - .where((elementClinic) => - elementClinic.filterName == - element.getProjectCompleteName()) - .toList(); + _patientDoctorAppointmentListHospital.where((elementClinic) => elementClinic.filterName == element.getProjectCompleteName()).toList(); if (doctorByHospital.length != 0) { - _patientDoctorAppointmentListHospital[ - _patientDoctorAppointmentListHospital - .indexOf(doctorByHospital[0])] - .patientDoctorAppointmentList! - .add(element); + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList!.add(element); } else { - _patientDoctorAppointmentListHospital - .add(PatientDoctorAppointmentList( + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList( filterName: element.getProjectCompleteName(), distanceInKMs: element.projectDistanceInKiloMeters.toString(), projectTopName: element.projectTopName, @@ -685,20 +669,16 @@ class _SearchByClinicState extends State { )); } }); - navigateToSearchResultsForNearestAppointment( - context, doctorsList, _patientDoctorAppointmentListHospital); + navigateToSearchResultsForNearestAppointment(context, doctorsList, _patientDoctorAppointmentListHospital); return; } - regionHospitalList = await DoctorMapper.getMappedDoctor(doctorsList, - isArabic: isArabic); + regionHospitalList = await DoctorMapper.getMappedDoctor(doctorsList, isArabic: isArabic); var lat = await sharedPref.getDouble(USER_LAT); var lng = await sharedPref.getDouble(USER_LONG); - var isLocationEnabled = - (lat != null && lat != 0.0) && (lng != null && lng != 0.0); - regionHospitalList = await DoctorMapper.sortList( - isLocationEnabled, regionHospitalList); + var isLocationEnabled = (lat != null && lat != 0.0) && (lng != null && lng != 0.0); + regionHospitalList = await DoctorMapper.sortList(isLocationEnabled, regionHospitalList); setState(() {}); } else { @@ -733,10 +713,7 @@ class _SearchByClinicState extends State { }); } - navigateToSearchResultsForNearestAppointment( - context, - List docList, - List patientDoctorAppointmentListHospital) { + navigateToSearchResultsForNearestAppointment(context, List docList, List patientDoctorAppointmentListHospital) { Navigator.push( context, FadePage( @@ -744,8 +721,7 @@ class _SearchByClinicState extends State { isLiveCareAppointment: false, isDoctorNameSearch: true, doctorsList: docList, - patientDoctorAppointmentListHospital: - patientDoctorAppointmentListHospital, + patientDoctorAppointmentListHospital: patientDoctorAppointmentListHospital, isDoctorSearchResult: true, ))); } diff --git a/lib/pages/login/user-login-agreement-page.dart b/lib/pages/login/user-login-agreement-page.dart index 72f46e74..075570f5 100644 --- a/lib/pages/login/user-login-agreement-page.dart +++ b/lib/pages/login/user-login-agreement-page.dart @@ -47,6 +47,7 @@ class _UserLoginAgreementPageState extends State { bool isPageLoaded = false; bool isTermsAndConditionsPage = true; + bool acceptTerms = false; @override void initState() { @@ -155,9 +156,13 @@ class _UserLoginAgreementPageState extends State { onPressed: isPageLoaded ? () { if (isTermsAndConditionsPage) { - setState(() { - isTermsAndConditionsPage = false; - }); + if (acceptTerms) { + setState(() { + isTermsAndConditionsPage = false; + }); + } else { + AppToast.showErrorToast(message: TranslationBase.of(context).pleaseAcceptTerms); + } } else { addUsageAgreement(); } @@ -654,6 +659,23 @@ class _UserLoginAgreementPageState extends State { style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24), ), mHeight(24.0), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Checkbox( + value: acceptTerms, + onChanged: (v) { + setState(() => acceptTerms = v!); + }), + Expanded( + child: Text( + TranslationBase.of(context).termsConditionsRead, + style: TextStyle( + fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24), + ), + ), + ], + ), mHeight(150.0), ], ),