You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App/lib/pages/Blood/blood_donation.dart

595 lines
22 KiB
Dart

import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/blooddonation/blood_groub_details.dart';
import 'package:diplomaticquarterapp/core/model/blooddonation/get_all_cities.dart';
//import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/core/service/blood/blood_details_servies.dart';
import 'package:diplomaticquarterapp/core/service/blood/blood_donation_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/blooddonation/blood_details_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/pages/Blood/user_agreement_page.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/SelectCiteisDialog.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/dialogs/SelectHospitalDialog.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/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:giffy_dialog/giffy_dialog.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
//import '../../../core/model/my_balance/AdvanceModel.dart';
import 'confirm_payment_page.dart';
import 'dialogs/SelectBeneficiaryDialog.dart';
import 'dialogs/SelectBloodDialog.dart';
import 'dialogs/SelectGenderDialog.dart';
import 'dialogs/SelectPatientFamilyDialog.dart';
import 'dialogs/SelectPatientInfoDialog.dart';
import 'new_text_Field.dart';
enum BeneficiaryType { MyAccount, MyFamilyFiles, OtherAccount, NON }
enum Gender{Male,Female,NON}
enum Blood{Oplus,Ominus,Aplus,Aminus,Bplus,Bminus,ABplus,ABminus,NON}
class BloodDonationPage extends StatefulWidget {
@override
_BloodDonationPageState createState() => _BloodDonationPageState();
}
class _BloodDonationPageState extends State<BloodDonationPage> {
TextEditingController _fileTextController = TextEditingController();
TextEditingController _notesTextController = TextEditingController();
BeneficiaryType beneficiaryType = BeneficiaryType.NON;
Gender gender = Gender.Male;//Gender.NON;
Blood blood = Blood.Aminus;//Blood.NON;
//HospitalsModel _selectedHospital;
var _selectedHospital = new CitiesModel();
String amount = "";
String email;
PatientInfo _selectedPatientInfo;
AuthenticatedUser authenticatedUser;
GetAllSharedRecordsByStatusList selectedPatientFamily;
AdvanceModel advanceModel = AdvanceModel();
List_BloodGroupDetailsModel bloodDetails=List_BloodGroupDetailsModel();
AppSharedPreferences sharedPref = AppSharedPreferences();
BloodDonationService _bloodDonationService = locator<BloodDonationService>();
AuthenticatedUser authUser;
var checkedValue = false;
@override
void initState() {
super.initState();
getAuthUser();
}
@override
Widget build(BuildContext context) {
return BaseView<MyBalanceViewModel>(
onModelReady: (model) => model.getCities(),//model.getHospitals(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).bloodDonation,//TranslationBase.of(context).advancePayment,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).bloodInstruction,
textAlign: TextAlign.center,
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectHospitalDialog(model.CitiesModelList),//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: [
Texts(getHospitalName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
InkWell(
//======Gender========
onTap: () => confirmSelectGenderDialog(),//confirmSelectBeneficiaryDialog(model),
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: [
//Texts(getBeneficiaryType()),
Texts(getGender()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
InkWell(
//======Gender========
onTap: () => confirmSelectBloodDialog(),//confirmSelectBeneficiaryDialog(model),
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: [
//Texts(getBeneficiaryType()),
Texts(getBlood()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
Row(
children: [
AppText(TranslationBase.of(context).bloodTermsNcondition),
// SizedBox(
// width: MediaQuery.of(context).size.height * 0.10,
// ),
InkWell(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) => UserAgreementPage()));
},
child: Container(
child: Texts(" Click here ", color: Colors.blue,),
),
)
],
),
SizedBox(
height: 12,
),
Row(
children: [
Checkbox(
onChanged: (bool value) {
setState(() {
checkedValue = value;
});
},
// tristate: checkedValue==true,//i == 1,
value: checkedValue,
activeColor: Colors.red,//Color(0xFF6200EE),
),
SizedBox(height: 10,),
Row(children: [
],),
SizedBox(
width: 10,
),
Text(
TranslationBase.of(context).iAgreeToTheTermsAndConditions,
style: Theme.of(context).textTheme.subtitle1.copyWith(color: checkedValue? Colors.red : Colors.black),
),
],
),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(
child: Container(
color: Colors.white,
width: 350,
child: InkWell(
onTap: () {
showDialog(
context: context,
builder: (_) =>
AssetGiffyDialog(
title: Text(
"",
style: TextStyle(
fontSize: 22.0,
fontWeight:
FontWeight
.w600),
),
image: Image.asset(
'assets/images/BloodChrt_EN.png'),
buttonCancelText:
Text(TranslationBase.of(context).cancel),
buttonCancelColor:
Colors.grey,
onlyCancelButton: true,
));
},
child: Container(
width: 250,
height: 200,
child:Image.asset(
'assets/images/BloodChrt_EN.png')),
),
),
),
],
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.15,
)
],
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.10,
width: double.infinity,
padding: EdgeInsets.all(12),
child: SecondaryButton(
textColor: Colors.white,
color: checkedValue== false ?Colors.white24:Color.fromRGBO(63, 72, 74, 1,),
label: TranslationBase.of(context).save,
//
onTap: (){
Map<String, dynamic> request = Map();
request["BloodGroup"] = getBlood();//'O-';
request['CellNumber'] =authUser.mobileNumber;//m'537503378';
request['City'] = _selectedHospital.description; //'Riyadh';
request['CityCode'] =_selectedHospital.iD ;
request['Gender']= gender.index ==0 ? 1 : 2;
request['NationalID'] = authUser.nationalityID;
request['ZipCode'] = authUser.outSA ==1 ? '971' :'966';
saveBloodDonation(request);
bloodDetails.city=_selectedHospital.toString();
// bloodDetails.
},
),
)),
);
}
//==============
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 confirmSelectBloodDialog(){
showDialog(
context: context,
child: SelectBloodDialog(bloodType: blood,
onValueSelected: (value) {
setState(() {
if (value == Blood.Oplus) {
bloodDetails.bloodGroup="O+";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.Ominus) {
// _fileTextController.text = model.user.patientID.toString();
bloodDetails.bloodGroup="O-";
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.ABplus) {
bloodDetails.bloodGroup="AB+";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.ABminus) {
bloodDetails.bloodGroup="AB-";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.Aplus) {
bloodDetails.bloodGroup="A+";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.Aminus) {
bloodDetails.bloodGroup="A-";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.Bplus) {
bloodDetails.bloodGroup="B+";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}else
if (value == Blood.Bminus) {
bloodDetails.bloodGroup="B-";
// _fileTextController.text = model.user.patientID.toString();
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
}
else
_fileTextController.text = "";
// beneficiaryType = value;
blood=value;
}
);
},
),
);
}
void confirmSelectGenderDialog(){
showDialog(
context: context,
child: SelectGenderDialog(beneficiaryType: gender,
onValueSelected: (value) {
setState(() {
if (value == Gender.Male) {
// _fileTextController.text = model.user.patientID.toString();
bloodDetails.patientType=1;
// advanceModel.depositorName =
// model.user.firstName + " " + model.user.lastName;
} else
// _fileTextController.text = "";
{bloodDetails.gender=2;}
// beneficiaryType = value;
gender=value;
});
},
),
);
}
//void confirmSelectHospitalDialog(List<HospitalsModel> hospitals) {
void confirmSelectHospitalDialog(List<CitiesModel> hospitals) {
showDialog(
context: context,
child: SelectCiteisDialog(
hospitals: hospitals,
selectedHospital: _selectedHospital,
onValueSelected: (value) {
setState(() {
_selectedHospital = value;
});
},
),
);
}
void confirmSelectPatientDialog(List<PatientInfo> patientInfoList) {
showDialog(
context: context,
child: SelectPatientInfoDialog(
patientInfoList: patientInfoList,
selectedPatientInfo: _selectedPatientInfo,
onValueSelected: (value) {
setState(() {
advanceModel.depositorName = value.fullName;
_selectedPatientInfo = value;
});
},
),
);
}
void confirmSelectFamilyDialog(
List<GetAllSharedRecordsByStatusList> getAllSharedRecordsByStatusList) {
showDialog(
context: context,
child: SelectPatientFamilyDialog(
getAllSharedRecordsByStatusList: getAllSharedRecordsByStatusList,
selectedPatientFamily: selectedPatientFamily,
onValueSelected: (value) {
setState(() {
selectedPatientFamily = value;
_fileTextController.text =
selectedPatientFamily.patientID.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 "Select Gender";//TranslationBase.of(context).selectBeneficiary;
}
return "Select Gender";//TranslationBase.of(context).selectBeneficiary;
}
String getGender() {
switch (gender) {
case Gender.Male:
return "Male";
case Gender.Female:
return "Female";
break;
case Gender.NON:
return "Select Gender";//TranslationBase.of(context).selectBeneficiary;
}
return "Select Gender";//TranslationBase.of(context).selectBeneficiary;
}
String getBlood() {
switch (blood) {
case Blood.Oplus:
return "O+";
break;
case Blood.Ominus:
return "O-";
break;
case Blood.ABplus:
return "AB+";
break;
case Blood.ABminus:
return "AB-";
break;
case Blood.Aplus:
return "A+";
break;
case Blood.Aminus:
return "A-";
break;
case Blood.Bplus:
return "B-";
break;
case Blood.Bminus:
return "B-";
break;
case Blood.Bplus:
return "B+";
break;
case Blood.NON:
return "Select Blood Type";//TranslationBase.of(context).selectBeneficiary;
}
return "Select Blood Type";//TranslationBase.of(context).selectBeneficiary;
}
String getHospitalName() {
if (_selectedHospital.description !=null)
return _selectedHospital.description;
else
{
_selectedHospital.iD =1;
_selectedHospital.description='Riyadh';
return _selectedHospital.description;
}
// "Riyadh";
// return List_BloodGroupDetailsModel.fromJson(0).city.toString();//"Select City";//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));
getBloodDonationAgreement();
setState(() {
authUser = data;
});
}
}
String getFamilyMembersName() {
if (selectedPatientFamily != null)
return selectedPatientFamily.patientName;
else
return TranslationBase.of(context).selectFamilyPatientName;
}
//================
saveBloodDonation(request){
GifLoaderDialogUtils.showMyDialog(context);
_bloodDonationService.bloodDonationSave(request).then((result)=>
{
GifLoaderDialogUtils.hideDialog(context),
AppToast.showSuccessToast(message: result['ErrorEndUserMessage']),
saveBloodDonationAgreement()
});
}
getBloodDonationAgreement(){
_bloodDonationService.getAgreement().then((result)=> {
checkedValue = result['IsAgreed']
});
}
saveBloodDonationAgreement(){
Map<String, dynamic> request = Map();
request['IsAgreed'] = checkedValue;
_bloodDonationService.saveAgreement(request).then((result)=> {
});
}
}