diff --git a/lib/pages/MyAppointments/MyAppointments.dart b/lib/pages/MyAppointments/MyAppointments.dart index 47e539a0..80f2c9b7 100644 --- a/lib/pages/MyAppointments/MyAppointments.dart +++ b/lib/pages/MyAppointments/MyAppointments.dart @@ -84,17 +84,19 @@ class _MyAppointmentsState extends State color: Colors.grey[600], thickness: 0.5, ), - Expanded( - child: new TabBarView( - physics: NeverScrollableScrollPhysics(), - children: [ - isDataLoaded ? getBookedAppointments() : Container(), - isDataLoaded ? getConfirmedAppointments() : Container(), - isDataLoaded ? getArrivedAppointments() : Container() - ], - controller: _tabController, - ), - ), + isDataLoaded + ? Expanded( + child: new TabBarView( + physics: NeverScrollableScrollPhysics(), + children: [ + getBookedAppointments(), + getConfirmedAppointments(), + getArrivedAppointments() + ], + controller: _tabController, + ), + ) + : Container(), ]), ), ); @@ -114,19 +116,17 @@ class _MyAppointmentsState extends State service.getPatientAppointmentHistory(false, context).then((res) { print(res['AppoimentAllHistoryResultList'].length); + GifLoaderDialogUtils.hideDialog(context); if (res['MessageStatus'] == 1) { - GifLoaderDialogUtils.hideDialog(context); - setState(() { - isDataLoaded = true; - if (res['AppoimentAllHistoryResultList'].length != 0) { - isDataLoaded = true; - res['AppoimentAllHistoryResultList'].forEach((v) { - widget.appoList - .add(new AppoitmentAllHistoryResultList.fromJson(v)); - }); - sortAppointmentList(); - } else {} - }); + // setState(() { + if (res['AppoimentAllHistoryResultList'].length != 0) { + // isDataLoaded = true; + res['AppoimentAllHistoryResultList'].forEach((v) { + widget.appoList.add(new AppoitmentAllHistoryResultList.fromJson(v)); + }); + sortAppointmentList(); + } else {} + // }); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } @@ -256,6 +256,9 @@ class _MyAppointmentsState extends State return; } } + setState(() { + isDataLoaded = true; + }); } Widget getBookedAppointments() { @@ -419,6 +422,4 @@ class _MyAppointmentsState extends State ), ); } - - } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index 129f5ce9..98d9cc10 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -54,7 +54,6 @@ class _ToDoState extends State { @override void initState() { - toDoProvider = Provider.of(context); widget.patientShareResponse = new PatientShareResponse(); WidgetsBinding.instance.addPostFrameCallback((_) { if (authenticatedUserObject.isLogin) getPatientData(); @@ -69,6 +68,7 @@ class _ToDoState extends State { @override Widget build(BuildContext context) { + toDoProvider = Provider.of(context); return AppScaffold( appBarTitle: TranslationBase.of(context).todoList, imagesInfo: imagesInfo, diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index 366a49d9..729e294a 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -256,6 +256,7 @@ class _Login extends State { appointmentRateViewModel .getIsLastAppointmentRatedList() .then((value) => { + getToDoCount(), GifLoaderDialogUtils.hideDialog(context), if (appointmentRateViewModel.isHaveAppointmentNotRate) { @@ -268,7 +269,6 @@ class _Login extends State { } else { - getToDoCount(), Navigator.pushAndRemoveUntil( context, FadePage( diff --git a/lib/pages/medical/patient_sick_leave_page.dart b/lib/pages/medical/patient_sick_leave_page.dart index 033295aa..fd8ecf0f 100644 --- a/lib/pages/medical/patient_sick_leave_page.dart +++ b/lib/pages/medical/patient_sick_leave_page.dart @@ -1,11 +1,14 @@ import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; +import 'package:diplomaticquarterapp/core/model/sick_leave/sick_leave.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/patient_sick_leave_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/medical/prescriptions/confirm_send_email_dialog.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; class PatientSickLeavePage extends StatefulWidget { @override @@ -14,9 +17,14 @@ class PatientSickLeavePage extends StatefulWidget { class _PatientSickLeavePageState extends State { List imagesInfo = List(); + @override Widget build(BuildContext context) { - imagesInfo.add(ImagesInfo(imageEn: 'https://hmgwebservices.com/Images/MobileApp/imges-info/sick-leaves/en/0.png',imageAr: 'https://hmgwebservices.com/Images/MobileApp/imges-info/sick-leaves/ar/0.png')); + imagesInfo.add(ImagesInfo( + imageEn: + 'https://hmgwebservices.com/Images/MobileApp/imges-info/sick-leaves/en/0.png', + imageAr: + 'https://hmgwebservices.com/Images/MobileApp/imges-info/sick-leaves/ar/0.png')); return BaseView( onModelReady: (model) => model.getSickLeave(), builder: (_, model, w) => AppScaffold( @@ -37,16 +45,16 @@ class _PatientSickLeavePageState extends State { profileUrl: model.sickLeaveList[index].doctorImageURL, rat: model.sickLeaveList[index].actualDoctorRate.toDouble(), subName: model.sickLeaveList[index].projectName, - isInOutPatient: - model.sickLeaveList[index].isInOutPatient, + isInOutPatient: model.sickLeaveList[index].isInOutPatient, onEmailTap: () { - model.sendSickLeaveEmail( - message: TranslationBase.of(context).emailSentSuccessfully, - requestNo: model.sickLeaveList[index].requestNo, - doctorName: model.sickLeaveList[index].doctorName, - projectName: model.sickLeaveList[index].projectName, - setupID: model.sickLeaveList[index].setupID, - projectID: model.sickLeaveList[index].projectID); + showConfirmMessage(model, index); + // model.sendSickLeaveEmail( + // message: TranslationBase.of(context).emailSentSuccessfully, + // requestNo: model.sickLeaveList[index].requestNo, + // doctorName: model.sickLeaveList[index].doctorName, + // projectName: model.sickLeaveList[index].projectName, + // setupID: model.sickLeaveList[index].setupID, + // projectID: model.sickLeaveList[index].projectID); }, ), ), @@ -54,4 +62,22 @@ class _PatientSickLeavePageState extends State { ), ); } + + void showConfirmMessage(PatientSickLeaveViewMode model, int index) { + showDialog( + context: context, + child: ConfirmSendEmailDialog( + email: model.user.emailAddress, + onTapSendEmail: () { + model.sendSickLeaveEmail( + message: TranslationBase.of(context).emailSentSuccessfully, + requestNo: model.sickLeaveList[index].requestNo, + doctorName: model.sickLeaveList[index].doctorName, + projectName: model.sickLeaveList[index].projectName, + setupID: model.sickLeaveList[index].setupID, + projectID: model.sickLeaveList[index].projectID); + }, + ), + ); + } } diff --git a/lib/pages/medical/radiology/radiology_details_page.dart b/lib/pages/medical/radiology/radiology_details_page.dart index 0e0967d0..fb4ddddb 100644 --- a/lib/pages/medical/radiology/radiology_details_page.dart +++ b/lib/pages/medical/radiology/radiology_details_page.dart @@ -1,7 +1,9 @@ +import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/radiology/final_radiology.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/radiology_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/medical/prescriptions/confirm_send_email_dialog.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -51,29 +53,32 @@ class RadiologyDetailsPage extends StatelessWidget { ), bottomSheet: Container( width: double.infinity, - height: model.radImageURL.isNotEmpty ? MediaQuery.of(context).size.height * 0.2:MediaQuery.of(context).size.height * 0.15, + height: finalRadiology.dIAPACSURL != "" + ? MediaQuery.of(context).size.height * 0.2 + : MediaQuery.of(context).size.height * 0.15, color: Colors.grey[100], child: Column( mainAxisSize: MainAxisSize.min, children: [ Divider(), - if(model.radImageURL.isNotEmpty) + if (finalRadiology.dIAPACSURL != "") + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Button( + onTap: () { + launch(model.radImageURL); + }, + label: TranslationBase.of(context).openRad, + backgroundColor: Colors.grey[800], + ), + ), Container( width: MediaQuery.of(context).size.width * 0.8, child: Button( onTap: () { - launch(model.radImageURL); + showConfirmMessage( + finalRadiology: finalRadiology, model: model); }, - label: TranslationBase.of(context).openRad, - backgroundColor: Colors.grey[800], - ), - ), - Container( - width: MediaQuery.of(context).size.width * 0.8, - child: Button( - onTap: () => model.sendRadReportEmail( - mes: TranslationBase.of(context).sendSuc, - finalRadiology: finalRadiology), label: TranslationBase.of(context).sendCopyRad, loading: model.state == ViewState.BusyLocal, backgroundColor: Theme.of(context).primaryColor, @@ -84,4 +89,19 @@ class RadiologyDetailsPage extends StatelessWidget { )), ); } + + void showConfirmMessage( + {FinalRadiology finalRadiology, RadiologyViewModel model}) { + showDialog( + context: AppGlobal.context, + child: ConfirmSendEmailDialog( + email: model.user.emailAddress, + onTapSendEmail: () { + model.sendRadReportEmail( + mes: TranslationBase.of(AppGlobal.context).sendSuc, + finalRadiology: finalRadiology); + }, + ), + ); + } } diff --git a/lib/pages/medical/reports/report_home_page.dart b/lib/pages/medical/reports/report_home_page.dart index b99fb40f..8866757f 100644 --- a/lib/pages/medical/reports/report_home_page.dart +++ b/lib/pages/medical/reports/report_home_page.dart @@ -145,16 +145,20 @@ class _HomeReportPageState extends State controller: _tabController, children: [ ReportListWidget( - reportList: model.reportsOrderRequestList + reportList: model.reportsOrderRequestList, + emailAddress: model.user.emailAddress ), ReportListWidget( - reportList: model.reportsOrderReadyList + reportList: model.reportsOrderReadyList, + emailAddress: model.user.emailAddress ), ReportListWidget( - reportList: model.reportsOrderCompletedList + reportList: model.reportsOrderCompletedList, + emailAddress: model.user.emailAddress ), ReportListWidget( - reportList: model.reportsOrderCanceledList + reportList: model.reportsOrderCanceledList, + emailAddress: model.user.emailAddress ), ], ), diff --git a/lib/pages/medical/reports/report_list_widget.dart b/lib/pages/medical/reports/report_list_widget.dart index b838fd92..39946cae 100644 --- a/lib/pages/medical/reports/report_list_widget.dart +++ b/lib/pages/medical/reports/report_list_widget.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/model/reports/Reports.dart'; import 'package:diplomaticquarterapp/core/service/medical/reports_service.dart'; import 'package:diplomaticquarterapp/locator.dart'; +import 'package:diplomaticquarterapp/pages/medical/prescriptions/confirm_send_email_dialog.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; @@ -13,9 +14,9 @@ import 'package:flutter/material.dart'; class ReportListWidget extends StatelessWidget { final List reportList; - final Function onEmailTap; + final String emailAddress; - ReportListWidget({@required this.reportList, this.onEmailTap}); + ReportListWidget({@required this.reportList, this.emailAddress}); @override Widget build(BuildContext context) { @@ -67,10 +68,12 @@ class ReportListWidget extends StatelessWidget { ), reportList[index].status == 2 ? Container( - margin: EdgeInsets.only(left: 15.0, right: 15.0), + margin: + EdgeInsets.only(left: 15.0, right: 15.0), child: InkWell( onTap: () { - sendReportEmail(reportList[index]); + showConfirmMessage(reportList[index]); + // sendReportEmail(reportList[index]); }, child: Icon( Icons.email, @@ -93,6 +96,18 @@ class ReportListWidget extends StatelessWidget { ); } + void showConfirmMessage(Reports report) { + showDialog( + context: AppGlobal.context, + child: ConfirmSendEmailDialog( + email: emailAddress, + onTapSendEmail: () { + sendReportEmail(report); + }, + ), + ); + } + sendReportEmail(Reports report) { GifLoaderDialogUtils.showMyDialog(AppGlobal.context); ReportsService _reportsService = locator(); @@ -108,7 +123,6 @@ class ReportListWidget extends StatelessWidget { report.setupId) .then((value) { GifLoaderDialogUtils.hideDialog(AppGlobal.context); - print(value["IsSent"]); AppToast.showSuccessToast( message: TranslationBase.of(AppGlobal.context).emailSentSuccessfully); }).catchError((err) { diff --git a/lib/pages/rateAppointment/rate_appointment_doctor.dart b/lib/pages/rateAppointment/rate_appointment_doctor.dart index 1cd560d4..4a1026f6 100644 --- a/lib/pages/rateAppointment/rate_appointment_doctor.dart +++ b/lib/pages/rateAppointment/rate_appointment_doctor.dart @@ -162,15 +162,15 @@ class _RateAppointmentDoctorState extends State { Form( key: formKey, child: TextFields( - hintText: "Notes", + hintText: TranslationBase.of(context).notes, minLines: 4, maxLines: 4, - validator: (value) { - if (value.isEmpty) - return 'Please enter your note'; - else if (rating == 0) return 'Rating cannot be \"0\"'; - return null; - }, + // validator: (value) { + // if (value.isEmpty) + // return 'Please enter your note'; + // else if (rating == 0) return 'Rating cannot be \"0\"'; + // return null; + // }, onChanged: (value) { setState(() { note = value; diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart index 3e6123c2..637b0795 100644 --- a/lib/uitl/date_uitl.dart +++ b/lib/uitl/date_uitl.dart @@ -23,8 +23,9 @@ class DateUtil { if (date != null) { try { var dateT = date.split('/'); - var year = dateT[2].substring(0,4); - var dateP = DateTime(int.parse(year),int.parse(dateT[1]),int.parse(dateT[0])); + var year = dateT[2].substring(0, 4); + var dateP = + DateTime(int.parse(year), int.parse(dateT[1]), int.parse(dateT[0])); return dateP; } catch (e) { print(e); @@ -277,6 +278,24 @@ class DateUtil { return ""; } + static String getMonthDayYearLangDateFormatted( + DateTime dateTime, String lang) { + if (dateTime != null) + return lang == 'en' + ? getMonth(dateTime.month) + + " " + + dateTime.day.toString() + + " " + + dateTime.year.toString() + : dateTime.day.toString() + + " " + + getMonthArabic(dateTime.month) + + " " + + dateTime.year.toString(); + else + return ""; + } + /// get data formatted like 26/4/2020 /// [dateTime] convert DateTime to data formatted static String getDayMonthYearDateFormatted(DateTime dateTime) { diff --git a/lib/widgets/data_display/medical/time_line_widget.dart b/lib/widgets/data_display/medical/time_line_widget.dart index ddb3175a..6e946aa5 100644 --- a/lib/widgets/data_display/medical/time_line_widget.dart +++ b/lib/widgets/data_display/medical/time_line_widget.dart @@ -51,8 +51,12 @@ class TimeLineWidget extends StatelessWidget { LargeAvatar( onTap: () { //AppointmentDetails - Navigator.push(context, - FadePage(page: AppointmentDetails(appo: appoitmentAllHistoryResul,))); + Navigator.push( + context, + FadePage( + page: AppointmentDetails( + appo: appoitmentAllHistoryResul, + ))); }, name: appoitmentAllHistoryResul.doctorNameObj, url: appoitmentAllHistoryResul.doctorImageURL, @@ -69,7 +73,8 @@ class TimeLineWidget extends StatelessWidget { height: 15, decoration: BoxDecoration( color: Theme.of(context).primaryColor, - border: Border.all(color: Theme.of(context).primaryColor, width: 2), + border: Border.all( + color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.rectangle, borderRadius: BorderRadius.all( Radius.circular(25.0), @@ -80,7 +85,10 @@ class TimeLineWidget extends StatelessWidget { height: 4, ), Texts( - DateUtil.getMonthDayYearDateFormatted(DateUtil.convertStringToDate(appoitmentAllHistoryResul.appointmentDate)), + DateUtil.getMonthDayYearLangDateFormatted( + DateUtil.convertStringToDate( + appoitmentAllHistoryResul.appointmentDate), + projectViewModel.isArabic ? "ar" : "en"), color: Colors.white, fontSize: 12.5, fontWeight: FontWeight.normal, @@ -97,7 +105,7 @@ class TimeLineWidget extends StatelessWidget { ) else Positioned( - top:projectViewModel.isArabic ? 35 : 50, + top: projectViewModel.isArabic ? 35 : 50, child: Container( margin: EdgeInsets.only(left: 2, right: 2), child: Column( @@ -109,9 +117,10 @@ class TimeLineWidget extends StatelessWidget { fontWeight: FontWeight.normal, ), Texts( - DateUtil.getMonthDayYearDateFormatted( + DateUtil.getMonthDayYearLangDateFormatted( DateUtil.convertStringToDate( - appoitmentAllHistoryResul.appointmentDate)), + appoitmentAllHistoryResul.appointmentDate), + projectViewModel.isArabic ? "ar" : "en"), color: Colors.white, fontSize: 12.5, fontWeight: FontWeight.normal, @@ -124,7 +133,8 @@ class TimeLineWidget extends StatelessWidget { height: 15, decoration: BoxDecoration( color: Theme.of(context).primaryColor, - border: Border.all(color: Theme.of(context).primaryColor, width: 2), + border: Border.all( + color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.rectangle, borderRadius: BorderRadius.all( Radius.circular(25.0), @@ -137,9 +147,13 @@ class TimeLineWidget extends StatelessWidget { color: Colors.white, ), LargeAvatar( - onTap: (){ - Navigator.push(context, - FadePage(page: AppointmentDetails(appo: appoitmentAllHistoryResul,))); + onTap: () { + Navigator.push( + context, + FadePage( + page: AppointmentDetails( + appo: appoitmentAllHistoryResul, + ))); }, name: appoitmentAllHistoryResul.doctorNameObj, url: appoitmentAllHistoryResul.doctorImageURL,