first step from search

merge-requests/594/head
Elham Rababah 5 years ago
parent 98eec8fcdb
commit cb67dcc9e1

@ -277,6 +277,7 @@ const GET_INSURANCE_IN_PATIENT =
"Services/DoctorApplication.svc/REST/GetApprovalStatusForInpatient";
const GET_SICK_LEAVE_PATIENT = "Services/Patients.svc/REST/GetPatientSickLeave";
const GET_MY_OUT_PATIENT = "Services/DoctorApplication.svc/REST/GetMyOutPatient";
var selectedPatientType = 1;

@ -0,0 +1,2 @@
enum PatientType { inPatient, OutPatient }

@ -8,17 +8,20 @@ class PatientSearchRequestModel {
int patientID;
String from;
String to;
int searchType;
String mobileNo;
String identificationNo;
PatientSearchRequestModel(
{this.doctorID,
this.firstName,
this.middleName,
this.lastName,
this.patientMobileNumber,
this.patientIdentificationID,
this.patientID,
this.from,
this.to});
{this.doctorID =0,
this.firstName ="0",
this.middleName="0",
this.lastName="0",
this.patientMobileNumber="0",
this.patientIdentificationID="0",
this.patientID =0,
this.from="0",
this.to="0"});
PatientSearchRequestModel.fromJson(Map<String, dynamic> json) {
doctorID = json['DoctorID'];
@ -30,6 +33,9 @@ class PatientSearchRequestModel {
patientID = json['PatientID'];
from = json['From'];
to = json['To'];
searchType = json['SearchType'];
mobileNo = json['MobileNo'];
identificationNo = json['IdentificationNo'];
}
Map<String, dynamic> toJson() {
@ -43,6 +49,9 @@ class PatientSearchRequestModel {
data['PatientID'] = this.patientID;
data['From'] = this.from;
data['To'] = this.to;
data['SearchType'] = this.searchType;
data['MobileNo'] = this.mobileNo;
data['IdentificationNo'] = this.identificationNo;
return data;
}
}

@ -0,0 +1,45 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
class OutPatientService extends BaseService {
List<PatiantInformtion> _patientList = [];
List<PatiantInformtion> get patientList => _patientList;
Future getOutPatient(PatientSearchRequestModel patientSearchRequestModel) async {
hasError = false;
await baseAppClient.post(
GET_MY_OUT_PATIENT,
onSuccess: (dynamic response, int statusCode) {
_patientList.clear();
response['List_MyOutPatient'].forEach((v) {
_patientList.add(PatiantInformtion.fromJson(v));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: patientSearchRequestModel.toJson(),
);
}
Future getPatientFileInformation(PatientSearchRequestModel patientSearchRequestModel) async {
hasError = false;
await baseAppClient.post(
PRM_SEARCH_PATIENT,
onSuccess: (dynamic response, int statusCode) {
_patientList.clear();
response['GetPatientFileInformation_PRMList'].forEach((v) {
_patientList.add(PatiantInformtion.fromJson(v));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: patientSearchRequestModel.toJson(),
);
}
}

@ -1,5 +1,38 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/service/patient/out_patient_service.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import '../../locator.dart';
import 'base_view_model.dart';
class PatientSearchViewModel extends BaseViewModel{
OutPatientService _outPatientService = locator<OutPatientService>();
List<PatiantInformtion> get patientList => _outPatientService.patientList;
getOutPatient(PatientSearchRequestModel patientSearchRequestModel) async {
setState(ViewState.Busy);
await _outPatientService.getOutPatient(
patientSearchRequestModel);
if (_outPatientService.hasError) {
error = _outPatientService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
getPatientFileInformation(PatientSearchRequestModel patientSearchRequestModel) async {
setState(ViewState.Busy);
await _outPatientService.getPatientFileInformation(
patientSearchRequestModel);
if (_outPatientService.hasError) {
error = _outPatientService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
}

@ -27,6 +27,7 @@ import 'core/service/patient-admission-request-service.dart';
import 'core/service/patient-doctor-referral-service.dart';
import 'core/service/patient-ucaf-service.dart';
import 'core/service/patient-vital-signs-service.dart';
import 'core/service/patient/out_patient_service.dart';
import 'core/service/prescriptions_service.dart';
import 'core/service/radiology_service.dart';
import 'core/service/referral_patient_service.dart';
@ -80,6 +81,7 @@ void setupLocator() {
locator.registerLazySingleton(() => ReferralService());
locator.registerLazySingleton(() => MyReferralInPatientService());
locator.registerLazySingleton(() => DischargedPatientService());
locator.registerLazySingleton(() => OutPatientService());
/// View Model
locator.registerFactory(() => DoctorReplayViewModel());

@ -16,6 +16,7 @@ import 'package:doctor_app_flutter/screens/medicine/medicine_search_screen.dart'
import 'package:doctor_app_flutter/screens/medicine/search_medicine_patient_screen.dart';
import 'package:doctor_app_flutter/screens/patients/DischargedPatientPage.dart';
import 'package:doctor_app_flutter/screens/patients/ReferralDischargedPatientPage.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_screen_new.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/patient_referral_screen.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
@ -464,6 +465,44 @@ class _HomeScreenState extends State<HomeScreen> {
child: new ListView(
scrollDirection: Axis.horizontal,
children: [
HomePageCard(
color: Colors.black,
margin: EdgeInsets.all(5),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: 10, left: 10, right: 0),
child: Icon(
DoctorApp.search,
size: 32,
color: Colors.white,
)),
Container(
padding: EdgeInsets.all(10),
child: AppText(
"New:"+TranslationBase.of(context)
.searchPatient,
color: Colors.white,
textAlign: TextAlign.start,
fontSize: 13,
))
],
),
hasBorder: false,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
PatientSearchScreenNew(),
));
},
),
HomePageCard(
color: Colors.red[800],
margin: EdgeInsets.all(5),

@ -0,0 +1,302 @@
import 'package:doctor_app_flutter/core/enum/patient_type.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patients_screen_new.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class PatientSearchScreenNew extends StatefulWidget {
@override
_PatientSearchScreenNewState createState() => _PatientSearchScreenNewState();
}
class _PatientSearchScreenNewState extends State<PatientSearchScreenNew> {
bool showOther = false;
bool isFormSubmitted = false;
TextEditingController patientFileInfoController = TextEditingController();
TextEditingController firstNameInfoController = TextEditingController();
TextEditingController middleNameInfoController = TextEditingController();
TextEditingController lastNameFileInfoController = TextEditingController();
PatientType selectedPatientType = PatientType.inPatient;
@override
Widget build(BuildContext context) {
return BaseView<PatientSearchViewModel>(
onModelReady: (model) async {},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: SingleChildScrollView(
child: Center(
child: Column(
children: [
BottomSheetTitle(
title: TranslationBase.of(context).searchPatient),
FractionallySizedBox(
widthFactor: 0.9,
child: Container(
color: Theme.of(context).scaffoldBackgroundColor,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 16,
),
AppText(
'Patient Type',
fontWeight: FontWeight.w600,
),
Row(
children: [
Row(
children: [
Radio(
activeColor: Color(0xFFB9382C),
value: PatientType.inPatient,
groupValue: selectedPatientType,
onChanged: (value) {
setState(() {
selectedPatientType =
PatientType.inPatient;
});
},
),
Text('InPatient'),
],
),
Row(
children: [
Radio(
activeColor: Color(0xFFB9382C),
value: PatientType.OutPatient,
groupValue: selectedPatientType,
onChanged: (value) {
setState(() {
selectedPatientType =
PatientType.OutPatient;
});
},
),
Text('OutPatient'),
],
),
],
),
SizedBox(
height: 10,
),
Container(
margin:
EdgeInsets.only(left: 0, right: 0, top: 15),
child: AppTextFieldCustom(
hintText: TranslationBase.of(context)
.patpatientIDMobilenationalientID,
isTextFieldHasSuffix: false,
maxLines: 1,
minLines: 1,
hasBorder: true,
controller: patientFileInfoController,
validationError: (isFormSubmitted && (
patientFileInfoController
.text.isEmpty &&
firstNameInfoController
.text.isEmpty &&
middleNameInfoController
.text.isEmpty &&
lastNameFileInfoController
.text.isEmpty))
? TranslationBase.of(context).emptyMessage
: null,
),
),
SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
child: this.showOther == false
? AppText(
TranslationBase.of(context)
.searchWithOther,
color: Colors.red,
fontWeight: FontWeight.bold,
)
: AppText(
TranslationBase.of(context)
.hideOtherCriteria,
color: Colors.red,
fontWeight: FontWeight.bold),
onTap: () {
setState(() {
this.showOther = !this.showOther;
});
},
)
],
),
SizedBox(
height: 30,
),
if (showOther)
Column(
children: [
AppTextFieldCustom(
hintText:
TranslationBase.of(context).firstName,
controller: firstNameInfoController,
maxLines: 1,
minLines: 1,
hasBorder: true,
onChanged: (_) {},
// validationError:illnessController.text.isEmpty && illnessControllerError !=''?illnessControllerError:null ,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
hintText:
TranslationBase.of(context).middleName,
controller: middleNameInfoController,
maxLines: 1,
minLines: 1,
onChanged: (_) {},
hasBorder: true,
// validationError:illnessController.text.isEmpty && illnessControllerError !=''?illnessControllerError:null ,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
hintText:
TranslationBase.of(context).lastName,
controller: lastNameFileInfoController,
maxLines: 1,
minLines: 1,
onChanged: (_) {},
hasBorder: true,
// validationError:illnessController.text.isEmpty && illnessControllerError !=''?illnessControllerError:null ,
),
SizedBox(
height: 10,
),
],
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.12,
),
])),
),
],
),
),
),
bottomSheet: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(0.0),
),
border: Border.all(color: HexColor('#707070'), width: 0),
),
height: MediaQuery.of(context).size.height * 0.1,
width: double.infinity,
child: Column(
children: [
SizedBox(
height: 10,
),
Container(
child: FractionallySizedBox(
widthFactor: .80,
child: Center(
child: AppButton(
fontWeight: FontWeight.w700,
title: TranslationBase.of(context).search,
onPressed: () {
onSubmitSearch();
},
color: Colors.red[800],
),
),
),
),
SizedBox(
height: 5,
),
],
),
),
),
);
}
onSubmitSearch() {
GifLoaderDialogUtils.showMyDialog(context);
setState(() {
isFormSubmitted = true;
});
PatientSearchRequestModel patientSearchRequestModel =
PatientSearchRequestModel();
if (showOther) {
patientSearchRequestModel.firstName = firstNameInfoController.text.trim().isEmpty?"0":firstNameInfoController.text.trim();
patientSearchRequestModel.middleName = middleNameInfoController.text.trim().isEmpty?"0":middleNameInfoController.text.trim();
patientSearchRequestModel.lastName = lastNameFileInfoController.text.isEmpty?"0":lastNameFileInfoController.text.trim();
}
if (patientFileInfoController.text.isNotEmpty) {
if (patientFileInfoController.text.length == 10 &&
(patientFileInfoController.text[0] == '2' ||
patientFileInfoController.text[0] == '1')) {
patientSearchRequestModel.identificationNo =
patientFileInfoController.text;
patientSearchRequestModel.searchType = 2;
patientSearchRequestModel.patientID = 0;
} else if ((patientFileInfoController.text.length == 10 ||
patientFileInfoController.text.length == 9) &&
((patientFileInfoController.text[0] == '0' &&
patientFileInfoController.text[1] == '5') ||
patientFileInfoController.text[0] == '5')) {
patientSearchRequestModel.mobileNo = patientFileInfoController.text;
patientSearchRequestModel.searchType = 0;
} else {
patientSearchRequestModel.patientID =
int.parse(patientFileInfoController.text);
patientSearchRequestModel.searchType = 1;
}
}
GifLoaderDialogUtils.hideDialog(context);
if (patientFileInfoController.text.isNotEmpty ||
firstNameInfoController.text.isNotEmpty ||
middleNameInfoController.text.isNotEmpty ||
lastNameFileInfoController.text.isNotEmpty) {
setState(() {
isFormSubmitted = false;
});
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => PatientsScreenNew(
selectedPatientType: selectedPatientType,
patientSearchRequestModel: patientSearchRequestModel,
isSearchWithKeyInfo:
patientFileInfoController.text.isNotEmpty ? true : false,
),
),
);
}
}
}

