Merge branch 'admission-request' into 'development'

Admission request

See merge request Cloud_Solution/doctor_app_flutter!299
merge-requests/301/merge
Mohammad Aljammal 5 years ago
commit 3a29f2b3cc

@ -192,7 +192,9 @@ const SEARCH_DRUG = 'Services/DoctorApplication.svc/REST/GetMedicationList';
const DRUG_TO_DRUG = const DRUG_TO_DRUG =
'Services/DoctorApplication.svc/REST/DrugToDrugInteraction'; 'Services/DoctorApplication.svc/REST/DrugToDrugInteraction';
const GET_MEDICAL_FILE = 'Services/DoctorApplication.svc/REST/GetMedicalFile'; const GET_MEDICAL_FILE = 'Services/DoctorApplication.svc/REST/GetMedicalFile';
const GET_FLOORS = 'Services/DoctorApplication.svc/REST/GetFloors';
const GET_WARDS = 'Services/DoctorApplication.svc/REST/GetWards'; const GET_WARDS = 'Services/DoctorApplication.svc/REST/GetWards';
const GET_ROOM_CATEGORIES = 'Services/DoctorApplication.svc/REST/GetRoomCategories';
const GET_DIAGNOSIS_TYPES = 'Services/DoctorApplication.svc/REST/DiagnosisTypes'; const GET_DIAGNOSIS_TYPES = 'Services/DoctorApplication.svc/REST/DiagnosisTypes';
const GET_DIET_TYPES = 'Services/DoctorApplication.svc/REST/DietTypes'; const GET_DIET_TYPES = 'Services/DoctorApplication.svc/REST/DietTypes';
const GET_ICD_CODES = 'Services/DoctorApplication.svc/REST/GetICDCodes'; const GET_ICD_CODES = 'Services/DoctorApplication.svc/REST/GetICDCodes';

@ -700,6 +700,15 @@ const Map<String, Map<String, String>> localizedValues = {
'diagnosisDetail': {'en': "Diagnosis Detail : ", 'ar': "تفاصيل التشخيص"}, 'diagnosisDetail': {'en': "Diagnosis Detail : ", 'ar': "تفاصيل التشخيص"},
'referralSuccessMsgAccept': {'en': "Referral Accepted Successfully", 'ar': "تم قبول الإحالة بنجاح"}, 'referralSuccessMsgAccept': {'en': "Referral Accepted Successfully", 'ar': "تم قبول الإحالة بنجاح"},
'referralSuccessMsgReject': {'en': "Referral Rejected Successfully", 'ar': "تم رفض الإحالة بنجاح"}, 'referralSuccessMsgReject': {'en': "Referral Rejected Successfully", 'ar': "تم رفض الإحالة بنجاح"},
'sickLeaveComments': {'en': "Sick leave comments", 'ar': "تعليقات إجازة مرضية"},
'pastMedicalHistory': {'en': "Past medical history", 'ar': "التاريخ الطبي"},
'pastSurgicalHistory': {'en': "Past surgical history", 'ar': "التاريخ الجراحي"},
'complications': {'en': "Complications", 'ar': "المضاعفات"},
'floor': {'en': "Floor", 'ar': "الطابق"},
'roomCategory': {'en': "Room category", 'ar': "فئة الغرفة"},
'otherDepartmentsInterventions': {'en': "Other departments interventions", 'ar': "تدخلات الأقسام الأخرى"},
'otherProcedure': {'en': "Other procedure", 'ar': "إجراء آخر"},
'admissionRequestSuccessMsg': {'en': "Admission Request Created Successfully", 'ar': "تم إنشاء طلب القبول بنجاح"},
// 'icd': {'en': "ICD", 'ar': " "}, // 'icd': {'en': "ICD", 'ar': " "},
'orderNo': {'en': "Order No : ", 'ar': "رقم الطلب"}, 'orderNo': {'en': "Order No : ", 'ar': "رقم الطلب"},
}; };

