diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index af9c77b3..dbf68203 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -31,6 +31,7 @@ class PatientsProvider with ChangeNotifier { List patientPrescriptionsList = []; List patientRadiologyList = []; var patientProgressNoteList = []; + var insuranceApporvalsList = []; Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); @@ -284,8 +285,7 @@ class PatientsProvider with ChangeNotifier { getPatientProgressNote(patient) async{ - - //setBasicData(); + setBasicData(); try { if (await Helpers.checkConnection()) { final response =await AppClient.post(PATIENT_PROGRESS_NOTE_URL, body: json.encode(patient)); @@ -333,9 +333,7 @@ class PatientsProvider with ChangeNotifier { print('$res'); if (res['MessageStatus'] == 1) { //patientRadiologyList = []; - res['List_ApprovalMain_InPatient'].forEach((v) { - //patientRadiologyList.add(new RadiologyResModel.fromJson(v)); - }); + insuranceApporvalsList = res['List_ApprovalMain_InPatient']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; diff --git a/lib/routes.dart b/lib/routes.dart index d1fce59a..c53868c9 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,3 +1,6 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/insurance_approvals_screen.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/patient_orders_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/progress_note_screen.dart'; import './screens/patients/profile/vital_sign/body_measurements_screen.dart'; @@ -50,6 +53,8 @@ const String LAB_ORDERS = 'patients/lab_orders'; const String PRESCRIPTIONS = 'patients/prescription'; const String RADIOLOGY = 'patients/radiology'; const String PROGRESS_NOTE = 'patients/progress-note'; +const String PATIENT_ORDERS = 'patients/patient_orders'; +const String PATIENT_INSURANCE_APPROVALS = 'patients/patient_insurance_approvals'; const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details'; const String BODY_MEASUREMENTS = 'patients/body-measurements'; @@ -79,6 +84,8 @@ var routes = { PRESCRIPTIONS: (_) => PrescriptionScreen(), RADIOLOGY: (_) => RadiologyScreen(), PROGRESS_NOTE: (_) => ProgressNoteScreen(), + PATIENT_ORDERS: (_) => PatientsOrdersScreen(), + PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(), VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), BODY_MEASUREMENTS: (_) => BodyMeasurementsScreen() }; diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 914faf06..5fac0e34 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -165,6 +165,7 @@ class _PatientSearchScreenState extends State { onChanged: (String newValue) => { setState(() { _selectedType = newValue; + selectedPatientType = int.parse(_selectedType); }) }, items: PATIENT_TYPE.map((item) { diff --git a/lib/screens/patients/profile/insurance_approvals_screen.dart b/lib/screens/patients/profile/insurance_approvals_screen.dart new file mode 100644 index 00000000..d3083f7a --- /dev/null +++ b/lib/screens/patients/profile/insurance_approvals_screen.dart @@ -0,0 +1,151 @@ +import 'package:doctor_app_flutter/models/patient/insurance_aprovals_request.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../../../config/shared_pref_kay.dart'; +import '../../../config/size_config.dart'; +import '../../../models/patient/patiant_info_model.dart'; +import '../../../providers/patients_provider.dart'; +import '../../../util/dr_app_shared_pref.dart'; +import '../../../widgets/shared/app_scaffold_widget.dart'; +import '../../../widgets/shared/app_texts_widget.dart'; +import '../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; + +DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); + +/* + *@author: ibrahim albitar + *@Date:21/5/2020 + *@param: + *@return: + *@desc: + */ + +class InsuranceApprovalsScreen extends StatefulWidget { + @override + _InsuranceApprovalsState createState() => _InsuranceApprovalsState(); +} + +class _InsuranceApprovalsState extends State { + PatientsProvider patientsProv; + var _isInit = true; + + /* + *@author: ibrahim al bitar + *@Date:21/5/2020 + *@param: + *@return: + *@desc: + */ + getInsuranceApprovalsList(context) async { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + String token = await sharedPref.getString(TOKEN); + String type = await sharedPref.getString(SLECTED_PATIENT_TYPE); + + print(type); + InsuranceAprovalsRequest insuranceApprovalsRequest = InsuranceAprovalsRequest( + patientID: patient.patientId, + projectID: patient.projectId, + tokenID: token, + patientTypeID: patient.patientType, + languageID: 2); + patientsProv.getPatientInsuranceApprovals(insuranceApprovalsRequest.toJson()); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + patientsProv = Provider.of(context); + getInsuranceApprovalsList(context); + } + _isInit = false; + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "Insurance Approvals", + showAppDrawer: false, + showBottomBar: false, + body: patientsProv.isLoading + ? DrAppCircularProgressIndeicator() + : patientsProv.isError + ? DrAppEmbeddedError(error: patientsProv.error) + : patientsProv.insuranceApporvalsList.length == 0 + ? DrAppEmbeddedError( + error: 'You don\'t have any Insurance Approvals') + : Container( + margin: EdgeInsets.fromLTRB( + SizeConfig.realScreenWidth * 0.05, + 0, + SizeConfig.realScreenWidth * 0.05, + 0), + child: ListView.builder( + itemCount: + patientsProv.insuranceApporvalsList.length, + itemBuilder: (BuildContext ctxt, int index) { + return RoundedContainer( + backgroundColor: Colors.yellow[200], + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patientsProv + .insuranceApporvalsList[index] + ["ClinicName"]+"-"+patientsProv + .insuranceApporvalsList[index] + ["DoctorName"], + marginTop: 10, + marginLeft: 10, + marginBottom: 5, + fontWeight: FontWeight.bold, + ), + AppText( + convertDateFormat(patientsProv + .insuranceApporvalsList[index] + ["ApprovalDate"]), + marginLeft: 10, + color: Colors.grey[600], + ), + Divider( + color: Colors.black, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + AppText( + patientsProv + .insuranceApporvalsList[index] + ["CompanyName"], + margin: 10, + ) + ], + )); + }), + ), + ); + } + + convertDateFormat(String str) { + 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(); + } +} diff --git a/lib/screens/patients/profile/patient_orders_screen.dart b/lib/screens/patients/profile/patient_orders_screen.dart new file mode 100644 index 00000000..d05a7504 --- /dev/null +++ b/lib/screens/patients/profile/patient_orders_screen.dart @@ -0,0 +1,150 @@ +import 'package:doctor_app_flutter/models/patient/progress_note_request.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../../../config/shared_pref_kay.dart'; +import '../../../config/size_config.dart'; +import '../../../models/patient/patiant_info_model.dart'; +import '../../../providers/patients_provider.dart'; +import '../../../util/dr_app_shared_pref.dart'; +import '../../../widgets/shared/app_scaffold_widget.dart'; +import '../../../widgets/shared/app_texts_widget.dart'; +import '../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; + +DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); + +/* + *@author: ibrahim albitar + *@Date:21/5/2020 + *@param: + *@return: + *@desc: + */ + +class PatientsOrdersScreen extends StatefulWidget { + @override + _PatientsOrdersState createState() => _PatientsOrdersState(); +} + +class _PatientsOrdersState extends State { + PatientsProvider patientsProv; + var _isInit = true; + + /* + *@author: ibrahim al bitar + *@Date:21/5/2020 + *@param: + *@return: + *@desc: + */ + getProgressNoteList(context) async { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + String token = await sharedPref.getString(TOKEN); + String type = await sharedPref.getString(SLECTED_PATIENT_TYPE); + + print(type); + ProgressNoteRequest progressNoteRequest = ProgressNoteRequest( + visitType: 3, // if equal 3 then this will return orders + admissionNo: int.parse(patient.admissionNo), + projectID: patient.projectId, + tokenID: token, + patientTypeID: patient.patientType, + languageID: 2); + patientsProv.getPatientProgressNote(progressNoteRequest.toJson()); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + patientsProv = Provider.of(context); + getProgressNoteList(context); + } + _isInit = false; + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "Orders", + showAppDrawer: false, + showBottomBar: false, + body: patientsProv.isLoading + ? DrAppCircularProgressIndeicator() + : patientsProv.isError + ? DrAppEmbeddedError(error: patientsProv.error) + : patientsProv.patientProgressNoteList.length == 0 + ? DrAppEmbeddedError( + error: 'You don\'t have any Orders') + : Container( + margin: EdgeInsets.fromLTRB( + SizeConfig.realScreenWidth * 0.05, + 0, + SizeConfig.realScreenWidth * 0.05, + 0), + child: ListView.builder( + itemCount: + patientsProv.patientProgressNoteList.length, + itemBuilder: (BuildContext ctxt, int index) { + return RoundedContainer( + + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patientsProv + .patientProgressNoteList[index] + ["DoctorName"], + marginTop: 10, + marginLeft: 10, + marginBottom: 5, + fontWeight: FontWeight.bold, + ), + AppText( + convertDateFormat(patientsProv + .patientProgressNoteList[index] + ["AssessmentDate"]), + marginLeft: 10, + color: Colors.grey[600], + ), + Divider( + color: Colors.black, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + AppText( + patientsProv + .patientProgressNoteList[index] + ["Notes"], + margin: 10, + ) + ], + )); + }), + ), + ); + } + + convertDateFormat(String str) { + 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(); + } +} diff --git a/lib/screens/patients/profile/progress_note_screen.dart b/lib/screens/patients/profile/progress_note_screen.dart index eed1563f..7381e85b 100644 --- a/lib/screens/patients/profile/progress_note_screen.dart +++ b/lib/screens/patients/profile/progress_note_screen.dart @@ -1,6 +1,6 @@ import 'package:doctor_app_flutter/models/patient/progress_note_request.dart'; -import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -11,9 +11,7 @@ import '../../../providers/patients_provider.dart'; import '../../../util/dr_app_shared_pref.dart'; import '../../../widgets/shared/app_scaffold_widget.dart'; import '../../../widgets/shared/app_texts_widget.dart'; -import '../../../widgets/shared/card_with_bg_widget.dart'; import '../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; -import '../../../widgets/shared/profile_image_widget.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); @@ -46,10 +44,10 @@ class _ProgressNoteState extends State { PatiantInformtion patient = routeArgs['patient']; String token = await sharedPref.getString(TOKEN); String type = await sharedPref.getString(SLECTED_PATIENT_TYPE); - + print(type); ProgressNoteRequest progressNoteRequest = ProgressNoteRequest( - visitType: 5, + visitType: 5, // if equal 5 then this will return progress note admissionNo: int.parse(patient.admissionNo), projectID: patient.projectId, tokenID: token, @@ -78,8 +76,9 @@ class _ProgressNoteState extends State { ? DrAppCircularProgressIndeicator() : patientsProv.isError ? DrAppEmbeddedError(error: patientsProv.error) - : patientsProv.patientVitalSignList.length == 0 - ? DrAppEmbeddedError(error: 'You don\'t have any Progress Note') + : patientsProv.patientProgressNoteList.length == 0 + ? DrAppEmbeddedError( + error: 'You don\'t have any Progress Note') : Container( margin: EdgeInsets.fromLTRB( SizeConfig.realScreenWidth * 0.05, @@ -87,11 +86,65 @@ class _ProgressNoteState extends State { SizeConfig.realScreenWidth * 0.05, 0), child: ListView.builder( - itemCount: patientsProv.patientProgressNoteList.length, + itemCount: + patientsProv.patientProgressNoteList.length, itemBuilder: (BuildContext ctxt, int index) { - return AppText(patientsProv.patientProgressNoteList[index]["DoctorName"].toString()); + return RoundedContainer( + backgroundColor: Colors.yellow[200], + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patientsProv + .patientProgressNoteList[index] + ["DoctorName"], + marginTop: 10, + marginLeft: 10, + marginBottom: 5, + fontWeight: FontWeight.bold, + ), + AppText( + convertDateFormat(patientsProv + .patientProgressNoteList[index] + ["AssessmentDate"]), + marginLeft: 10, + color: Colors.grey[600], + ), + Divider( + color: Colors.black, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + AppText( + patientsProv + .patientProgressNoteList[index] + ["Notes"], + margin: 10, + ) + ], + )); }), ), ); } + + convertDateFormat(String str) { + 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(); + } } diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 6394ae6d..3f40204b 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/routes.dart'; @@ -94,49 +95,60 @@ class ProfileMedicalInfoWidget extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - InkWell( - onTap: () { - navigator(context, PROGRESS_NOTE); - }, - child: CircleAvatarWidget( - des: 'Progress Notes', - url: url + 'heartbeat.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, + Visibility( + visible: selectedPatientType != 0 && selectedPatientType != 5 , + child: InkWell( + onTap: () { + navigator(context, PROGRESS_NOTE); + }, + child: CircleAvatarWidget( + des: 'Progress Notes', + url: url + 'heartbeat.png', + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, + ), ), ), - InkWell( - onTap: () { - navigator(context, PROGRESS_NOTE); - }, - child: CircleAvatarWidget( - des: 'Insurance Aprovals', - url: url + 'lab.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, + Visibility( + + child: InkWell( + onTap: () { + navigator(context, PATIENT_INSURANCE_APPROVALS); + }, + child: CircleAvatarWidget( + des: 'Insurance Aprovals', + url: url + 'lab.png', + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, + ), ), ), - InkWell( - onTap: () { - navigator(context, PRESCRIPTIONS); - }, - child: CircleAvatarWidget( - des: 'Refer Patient ', - url: url + 'note.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, + Visibility( + visible: selectedPatientType != 0 && selectedPatientType != 5 && selectedPatientType != 2, + child: InkWell( + onTap: () { + navigator(context, PRESCRIPTIONS); + }, + child: CircleAvatarWidget( + des: 'Refer Patient ', + url: url + 'note.png', + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, + ), ), ), - InkWell( - //RADIOLOGY - onTap: () { - navigator(context, RADIOLOGY); - }, - child: CircleAvatarWidget( - des: 'Orders', - url: url + 'radiology-1.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, + Visibility( + visible: selectedPatientType != 0 && selectedPatientType != 5, + child: InkWell( + onTap: () { + navigator(context, PATIENT_ORDERS); + }, + child: CircleAvatarWidget( + des: 'Orders', + url: url + 'radiology-1.png', + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, + ), ), ), ],