@ -0,0 +1,732 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/patient_type.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart';
import 'package:doctor_app_flutter/models/patient/patient_model.dart';
import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart';
import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/PatientCard.dart';
import 'package:doctor_app_flutter/widgets/patients/clinic_list_dropdwon.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
// ignore: must_be_immutable
class PatientsScreenNew extends StatefulWidget {
final patientSearchForm;
final selectedType;
final isAppbar;
final arrivalType;
final isView;
final PatientType selectedPatientType;
final PatientSearchRequestModel patientSearchRequestModel;
final bool isSearchWithKeyInfo;
PatientsScreenNew(
{this.patientSearchForm,
this.selectedType,
this.isAppbar = true,
this.arrivalType,
this.isView,
this.selectedPatientType,
this.patientSearchRequestModel,
this.isSearchWithKeyInfo = true});
@override
_PatientsScreenNewState createState() => _PatientsScreenNewState();
}
class _PatientsScreenNewState extends State<PatientsScreenNew> {
List<dynamic> lItems;
List parsed;
List date;
List unFilterDate;
int clinicId;
AuthViewModel authProvider;
Color sideColor = Colors.black;
List<PatiantInformtion> responseModelList;
List<PatiantInformtion> responseModelList2;
final String url = "assets/images/";
final String avatarMale = "user_male.svg"; //'working_male.svg';//'user.svg';
final String avatarFemale = 'user_female.svg';
final String assetName = 'assets/image.svg';
List<String> _locations = []; //['All', 'Today', 'Tomorrow', 'Next Week'];
int _activeLocation = 0;
bool isInpatient = false;
String patientType;
bool isSearch = false;
String patientTypeTitle;
var _isLoading = true;
var selectedFilter = 1;
bool _isError = false;
String error = "";
String arrivalType;
ProjectViewModel projectsProvider;
var isView;
final _controller = TextEditingController();
PatientModel patient;
var _patientSearchFormValues = PatientModel(
FirstName: "0",
MiddleName: "0",
LastName: "0",
PatientMobileNumber: "0",
PatientIdentificationID: "0",
PatientID: 0,
From: DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd')
.toString(),
To: DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd')
.toString(),
LanguageID: 2,
stamp: "2020-03-02T13:56:39.170Z",
IPAdress: "11.11.11.11",
VersionID: 1.2,
Channel: 9,
TokenID: "2Fi7HoIHB0eDyekVa6tCJg==",
SessionID: "5G0yXn0Jnq",
IsLoginForDoctorApp: true,
PatientOutSA: false);
searchData(String str) {
this.responseModelList = this.responseModelList2;
var strExist = str.length > 0 ? true : false;
if (strExist) {
List<PatiantInformtion> filterData = [];
for (var i = 0; i < responseModelList2.length; i++) {
String firstName = responseModelList[i].firstName.toUpperCase();
String lastName = responseModelList[i].lastName.toUpperCase();
String mobile = responseModelList[i].mobileNumber.toUpperCase();
String patientID = responseModelList[i].patientId.toString();
if (firstName.contains(str.toUpperCase()) ||
lastName.contains(str.toUpperCase()) ||
mobile.contains(str) ||
patientID.contains(str)) {
filterData.add(responseModelList[i]);
}
}
setState(() {
this.responseModelList = filterData;
});
} else {
setState(() {
this.responseModelList = this.responseModelList2;
});
}
}
convertDateFormat(String str) {
String timeConvert;
const start = "/Date(";
const end = "+0300)";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
var date = new DateTime.fromMillisecondsSinceEpoch(
int.parse(str.substring(startIndex + start.length, endIndex)));
String newDate = date.year.toString() +
"-" +
date.month.toString().padLeft(2, '0') +
"-" +
date.day.toString().padLeft(2, '0');
return newDate.toString();
}
@override
Widget build(BuildContext context) {
authProvider = Provider.of(context);
_locations = [
TranslationBase.of(context).today,
TranslationBase.of(context).tomorrow,
TranslationBase.of(context).nextWeek,
];
//TranslationBase.of(context).all,
projectsProvider = Provider.of(context);
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
// patient = widget.patientSearchForm != null
// ? widget.patientSearchForm
// : routeArgs['patientSearchForm'];
//
// patientType = widget.selectedType != null
// ? widget.selectedType
// : routeArgs['selectedType'];
// arrivalType = widget.arrivalType != null
// ? widget.arrivalType
// : routeArgs['arrivalType'];
// if (routeArgs != null && routeArgs.containsKey("isSearch")) {
// isSearch = routeArgs['isSearch'];
// }
// if (routeArgs != null && routeArgs.containsKey("isSearch")) {
// isView = routeArgs['isView'];
// }
// if (routeArgs != null && routeArgs.containsKey('activeFilter')) {
// _activeLocation = routeArgs['activeFilter'];
// }
// if (routeArgs != null && routeArgs.containsKey('isInpatient')) {
// isInpatient = routeArgs['isInpatient'];
// }
// if (!projectsProvider.isArabic)
// patientTypeTitle = SERVICES_PATIANT_HEADER[int.parse(patientType)];
// else
// patientTypeTitle = SERVICES_PATIANT_HEADER_AR[int.parse(patientType)];
return BaseView<PatientSearchViewModel>(
onModelReady: (model) async {
if(widget.isSearchWithKeyInfo) {
await model.getPatientFileInformation(widget.patientSearchRequestModel);
} else {
// ignore: unrelated_type_equality_checks
if(widget.selectedPatientType == PatientType.OutPatient) {
await model.getOutPatient(widget.patientSearchRequestModel);
} else {
// TODO handel inPatient case
}
}
},
builder: (_, model, w) => AppScaffold(
appBarTitle: "Search Patient",
isShowAppBar: widget.isAppbar,
// isLoading: _isLoading,
baseViewModel: model,
body: model.patientList.isEmpty
? Column(
children: [
Column(children: <Widget>[
SizedBox(
height: 10.0,
),
if (widget.selectedPatientType == PatientType.OutPatient)
Container(
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(10)),
child: ClinicList(
clinicId: clinicId,
onClinicChange: (newValue) {
clinicId = newValue;
changeClinic(newValue, context, model);
},
)),
Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).size.height *
0.03),
// child: _locationBar(context)
child:
widget.selectedPatientType == PatientType.OutPatient
? _locationBar(context, model)
: Container(),
)
]),
Container(
margin: EdgeInsets.only(
top: MediaQuery.of(context).size.height * 0.10),
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 100,
),
Image.asset('assets/images/no-data.png'),
Padding(
padding: const EdgeInsets.all(8.0),
child: AppText(TranslationBase.of(context)
.youDontHaveAnyPatient),
)
],
),
),
),
],
)
: Container(
color: Colors.grey[200],
child: ListView(
scrollDirection: Axis.vertical,
children: <Widget>[
Container(
child:model.patientList.isEmpty
? Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Container(
child: Center(
child: Padding(
padding: const EdgeInsets.fromLTRB(
0, 0, 0, 0), //250
child:
DrAppCircularProgressIndeicator(),
)),
),
],
)
: Column(
children: <Widget>[
SizedBox(height: 18.5),
Container(
width: SizeConfig.screenWidth * 0.9,
height: 75,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(6.0)),
border: Border.all(
width: 1.0,
color: HexColor("#CCCCCC"),
),
color: Colors.white),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(
left: 10, top: 10),
child: AppText(
TranslationBase.of(
context)
.searchPatientName,
fontSize: 13,
)),
AppTextFormField(
// focusNode: focusProject,
controller: _controller,
borderColor: Colors.white,
prefix: IconButton(
icon: Icon(
DoctorApp.filter_1,
color: Colors.black,
),
iconSize: 20,
padding:
EdgeInsets.only(
bottom: 30),
),
onChanged: (String str) {
this.searchData(str);
}),
])),
SizedBox(
height: 10.0,
),
Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context)
.size
.height *
0.03),
// child: _locationBar(context)
child: widget.selectedPatientType == PatientType.OutPatient? _locationBar(context, model)
: Container(),
),
SizedBox(
height: 10.0,
),
Container(
child: (model.patientList.isNotEmpty)
? Column(
// mainAxisAlignment: MainAxisAlignment.center,
children: model.patientList
.map((PatiantInformtion
item) {
return PatientCard(
patientInfo: item,
patientType:
patientType,
arrivalType:
arrivalType,
isInpatient:
isInpatient,
onTap: () {
Navigator.of(context)
.pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": item,
"patientType":
patientType,
"from": patient
.getFrom,
"to": patient
.getTo,
"isSearch":
isSearch,
"isInpatient":
isInpatient,
"arrivalType":
arrivalType,
"isInpatient":
isInpatient
});
},
);
}).toList(),
)
: Center(
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.center,
children: [
SizedBox(
height: 100,
),
Image.asset(
'assets/images/no-data.png'),
Padding(
padding:
const EdgeInsets
.all(8.0),
child: AppText(
TranslationBase.of(
context)
.youDontHaveAnyPatient),
)
],
),
)),
],
),
)
],
),
)
),
);
}
changeClinic(clinicId, BuildContext context, model) async {
GifLoaderDialogUtils.showMyDialog(context);
Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile);
ProfileReqModel docInfo = new ProfileReqModel(
doctorID: doctorProfile.doctorID,
clinicID: clinicId,
license: true,
projectID: doctorProfile.projectID,
tokenID: '',
languageID: 2);
authProvider
.getDocProfiles(docInfo.toJson(), allowChangeProfile: false)
.then((profileList) async {
print(profileList['DoctorProfileList'][0]);
int val2 = int.parse(patientType);
GetPatientArrivalListRequestModel getPatientArrivalListRequestModel =
GetPatientArrivalListRequestModel(
from: patient.From,
to: patient.To,
clinicID: profileList['DoctorProfileList'][0]['ClinicID'],
doctorID:
profileList['DoctorProfileList'][0]['DoctorID'].toString(),
patientMRN: patient.getPatientID,
pageIndex: 0,
pageSize: 0);
model
.getPatientList(
getPatientArrivalListRequestModel.toJson(), patientType)
.then((res) {
setState(() {
if (res != null && res['MessageStatus'] == 1) {
if (val2 == 7) {
if (res[SERVICES_PATIANT2[val2]] == null) {
_isError = true;
_isLoading = false;
this.error = error.toString();
} else {
var localList = [];
if (res["patientArrivalList"]["entityList"] == null) {
res["patientArrivalList"]["entityList"] = [];
}
res["patientArrivalList"]["entityList"].forEach((v) {
Map<String, dynamic> mergedPatient = {
...v,
...v["patientDetails"]
};
localList.add(mergedPatient);
});
lItems = localList;
}
}
parsed = lItems;
responseModelList = new ModelResponse.fromJson(parsed).list;
responseModelList.sort((a, b) {
DateTime now = DateTime.now();
DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm");
String formattedDate =
DateFormat('yyyy-MM-dd ' + a.startTime).format(now);
DateTime dateTimeA = dateFormat.parse(formattedDate);
String formattedDateB =
DateFormat('yyyy-MM-dd ' + b.startTime).format(now);
DateTime dateTimeB = dateFormat.parse(formattedDateB);
var adate = dateTimeA; //a.startTime;
var bdate = dateTimeB;
return adate.compareTo(bdate);
});
responseModelList2 = responseModelList;
_isError = false;
} else {
_isError = true;
error = model.error ??
res['ErrorEndUserMessage'] ??
res['ErrorMessage'];
}
_isLoading = false;
});
GifLoaderDialogUtils.hideDialog(context);
}).catchError((error) {
Helpers.showErrorToast(error.toString());
GifLoaderDialogUtils.hideDialog(context);
});
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
Helpers.showErrorToast(err);
});
}
Widget _locationBar(BuildContext _context, model) {
return Container(
height: MediaQuery.of(context).size.height * 0.0619,
width: SizeConfig.screenWidth * 0.94,
decoration: BoxDecoration(
color: Color(0Xffffffff),
borderRadius: BorderRadius.circular(12.5),
// border: Border.all(
// width: 0.5,
// ),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: _locations.map((item) {
bool _isActive = _locations[_activeLocation] == item ? true : false;
return Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
InkWell(
child: Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.058,
width: SizeConfig.screenWidth * 0.2334,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(12.5),
topRight: Radius.circular(12.5),
topLeft: Radius.circular(9.5),
bottomLeft: Radius.circular(9.5)),
color: _isActive ? HexColor("#B8382B") : Colors.white,
),
child: Center(
child: Text(
item,
style: TextStyle(
fontSize: 12,
color: _isActive
? Colors.white
: Colors.black, //Colors.black,
fontWeight: FontWeight.normal,
),
),
)),
),
onTap: () {
//filterBooking(item.toString());
setState(() {
_activeLocation = _locations.indexOf(item);
});
filterPatient(item.toString(), model);
}),
_isActive
? Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
topRight: Radius.circular(10)),
color: Colors.white),
alignment: Alignment.center,
height: 1,
width: SizeConfig.screenWidth * 0.23,
)
: Container()
]);
}).toList(),
),
);
}
filterPatient(item, model) {
if (item == 'Tomorrow') {
_patientSearchFormValues.To = DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month,
DateTime.now().day + 1),
'yyyy-MM-dd');
_patientSearchFormValues.From = DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month,
DateTime.now().day + 1),
'yyyy-MM-dd');
} else if (item == 'Next Week') {
_patientSearchFormValues.From = DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month,
DateTime.now().day + 1),
'yyyy-MM-dd');
_patientSearchFormValues.To = DateUtils.convertDateToFormat(
DateTime(DateTime.now().year, DateTime.now().month,
DateTime.now().day + 6),
'yyyy-MM-dd');
} else {
_patientSearchFormValues.From = DateUtils.convertDateToFormat(
DateTime(
DateTime.now().year, DateTime.now().month, DateTime.now().day),
'yyyy-MM-dd');
_patientSearchFormValues.To = DateUtils.convertDateToFormat(
DateTime(
DateTime.now().year, DateTime.now().month, DateTime.now().day),
'yyyy-MM-dd');
}
searchPatient(model);
}
searchPatient(model) {
GifLoaderDialogUtils.showMyDialog(context);
int val2 = int.parse(patientType);
GetPatientArrivalListRequestModel getPatientArrivalListRequestModel;
if (val2 == 0) {
patient = PatientModel(
From: _patientSearchFormValues.From,
To: _patientSearchFormValues.To,
FirstName: "0",
MiddleName: "0",
LastName: "0",
PatientMobileNumber: "0",
PatientIdentificationID: "0",
PatientID: 0,
);
}
model
.getPatientList(
val2 == 7 ? getPatientArrivalListRequestModel.toJson() : patient,
patientType,
isView: isView)
.then((res) {
setState(() {
GifLoaderDialogUtils.hideDialog(context);
if (res != null && res['MessageStatus'] == 1) {
if (val2 == 7) {
if (res[SERVICES_PATIANT2[val2]] == null) {
_isError = true;
_isLoading = false;
this.error = error.toString();
} else {
var localList = [];
if (res["patientArrivalList"]["entityList"] == null) {
res["patientArrivalList"]["entityList"] = [];
}
res["patientArrivalList"]["entityList"].forEach((v) {
Map<String, dynamic> mergedPatient = {
...v,
...v["patientDetails"]
};
localList.add(mergedPatient);
});
lItems = localList;
}
} else {
if (isView == false && val2 == 1) {
lItems = res['GetPatientFileInformation_PRMList']
.where((i) => i['PatientTypeDescription'] == 'Permanent File')
.toList();
} else {
lItems = res[SERVICES_PATIANT2[val2]];
}
}
parsed = lItems;
responseModelList = new ModelResponse.fromJson(parsed).list;
if (val2 == 7) {
responseModelList.sort((a, b) {
if (b.startTime != null && b.startTime != null) {
try {
DateTime now = DateTime.now();
DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm");
String formattedDate =
DateFormat('yyyy-MM-dd ' + a.startTime).format(now);
DateTime dateTimeA = dateFormat.parse(formattedDate);
String formattedDateB =
DateFormat('yyyy-MM-dd ' + b.startTime).format(now);
DateTime dateTimeB = dateFormat.parse(formattedDateB);
var adate = dateTimeA; //a.startTime;
var bdate = dateTimeB;
return adate.compareTo(bdate);
} on Exception catch (_) {
print('never reached');
var adate = a.startTime; //a.startTime;
var bdate = b.startTime;
return adate.compareTo(bdate);
}
} else {
var adate = convertDateFormat(a.appointmentDate);
var bdate = convertDateFormat(b.appointmentDate);
return bdate.compareTo(adate);
}
});
}
responseModelList2 = responseModelList;
_isError = false;
} else {
_isError = true;
error =
model.error ?? res['ErrorEndUserMessage'] ?? res['ErrorMessage'];
}
_isLoading = false;
});
}).catchError((error) {
GifLoaderDialogUtils.hideDialog(context);
setState(() {
_isError = true;
_isLoading = false;
this.error = error.toString();
});
});
}
}

