diff --git a/lib/config/config.dart b/lib/config/config.dart index c0e8b511..8ebef939 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -6,12 +6,19 @@ const ONLY_DATE = "[0-9/]"; const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; +const PATIENT_PROGRESS_NOTE_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; +const PATIENT_INSURANCE_APPROVALS_URL = "DoctorApplication.svc/REST/GetApprovalStatusForInpatient"; +const PATIENT_ORDERS_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; + const GET_PROJECTS = 'Lists.svc/REST/GetProjectForDoctorAPP'; const GET_PATIENT_VITAL_SIGN = 'Doctors.svc/REST/Doctor_GetPatientVitalSign'; const GET_PATIENT_LAB_OREDERS = 'DoctorApplication.svc/REST/GetPatientLabOreders'; const GET_PRESCRIPTION = 'Patients.svc/REST/GetPrescriptionApptList'; const GET_RADIOLOGY = 'DoctorApplication.svc/REST/GetPatientRadResult'; + +var selectedPatientType = 0; + //*********change value to decode json from Dropdown ************ var SERVICES_PATIANT = [ "GetMyOutPatient", diff --git a/lib/models/patient/insurance_aprovals_request.dart b/lib/models/patient/insurance_aprovals_request.dart new file mode 100644 index 00000000..b94b9b9b --- /dev/null +++ b/lib/models/patient/insurance_aprovals_request.dart @@ -0,0 +1,87 @@ +/* + *@author: Ibrahim Albitar + *@Date:15/5/2020 + + *@param: + {"PatientID":1089227, + "PatientTypeID":1, + "EXuldAPPNO":0, + "ProjectID":12, + "LanguageID":2, + "stamp":"2020-04-01T09:47:19.643Z", + "IPAdress":"11.11.11.11", + "VersionID":1.2, + "Channel":9, + "TokenID":"yIwh6wNyUkOeQlJRohWjyw==", + "SessionID":"LlBk8lUEJY", + "IsLoginForDoctorApp":true, + "PatientOutSA":false} + + *@return: + *@desc: + */ +class InsuranceAprovalsRequest { + int exuldAppNO; + int patientID; + int channel; + int projectID; + int languageID; + String stamp; + String ipAdress; + double versionID; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + int patientTypeID; + + InsuranceAprovalsRequest( + { + this.exuldAppNO, + this.patientID, + this.channel = 9, + this.projectID = 12, + this.patientTypeID = 1, + this.languageID = 2, + this.stamp = '2020-04-23T21:01:21.492Z', + this.ipAdress = '11.11.11.11', + this.versionID = 1.2, + this.tokenID = '@dm!n', + this.sessionID = 'e29zoooEJ4', + this.isLoginForDoctorApp = true, + this.patientOutSA = false}); + + InsuranceAprovalsRequest.fromJson(Map json) { + exuldAppNO = json['EXuldAPPNO']; + patientID = json['PatientID']; + channel = json['Channel']; + projectID = json['ProjectID']; + patientTypeID = json['PatientTypeID']; + languageID = json['LanguageID']; + stamp = json['stamp']; + ipAdress = json['IPAdress']; + versionID = json['VersionID']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + } + + Map toJson() { + final Map data = new Map(); + data['EXuldAPPNO'] = this.exuldAppNO; + data['PatientID'] = this.patientID; + data['Channel'] = this.channel; + data['ProjectID'] = this.projectID; + data['PatientTypeID'] = this.patientTypeID; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.ipAdress; + data['VersionID'] = this.versionID; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + return data; + } +} diff --git a/lib/models/patient/orders_request.dart b/lib/models/patient/orders_request.dart new file mode 100644 index 00000000..92df2ab9 --- /dev/null +++ b/lib/models/patient/orders_request.dart @@ -0,0 +1,88 @@ + +/* + *@author: Ibrahim Albitar + *@Date:15/5/2020 + + *@param: +{"VisitType":3, +"AdmissionNo":2020004683, +"ProjectID":12, +"LanguageID":2, +"stamp":"2020-04-01T09:53:50.410Z", +"IPAdress":"11.11.11.11", +"VersionID":1.2, +"Channel":9, +"TokenID":"yIwh6wNyUkOeQlJRohWjyw==", +"SessionID":"LlBk8lUEJY", +"IsLoginForDoctorApp":true, +"PatientOutSA":false, +"PatientTypeID":1} + +*@return: + *@desc: + */ + +class OrdersRequest { + int visitType; + int admissionNo; + int projectID; + int languageID; + String stamp; + String iPAdress; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + int patientTypeID; + double versionID; + + OrdersRequest( + {this.visitType , + this.admissionNo, + this.projectID = 12, + this.stamp = '2020-04-23T21:01:21.492Z', + this.languageID = 2, + this.iPAdress = '11.11.11.11', + this.channel = 9, + this.tokenID = '@dm!n', + this.sessionID = "LlBk8lUEJY", + this.isLoginForDoctorApp = true, + this.patientTypeID = 1, + this.versionID = 1.2, + this.patientOutSA = false}); + + OrdersRequest.fromJson(Map json) { + visitType = json['VisitType']; + admissionNo = json['AdmissionNo']; + projectID = json['ProjectID']; + stamp = json['stamp']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + patientTypeID = json['PatientTypeID']; + versionID = json['VersionID']; + } + + Map toJson() { + final Map data = new Map(); + data['VisitType'] = this.visitType; + data['AdmissionNo'] = this.admissionNo; + data['ProjectID'] = this.projectID; + data['stamp'] = this.stamp; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['PatientTypeID'] = this.patientTypeID; + data['VersionID'] = this.versionID; + return data; + } +} \ No newline at end of file diff --git a/lib/models/patient/progress_note_request.dart b/lib/models/patient/progress_note_request.dart new file mode 100644 index 00000000..87e2bf66 --- /dev/null +++ b/lib/models/patient/progress_note_request.dart @@ -0,0 +1,88 @@ + +/* + *@author: Ibrahim Albitar + *@Date:15/5/2020 + + *@param: +{"VisitType":5, +"AdmissionNo":2020004683, +"ProjectID":12, +"LanguageID":2, +"stamp":"2020-04-01T09:41:59.089Z", +"IPAdress":"11.11.11.11", +"VersionID":1.2, +"Channel":9, +"TokenID":"yIwh6wNyUkOeQlJRohWjyw==", +"SessionID":"LlBk8lUEJY", +"IsLoginForDoctorApp":true, +"PatientOutSA":false, +"PatientTypeID":1} + +*@return: + *@desc: + */ + +class ProgressNoteRequest { + int visitType; + int admissionNo; + int projectID; + int languageID; + String stamp; + String iPAdress; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + int patientTypeID; + double versionID; + + ProgressNoteRequest( + {this.visitType , + this.admissionNo, + this.projectID = 12, + this.stamp = '2020-04-23T21:01:21.492Z', + this.languageID = 2, + this.iPAdress = '11.11.11.11', + this.channel = 9, + this.tokenID = '@dm!n', + this.sessionID = "LlBk8lUEJY", + this.isLoginForDoctorApp = true, + this.patientTypeID = 1, + this.versionID = 1.2, + this.patientOutSA = false}); + + ProgressNoteRequest.fromJson(Map json) { + visitType = json['VisitType']; + admissionNo = json['AdmissionNo']; + projectID = json['ProjectID']; + stamp = json['stamp']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + patientTypeID = json['PatientTypeID']; + versionID = json['VersionID']; + } + + Map toJson() { + final Map data = new Map(); + data['VisitType'] = this.visitType; + data['AdmissionNo'] = this.admissionNo; + data['ProjectID'] = this.projectID; + data['stamp'] = this.stamp; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['PatientTypeID'] = this.patientTypeID; + data['VersionID'] = this.versionID; + return data; + } +} \ No newline at end of file diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index c68e94d0..dbf68203 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -1,5 +1,10 @@ import 'dart:convert'; +import 'package:doctor_app_flutter/client/app_client.dart'; +import 'package:doctor_app_flutter/models/patient/lab_orders_res_model.dart'; +import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/models/patient/prescription_res_model.dart'; +import 'package:doctor_app_flutter/models/patient/radiology_res_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:http_interceptor/http_client_with_interceptor.dart'; @@ -25,6 +30,8 @@ class PatientsProvider with ChangeNotifier { List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; + var patientProgressNoteList = []; + var insuranceApporvalsList = []; Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); @@ -275,4 +282,72 @@ class PatientsProvider with ChangeNotifier { handelCatchErrorCase(err); } } + + + getPatientProgressNote(patient) async{ + setBasicData(); + try { + if (await Helpers.checkConnection()) { + final response =await AppClient.post(PATIENT_PROGRESS_NOTE_URL, body: json.encode(patient)); + final int statusCode = response.statusCode; + isLoading = false; + + if (statusCode < 200 || statusCode >= 400 || json == null) { + isError = true; + error = 'Error While Fetching data'; + } else { + var res = json.decode(response.body); + print('$res'); + if (res['MessageStatus'] == 1) { + patientProgressNoteList = res['List_GetPregressNoteForInPatient']; + } else { + isError = true; + error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; + } + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + notifyListeners(); + } catch (err) { + handelCatchErrorCase(err); + } + } + + getPatientInsuranceApprovals(patient) async{ + + //setBasicData(); + try { + if (await Helpers.checkConnection()) { + final response =await AppClient.post(PATIENT_INSURANCE_APPROVALS_URL, body: json.encode(patient)); + final int statusCode = response.statusCode; + isLoading = false; + + if (statusCode < 200 || statusCode >= 400 || json == null) { + isError = true; + error = 'Error While Fetching data'; + } else { + var res = json.decode(response.body); + print('$res'); + if (res['MessageStatus'] == 1) { + //patientRadiologyList = []; + insuranceApporvalsList = res['List_ApprovalMain_InPatient']; + } else { + isError = true; + error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; + } + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + notifyListeners(); + } catch (err) { + handelCatchErrorCase(err); + } + } + } diff --git a/lib/routes.dart b/lib/routes.dart index f2f5f6bb..c53868c9 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,3 +1,8 @@ +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'; import './screens/QR_reader_screen.dart'; @@ -47,6 +52,9 @@ const String VITAL_SIGN = 'patients/vital-sign'; 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'; @@ -75,6 +83,9 @@ var routes = { LAB_ORDERS: (_) => LabOrdersScreen(), 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 d5bfd7be..6dd0478c 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -169,6 +169,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 new file mode 100644 index 00000000..7381e85b --- /dev/null +++ b/lib/screens/patients/profile/progress_note_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:15/5/2020 + *@param: + *@return: + *@desc: + */ + +class ProgressNoteScreen extends StatefulWidget { + @override + _ProgressNoteState createState() => _ProgressNoteState(); +} + +class _ProgressNoteState extends State { + PatientsProvider patientsProv; + var _isInit = true; + + /* + *@author: ibrahim al bitar + *@Date:16/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: 5, // if equal 5 then this will return progress note + 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: "Progress Note", + 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 Progress Note') + : 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( + 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 5bf83cf0..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'; @@ -51,8 +52,8 @@ class ProfileMedicalInfoWidget extends StatelessWidget { child: CircleAvatarWidget( des: 'Vital Sign', url: url + 'heartbeat.png', - width: (contWidth) / 3.5, - height: (contWidth) / 3.5, + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, ), ), InkWell( @@ -62,8 +63,8 @@ class ProfileMedicalInfoWidget extends StatelessWidget { child: CircleAvatarWidget( des: 'Lab Result', url: url + 'lab.png', - width: (contWidth) / 3.5, - height: (contWidth) / 3.5, + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, ), ), InkWell( @@ -73,8 +74,8 @@ class ProfileMedicalInfoWidget extends StatelessWidget { child: CircleAvatarWidget( des: 'Prescription', url: url + 'note.png', - width: (contWidth) / 3.5, - height: (contWidth) / 3.5, + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, ), ), InkWell( @@ -85,8 +86,69 @@ class ProfileMedicalInfoWidget extends StatelessWidget { child: CircleAvatarWidget( des: 'Radiology', url: url + 'radiology-1.png', - width: (contWidth) / 3.5, - height: (contWidth) / 3.5, + width: (contWidth) / 4.5, + height: (contWidth) / 4.5, + ), + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + 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, + ), + ), + ), + 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, + ), + ), + ), + 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, + ), + ), + ), + 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, + ), ), ), ], @@ -146,7 +208,7 @@ class CircleAvatarWidget extends StatelessWidget { ), AppText( des, - fontSize: 2 * SizeConfig.textMultiplier, + fontSize: 1.5 * SizeConfig.textMultiplier, textAlign: TextAlign.center, ) ],