@ -8,12 +8,15 @@ class AdmissionRequestService extends LookupService {
List<dynamic> clinicList = []; List<dynamic> clinicList = [];
List<dynamic> doctorsList = []; List<dynamic> doctorsList = [];
List<dynamic> specialityList = []; List<dynamic> specialityList = [];
List<dynamic> floorList = [];
List<dynamic> wardList = []; List<dynamic> wardList = [];
List<dynamic> roomCategoryList = [];
List<dynamic> diagnosisTypesList = []; List<dynamic> diagnosisTypesList = [];
List<dynamic> allergiesLookupList = []; List<dynamic> allergiesLookupList = [];
List<dynamic> dietTypesList = []; List<dynamic> dietTypesList = [];
List<dynamic> icdCodes = []; List<dynamic> icdCodes = [];
setSpecialityList() { setSpecialityList() {
specialityList.clear(); specialityList.clear();
listOfSpeciality.forEach((element) { listOfSpeciality.forEach((element) {
@ -68,6 +71,28 @@ class AdmissionRequestService extends LookupService {
); );
} }
Future getFloors() async {
hasError = false;
await baseAppClient.post(
GET_FLOORS,
onSuccess: (dynamic response, int statusCode) {
floorList.clear();
if (response['AdmissionMasterList'] != null &&
response['AdmissionMasterList']['entityList'] != null) {
response['AdmissionMasterList']['entityList'].forEach((v) {
floorList.add(v);
});
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: Map(),
);
}
Future getWardList() async { Future getWardList() async {
hasError = false; hasError = false;
@ -91,6 +116,28 @@ class AdmissionRequestService extends LookupService {
); );
} }
Future getRoomCategories() async {
hasError = false;
await baseAppClient.post(
GET_ROOM_CATEGORIES,
onSuccess: (dynamic response, int statusCode) {
roomCategoryList.clear();
if (response['AdmissionMasterList'] != null &&
response['AdmissionMasterList']['entityList'] != null) {
response['AdmissionMasterList']['entityList'].forEach((v) {
roomCategoryList.add(v);
});
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: Map(),
);
}
Future getDiagnosisTypesList() async { Future getDiagnosisTypesList() async {
hasError = false; hasError = false;
@ -173,7 +220,7 @@ class AdmissionRequestService extends LookupService {
await baseAppClient.post( await baseAppClient.post(
POST_ADMISSION_REQUEST, POST_ADMISSION_REQUEST,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
print(response); print(response["admissionResponse"]["success"]);
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
hasError = true; hasError = true;

@ -19,8 +19,12 @@ class AdmissionRequestViewModel extends BaseViewModel{
List<dynamic> get speciality => _admissionRequestService.specialityList; List<dynamic> get speciality => _admissionRequestService.specialityList;
List<dynamic> get floorList => _admissionRequestService.floorList;
List<dynamic> get wardList => _admissionRequestService.wardList; List<dynamic> get wardList => _admissionRequestService.wardList;
List<dynamic> get roomCategoryList => _admissionRequestService.roomCategoryList;
List<dynamic> get admissionTypeList => _admissionRequestService.listOfAdmissionType; List<dynamic> get admissionTypeList => _admissionRequestService.listOfAdmissionType;
List<dynamic> get diagnosisTypesList => _admissionRequestService.diagnosisTypesList; List<dynamic> get diagnosisTypesList => _admissionRequestService.diagnosisTypesList;
@ -63,6 +67,16 @@ class AdmissionRequestViewModel extends BaseViewModel{
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getFloors() async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getFloors();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getWards() async { Future getWards() async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _admissionRequestService.getWardList(); await _admissionRequestService.getWardList();
@ -73,6 +87,16 @@ class AdmissionRequestViewModel extends BaseViewModel{
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getRoomCategories() async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getRoomCategories();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getDiagnosis() async { Future getDiagnosis() async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _admissionRequestService.getDiagnosisTypesList(); await _admissionRequestService.getDiagnosisTypesList();

@ -45,6 +45,7 @@ import 'landing_page.dart';
import 'screens/doctor/doctor_reply_screen.dart'; import 'screens/doctor/doctor_reply_screen.dart';
import 'screens/live_care/panding_list.dart'; import 'screens/live_care/panding_list.dart';
import 'screens/patients/profile/admission-request/admission-request-detail-screen.dart'; import 'screens/patients/profile/admission-request/admission-request-detail-screen.dart';
import 'screens/patients/profile/admission-request/admission-request-first-screen.dart';
import 'screens/patients/profile/admission-request/admission-request-third-screen.dart'; import 'screens/patients/profile/admission-request/admission-request-third-screen.dart';
import 'screens/patients/profile/admission-request/admission-request_second-screen.dart'; import 'screens/patients/profile/admission-request/admission-request_second-screen.dart';
import 'screens/patients/profile/referral/my-referral-detail-screen.dart'; import 'screens/patients/profile/referral/my-referral-detail-screen.dart';
@ -137,7 +138,7 @@ var routes = {
PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(), PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(),
VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(),
PATIENT_VITAL_SIGN: (_) => PatientVitalSignScreen(), PATIENT_VITAL_SIGN: (_) => PatientVitalSignScreen(),
PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestThirdScreen(), PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestFirstScreen(),
PATIENT_ADMISSION_REQUEST_2: (_) => AdmissionRequestSecondScreen(), PATIENT_ADMISSION_REQUEST_2: (_) => AdmissionRequestSecondScreen(),
PATIENT_ADMISSION_REQUEST_3: (_) => AdmissionRequestThirdScreen(), PATIENT_ADMISSION_REQUEST_3: (_) => AdmissionRequestThirdScreen(),
// PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(), // PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(),

@ -0,0 +1,487 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.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/dr_app_toast_msg.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/profile/patient-page-header-widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.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/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
import '../../../../routes.dart';
class AdmissionRequestFirstScreen extends StatefulWidget {
@override
_AdmissionRequestThirdScreenState createState() =>
_AdmissionRequestThirdScreenState();
}
class _AdmissionRequestThirdScreenState
extends State<AdmissionRequestFirstScreen> {
final _dietTypeRemarksController = TextEditingController();
final _sickLeaveCommentsController = TextEditingController();
final _postMedicalHistoryController = TextEditingController();
final _postSurgicalHistoryController = TextEditingController();
dynamic _selectedClinic;
dynamic _selectedDoctor;
dynamic _selectedDietType;
bool _isSickLeaveRequired = false;
bool _patientPregnant = false;
@override
Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
final screenSize = MediaQuery.of(context).size;
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<AdmissionRequestViewModel>(
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector(
onTap: (){
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PatientPageHeaderWidget(patient),
Container(
margin: EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context)
.specialityAndDoctorDetail,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.clinicList != null &&
model.clinicList.length > 0
? () {
openListDialogField(
'clinicGroupName',
'clinicID',
model.clinicList,
(selectedValue) {
setState(() {
_selectedClinic = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getClinics().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.clinicList.length > 0) {
openListDialogField(
'clinicGroupName',
'clinicID',
model.clinicList,
(selectedValue) {
setState(() {
_selectedClinic =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.clinic,
_selectedClinic != null
? _selectedClinic[
'clinicGroupName']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 20,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: _selectedClinic != null
? model.doctorsList != null &&
model.doctorsList.length > 0
? () {
openListDialogField(
'DoctorName',
'DoctorID',
model.doctorsList,
(selectedValue) {
setState(() {
_selectedDoctor =
selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils
.showMyDialog(context);
await model
.getClinicDoctors(
_selectedClinic[
'clinicID'])
.then((_) =>
GifLoaderDialogUtils
.hideDialog(
context));
if (model.state ==
ViewState.Idle &&
model.doctorsList.length >
0) {
openListDialogField(
'DoctorName',
'DoctorID',
model.doctorsList,
(selectedValue) {
setState(() {
_selectedDoctor =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
}
: null,
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.doctor,
_selectedDoctor != null
? _selectedDoctor[
'DoctorName']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).patientDetails,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
CheckboxListTile(
title: AppText(
TranslationBase.of(context).patientPregnant,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _patientPregnant,
onChanged: (newValue) {
setState(() {
_patientPregnant = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile(
title: AppText(
TranslationBase.of(context)
.isSickLeaveRequired,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _isSickLeaveRequired,
onChanged: (newValue) {
setState(() {
_isSickLeaveRequired = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.sickLeaveComments,
null,
false),
enabled: true,
controller: _sickLeaveCommentsController,
keyboardType: TextInputType.text,
minLines: 2,
maxLines: 4,
)),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.dietTypesList != null &&
model.dietTypesList.length > 0
? () {
openListDialogField('nameEn', 'id',
model.dietTypesList,
(selectedValue) {
setState(() {
_selectedDietType =
selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getDietTypes().then(
(_) => GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.dietTypesList.length >
0) {
openListDialogField('nameEn',
'id', model.dietTypesList,
(selectedValue) {
setState(() {
_selectedDietType =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.dietType,
_selectedDietType != null
? _selectedDietType['nameEn']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 10,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.dietTypeRemarks,
null,
false),
enabled: true,
controller: _dietTypeRemarksController,
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
)),
SizedBox(
height: 10,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.pastMedicalHistory,
null,
false),
enabled: true,
controller: _postMedicalHistoryController,
keyboardType: TextInputType.text,
minLines: 2,
maxLines: 4,
)),
SizedBox(
height: 10,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.pastSurgicalHistory,
null,
false),
enabled: true,
controller: _postSurgicalHistoryController,
keyboardType: TextInputType.text,
minLines: 2,
maxLines: 4,
)),
],
),
),
],
),
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton(
title: TranslationBase.of(context).next,
color: HexColor("#B8382B"),
onPressed: () {
model.admissionRequestData = AdmissionRequest();
if (_selectedClinic != null &&
_selectedDoctor != null &&
_sickLeaveCommentsController.text != "" &&
_postMedicalHistoryController.text != "" &&
_postSurgicalHistoryController.text != "") {
model.admissionRequestData.patientMRN =
patient.patientMRN;
model.admissionRequestData.appointmentNo =
patient.appointmentNo;
model.admissionRequestData.episodeID =
patient.episodeNo;
model.admissionRequestData.admissionRequestNo = 0;
model.admissionRequestData.admitToClinic =
_selectedClinic['clinicID'];
model.admissionRequestData.mrpDoctorID =
_selectedDoctor['DoctorID'];
model.admissionRequestData.isPregnant =
_patientPregnant;
model.admissionRequestData.isSickLeaveRequired =
_isSickLeaveRequired;
model.admissionRequestData.sickLeaveComments =
_sickLeaveCommentsController.text;
model.admissionRequestData.isDietType =
_selectedDietType != null ? true : false;
model.admissionRequestData.dietType =
_selectedDietType != null
? _selectedDietType['id']
: 0;
model.admissionRequestData.dietRemarks =
_dietTypeRemarksController.text;
model.admissionRequestData.pastMedicalHistory =
_postMedicalHistoryController.text;
model.admissionRequestData.pastSurgicalHistory =
_postSurgicalHistoryController.text;
Navigator.of(context).pushNamed(
PATIENT_ADMISSION_REQUEST_2,
arguments: {
'patient': patient,
'admission-data': model.admissionRequestData
});
} else {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill);
}
},
),
),
],
),
),
),
);
}
Future _selectDate(BuildContext context, DateTime dateTime,
Function(DateTime picked) updateDate) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: dateTime,
firstDate: DateTime.now(),
lastDate: DateTime(2040),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != dateTime) {
updateDate(picked);
}
}
void openListDialogField(String attributeName, String attributeValueId,
List<dynamic> list, Function(dynamic selectedValue) okFunction) {
ListSelectDialog dialog = ListSelectDialog(
list: list,
attributeName: attributeName,
attributeValueId: attributeValueId,
usingSearch: true,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
okFunction(selectedValue);
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
}

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart'; import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart';
@ -31,19 +32,21 @@ class AdmissionRequestThirdScreen extends StatefulWidget {
class _AdmissionRequestThirdScreenState class _AdmissionRequestThirdScreenState
extends State<AdmissionRequestThirdScreen> { extends State<AdmissionRequestThirdScreen> {
final _postPlansEstimatedCostController = TextEditingController(); final _treatmentLineController = TextEditingController();
final _dietTypeRemarksController = TextEditingController(); final _complicationsController = TextEditingController();
final _estimatedCostController = TextEditingController(); final _otherProceduresController = TextEditingController();
// DateTime _dischargeDate; dynamic _selectedAdmissionType;
dynamic _selectedClinic; dynamic _selectedDiagnosis;
dynamic _selectedDoctor; dynamic _selectedIcd;
dynamic _selectedDietType; dynamic _selectedDiagnosisType;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient']; PatiantInformtion patient = routeArgs['patient'];
AdmissionRequest admissionRequest = routeArgs['admission-data'];
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
@ -51,8 +54,14 @@ class _AdmissionRequestThirdScreenState
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: model.doctorsList != null body: GestureDetector(
? Column( onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: Column(
children: [ children: [
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
@ -61,57 +70,90 @@ class _AdmissionRequestThirdScreenState
children: [ children: [
PatientPageHeaderWidget(patient), PatientPageHeaderWidget(patient),
Container( Container(
margin: EdgeInsets.symmetric( margin:
vertical: 16, horizontal: 16), EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox( SizedBox(
height: 16, height: 10,
), ),
AppText( Container(
TranslationBase.of(context) child: TextField(
.specialityAndDoctorDetail, decoration: Helpers.textFieldSelectorDecoration(
fontWeight: FontWeight.bold, TranslationBase.of(context).treatmentLine,
fontSize: SizeConfig.textMultiplier * 2.5, null,
false),
enabled: true,
controller: _treatmentLineController,
keyboardType: TextInputType.text,
minLines: 3,
maxLines: 5,
)),
SizedBox(
height: 10,
), ),
Container(
child: TextField(
decoration: Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).complications,
null,
false),
enabled: true,
controller: _complicationsController,
keyboardType: TextInputType.text,
minLines: 3,
maxLines: 5,
)),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
Container(
child: TextField(
decoration: Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).otherProcedure,
null,
false),
enabled: true,
controller: _otherProceduresController,
keyboardType: TextInputType.text,
minLines: 3,
maxLines: 5,
)),
SizedBox( SizedBox(
height: 20, height: 10,
), ),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.clinicList != null && onTap: model.admissionTypeList != null &&
model.clinicList.length > 0 model.admissionTypeList.length > 0
? () { ? () {
openListDialogField( openListDialogField('nameEn', 'id',
'clinicGroupName', model.admissionTypeList,
'clinicID',
model.clinicList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedClinic = selectedValue; _selectedAdmissionType =
selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model.getClinics().then((_) => await model
.getMasterLookup(MasterKeysService
.AdmissionRequestType)
.then((_) =>
GifLoaderDialogUtils.hideDialog( GifLoaderDialogUtils.hideDialog(
context)); context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&
model.clinicList.length > 0) { model.admissionTypeList.length > 0) {
openListDialogField( openListDialogField('nameEn', 'id',
'clinicGroupName', model.admissionTypeList,
'clinicID',
model.clinicList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedClinic = _selectedAdmissionType =
selectedValue; selectedValue;
}); });
}); });
@ -125,13 +167,10 @@ class _AdmissionRequestThirdScreenState
} }
}, },
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).admissionType,
TranslationBase.of(context) _selectedAdmissionType != null
.clinic, ? _selectedAdmissionType['nameEn']
_selectedClinic != null
? _selectedClinic[
'clinicGroupName']
: null, : null,
true), true),
enabled: false, enabled: false,
@ -139,49 +178,43 @@ class _AdmissionRequestThirdScreenState
), ),
), ),
SizedBox( SizedBox(
height: 20, height: 16,
),
AppText(
TranslationBase.of(context).diagnosisDetail,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
), ),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: _selectedClinic != null onTap: model.diagnosisTypesList != null &&
? model.doctorsList != null && model.diagnosisTypesList.length > 0
model.doctorsList.length > 0
? () { ? () {
openListDialogField( openListDialogField('nameEn', 'id',
'DoctorName', model.diagnosisTypesList,
'DoctorID',
model.doctorsList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDoctor = _selectedDiagnosis = selectedValue;
selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils GifLoaderDialogUtils.showMyDialog(
.showMyDialog(context); context);
await model await model.getDiagnosis().then((_) =>
.getClinicDoctors( GifLoaderDialogUtils.hideDialog(
_selectedClinic[
'clinicID'])
.then((_) =>
GifLoaderDialogUtils
.hideDialog(
context)); context));
if (model.state == if (model.state == ViewState.Idle &&
ViewState.Idle && model.diagnosisTypesList.length > 0) {
model.doctorsList.length > openListDialogField('nameEn', 'id',
0) { model.diagnosisTypesList,
openListDialogField(
'DoctorName',
'DoctorID',
model.doctorsList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDoctor = _selectedDiagnosis = selectedValue;
selectedValue;
}); });
}); });
} else if (model.state == } else if (model.state ==
@ -192,16 +225,12 @@ class _AdmissionRequestThirdScreenState
DrAppToastMsg.showErrorToast( DrAppToastMsg.showErrorToast(
"Empty List"); "Empty List");
} }
} },
: null,
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).diagnosis,
TranslationBase.of(context) _selectedDiagnosis != null
.doctor, ? _selectedDiagnosis['nameEn']
_selectedDoctor != null
? _selectedDoctor[
'DoctorName']
: null, : null,
true), true),
enabled: false, enabled: false,
@ -211,96 +240,75 @@ class _AdmissionRequestThirdScreenState
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppText(
TranslationBase.of(context)
.postPlansEstimatedCost,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container( Container(
height: screenSize.height * 0.070,
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.estimatedCost,
null,
false),
enabled: true,
controller: _estimatedCostController,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS))
],
keyboardType: TextInputType.number,
)),
SizedBox(
height: 10,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).postPlans,
null,
false),
enabled: true,
controller: _postPlansEstimatedCostController,
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
)),
SizedBox(
height: 10,
),
/* Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: () { onTap: model.icdCodes != null &&
if (_dischargeDate == null) { model.icdCodes.length > 0
_dischargeDate = DateTime.now(); ? () {
openListDialogField(
'description', 'code', model.icdCodes,
(selectedValue) {
setState(() {
_selectedIcd = selectedValue;
});
});
} }
_selectDate(context, _dischargeDate, : () async {
(picked) { GifLoaderDialogUtils.showMyDialog(
context);
await model
.getICDCodes(patient.patientMRN)
.then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.icdCodes.length > 0) {
openListDialogField(
'description',
'code',
model.icdCodes, (selectedValue) {
setState(() { setState(() {
_dischargeDate = picked; _selectedIcd = selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
}, },
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).icd,
TranslationBase.of(context) _selectedIcd != null
.expectedAdmissionDate, ? _selectedIcd['description']
_dischargeDate != null
? "${DateUtils.convertStringToDateFormat(_dischargeDate.toString(), "yyyy-MM-dd")}"
: null, : null,
true, true),
suffixIcon: Icon(
Icons.calendar_today,
color: Colors.black,
)),
enabled: false, enabled: false,
), ),
), ),
), ),
SizedBox( SizedBox(
height: 10, height: 10,
),*/ ),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.dietTypesList != null && onTap: model.listOfDiagnosisSelectionTypes !=
model.dietTypesList.length > 0 null &&
model.listOfDiagnosisSelectionTypes
.length >
0
? () { ? () {
openListDialogField('nameEn', 'id', openListDialogField('description', 'code',
model.dietTypesList, model.listOfDiagnosisSelectionTypes,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDietType = _selectedDiagnosisType =
selectedValue; selectedValue;
}); });
}); });
@ -308,17 +316,23 @@ class _AdmissionRequestThirdScreenState
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model.getDietTypes().then( await model
(_) => GifLoaderDialogUtils .getMasterLookup(MasterKeysService
.hideDialog(context)); .DiagnosisSelectionType)
.then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&
model.dietTypesList.length > model.listOfDiagnosisSelectionTypes
.length >
0) { 0) {
openListDialogField('nameEn', openListDialogField(
'id', model.dietTypesList, 'description',
'code',
model.listOfDiagnosisSelectionTypes,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDietType = _selectedDiagnosisType =
selectedValue; selectedValue;
}); });
}); });
@ -332,12 +346,10 @@ class _AdmissionRequestThirdScreenState
} }
}, },
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).diagnoseType,
TranslationBase.of(context) _selectedDiagnosisType != null
.dietType, ? _selectedDiagnosisType['description']
_selectedDietType != null
? _selectedDietType['nameEn']
: null, : null,
true), true),
enabled: false, enabled: false,
@ -347,53 +359,58 @@ class _AdmissionRequestThirdScreenState
SizedBox( SizedBox(
height: 10, height: 10,
), ),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.dietTypeRemarks,
null,
false),
enabled: true,
controller: _dietTypeRemarksController,
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
)),
], ],
), ),
), ),
], ],
), ),
), )),
),
Container( Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton( child: AppButton(
title: TranslationBase.of(context).next, title: TranslationBase.of(context).next,
color: HexColor("#B8382B"), color: HexColor("#B8382B"),
onPressed: () { onPressed: () async {
model.admissionRequestData = AdmissionRequest(); if (_treatmentLineController.text != "" &&
if (_selectedClinic != null && _complicationsController.text != "" &&
_selectedDoctor != null && _otherProceduresController.text != "" &&
_estimatedCostController.text != "" && _selectedAdmissionType != null &&
_postPlansEstimatedCostController.text != "") { _selectedDiagnosis != null &&
model.admissionRequestData.patientMRN = patient.patientMRN; _selectedIcd != null &&
model.admissionRequestData.appointmentNo = patient.appointmentNo; _selectedDiagnosisType != null) {
model.admissionRequestData.episodeID = patient.episodeNo; model.admissionRequestData = admissionRequest;
model.admissionRequestData.admissionRequestNo = 0;
model.admissionRequestData.mainLineOfTreatment =
_treatmentLineController.text;
model.admissionRequestData.complications =
_complicationsController.text;
model.admissionRequestData.otherProcedures =
_otherProceduresController.text;
model.admissionRequestData.admissionType =
_selectedAdmissionType['id'];
dynamic admissionRequestDiagnoses = [
{
'diagnosisDescription': _selectedDiagnosis['nameEn'],
'diagnosisType': _selectedDiagnosis['id'],
'icdCode': _selectedIcd['code'],
'icdCodeDescription': _selectedIcd['description'],
'type': _selectedDiagnosisType['code'],
'remarks': "",
'isActive': true,
}
];
model.admissionRequestData.admissionRequestDiagnoses =
admissionRequestDiagnoses;
model.admissionRequestData.admitToClinic = _selectedClinic['clinicID']; await model.makeAdmissionRequest();
model.admissionRequestData.mrpDoctorID = _selectedDoctor['DoctorID']; if (model.state == ViewState.ErrorLocal) {
model.admissionRequestData.estimatedCost = int.parse(_estimatedCostController.text); DrAppToastMsg.showErrorToast(model.error);
model.admissionRequestData.elementsForImprovement = _postPlansEstimatedCostController.text; } else {
model.admissionRequestData.isDietType = _selectedDietType != null ? true : false; DrAppToastMsg.showSuccesToast(
model.admissionRequestData.dietType = _selectedDietType != null ? _selectedDietType['id'] : 0; TranslationBase.of(context).admissionRequestSuccessMsg);
model.admissionRequestData.dietRemarks = _dietTypeRemarksController.text; Navigator.popUntil(context, ModalRoute.withName(PATIENTS_PROFILE));
Navigator.of(context).pushNamed( }
PATIENT_ADMISSION_REQUEST_2,
arguments: {'patient': patient, 'admission-data' : model.admissionRequestData});
} else { } else {
DrAppToastMsg.showErrorToast( DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill); TranslationBase.of(context).pleaseFill);
@ -402,26 +419,12 @@ class _AdmissionRequestThirdScreenState
), ),
), ),
], ],
) ),
: Container(), ),
), ),
); );
} }
Future _selectDate(BuildContext context, DateTime dateTime,
Function(DateTime picked) updateDate) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: dateTime,
firstDate: DateTime.now(),
lastDate: DateTime(2040),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != dateTime) {
updateDate(picked);
}
}
void openListDialogField(String attributeName, String attributeValueId, void openListDialogField(String attributeName, String attributeValueId,
List<dynamic> list, Function(dynamic selectedValue) okFunction) { List<dynamic> list, Function(dynamic selectedValue) okFunction) {
ListSelectDialog dialog = ListSelectDialog( ListSelectDialog dialog = ListSelectDialog(

@ -32,24 +32,16 @@ class AdmissionRequestSecondScreen extends StatefulWidget {
class _AdmissionRequestSecondScreenState class _AdmissionRequestSecondScreenState
extends State<AdmissionRequestSecondScreen> { extends State<AdmissionRequestSecondScreen> {
final _postPlansEstimatedCostController = TextEditingController();
final _estimatedCostController = TextEditingController();
final _expectedDaysController = TextEditingController(); final _expectedDaysController = TextEditingController();
final _treatmentLineController = TextEditingController(); final _otherDepartmentsInterventionsController = TextEditingController();
// final _preOperativeOrdersController = TextEditingController();
DateTime _expectedAdmissionDate; DateTime _expectedAdmissionDate;
// bool _emergencyAdmission = false; dynamic _selectedFloor;
bool _isSickLeaveRequired = false;
bool _patientPregnant = false;
// bool _preAnesthesiaReferred = false;
dynamic _selectedWard; dynamic _selectedWard;
dynamic _selectedAdmissionType; dynamic _selectedRoomCategory;
dynamic _selectedDiagnosis;
dynamic _selectedIcd;
dynamic _selectedDiagnosisType;
// dynamic _selectedAllergies;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -64,8 +56,14 @@ class _AdmissionRequestSecondScreenState
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: model.doctorsList != null body: GestureDetector(
? Column( onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: Column(
children: [ children: [
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
@ -83,7 +81,8 @@ class _AdmissionRequestSecondScreenState
height: 16, height: 16,
), ),
AppText( AppText(
TranslationBase.of(context).otherInformation, TranslationBase.of(context)
.postPlansEstimatedCost,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5, fontSize: SizeConfig.textMultiplier * 2.5,
), ),
@ -96,11 +95,11 @@ class _AdmissionRequestSecondScreenState
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context)
.expectedDays, .estimatedCost,
null, null,
false), false),
enabled: true, enabled: true,
controller: _expectedDaysController, controller: _estimatedCostController,
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.allow( FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS)) RegExp(ONLY_NUMBERS))
@ -111,234 +110,92 @@ class _AdmissionRequestSecondScreenState
height: 10, height: 10,
), ),
Container( Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: () {
if (_expectedAdmissionDate == null) {
_expectedAdmissionDate = DateTime.now();
}
_selectDate(
context, _expectedAdmissionDate,
(picked) {
setState(() {
_expectedAdmissionDate = picked;
});
});
},
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration( TranslationBase.of(context).postPlans,
TranslationBase.of(context) null,
.expectedAdmissionDate, false),
_expectedAdmissionDate != null enabled: true,
? "${DateUtils.convertStringToDateFormat(_expectedAdmissionDate.toString(), "yyyy-MM-dd")}" controller: _postPlansEstimatedCostController,
: null, keyboardType: TextInputType.text,
true, minLines: 4,
suffixIcon: Icon( maxLines: 6,
Icons.calendar_today,
color: Colors.black,
)), )),
enabled: false,
),
),
),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
/*
CheckboxListTile(
title: AppText(
TranslationBase.of(context)
.emergencyAdmission,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _emergencyAdmission,
onChanged: (newValue) {
setState(() {
_emergencyAdmission = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
*/
CheckboxListTile(
title: AppText(
TranslationBase.of(context)
.isSickLeaveRequired,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _isSickLeaveRequired,
onChanged: (newValue) {
setState(() {
_isSickLeaveRequired = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile(
title: AppText(
TranslationBase.of(context).patientPregnant,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _patientPregnant,
onChanged: (newValue) {
setState(() {
_patientPregnant = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
Container( Container(
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context)
.treatmentLine, .otherDepartmentsInterventions,
null, null,
false), false),
enabled: true, enabled: true,
controller: _treatmentLineController, controller:
keyboardType: TextInputType.text, _otherDepartmentsInterventionsController,
minLines: 4, keyboardType: TextInputType.multiline,
maxLines: 6, minLines: 2,
maxLines: 4,
)), )),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppText(
TranslationBase.of(context).otherInformation,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell(
onTap: model.wardList != null &&
model.wardList.length > 0
? () {
openListDialogField('description',
'description', model.wardList,
(selectedValue) {
setState(() {
_selectedWard = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getWards().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.wardList.length > 0) {
openListDialogField('description',
'description', model.wardList,
(selectedValue) {
setState(() {
_selectedWard = selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).ward,
_selectedWard != null
? _selectedWard['description']
: null,
true),
enabled: false,
),
),
),
/* CheckboxListTile(
title: AppText(
TranslationBase.of(context) TranslationBase.of(context)
.preAnesthesiaReferred, .expectedDays,
fontWeight: FontWeight.normal, null,
fontSize: SizeConfig.textMultiplier * 2.1, false),
), enabled: true,
value: _preAnesthesiaReferred, controller: _expectedDaysController,
onChanged: (newValue) { inputFormatters: [
setState(() { FilteringTextInputFormatter.allow(
_preAnesthesiaReferred = newValue; RegExp(ONLY_NUMBERS))
}); ],
}, keyboardType: TextInputType.number,
controlAffinity: )),
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),*/
SizedBox( SizedBox(
height: 10, height: 10,
), ),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.admissionTypeList != null && onTap: () {
model.admissionTypeList.length > 0 if (_expectedAdmissionDate == null) {
? () { _expectedAdmissionDate = DateTime.now();
openListDialogField('nameEn', 'id',
model.admissionTypeList,
(selectedValue) {
setState(() {
_selectedAdmissionType =
selectedValue;
});
});
} }
: () async { _selectDate(context, _expectedAdmissionDate,
GifLoaderDialogUtils.showMyDialog( (picked) {
context);
await model
.getMasterLookup(
MasterKeysService
.AdmissionRequestType)
.then((_) =>
GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.admissionTypeList.length >
0) {
openListDialogField('nameEn',
'id', model.admissionTypeList,
(selectedValue) {
setState(() { setState(() {
_selectedAdmissionType = _expectedAdmissionDate = picked;
selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
}, },
child: TextField( child: TextField(
decoration: decoration: Helpers.textFieldSelectorDecoration(
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context)
.admissionType, .expectedAdmissionDate,
_selectedAdmissionType != null _expectedAdmissionDate != null
? _selectedAdmissionType[ ? "${DateUtils.convertStringToDateFormat(_expectedAdmissionDate.toString(), "yyyy-MM-dd")}"
'nameEn']
: null, : null,
true), true,
suffixIcon: Icon(
Icons.calendar_today,
color: Colors.black,
)),
enabled: false, enabled: false,
), ),
), ),
@ -346,50 +203,34 @@ class _AdmissionRequestSecondScreenState
SizedBox( SizedBox(
height: 10, height: 10,
), ),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).diagnosisDetail,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.diagnosisTypesList != null && onTap: model.floorList != null &&
model.diagnosisTypesList.length > 0 model.floorList.length > 0
? () { ? () {
openListDialogField('nameEn', 'id', openListDialogField(
model.diagnosisTypesList, 'description',
(selectedValue) { 'floorID',
model.floorList, (selectedValue) {
setState(() { setState(() {
_selectedDiagnosis = _selectedFloor = selectedValue;
selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model.getDiagnosis().then( await model.getFloors().then((_) =>
(_) => GifLoaderDialogUtils GifLoaderDialogUtils.hideDialog(
.hideDialog(context)); context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&
model.diagnosisTypesList model.floorList.length > 0) {
.length > openListDialogField('description',
0) { 'floorID', model.floorList,
openListDialogField(
'nameEn',
'id',
model.diagnosisTypesList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDiagnosis = _selectedFloor = selectedValue;
selectedValue;
}); });
}); });
} else if (model.state == } else if (model.state ==
@ -404,10 +245,9 @@ class _AdmissionRequestSecondScreenState
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context).floor,
.diagnosis, _selectedFloor != null
_selectedDiagnosis != null ? _selectedFloor['description']
? _selectedDiagnosis['nameEn']
: null, : null,
true), true),
enabled: false, enabled: false,
@ -420,32 +260,33 @@ class _AdmissionRequestSecondScreenState
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.icdCodes != null && onTap: model.wardList != null &&
model.icdCodes.length > 0 model.wardList.length > 0
? () { ? () {
openListDialogField('description', openListDialogField(
'code', model.icdCodes, 'description',
(selectedValue) { 'nursingStationID',
model.wardList, (selectedValue) {
setState(() { setState(() {
_selectedIcd = selectedValue; _selectedWard = selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model await model.getWards().then((_) =>
.getICDCodes(patient.patientMRN) GifLoaderDialogUtils.hideDialog(
.then((_) => context));
GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&
model.icdCodes.length > 0) { model.wardList.length > 0) {
openListDialogField('description', openListDialogField(
'code', model.icdCodes, 'description',
'nursingStationID',
model.wardList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedIcd = selectedValue; _selectedWard = selectedValue;
}); });
}); });
} else if (model.state == } else if (model.state ==
@ -460,9 +301,9 @@ class _AdmissionRequestSecondScreenState
child: TextField( child: TextField(
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).icd, TranslationBase.of(context).ward,
_selectedIcd != null _selectedWard != null
? _selectedIcd['description'] ? _selectedWard['description']
: null, : null,
true), true),
enabled: false, enabled: false,
@ -475,20 +316,16 @@ class _AdmissionRequestSecondScreenState
Container( Container(
height: screenSize.height * 0.070, height: screenSize.height * 0.070,
child: InkWell( child: InkWell(
onTap: model.listOfDiagnosisSelectionTypes != onTap: model.roomCategoryList != null &&
null && model.roomCategoryList.length > 0
model.listOfDiagnosisSelectionTypes
.length >
0
? () { ? () {
openListDialogField( openListDialogField(
'description', 'description',
'code', 'categoryID',
model model.roomCategoryList,
.listOfDiagnosisSelectionTypes,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDiagnosisType = _selectedRoomCategory =
selectedValue; selectedValue;
}); });
}); });
@ -496,25 +333,19 @@ class _AdmissionRequestSecondScreenState
: () async { : () async {
GifLoaderDialogUtils.showMyDialog( GifLoaderDialogUtils.showMyDialog(
context); context);
await model await model.getRoomCategories().then(
.getMasterLookup( (_) => GifLoaderDialogUtils
MasterKeysService
.DiagnosisSelectionType)
.then((_) =>
GifLoaderDialogUtils
.hideDialog(context)); .hideDialog(context));
if (model.state == ViewState.Idle && if (model.state == ViewState.Idle &&
model.listOfDiagnosisSelectionTypes model.roomCategoryList.length >
.length >
0) { 0) {
openListDialogField( openListDialogField(
'description', 'description',
'code', 'categoryID',
model model.roomCategoryList,
.listOfDiagnosisSelectionTypes,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDiagnosisType = _selectedRoomCategory =
selectedValue; selectedValue;
}); });
}); });
@ -531,9 +362,9 @@ class _AdmissionRequestSecondScreenState
decoration: decoration:
Helpers.textFieldSelectorDecoration( Helpers.textFieldSelectorDecoration(
TranslationBase.of(context) TranslationBase.of(context)
.diagnoseType, .roomCategory,
_selectedDiagnosisType != null _selectedRoomCategory != null
? _selectedDiagnosisType[ ? _selectedRoomCategory[
'description'] 'description']
: null, : null,
true), true),
@ -544,73 +375,6 @@ class _AdmissionRequestSecondScreenState
SizedBox( SizedBox(
height: 10, height: 10,
), ),
/*Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.preOperativeOrders,
null,
false),
enabled: true,
controller: _preOperativeOrdersController,
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
)),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.allergiesList != null &&
model.allergiesList.length > 0
? () {
openListDialogField('nameEn', 'id',
model.allergiesList,
(selectedValue) {
setState(() {
_selectedAllergies =
selectedValue;
});
});
}
: () async {
await model.getAllergies();
if (model.state == ViewState.Idle &&
model.allergiesList.length >
0) {
openListDialogField('nameEn',
'id', model.allergiesList,
(selectedValue) {
setState(() {
_selectedAllergies =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.allergies,
_selectedAllergies != null
? _selectedAllergies['nameEn']
: null,
true),
enabled: false,
),
),
),*/
], ],
), ),
), ),
@ -621,44 +385,47 @@ class _AdmissionRequestSecondScreenState
Container( Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton( child: AppButton(
title: TranslationBase.of(context).save, title: TranslationBase.of(context).next,
color: HexColor("#B8382B"), color: HexColor("#B8382B"),
onPressed: () async { onPressed: () async {
if (_expectedDaysController.text != "" && if (_estimatedCostController.text != "" &&
_postPlansEstimatedCostController.text != "" &&
_expectedDaysController.text != "" &&
_expectedAdmissionDate != null && _expectedAdmissionDate != null &&
_treatmentLineController.text != "" && _otherDepartmentsInterventionsController.text != "" &&
_selectedWard != null && _selectedFloor != null &&
_selectedAdmissionType != null && _selectedRoomCategory !=
_selectedDiagnosis != null && null /*_selectedWard is not required*/) {
_selectedIcd != null &&
_selectedDiagnosisType != null) {
model.admissionRequestData = admissionRequest; model.admissionRequestData = admissionRequest;
model.admissionRequestData.expectedDays = int.parse(_expectedDaysController.text); model.admissionRequestData.estimatedCost =
model.admissionRequestData.admissionDate = _expectedAdmissionDate.toIso8601String(); int.parse(_estimatedCostController.text);
model.admissionRequestData.isSickLeaveRequired = _isSickLeaveRequired; model.admissionRequestData.elementsForImprovement =
model.admissionRequestData.isPregnant = _patientPregnant; _postPlansEstimatedCostController.text;
model.admissionRequestData.mainLineOfTreatment = _treatmentLineController.text;
model.admissionRequestData.wardID = 0; model.admissionRequestData.expectedDays =
model.admissionRequestData.admissionType = _selectedAdmissionType['id']; int.parse(_expectedDaysController.text);
dynamic admissionRequestDiagnoses = [ model.admissionRequestData.admissionDate =
{ _expectedAdmissionDate.toIso8601String();
'diagnosisDescription' : _selectedDiagnosis['nameEn'], model.admissionRequestData
'diagnosisType' : _selectedDiagnosis['id'], .otherDepartmentInterventions =
'icdCode' : _selectedIcd['code'], _otherDepartmentsInterventionsController.text;
'icdCodeDescription' : _selectedIcd['description'], model.admissionRequestData.admissionLocationID =
'type' : _selectedDiagnosisType['code'], _selectedFloor['floorID'];
'remarks' : "", model.admissionRequestData.wardID =
'isActive' : true, _selectedWard != null
} ? _selectedWard['nursingStationID']
]; : 0;
model.admissionRequestData.admissionRequestDiagnoses = admissionRequestDiagnoses; model.admissionRequestData.roomCategoryID =
model.admissionRequestData.admissionRequestProcedures = []; _selectedRoomCategory['categoryID'];
await model.makeAdmissionRequest();
if(model.state == ViewState.ErrorLocal){ model.admissionRequestData.admissionRequestProcedures =
DrAppToastMsg.showErrorToast( [];
model.error); Navigator.of(context)
} .pushNamed(PATIENT_ADMISSION_REQUEST_3, arguments: {
'patient': patient,
'admission-data': model.admissionRequestData
});
} else { } else {
DrAppToastMsg.showErrorToast( DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill); TranslationBase.of(context).pleaseFill);
@ -667,9 +434,8 @@ class _AdmissionRequestSecondScreenState
), ),
), ),
], ],
)
: Container(),
), ),
)),
); );
} }

@ -91,20 +91,20 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
model.patientReferral.length == 0 model.patientReferral.length == 0
? ReferralForm(model, screenSize) ? ReferralForm(model, screenSize)
: PatientReferralItemWidget( : PatientReferralItemWidget(
"${model.patientReferral[0].patientID}", "${model.patientReferral[model.patientReferral.length -1].patientID}",
patientName: model.patientReferral[0].patientName, patientName: model.patientReferral[model.patientReferral.length -1].patientName,
referralStatus: referralStatus:
"${model.patientReferral[0].referralStatus}", "${model.patientReferral[model.patientReferral.length -1].referralStatus}",
isReferredTo: true, isReferredTo: true,
isSameBranch: model isSameBranch: model
.patientReferral[0].isReferralDoctorSameBranch, .patientReferral[model.patientReferral.length -1].isReferralDoctorSameBranch,
referralDoctorName: referralDoctorName:
model.patientReferral[0].referredByDoctorInfo, model.patientReferral[model.patientReferral.length -1].referredByDoctorInfo,
clinicDescription: null, clinicDescription: null,
remark: model.patientReferral[0].remarksFromSource, remark: model.patientReferral[model.patientReferral.length -1].remarksFromSource,
referredOn: model.patientReferral[0].referredOn, referredOn: model.patientReferral[model.patientReferral.length -1].referredOn,
answerFromTarget: answerFromTarget:
model.patientReferral[0].answerFromTarget, model.patientReferral[model.patientReferral.length -1].answerFromTarget,
), ),
], ],
), ),

@ -1094,8 +1094,16 @@ class TranslationBase {
String get patientName => String get patientName =>
localizedValues['patient-name'][locale.languageCode]; localizedValues['patient-name'][locale.languageCode];
String get appointmentNumber => String get appointmentNumber => localizedValues['appointmentNumber'][locale.languageCode];
localizedValues['appointmentNumber'][locale.languageCode]; String get sickLeaveComments => localizedValues['sickLeaveComments'][locale.languageCode];
String get pastMedicalHistory => localizedValues['pastMedicalHistory'][locale.languageCode];
String get pastSurgicalHistory => localizedValues['pastSurgicalHistory'][locale.languageCode];
String get complications => localizedValues['complications'][locale.languageCode];
String get floor => localizedValues['floor'][locale.languageCode];
String get roomCategory => localizedValues['roomCategory'][locale.languageCode];
String get otherDepartmentsInterventions => localizedValues['otherDepartmentsInterventions'][locale.languageCode];
String get otherProcedure => localizedValues['otherProcedure'][locale.languageCode];
String get admissionRequestSuccessMsg => localizedValues['admissionRequestSuccessMsg'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

Loading…
Cancel
Save