first step from search
parent
98eec8fcdb
commit
cb67dcc9e1
@ -0,0 +1,2 @@
|
||||
enum PatientType { inPatient, OutPatient }
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue