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.
diplomatic-quarter/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart

284 lines
11 KiB
Dart

import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_criteria_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/e_referral_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_view_model.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../../locator.dart';
import 'New_E_Referral/new_e_referral_step_one_page.dart';
import 'dialogs/select_country_ingo_Dialog.dart';
import 'dialogs/select_search_criteria_dialog.dart';
class SearchForReferralsPage extends StatefulWidget {
SearchForReferralsPage({Key key});
@override
_SearchForReferralsPageState createState() => _SearchForReferralsPageState();
}
class _SearchForReferralsPageState extends State<SearchForReferralsPage> {
TextEditingController _searchTextController = TextEditingController();
TextEditingController _mobileTextController = TextEditingController();
bool _isSubmitted = false;
AuthenticatedUser authUser;
dynamic _selectedCountry = {
"name": "Saudi Arabia",
"name_ar": "المملكة العربية السعودية",
"code": "+966",
"countryCode": "SA",
"pattern": "5xxxxxxxx",
"maxLength": 9
};
SearchCriteriaModel selectedCriteria = SearchCriteriaModel(
name: "Identification Number", nameAr: "رقم المحول", value: 1);
@override
void initState() {
authUser = new AuthenticatedUser();
WidgetsBinding.instance.addPostFrameCallback((_) => getPatientData());
super.initState();
}
@override
Widget build(BuildContext context) {
return BaseView<EReferralViewModel>(
onModelReady: (model) => model.getAllCities(),
builder: (_, model, widget) => AppScaffold(
isShowAppBar: false,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
margin: EdgeInsets.all(12),
child: Center(
child: FractionallySizedBox(
widthFactor: 0.94,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 77,
),
InkWell(
onTap: () => selectSearchCriteriaDialog(),
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(getSearchCriteriaName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: selectedCriteria.value == 1
? "Enter Patient Identification No"
: "Enter Referral Number",
controller: _searchTextController,
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectCountryTypeDialog(),
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(getCountryName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
MobileNumberTextFiled(
controller: _mobileTextController,
code: _selectedCountry == null
? "11"
: _selectedCountry["code"],
),
SizedBox(
height: 12,
),
if ((model.state == ViewState.Idle &&
model.allReferral.length == 0))
Text("There's No Referral To deliver"),
if ((model.state == ViewState.ErrorLocal))
AppEmbeddedError(error: model.error),
NetworkBaseView(
baseViewModel: model,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: model.allReferral == null
? 0
: model.allReferral.length < 3
? model.allReferral.length
: 3,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 0.2),
child: Container(
child: Texts("TODO add referral info"),
),
);
},
),
),
],
),
),
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: double.infinity,
padding: EdgeInsets.all(9),
child: SecondaryButton(
textColor: Colors.white,
label: "Search",
onTap: () async {
SearchEReferralRequestModel searchEReferralRequestModel =
new SearchEReferralRequestModel(
patientMobileNumber:
_selectedCountry['code'] + _mobileTextController.text,
);
if (selectedCriteria.value == 1) {
searchEReferralRequestModel.identificationNo =
_searchTextController.text;
searchEReferralRequestModel.referralNumber = 0;
} else {
searchEReferralRequestModel.referralNumber =
int.parse(_searchTextController.text);
searchEReferralRequestModel.identificationNo = '';
}
await model.getEReferrals(searchEReferralRequestModel);
setState(() {
_isSubmitted = true;
});
},
loading: model.state == ViewState.BusyLocal,
disabled: _searchTextController.text.isEmpty ||
_mobileTextController.text.isEmpty,
),
)));
}
void getEreferrals() {
EReferralService _eReferralService = locator<EReferralService>();
String mobileNumber;
String zipCode;
if (authUser.mobileNumber.length > 9) {
mobileNumber =
authUser.mobileNumber.substring(1, authUser.mobileNumber.length);
} else {
mobileNumber = authUser.mobileNumber;
}
if (authUser.outSA == 0) {
zipCode = "966";
} else {
zipCode = "971";
}
SearchEReferralRequestModel searchEReferralRequestModel =
new SearchEReferralRequestModel(
patientMobileNumber: zipCode + mobileNumber,
identificationNo: authUser.patientIdentificationNo,
referralNumber: 0);
_eReferralService
.getEReferrals(searchEReferralRequestModel)
.then((response) {
print(response['List_EReferrals']);
}).catchError(() {});
}
getPatientData() async {
AppSharedPreferences sharedPref = AppSharedPreferences();
if (await sharedPref.getObject(USER_PROFILE) != null) {
var data =
AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE));
setState(() {
authUser = data;
getEreferrals();
});
}
}
void confirmSelectCountryTypeDialog() {
showDialog(
context: context,
child: SelectCountryDialog(
selectedCountry: _selectedCountry,
onValueSelected: (value) {
setState(() {
_selectedCountry = value;
});
},
),
);
}
String getCountryName() {
if (_selectedCountry != null)
return _selectedCountry["name"];
else
return "Country";
}
void selectSearchCriteriaDialog() {
showDialog(
context: context,
child: SelectSearchCriteriaDialog(
selectedCriteria: selectedCriteria,
onValueSelected: (value) {
setState(() {
selectedCriteria = value;
});
},
),
);
}
String getSearchCriteriaName() {
return selectedCriteria.name;
}
}