import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/dialogs/SelectHospitalDialog.dart'; import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.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/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import '../../../core/model/my_balance/AdvanceModel.dart'; import 'confirm_payment_page.dart'; import 'dialogs/SelectBeneficiaryDialog.dart'; import 'dialogs/SelectPatientFamilyDialog.dart'; import 'dialogs/SelectPatientInfoDialog.dart'; import 'new_text_Field.dart'; enum BeneficiaryType { MyAccount, MyFamilyFiles, OtherAccount, NON } class AdvancePaymentPage extends StatefulWidget { @override _AdvancePaymentPageState createState() => _AdvancePaymentPageState(); } class _AdvancePaymentPageState extends State { TextEditingController _fileTextController = TextEditingController(); TextEditingController _notesTextController = TextEditingController(); BeneficiaryType beneficiaryType = BeneficiaryType.NON; HospitalsModel _selectedHospital; String amount = ""; String email; PatientInfo _selectedPatientInfo; AuthenticatedUser authenticatedUser; GetAllSharedRecordsByStatusList selectedPatientFamily; AdvanceModel advanceModel = AdvanceModel(); AppSharedPreferences sharedPref = AppSharedPreferences(); AuthenticatedUser authUser; List imagesInfo = List(); @override void initState() { super.initState(); getAuthUser(); imagesInfo.add(ImagesInfo( imageEn: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/advance-payment/en/0.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/images-info-home/advance-payment/ar/0.png')); } @override Widget build(BuildContext context) { return BaseView( onModelReady: (model) => model.getHospitals(), builder: (_, model, w) => AppScaffold( isShowAppBar: true, imagesInfo: imagesInfo, appBarTitle: TranslationBase.of(context).advancePayment, description: TranslationBase.of(context).infoAdvancePayment, showNewAppBarTitle: true, showNewAppBar: true, backgroundColor: CustomColors.appBackgroudGreyColor, body: SingleChildScrollView( physics: ScrollPhysics(), child: Container( margin: EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( TranslationBase.of(context).advancePaymentLabel, textAlign: TextAlign.center, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), SizedBox( height: 12, ), InkWell( onTap: () => confirmSelectBeneficiaryDialog(model), child: Container( padding: EdgeInsets.all(8), width: double.infinity, height: 65, decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( getBeneficiaryType(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), Icon(Icons.arrow_drop_down) ], ), ), ), if (beneficiaryType == BeneficiaryType.MyFamilyFiles) SizedBox( height: 12, ), if (beneficiaryType == BeneficiaryType.MyFamilyFiles) InkWell( onTap: () { GifLoaderDialogUtils.showMyDialog(context); model.getFamilyFiles().then((value) { GifLoaderDialogUtils.hideDialog(context); confirmSelectFamilyDialog(model.getAllSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList); }); }, child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( getFamilyMembersName(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), Icon(Icons.arrow_drop_down), ], ), ), ), SizedBox( height: 12, ), NewTextFields( hintText: TranslationBase.of(context).fileNumber, controller: _fileTextController, ), if (beneficiaryType == BeneficiaryType.OtherAccount) SizedBox( height: 12, ), if (beneficiaryType == BeneficiaryType.OtherAccount) InkWell( onTap: () { if (_fileTextController.text.isNotEmpty) { GifLoaderDialogUtils.showMyDialog(context); model.getPatientInfoByPatientID(id: _fileTextController.text).then((value) { GifLoaderDialogUtils.hideDialog(context); confirmSelectPatientDialog(model.patientInfoList); }); } else AppToast.showErrorToast(message: 'Please Enter The File Number'); }, child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( getPatientName(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), Icon(Icons.arrow_drop_down), ], ), ), ), SizedBox( height: 12, ), InkWell( onTap: () => confirmSelectHospitalDialog(model.hospitals), child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( getHospitalName(), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.46, ), ), Icon(Icons.arrow_drop_down), ], ), ), ), SizedBox( height: 12, ), NewTextFields( hintText: TranslationBase.of(context).amount, keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), onChanged: (value) { setState(() { amount = value; }); }, ), SizedBox( height: 12, ), if (model.user != null) NewTextFields( hintText: TranslationBase.of(context).depositorEmail, initialValue: model.user.emailAddress, onChanged: (value) { email = value; }, ), SizedBox( height: 12, ), NewTextFields( hintText: TranslationBase.of(context).notes, controller: _notesTextController, ), SizedBox( height: MediaQuery.of(context).size.height * 0.15, ) ], ), ), ), bottomSheet: Container( height: 70, width: double.infinity, padding: EdgeInsets.all(12), color: Colors.white, child: SecondaryButton( textColor: Colors.white, label: TranslationBase.of(context).submit, color: CustomColors.accentColor, disabled: amount.isEmpty || _fileTextController.text.isEmpty || _selectedHospital == null, onTap: () { var mobileNum; var patientName; if (beneficiaryType == BeneficiaryType.MyFamilyFiles) { mobileNum = selectedPatientFamily.mobileNumber; patientName = selectedPatientFamily.patientName; } if (beneficiaryType == BeneficiaryType.MyAccount) { mobileNum = model.user.mobileNumber; patientName = model.user.firstName; } if (beneficiaryType == BeneficiaryType.OtherAccount) { mobileNum = _selectedPatientInfo.mobileNumber; patientName = _selectedPatientInfo.fullName; } advanceModel.fileNumber = _fileTextController.text; advanceModel.hospitalsModel = _selectedHospital; advanceModel.note = _notesTextController.text; advanceModel.email = email ?? model.user.emailAddress; advanceModel.amount = amount; advanceModel.mobileNumber = mobileNum; advanceModel.patientName = patientName; GifLoaderDialogUtils.showMyDialog(context); model.getPatientInfoByPatientIDAndMobileNumber(advanceModel).then((value) { GifLoaderDialogUtils.hideDialog(context); if (model.state != ViewState.Error && model.state != ViewState.ErrorLocal) { Utils.hideKeyboard(context); Navigator.push(context, FadePage(page: PaymentMethod())).then( (value) { Navigator.push( context, FadePage( page: ConfirmPaymentPage( advanceModel: advanceModel, selectedPaymentMethod: value, patientInfoAndMobileNumber: model.patientInfoAndMobileNumber, authenticatedUser: authUser, ), ), ); }, ); } }); }, ), )), ); } void confirmSelectBeneficiaryDialog(MyBalanceViewModel model) { showDialog( context: context, child: SelectBeneficiaryDialog( beneficiaryType: beneficiaryType, onValueSelected: (value) { setState(() { if (value == BeneficiaryType.MyAccount) { _fileTextController.text = model.user.patientID.toString(); advanceModel.depositorName = model.user.firstName + " " + model.user.lastName; } else _fileTextController.text = ""; beneficiaryType = value; }); }, ), ); } void confirmSelectHospitalDialog(List hospitals) { showDialog( context: context, child: SelectHospitalDialog( hospitals: hospitals, selectedHospital: _selectedHospital, onValueSelected: (value) { setState(() { _selectedHospital = value; }); }, ), ); } void confirmSelectPatientDialog(List patientInfoList) { showDialog( context: context, child: SelectPatientInfoDialog( patientInfoList: patientInfoList, selectedPatientInfo: _selectedPatientInfo, onValueSelected: (value) { setState(() { advanceModel.depositorName = value.fullName; _selectedPatientInfo = value; }); }, ), ); } void confirmSelectFamilyDialog(List getAllSharedRecordsByStatusList) { if (getAllSharedRecordsByStatusList.isNotEmpty) showDialog( context: context, child: SelectPatientFamilyDialog( getAllSharedRecordsByStatusList: getAllSharedRecordsByStatusList, selectedPatientFamily: selectedPatientFamily, onValueSelected: (value) { setState(() { selectedPatientFamily = value; _fileTextController.text = selectedPatientFamily.responseID.toString(); advanceModel.depositorName = value.patientName; }); }, ), ); } String getBeneficiaryType() { switch (beneficiaryType) { case BeneficiaryType.MyAccount: return TranslationBase.of(context).myAccount; case BeneficiaryType.MyFamilyFiles: return TranslationBase.of(context).myFamilyFiles; break; case BeneficiaryType.OtherAccount: return TranslationBase.of(context).otherAccount; break; case BeneficiaryType.NON: return TranslationBase.of(context).selectBeneficiary; } return TranslationBase.of(context).selectBeneficiary; } String getHospitalName() { if (_selectedHospital != null) return _selectedHospital.name; else return TranslationBase.of(context).selectHospital; } String getPatientName() { if (_selectedPatientInfo != null) return _selectedPatientInfo.fullName; else return TranslationBase.of(context).selectPatientName; } getAuthUser() async { if (await this.sharedPref.getObject(USER_PROFILE) != null) { var data = AuthenticatedUser.fromJson(await this.sharedPref.getObject(USER_PROFILE)); setState(() { authUser = data; }); } } String getFamilyMembersName() { if (selectedPatientFamily != null) return selectedPatientFamily.patientName; else return TranslationBase.of(context).selectFamilyPatientName; } }