diff --git a/lib/config/config.dart b/lib/config/config.dart index 3dc8f3e6..40cd68bb 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -13,8 +13,8 @@ const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; -const BASE_URL = 'https://uat.hmgwebservices.com/'; -// const BASE_URL = 'https://hmgwebservices.com/'; +// const BASE_URL = 'https://uat.hmgwebservices.com/'; +const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; @@ -79,6 +79,12 @@ const GET_Patient_LAB_RESULT = 'Services/Patients.svc/REST/GetPatientLabResults'; const GET_Patient_LAB_ORDERS_RESULT = 'Services/Patients.svc/REST/GetPatientLabOrdersResults'; +const SEND_COVID_LAB_RESULT_EMAIL = + 'Services/Notifications.svc/REST/GenerateCOVIDReport'; +const COVID_PASSPORT_UPDATE = + 'Services/Patients.svc/REST/Covid19_Certificate_PassportUpdate'; +const GET_PATIENT_PASSPORT_NUMBER = + 'Services/Patients.svc/REST/Covid19_Certificate_GetPassport'; /// const GET_PATIENT_ORDERS = 'Services/Patients.svc/REST/GetPatientRadOrders'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 50eae821..ffdbadcf 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1346,4 +1346,8 @@ const Map localizedValues = { "no-thankyou": {"en": "No Thanks", "ar": "لا شكرا"}, "visit-clinic": {"en": "Schedule appointment with the doctor", "ar": "ارغب في حجز موعد مجدول مع الطبيب"}, "generate-covid-certificate": {"en": "Generate Covid-19 Certificate", "ar": "إنشاء شهادة كورونا"}, + "is-report-outside-ksa": {"en": "Is the certificate needed for outside KSA?", "ar": "هل الشهادة مطلوبة من خارج المملكة؟"}, + "passport-number": {"en": "Passport Number", "ar": "رقم جواز السفر"}, + "enter-passport-number": {"en": "Please confirm or update your passport number:", "ar": "الرجاء تأكيد أو تحديث رقم جواز السفر الخاص بك:"}, + "valid-passport-number": {"en": "Please enter valid passport number", "ar": "الرجاء إدخال رقم جواز سفر صالح"}, }; diff --git a/lib/core/service/medical/labs_service.dart b/lib/core/service/medical/labs_service.dart index 1d88782d..6571c76f 100644 --- a/lib/core/service/medical/labs_service.dart +++ b/lib/core/service/medical/labs_service.dart @@ -70,7 +70,7 @@ class LabsService extends BaseService { }, body: body); } - Future generateCovidLabReport(LabResult covidLabResult) async { + Future generateCovidLabReport(LabResult covidLabResult, String isOutsideKSA) async { hasError = false; Map body = Map(); @@ -80,7 +80,7 @@ class LabsService extends BaseService { body['LineItemNo'] = covidLabResult.resultValueBasedLineItemNo; body['CertificateFormat'] = 5; body['GeneratedBy'] = 102; - body['ShowPassportNumber'] = "no"; + body['ShowPassportNumber'] = isOutsideKSA; body['isDentalAllowedBackend'] = false; body['SetupID'] = covidLabResult.setupID; body['ProjectID'] = covidLabResult.projectID; @@ -96,6 +96,38 @@ class LabsService extends BaseService { return Future.value(localRes); } + Future updateCovidPassportNumber(String passportNumber) async { + hasError = false; + Map body = Map(); + + body['PassportNo'] = passportNumber; + + dynamic localRes; + + await baseAppClient.post(COVID_PASSPORT_UPDATE, onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); + return Future.value(localRes); + } + + Future getCovidPassportNumber() async { + hasError = false; + Map body = Map(); + + dynamic localRes; + + await baseAppClient.post(GET_PATIENT_PASSPORT_NUMBER, onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); + return Future.value(localRes); + } + Future getPatientLabOrdersResults({PatientLabOrders patientLabOrder, String procedure}) async { hasError = false; Map body = Map(); diff --git a/lib/pages/medical/labs/passport_update_page.dart b/lib/pages/medical/labs/passport_update_page.dart new file mode 100644 index 00000000..0931431c --- /dev/null +++ b/lib/pages/medical/labs/passport_update_page.dart @@ -0,0 +1,122 @@ +import 'package:diplomaticquarterapp/core/service/medical/labs_service.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/input/text_field.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class PassportUpdatePage extends StatefulWidget { + @override + _PassportUpdatePageState createState() => _PassportUpdatePageState(); +} + +class _PassportUpdatePageState extends State { + TextEditingController passportNumber = new TextEditingController(); + bool _isButtonDisabled; + + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((_) => getPassportNumber()); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: TranslationBase.of(context).passportNumber, + isShowAppBar: true, + isBottomBar: true, + body: Container( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.all(45.0), + child: Text(TranslationBase.of(context).enterPassportNumber, textAlign: TextAlign.center, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold, color: Colors.black)), + ), + Container( + margin: EdgeInsets.only(top: 5.0, bottom: 5.0), + child: SvgPicture.asset("assets/images/new-design/passport.svg", width: 250.0, fit: BoxFit.fill), + ), + Container( + margin: EdgeInsets.only(left: 50.0, right: 50.0, top: 25.0), + child: TextFields( + keyboardType: TextInputType.text, + fontWeight: FontWeight.normal, + controller: passportNumber, + onChanged: (value) => {_onPassportTextChanged(value)}, + padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10), + hintText: TranslationBase.of(context).passportNumber, + )) + ], + ), + ), + ), + bottomSheet: Container( + margin: EdgeInsets.only(top: 10.0, left: 30.0, right: 30.0, bottom: 10.0), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width, + height: 45.0, + child: RaisedButton( + color: new Color(0xFFc5272d), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: Colors.red[300], + onPressed: () { + if (_isButtonDisabled == false) + updatePassportNumber(); + else + AppToast.showErrorToast(message: TranslationBase.of(context).validPassportNumber); + }, + child: Text(TranslationBase.of(context).submit, style: TextStyle(fontSize: 18.0)), + ), + ), + ), + ); + } + + _onPassportTextChanged(content) { + if (content.length >= 1) { + setState(() { + _isButtonDisabled = false; + }); + } else { + setState(() { + _isButtonDisabled = true; + }); + } + } + + void updatePassportNumber() { + LabsService service = new LabsService(); + GifLoaderDialogUtils.showMyDialog(context); + + service.updateCovidPassportNumber(passportNumber.text).then((res) { + GifLoaderDialogUtils.hideDialog(context); + Navigator.of(context).pop(true); + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } + + void getPassportNumber() { + LabsService service = new LabsService(); + GifLoaderDialogUtils.showMyDialog(context); + + service.getCovidPassportNumber().then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['Covid19_Certificate_GetPassportList'][0]['PassportNo']); + passportNumber.text = res['Covid19_Certificate_GetPassportList'][0]['PassportNo']; + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } +} diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index b32f1c8b..45472292 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -1218,6 +1218,10 @@ class TranslationBase { String get noThankyou => localizedValues["no-thankyou"][locale.languageCode]; String get visitClinic => localizedValues["visit-clinic"][locale.languageCode]; String get generateCovidCertificate => localizedValues["generate-covid-certificate"][locale.languageCode]; + String get isReportOutsideKsa => localizedValues["is-report-outside-ksa"][locale.languageCode]; + String get passportNumber => localizedValues["passport-number"][locale.languageCode]; + String get enterPassportNumber => localizedValues["enter-passport-number"][locale.languageCode]; + String get validPassportNumber => localizedValues["valid-passport-number"][locale.languageCode]; } diff --git a/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart b/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart index 8b277cc2..eabe583e 100644 --- a/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart +++ b/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart @@ -2,9 +2,11 @@ import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart'; import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/service/medical/labs_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/labs/passport_update_page.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; @@ -79,7 +81,7 @@ class LabResultWidget extends StatelessWidget { disabledTextColor: Colors.white, disabledColor: Colors.red[300], onPressed: () { - showConfirmMessage(context, projectViewModel.user.emailAddress); + showKSADialog(context); }, child: Text(TranslationBase.of(context).generateCovidCertificate, style: TextStyle(fontSize: 18.0)), ), @@ -91,11 +93,11 @@ class LabResultWidget extends StatelessWidget { ); } - generateCovidCertificate(BuildContext context) { + generateCovidCertificate(BuildContext context, String isOutsideKSA) { LabsService service = new LabsService(); GifLoaderDialogUtils.showMyDialog(context); - service.generateCovidLabReport(covidLabResult).then((res) { + service.generateCovidLabReport(covidLabResult, isOutsideKSA).then((res) { GifLoaderDialogUtils.hideDialog(context); AppToast.showSuccessToast(message: TranslationBase.of(context).emailSentSuccessfully); }).catchError((err) { @@ -104,13 +106,37 @@ class LabResultWidget extends StatelessWidget { }); } - void showConfirmMessage(BuildContext context, String email) { + openPassportUpdatePage(BuildContext context) { + Navigator.push(context, FadePage(page: PassportUpdatePage())).then((value) { + print(value); + if(value != null && value == true) { + showConfirmMessage(context, projectViewModel.user.emailAddress, "yes"); + } + }); + } + + void showKSADialog(BuildContext context) { + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: TranslationBase.of(context).isReportOutsideKsa, + okText: TranslationBase.of(context).yes, + cancelText: TranslationBase.of(context).no, + okFunction: () => { + Navigator.of(context).pop(), + openPassportUpdatePage(context) + // showConfirmMessage(context, projectViewModel.user.emailAddress, "yes") + }, + cancelFunction: () => {showConfirmMessage(context, projectViewModel.user.emailAddress, "no")}); + dialog.showAlertDialog(context); + } + + void showConfirmMessage(BuildContext context, String email, String isOutsideKSA) { showDialog( context: context, child: ConfirmSendEmailDialog( email: email, onTapSendEmail: () { - generateCovidCertificate(context); + generateCovidCertificate(context, isOutsideKSA); }, ), ); diff --git a/lib/widgets/dialogs/confirm_dialog.dart b/lib/widgets/dialogs/confirm_dialog.dart index 02b208ad..76391322 100644 --- a/lib/widgets/dialogs/confirm_dialog.dart +++ b/lib/widgets/dialogs/confirm_dialog.dart @@ -28,6 +28,7 @@ class ConfirmDialog { child: Texts(this.cancelText), onPressed: () { Navigator.of(context).pop(); + cancelFunction(); }); Widget continueButton = FlatButton(child: Texts(okText), onPressed: okFunction);