@ -35,18 +35,18 @@ class PatientCard extends StatelessWidget {
color: Colors.white,
),
child: Stack(children: [
if (SERVICES_PATIANT2[int.parse(patientType)] != "List_MyInPatient")
Container(
height: MediaQuery.of(context).size.height * .20,
width: 5,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10)),
color: patientInfo.patientStatusType == 43
? Colors.green[500]
: Colors.red[800],
)),
// if (SERVICES_PATIANT2[int.parse(patientType)] != "List_MyInPatient")
// Container(
// height: MediaQuery.of(context).size.height * .20,
// width: 5,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(10),
// bottomLeft: Radius.circular(10)),
// color: patientInfo.patientStatusType == 43
// ? Colors.green[500]
// : Colors.red[800],
// )),
Container(
padding: EdgeInsets.only(left: 10, right: 0, bottom: 0),
child: InkWell(
@ -55,48 +55,48 @@ class PatientCard extends StatelessWidget {
SizedBox(
height: 10,
),
SERVICES_PATIANT2[int.parse(patientType)] ==
"List_MyOutPatient"
? Padding(
padding: EdgeInsets.only(left: 12.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
patientInfo.patientStatusType == 43
? AppText(
TranslationBase.of(context).arrivedP,
color: Colors.green,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
fontSize: 12,
)
: AppText(
TranslationBase.of(context).notArrived,
color: Colors.red[800],
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
fontSize: 12,
),
this.arrivalType == '1'
? AppText(
patientInfo.startTime != null
? patientInfo.startTime
: patientInfo.startTimes,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
)
: patientInfo.arrivedOn != null
? AppText(
DateUtils.convertStringToDateFormat(
patientInfo.arrivedOn,
'MM-dd-yyyy HH:mm'),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
)
: SizedBox()
],
))
: SizedBox(),
// SERVICES_PATIANT2[int.parse(patientType)] ==
// "List_MyOutPatient"
// ? Padding(
// padding: EdgeInsets.only(left: 12.0),
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// patientInfo.patientStatusType == 43
// ? AppText(
// TranslationBase.of(context).arrivedP,
// color: Colors.green,
// fontWeight: FontWeight.bold,
// fontFamily: 'Poppins',
// fontSize: 12,
// )
// : AppText(
// TranslationBase.of(context).notArrived,
// color: Colors.red[800],
// fontWeight: FontWeight.bold,
// fontFamily: 'Poppins',
// fontSize: 12,
// ),
// this.arrivalType == '1'
// ? AppText(
// patientInfo.startTime != null
// ? patientInfo.startTime
// : patientInfo.startTimes,
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w600,
// )
// : patientInfo.arrivedOn != null
// ? AppText(
// DateUtils.convertStringToDateFormat(
// patientInfo.arrivedOn,
// 'MM-dd-yyyy HH:mm'),
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w600,
// )
// : SizedBox()
// ],
// ))
// : SizedBox(),
Padding(
padding: EdgeInsets.only(left: 12.0),
child: Row(
@ -213,32 +213,32 @@ class PatientCard extends StatelessWidget {
),
),
),
if (SERVICES_PATIANT2[int.parse(patientType)] !=
"List_MyInPatient")
Container(
child: RichText(
text: new TextSpan(
style: new TextStyle(
fontSize: 2.0 * SizeConfig.textMultiplier,
color: Colors.black,
fontFamily: 'Poppins',
),
children: <TextSpan>[
new TextSpan(
text:
TranslationBase.of(context).age +
" : ",
style: TextStyle(fontSize: 14)),
new TextSpan(
text:
"${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}",
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 15)),
],
),
),
),
// if (SERVICES_PATIANT2[int.parse(patientType)] !=
// "List_MyInPatient")
// Container(
// child: RichText(
// text: new TextSpan(
// style: new TextStyle(
// fontSize: 2.0 * SizeConfig.textMultiplier,
// color: Colors.black,
// fontFamily: 'Poppins',
// ),
// children: <TextSpan>[
// new TextSpan(
// text:
// TranslationBase.of(context).age +
// " : ",
// style: TextStyle(fontSize: 14)),
// new TextSpan(
// text:
// "${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}",
// style: TextStyle(
// fontWeight: FontWeight.w700,
// fontSize: 15)),
// ],
// ),
// ),
// ),
if (isInpatient == true)
Container(
child: RichText(
@ -370,27 +370,28 @@ class PatientCard extends StatelessWidget {
//)
]))
]),
SERVICES_PATIANT2[int.parse(patientType)] ==
"List_MyOutPatient"
? Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
padding: EdgeInsets.all(4),
child: Image.asset(
patientInfo.appointmentType ==
'Regular' &&
patientInfo.visitTypeId == 100
? 'assets/images/livecare.png'
: patientInfo.appointmentType ==
'Walkin'
? 'assets/images/walkin.png'
: 'assets/images/booked.png',
height: 25,
width: 35,
)),
])
: (isInpatient == true)
// SERVICES_PATIANT2[int.parse(patientType)] ==
// "List_MyOutPatient"
// ? Row(
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// Container(
// padding: EdgeInsets.all(4),
// child: Image.asset(
// patientInfo.appointmentType ==
// 'Regular' &&
// patientInfo.visitTypeId == 100
// ? 'assets/images/livecare.png'
// : patientInfo.appointmentType ==
// 'Walkin'
// ? 'assets/images/walkin.png'
// : 'assets/images/booked.png',
// height: 25,
// width: 35,
// )),
// ])
// :
(isInpatient == true)
? Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [

Loading…
Cancel
Save