From adb803313861e1b8304f07d43f6a37c27116cae0 Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Thu, 31 Dec 2020 17:47:17 +0200 Subject: [PATCH 1/3] update prescription --- lib/config/config.dart | 6 +- lib/core/service/prescription_service.dart | 17 ++ lib/core/service/procedure_service.dart | 15 ++ .../viewModel/prescription_view_model.dart | 15 ++ lib/core/viewModel/procedure_View_model.dart | 12 ++ .../prescription/prescription_screen.dart | 196 +++++++++++++++++- 6 files changed, 258 insertions(+), 3 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 3cfb84c7..b7582800 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -132,11 +132,13 @@ const POST_PHYSICAL_EXAM = const POST_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/PostProgressNote'; -const POST_ASSESSMENT = - 'Services/DoctorApplication.svc/REST/PostAssessment'; +const POST_ASSESSMENT = 'Services/DoctorApplication.svc/REST/PostAssessment'; const GET_CATEGORISE_PROCEDURE = 'Services/DoctorApplication.svc/REST/GetProcedure'; +const UPDATE_PROCEDURE = 'Services/DoctorApplication.svc/REST/PatchProcedure'; +const UPDATE_PRESCRIPTION = + 'Services/DoctorApplication.svc/REST/PatchPrescription'; var selectedPatientType = 1; diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart index 9d1cb102..ced17cd4 100644 --- a/lib/core/service/prescription_service.dart +++ b/lib/core/service/prescription_service.dart @@ -46,4 +46,21 @@ class PrescriptionService extends BaseService { body: postProcedureReqModel.toJson(), ); } + + Future updatePrescription( + PostPrescriptionReqModel updatePrescriptionReqModel) async { + hasError = false; + //_prescriptionList.clear(); + await baseAppClient.post( + UPDATE_PRESCRIPTION, + onSuccess: (dynamic response, int statusCode) { + print("Accepted"); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: updatePrescriptionReqModel.toJson(), + ); + } } diff --git a/lib/core/service/procedure_service.dart b/lib/core/service/procedure_service.dart index 7ffd9310..c7319eed 100644 --- a/lib/core/service/procedure_service.dart +++ b/lib/core/service/procedure_service.dart @@ -72,4 +72,19 @@ class ProcedureService extends BaseService { super.error = error; }, body: postProcedureReqModel.toJson()); } + + Future updateProcedure() async { + hasError = false; + _procedureList.clear(); + await baseAppClient.post( + GET_CATEGORISE_PROCEDURE, + onSuccess: (dynamic response, int statusCode) { + print("ACCEPTED"); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + ); + } } diff --git a/lib/core/viewModel/prescription_view_model.dart b/lib/core/viewModel/prescription_view_model.dart index 7923c3d7..14684aeb 100644 --- a/lib/core/viewModel/prescription_view_model.dart +++ b/lib/core/viewModel/prescription_view_model.dart @@ -38,4 +38,19 @@ class PrescriptionViewModel extends BaseViewModel { setState(ViewState.Idle); } } + + Future updatePrescription( + PostPrescriptionReqModel updatePrescriptionReqModel) async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _prescriptionService.updatePrescription(updatePrescriptionReqModel); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.ErrorLocal); + } else { + await getPrescription(); + setState(ViewState.Idle); + } + } } diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index b051d04d..ab4deee1 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -50,4 +50,16 @@ class ProcedureViewModel extends BaseViewModel { setState(ViewState.Idle); } } + + Future updateProcedure() async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _procedureService.updateProcedure(); + if (_procedureService.hasError) { + error = _procedureService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } } diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 4f6fe133..2b1e5454 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -1,14 +1,19 @@ +import 'package:doctor_app_flutter/client/base_app_client.dart'; 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/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.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/screens/prescription/add_prescription_form.dart'; +import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/TextFields.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_text_form_field.dart'; @@ -425,7 +430,29 @@ class _NewPrescriptionScreenState extends State { 0.06, child: Column( children: [ - Icon(Icons.edit) + InkWell( + child: Icon( + Icons.edit), + onTap: () { + updatePrescriptionForm( + context, + model + .prescriptionList[ + 0] + .entityList[ + index] + .medicationName, + model + .prescriptionList[ + 0] + .entityList[ + index] + .medicineCode, + model, + ); + //model.postPrescription(); + }, + ), ], ), ), @@ -446,4 +473,171 @@ class _NewPrescriptionScreenState extends State { )), ); } + + void updatePrescriptionForm( + context, String drugName, int drugId, PrescriptionViewModel model) { + TextEditingController remarksController = TextEditingController(); + TextEditingController doseController = TextEditingController(); + TextEditingController frequencyController = TextEditingController(); + TextEditingController routeController = TextEditingController(); + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext bc) { + return Container( + height: 600, + child: Form( + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + drugName.toUpperCase(), + fontWeight: FontWeight.w900, + ), + SizedBox( + height: 30.0, + ), + Column( + children: [ + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: 'route', + controller: routeController, + keyboardType: TextInputType.number, + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: 'Dose', + controller: doseController, + keyboardType: TextInputType.number, + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: 'Frequency', + controller: frequencyController, + keyboardType: TextInputType.number, + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: 'Remarks', + controller: remarksController, + maxLines: 7, + minLines: 4, + ), + ), + SizedBox( + height: 12.0, + ), + SizedBox( + height: 140.0, + ), + Container( + margin: + EdgeInsets.all(SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: 'update prescription'.toUpperCase(), + onPressed: () { + updatePrescription( + model: model, + drugId: drugId, + remarks: remarksController.text, + route: routeController.text, + frequency: frequencyController.text, + dose: doseController.text); + Navigator.pop(context); + }, + ), + ], + ), + ), + ], + ), + ], + ), + ), + )); + }); + } + + updatePrescription({ + PrescriptionViewModel model, + int drugId, + String remarks, + String dose, + String frequency, + String route, + }) async { + //PrescriptionViewModel model = PrescriptionViewModel(); + PostPrescriptionReqModel updatePrescriptionReqModel = + new PostPrescriptionReqModel(); + List sss = List(); + + updatePrescriptionReqModel.appointmentNo = 2016055159; + updatePrescriptionReqModel.clinicID = 17; + updatePrescriptionReqModel.episodeID = 200012330; + updatePrescriptionReqModel.patientMRN = 3120877; + updatePrescriptionReqModel.vidaAuthTokenID = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiOGFjNDRjZGQtOWE0Mi00M2YxLWE2YTQtMWQ4NzBmZmYwNTUyIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTU2NDkiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkRPQ1RPUlMiLCJIRUFEIERPQ1RPUlMiLCJBRE1JTklTVFJBVE9SUyIsIlJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIkNPTlNFTlQgIiwiTUVESUNBTCBSRVBPUlQgLSBTSUNLIExFQVZFIE1BTkFHRVIiXSwibmJmIjoxNjA4NzM2NjY5LCJleHAiOjE2MDk2MDA2NjksImlhdCI6MTYwODczNjY2OX0.9EDgYrbe5fQA2CvgLdFT4s_PL7hD5R_Qggfpv4lDtUY"; + sss.add(PrescriptionRequestModel( + covered: true, + dose: frequency.isNotEmpty ? int.parse(dose) : 1, + itemId: drugId, + doseUnitId: 1, + route: frequency.isNotEmpty ? int.parse(route) : 1, + frequency: frequency.isNotEmpty ? int.parse(frequency) : 1, + remarks: remarks.isEmpty ? '' : remarks, + approvalRequired: true, + icdcode10Id: "test2", + doseTime: 1, + duration: 2, + doseStartDate: "2020-12-20T13:07:41.769Z")); + updatePrescriptionReqModel.prescriptionRequestModel = sss; + //postProcedureReqModel.procedures = controlsProcedure; + + await model.updatePrescription(updatePrescriptionReqModel); + + if (model.state == ViewState.ErrorLocal) { + helpers.showErrorToast(model.error); + } else if (model.state == ViewState.Idle) { + DrAppToastMsg.showSuccesToast('Medication has been updated'); + } + } } From b3567df020748910e3d8ac40f3d14e0517c2d0fa Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Thu, 31 Dec 2020 23:08:47 +0200 Subject: [PATCH 2/3] medical file model --- lib/config/config.dart | 14 +- lib/core/model/medical_file_model.dart | 1161 +++++++++++++++++ .../prescription/add_prescription_form.dart | 4 +- pubspec.lock | 8 +- 4 files changed, 1171 insertions(+), 16 deletions(-) create mode 100644 lib/core/model/medical_file_model.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index e71209b0..3e7d9ea7 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -133,8 +133,6 @@ const POST_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/PostProgressNote'; const POST_ASSESSMENT = 'Services/DoctorApplication.svc/REST/PostAssessment'; - - const PATCH_ALLERGY = 'Services/DoctorApplication.svc/REST/PatchAllergies'; const PATCH_HISTORY = 'Services/DoctorApplication.svc/REST/PatchHistory'; const PATCH_CHIEF_COMPLAINT = @@ -143,19 +141,15 @@ const PATCH_PHYSICAL_EXAM = 'Services/DoctorApplication.svc/REST/PatchPhysicalExam'; const PATCH_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/PatchProgressNote'; -const PATCH_ASSESSMENT = - 'Services/DoctorApplication.svc/REST/PatchAssessment'; +const PATCH_ASSESSMENT = 'Services/DoctorApplication.svc/REST/PatchAssessment'; const GET_ALLERGY = 'Services/DoctorApplication.svc/REST/GetAllergies'; const GET_HISTORY = 'Services/DoctorApplication.svc/REST/GetHistory'; const GET_CHIEF_COMPLAINT = 'Services/DoctorApplication.svc/REST/GetChiefcomplaint'; -const GET_PHYSICAL_EXAM = - 'Services/DoctorApplication.svc/REST/GetPhysicalExam'; -const GET_PROGRESS_NOTE = - 'Services/DoctorApplication.svc/REST/GetProgressNote'; -const GET_ASSESSMENT = - 'Services/DoctorApplication.svc/REST/GetAssessment'; +const GET_PHYSICAL_EXAM = 'Services/DoctorApplication.svc/REST/GetPhysicalExam'; +const GET_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/GetProgressNote'; +const GET_ASSESSMENT = 'Services/DoctorApplication.svc/REST/GetAssessment'; const GET_CATEGORISE_PROCEDURE = 'Services/DoctorApplication.svc/REST/GetProcedure'; diff --git a/lib/core/model/medical_file_model.dart b/lib/core/model/medical_file_model.dart new file mode 100644 index 00000000..201c88f3 --- /dev/null +++ b/lib/core/model/medical_file_model.dart @@ -0,0 +1,1161 @@ +class MedicalFileModel { + List entityList; + int rowcount; + Null statusMessage; + + MedicalFileModel({this.entityList, this.rowcount, this.statusMessage}); + + MedicalFileModel.fromJson(Map json) { + if (json['entityList'] != null) { + entityList = new List(); + json['entityList'].forEach((v) { + entityList.add(new EntityList.fromJson(v)); + }); + } + rowcount = json['rowcount']; + statusMessage = json['statusMessage']; + } + + Map toJson() { + final Map data = new Map(); + if (this.entityList != null) { + data['entityList'] = this.entityList.map((v) => v.toJson()).toList(); + } + data['rowcount'] = this.rowcount; + data['statusMessage'] = this.statusMessage; + return data; + } +} + +class EntityList { + List admissions; + ClinicalSummary clinicalSummary; + List doctorWisePatientEpisodes; + List procedures; + List lstAllEpisodes; + List timelines; + + EntityList( + {this.admissions, + this.clinicalSummary, + this.doctorWisePatientEpisodes, + this.procedures, + this.lstAllEpisodes, + this.timelines}); + + EntityList.fromJson(Map json) { + if (json['Admissions'] != null) { + admissions = new List(); + json['Admissions'].forEach((v) { + admissions.add(new Admissions.fromJson(v)); + }); + } + clinicalSummary = json['ClinicalSummary'] != null + ? new ClinicalSummary.fromJson(json['ClinicalSummary']) + : null; + if (json['DoctorWisePatientEpisodes'] != null) { + doctorWisePatientEpisodes = new List(); + json['DoctorWisePatientEpisodes'].forEach((v) { + doctorWisePatientEpisodes + .add(new DoctorWisePatientEpisodes.fromJson(v)); + }); + } + if (json['Procedures'] != null) { + procedures = new List(); + json['Procedures'].forEach((v) { + procedures.add(new Procedures.fromJson(v)); + }); + } + if (json['lstAllEpisodes'] != null) { + lstAllEpisodes = new List(); + json['lstAllEpisodes'].forEach((v) { + lstAllEpisodes.add(new LstAllEpisodes.fromJson(v)); + }); + } + if (json['Timelines'] != null) { + timelines = new List(); + json['Timelines'].forEach((v) { + timelines.add(new Timelines.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + if (this.admissions != null) { + data['Admissions'] = this.admissions.map((v) => v.toJson()).toList(); + } + if (this.clinicalSummary != null) { + data['ClinicalSummary'] = this.clinicalSummary.toJson(); + } + if (this.doctorWisePatientEpisodes != null) { + data['DoctorWisePatientEpisodes'] = + this.doctorWisePatientEpisodes.map((v) => v.toJson()).toList(); + } + if (this.procedures != null) { + data['Procedures'] = this.procedures.map((v) => v.toJson()).toList(); + } + if (this.lstAllEpisodes != null) { + data['lstAllEpisodes'] = + this.lstAllEpisodes.map((v) => v.toJson()).toList(); + } + if (this.timelines != null) { + data['Timelines'] = this.timelines.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Admissions { + String admissionDate; + int admissionNo; + String clinic; + String doctor; + int projectID; + String projectName; + String setupID; + List lstDischargeDiag; + + Admissions( + {this.admissionDate, + this.admissionNo, + this.clinic, + this.doctor, + this.projectID, + this.projectName, + this.setupID, + this.lstDischargeDiag}); + + Admissions.fromJson(Map json) { + admissionDate = json['AdmissionDate']; + admissionNo = json['AdmissionNo']; + clinic = json['Clinic']; + doctor = json['Doctor']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + if (json['lstDischargeDiag'] != null) { + lstDischargeDiag = new List(); + json['lstDischargeDiag'].forEach((v) { + lstDischargeDiag.add(new LstDischargeDiag.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['AdmissionDate'] = this.admissionDate; + data['AdmissionNo'] = this.admissionNo; + data['Clinic'] = this.clinic; + data['Doctor'] = this.doctor; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + if (this.lstDischargeDiag != null) { + data['lstDischargeDiag'] = + this.lstDischargeDiag.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class LstDischargeDiag { + int admissionNo; + String codeID; + String description; + int dischargeNo; + int projectID; + String projectName; + String remarks; + String setupID; + List timeLineEvents; + + LstDischargeDiag( + {this.admissionNo, + this.codeID, + this.description, + this.dischargeNo, + this.projectID, + this.projectName, + this.remarks, + this.setupID, + this.timeLineEvents}); + + LstDischargeDiag.fromJson(Map json) { + admissionNo = json['AdmissionNo']; + codeID = json['CodeID']; + description = json['Description']; + dischargeNo = json['DischargeNo']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + remarks = json['Remarks']; + setupID = json['SetupID']; + // if (json['TimeLineEvents'] != null) { + // timeLineEvents = new List(); + // json['TimeLineEvents'].forEach((v) { + // timeLineEvents.add(new TimeLineEvents.fromJson(v)); + // }); + // } + } + + Map toJson() { + final Map data = new Map(); + data['AdmissionNo'] = this.admissionNo; + data['CodeID'] = this.codeID; + data['Description'] = this.description; + data['DischargeNo'] = this.dischargeNo; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['Remarks'] = this.remarks; + data['SetupID'] = this.setupID; + if (this.timeLineEvents != null) { + data['TimeLineEvents'] = + this.timeLineEvents.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class TimeLineEvents { + List admissions; + String colorClass; + List consulations; + String disPlayName; + Null doctorName; + ERData eRData; + int eventId; + String fullName; + String iconClass; + bool isDisabled; + List labOrders; + List radReports; + String toolTip; + + TimeLineEvents( + {this.admissions, + this.colorClass, + this.consulations, + this.disPlayName, + this.doctorName, + this.eRData, + this.eventId, + this.fullName, + this.iconClass, + this.isDisabled, + this.labOrders, + this.radReports, + this.toolTip}); + + // TimeLineEvents.fromJson(Map json) { + // if (json['Admissions'] != null) { + // admissions = new List(); + // json['Admissions'].forEach((v) { + // admissions.add(new Null.fromJson(v)); + // }); + // } + // colorClass = json['ColorClass']; + // if (json['Consulations'] != null) { + // consulations = new List(); + // json['Consulations'].forEach((v) { + // consulations.add(new Null.fromJson(v)); + // }); + // } + // disPlayName = json['DisPlayName']; + // doctorName = json['DoctorName']; + // eRData = + // json['ERData'] != null ? new ERData.fromJson(json['ERData']) : null; + // eventId = json['EventId']; + // fullName = json['FullName']; + // iconClass = json['IconClass']; + // isDisabled = json['IsDisabled']; + // if (json['LabOrders'] != null) { + // labOrders = new List(); + // json['LabOrders'].forEach((v) { + // labOrders.add(new Null.fromJson(v)); + // }); + // } + // if (json['RadReports'] != null) { + // radReports = new List(); + // json['RadReports'].forEach((v) { + // radReports.add(new Null.fromJson(v)); + // }); + // } + // toolTip = json['ToolTip']; + // } + + Map toJson() { + final Map data = new Map(); + // if (this.admissions != null) { + // data['Admissions'] = this.admissions.map((v) => v.toJson()).toList(); + // } + data['ColorClass'] = this.colorClass; + // if (this.consulations != null) { + // data['Consulations'] = this.consulations.map((v) => v.toJson()).toList(); + // } + data['DisPlayName'] = this.disPlayName; + data['DoctorName'] = this.doctorName; + if (this.eRData != null) { + data['ERData'] = this.eRData.toJson(); + } + data['EventId'] = this.eventId; + data['FullName'] = this.fullName; + data['IconClass'] = this.iconClass; + data['IsDisabled'] = this.isDisabled; + // if (this.labOrders != null) { + // data['LabOrders'] = this.labOrders.map((v) => v.toJson()).toList(); + // } + // if (this.radReports != null) { + // data['RadReports'] = this.radReports.map((v) => v.toJson()).toList(); + // } + data['ToolTip'] = this.toolTip; + return data; + } +} + +class ERData { + List admissions; + List consulations; + List labOrders; + List radReports; + List lstErDischargeSummary; + + ERData( + {this.admissions, + this.consulations, + this.labOrders, + this.radReports, + this.lstErDischargeSummary}); + + // ERData.fromJson(Map json) { + // if (json['Admissions'] != null) { + // admissions = new List(); + // json['Admissions'].forEach((v) { + // admissions.add(new Null.fromJson(v)); + // }); + // } + // if (json['Consulations'] != null) { + // consulations = new List(); + // json['Consulations'].forEach((v) { + // consulations.add(new Null.fromJson(v)); + // }); + // } + // if (json['LabOrders'] != null) { + // labOrders = new List(); + // json['LabOrders'].forEach((v) { + // labOrders.add(new Null.fromJson(v)); + // }); + // } + // if (json['RadReports'] != null) { + // radReports = new List(); + // json['RadReports'].forEach((v) { + // radReports.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstErDischargeSummary'] != null) { + // lstErDischargeSummary = new List(); + // json['lstErDischargeSummary'].forEach((v) { + // lstErDischargeSummary.add(new Null.fromJson(v)); + // }); + // } + // } + + Map toJson() { + final Map data = new Map(); + // if (this.admissions != null) { + // data['Admissions'] = this.admissions.map((v) => v.toJson()).toList(); + // } + // if (this.consulations != null) { + // data['Consulations'] = this.consulations.map((v) => v.toJson()).toList(); + // } + // if (this.labOrders != null) { + // data['LabOrders'] = this.labOrders.map((v) => v.toJson()).toList(); + // } + // if (this.radReports != null) { + // data['RadReports'] = this.radReports.map((v) => v.toJson()).toList(); + // } + // if (this.lstErDischargeSummary != null) { + // data['lstErDischargeSummary'] = + // this.lstErDischargeSummary.map((v) => v.toJson()).toList(); + // } + return data; + } +} + +class ClinicalSummary { + List labAbnormalResults; + List lstAllergy; + List lstComplaintsDetail; + List lstDiagnosis; + List lstEncounterHistory; + List lstMedication; + List lstPastHistory; + + ClinicalSummary( + {this.labAbnormalResults, + this.lstAllergy, + this.lstComplaintsDetail, + this.lstDiagnosis, + this.lstEncounterHistory, + this.lstMedication, + this.lstPastHistory}); + + ClinicalSummary.fromJson(Map json) { + if (json['LabAbnormalResults'] != null) { + labAbnormalResults = new List(); + json['LabAbnormalResults'].forEach((v) { + labAbnormalResults.add(new LabAbnormalResults.fromJson(v)); + }); + } + if (json['lstAllergy'] != null) { + lstAllergy = new List(); + json['lstAllergy'].forEach((v) { + lstAllergy.add(new LstAllergy.fromJson(v)); + }); + } + if (json['lstComplaintsDetail'] != null) { + lstComplaintsDetail = new List(); + json['lstComplaintsDetail'].forEach((v) { + lstComplaintsDetail.add(new LstComplaintsDetail.fromJson(v)); + }); + } + if (json['lstDiagnosis'] != null) { + lstDiagnosis = new List(); + json['lstDiagnosis'].forEach((v) { + lstDiagnosis.add(new LstDiagnosis.fromJson(v)); + }); + } + if (json['lstEncounterHistory'] != null) { + lstEncounterHistory = new List(); + json['lstEncounterHistory'].forEach((v) { + lstEncounterHistory.add(new LstEncounterHistory.fromJson(v)); + }); + } + if (json['lstMedication'] != null) { + lstMedication = new List(); + json['lstMedication'].forEach((v) { + lstMedication.add(new LstMedication.fromJson(v)); + }); + } + if (json['lstPastHistory'] != null) { + lstPastHistory = new List(); + json['lstPastHistory'].forEach((v) { + lstPastHistory.add(new LstPastHistory.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + if (this.labAbnormalResults != null) { + data['LabAbnormalResults'] = + this.labAbnormalResults.map((v) => v.toJson()).toList(); + } + if (this.lstAllergy != null) { + data['lstAllergy'] = this.lstAllergy.map((v) => v.toJson()).toList(); + } + if (this.lstComplaintsDetail != null) { + data['lstComplaintsDetail'] = + this.lstComplaintsDetail.map((v) => v.toJson()).toList(); + } + if (this.lstDiagnosis != null) { + data['lstDiagnosis'] = this.lstDiagnosis.map((v) => v.toJson()).toList(); + } + if (this.lstEncounterHistory != null) { + data['lstEncounterHistory'] = + this.lstEncounterHistory.map((v) => v.toJson()).toList(); + } + if (this.lstMedication != null) { + data['lstMedication'] = + this.lstMedication.map((v) => v.toJson()).toList(); + } + if (this.lstPastHistory != null) { + data['lstPastHistory'] = + this.lstPastHistory.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class LabAbnormalResults { + String createdOn; + String description; + bool isPackage; + int orderNo; + int packageID; + String packageName; + int projectID; + String projectName; + String referenceRange; + double referenceRangeLow; + double referenceRangeHigh; + String resultCriticalFlag; + String resultValue; + String resultValueFlag; + String setupID; + String testCode; + int testID; + String verifiedOn; + bool isAbnormal; + bool isCritical; + String unit; + + LabAbnormalResults( + {this.createdOn, + this.description, + this.isPackage, + this.orderNo, + this.packageID, + this.packageName, + this.projectID, + this.projectName, + this.referenceRange, + this.referenceRangeLow, + this.referenceRangeHigh, + this.resultCriticalFlag, + this.resultValue, + this.resultValueFlag, + this.setupID, + this.testCode, + this.testID, + this.verifiedOn, + this.isAbnormal, + this.isCritical, + this.unit}); + + LabAbnormalResults.fromJson(Map json) { + createdOn = json['CreatedOn']; + description = json['Description']; + isPackage = json['IsPackage']; + orderNo = json['OrderNo']; + packageID = json['PackageID']; + packageName = json['PackageName']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + referenceRange = json['ReferenceRange']; + referenceRangeLow = json['ReferenceRange_Low']; + referenceRangeHigh = json['ReferenceRange_high']; + resultCriticalFlag = json['ResultCriticalFlag']; + resultValue = json['ResultValue']; + resultValueFlag = json['ResultValueFlag']; + setupID = json['SetupID']; + testCode = json['TestCode']; + testID = json['TestID']; + verifiedOn = json['VerifiedOn']; + isAbnormal = json['isAbnormal']; + isCritical = json['isCritical']; + unit = json['unit']; + } + + Map toJson() { + final Map data = new Map(); + data['CreatedOn'] = this.createdOn; + data['Description'] = this.description; + data['IsPackage'] = this.isPackage; + data['OrderNo'] = this.orderNo; + data['PackageID'] = this.packageID; + data['PackageName'] = this.packageName; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['ReferenceRange'] = this.referenceRange; + data['ReferenceRange_Low'] = this.referenceRangeLow; + data['ReferenceRange_high'] = this.referenceRangeHigh; + data['ResultCriticalFlag'] = this.resultCriticalFlag; + data['ResultValue'] = this.resultValue; + data['ResultValueFlag'] = this.resultValueFlag; + data['SetupID'] = this.setupID; + data['TestCode'] = this.testCode; + data['TestID'] = this.testID; + data['VerifiedOn'] = this.verifiedOn; + data['isAbnormal'] = this.isAbnormal; + data['isCritical'] = this.isCritical; + data['unit'] = this.unit; + return data; + } +} + +class LstAllergy { + String allergy; + int projectID; + String projectName; + String setupID; + + LstAllergy({this.allergy, this.projectID, this.projectName, this.setupID}); + + LstAllergy.fromJson(Map json) { + allergy = json['Allergy']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + } + + Map toJson() { + final Map data = new Map(); + data['Allergy'] = this.allergy; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + return data; + } +} + +class LstComplaintsDetail { + String cCDate; + String createdBy; + String plainChiefComplaint; + int projectID; + String projectName; + String setupID; + String rtfChiefComplaint; + + LstComplaintsDetail( + {this.cCDate, + this.createdBy, + this.plainChiefComplaint, + this.projectID, + this.projectName, + this.setupID, + this.rtfChiefComplaint}); + + LstComplaintsDetail.fromJson(Map json) { + cCDate = json['CCDate']; + createdBy = json['CreatedBy']; + plainChiefComplaint = json['PlainChiefComplaint']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + rtfChiefComplaint = json['rtfChiefComplaint']; + } + + Map toJson() { + final Map data = new Map(); + data['CCDate'] = this.cCDate; + data['CreatedBy'] = this.createdBy; + data['PlainChiefComplaint'] = this.plainChiefComplaint; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + data['rtfChiefComplaint'] = this.rtfChiefComplaint; + return data; + } +} + +class LstDiagnosis { + String diagnosis; + int projectID; + String projectName; + String setupID; + String state; + String status; + + LstDiagnosis( + {this.diagnosis, + this.projectID, + this.projectName, + this.setupID, + this.state, + this.status}); + + LstDiagnosis.fromJson(Map json) { + diagnosis = json['Diagnosis']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + state = json['State']; + status = json['Status']; + } + + Map toJson() { + final Map data = new Map(); + data['Diagnosis'] = this.diagnosis; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + data['State'] = this.state; + data['Status'] = this.status; + return data; + } +} + +class LstEncounterHistory { + String clinician; + String date; + String encounterType; + int projectID; + String projectName; + String reason; + String setupID; + String speciality; + String type; + + LstEncounterHistory( + {this.clinician, + this.date, + this.encounterType, + this.projectID, + this.projectName, + this.reason, + this.setupID, + this.speciality, + this.type}); + + LstEncounterHistory.fromJson(Map json) { + clinician = json['Clinician']; + date = json['Date']; + encounterType = json['EncounterType']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + reason = json['Reason']; + setupID = json['SetupID']; + speciality = json['Speciality']; + type = json['Type']; + } + + Map toJson() { + final Map data = new Map(); + data['Clinician'] = this.clinician; + data['Date'] = this.date; + data['EncounterType'] = this.encounterType; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['Reason'] = this.reason; + data['SetupID'] = this.setupID; + data['Speciality'] = this.speciality; + data['Type'] = this.type; + return data; + } +} + +class LstMedication { + String date; + int doseDurationDays; + String lastFilled; + String medication; + String prescription; + int projectID; + String projectName; + String setupID; + String icon; + + LstMedication( + {this.date, + this.doseDurationDays, + this.lastFilled, + this.medication, + this.prescription, + this.projectID, + this.projectName, + this.setupID, + this.icon}); + + LstMedication.fromJson(Map json) { + date = json['Date']; + doseDurationDays = json['DoseDurationDays']; + lastFilled = json['LastFilled']; + medication = json['Medication']; + prescription = json['Prescription']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + icon = json['icon']; + } + + Map toJson() { + final Map data = new Map(); + data['Date'] = this.date; + data['DoseDurationDays'] = this.doseDurationDays; + data['LastFilled'] = this.lastFilled; + data['Medication'] = this.medication; + data['Prescription'] = this.prescription; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + data['icon'] = this.icon; + return data; + } +} + +class LstPastHistory { + String history; + String historyType; + String historyTypeID; + String historyTypeName; + int projectID; + String projectName; + String remarks; + String setupID; + + LstPastHistory( + {this.history, + this.historyType, + this.historyTypeID, + this.historyTypeName, + this.projectID, + this.projectName, + this.remarks, + this.setupID}); + + LstPastHistory.fromJson(Map json) { + history = json['History']; + historyType = json['HistoryType']; + historyTypeID = json['HistoryTypeID']; + historyTypeName = json['HistoryTypeName']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + remarks = json['Remarks']; + setupID = json['SetupID']; + } + + Map toJson() { + final Map data = new Map(); + data['History'] = this.history; + data['HistoryType'] = this.historyType; + data['HistoryTypeID'] = this.historyTypeID; + data['HistoryTypeName'] = this.historyTypeName; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['Remarks'] = this.remarks; + data['SetupID'] = this.setupID; + return data; + } +} + +class DoctorWisePatientEpisodes { + String clinicName; + String lastVisitDate; + int projectID; + String projectName; + String setupID; + int doctorID; + String doctorName; + + DoctorWisePatientEpisodes( + {this.clinicName, + this.lastVisitDate, + this.projectID, + this.projectName, + this.setupID, + this.doctorID, + this.doctorName}); + + DoctorWisePatientEpisodes.fromJson(Map json) { + clinicName = json['ClinicName']; + lastVisitDate = json['LastVisitDate']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + doctorID = json['doctorID']; + doctorName = json['doctorName']; + } + + Map toJson() { + final Map data = new Map(); + data['ClinicName'] = this.clinicName; + data['LastVisitDate'] = this.lastVisitDate; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + data['doctorID'] = this.doctorID; + data['doctorName'] = this.doctorName; + return data; + } +} + +class Procedures { + int appointmentNo; + int episodeID; + String orderDate; + int patientID; + String patientType; + String procName; + String procedureId; + int projectID; + String projectName; + String setupID; + String dispalyName; + + Procedures( + {this.appointmentNo, + this.episodeID, + this.orderDate, + this.patientID, + this.patientType, + this.procName, + this.procedureId, + this.projectID, + this.projectName, + this.setupID, + this.dispalyName}); + + Procedures.fromJson(Map json) { + appointmentNo = json['AppointmentNo']; + episodeID = json['EpisodeID']; + orderDate = json['OrderDate']; + patientID = json['PatientID']; + patientType = json['PatientType']; + procName = json['ProcName']; + procedureId = json['ProcedureId']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + dispalyName = json['dispalyName']; + } + + Map toJson() { + final Map data = new Map(); + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + data['OrderDate'] = this.orderDate; + data['PatientID'] = this.patientID; + data['PatientType'] = this.patientType; + data['ProcName'] = this.procName; + data['ProcedureId'] = this.procedureId; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + data['dispalyName'] = this.dispalyName; + return data; + } +} + +class LstAllEpisodes { + int admissionNo; + String appointmentDate; + int appointmentNo; + String appointmentType; + String clinicID; + String clinicName; + int doctorID; + String doctorName; + String endTime; + String episodeDate; + int episodeID; + int patientID; + int projectID; + String projectName; + String remarks; + String setupID; + String startTime; + String visitFor; + String visitType; + String dispalyName; + List lstAssessments; + List lstCheifComplaint; + List lstMedicalHistory; + List lstMedicine; + List lstPhysicalExam; + List lstProcedure; + List lstTreatmentPlan; + List lstVitalSign; + + LstAllEpisodes( + {this.admissionNo, + this.appointmentDate, + this.appointmentNo, + this.appointmentType, + this.clinicID, + this.clinicName, + this.doctorID, + this.doctorName, + this.endTime, + this.episodeDate, + this.episodeID, + this.patientID, + this.projectID, + this.projectName, + this.remarks, + this.setupID, + this.startTime, + this.visitFor, + this.visitType, + this.dispalyName, + this.lstAssessments, + this.lstCheifComplaint, + this.lstMedicalHistory, + this.lstMedicine, + this.lstPhysicalExam, + this.lstProcedure, + this.lstTreatmentPlan, + this.lstVitalSign}); + + LstAllEpisodes.fromJson(Map json) { + admissionNo = json['AdmissionNo']; + appointmentDate = json['AppointmentDate']; + appointmentNo = json['AppointmentNo']; + appointmentType = json['AppointmentType']; + clinicID = json['ClinicID']; + clinicName = json['ClinicName']; + doctorID = json['DoctorID']; + doctorName = json['DoctorName']; + endTime = json['EndTime']; + episodeDate = json['EpisodeDate']; + episodeID = json['EpisodeID']; + patientID = json['PatientID']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + remarks = json['Remarks']; + setupID = json['SetupID']; + startTime = json['StartTime']; + visitFor = json['VisitFor']; + visitType = json['VisitType']; + dispalyName = json['dispalyName']; + // if (json['lstAssessments'] != null) { + // lstAssessments = new List(); + // json['lstAssessments'].forEach((v) { + // lstAssessments.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstCheifComplaint'] != null) { + // lstCheifComplaint = new List(); + // json['lstCheifComplaint'].forEach((v) { + // lstCheifComplaint.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstMedicalHistory'] != null) { + // lstMedicalHistory = new List(); + // json['lstMedicalHistory'].forEach((v) { + // lstMedicalHistory.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstMedicine'] != null) { + // lstMedicine = new List(); + // json['lstMedicine'].forEach((v) { + // lstMedicine.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstPhysicalExam'] != null) { + // lstPhysicalExam = new List(); + // json['lstPhysicalExam'].forEach((v) { + // lstPhysicalExam.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstProcedure'] != null) { + // lstProcedure = new List(); + // json['lstProcedure'].forEach((v) { + // lstProcedure.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstTreatmentPlan'] != null) { + // lstTreatmentPlan = new List(); + // json['lstTreatmentPlan'].forEach((v) { + // lstTreatmentPlan.add(new Null.fromJson(v)); + // }); + // } + // if (json['lstVitalSign'] != null) { + // lstVitalSign = new List(); + // json['lstVitalSign'].forEach((v) { + // lstVitalSign.add(new Null.fromJson(v)); + // }); + // } + } + + Map toJson() { + final Map data = new Map(); + data['AdmissionNo'] = this.admissionNo; + data['AppointmentDate'] = this.appointmentDate; + data['AppointmentNo'] = this.appointmentNo; + data['AppointmentType'] = this.appointmentType; + data['ClinicID'] = this.clinicID; + data['ClinicName'] = this.clinicName; + data['DoctorID'] = this.doctorID; + data['DoctorName'] = this.doctorName; + data['EndTime'] = this.endTime; + data['EpisodeDate'] = this.episodeDate; + data['EpisodeID'] = this.episodeID; + data['PatientID'] = this.patientID; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['Remarks'] = this.remarks; + data['SetupID'] = this.setupID; + data['StartTime'] = this.startTime; + data['VisitFor'] = this.visitFor; + data['VisitType'] = this.visitType; + data['dispalyName'] = this.dispalyName; + // if (this.lstAssessments != null) { + // data['lstAssessments'] = + // this.lstAssessments.map((v) => v.toJson()).toList(); + // } + // if (this.lstCheifComplaint != null) { + // data['lstCheifComplaint'] = + // this.lstCheifComplaint.map((v) => v.toJson()).toList(); + // } + // if (this.lstMedicalHistory != null) { + // data['lstMedicalHistory'] = + // this.lstMedicalHistory.map((v) => v.toJson()).toList(); + // } + // if (this.lstMedicine != null) { + // data['lstMedicine'] = this.lstMedicine.map((v) => v.toJson()).toList(); + // } + // if (this.lstPhysicalExam != null) { + // data['lstPhysicalExam'] = + // this.lstPhysicalExam.map((v) => v.toJson()).toList(); + // } + // if (this.lstProcedure != null) { + // data['lstProcedure'] = this.lstProcedure.map((v) => v.toJson()).toList(); + // } + // if (this.lstTreatmentPlan != null) { + // data['lstTreatmentPlan'] = + // this.lstTreatmentPlan.map((v) => v.toJson()).toList(); + // } + // if (this.lstVitalSign != null) { + // data['lstVitalSign'] = this.lstVitalSign.map((v) => v.toJson()).toList(); + // } + return data; + } +} + +class Timelines { + int clinicId; + String clinicName; + String date; + int doctorId; + String doctorImage; + String doctorName; + int encounterNumber; + String encounterType; + int projectID; + String projectName; + String setupID; + + Timelines( + {this.clinicId, + this.clinicName, + this.date, + this.doctorId, + this.doctorImage, + this.doctorName, + this.encounterNumber, + this.encounterType, + this.projectID, + this.projectName, + this.setupID}); + + Timelines.fromJson(Map json) { + clinicId = json['ClinicId']; + clinicName = json['ClinicName']; + date = json['Date']; + doctorId = json['DoctorId']; + doctorImage = json['DoctorImage']; + doctorName = json['DoctorName']; + encounterNumber = json['EncounterNumber']; + encounterType = json['EncounterType']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + setupID = json['SetupID']; + } + + Map toJson() { + final Map data = new Map(); + data['ClinicId'] = this.clinicId; + data['ClinicName'] = this.clinicName; + data['Date'] = this.date; + data['DoctorId'] = this.doctorId; + data['DoctorImage'] = this.doctorImage; + data['DoctorName'] = this.doctorName; + data['EncounterNumber'] = this.encounterNumber; + data['EncounterType'] = this.encounterType; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['SetupID'] = this.setupID; + return data; + } +} diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index a988b61c..ce58776d 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -284,7 +284,7 @@ void addPrescriptionForm(context, PrescriptionViewModel model) { formKey.currentState.save(); if (formKey.currentState.validate()) { - postPrescription( + postProcedure( model: model, duration: durationController.text, dose: doseController.text, @@ -326,7 +326,7 @@ void addPrescriptionForm(context, PrescriptionViewModel model) { }); } -postPrescription( +postProcedure( {String duration, String dose, String drugId, diff --git a/pubspec.lock b/pubspec.lock index c6829dad..493985a1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -440,7 +440,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.2" + version: "0.6.3-nullsafety.1" json_annotation: dependency: transitive description: @@ -482,7 +482,7 @@ packages: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.4" mime: dependency: transitive description: @@ -739,7 +739,7 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0-nullsafety.2" stream_channel: dependency: transitive description: @@ -874,5 +874,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.10.0 <2.11.0" + dart: ">=2.10.0 <=2.11.0-213.1.beta" flutter: ">=1.22.0 <2.0.0" From d1a261c847709ac66c7c149bede5233a5ddcac5a Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Fri, 1 Jan 2021 22:09:53 +0200 Subject: [PATCH 3/3] procedure update --- lib/config/config.dart | 2 + lib/core/model/medical_file_model.dart | 2 +- .../model/medical_file_request_model.dart | 18 + lib/core/service/medical_file_service.dart | 29 ++ lib/core/service/procedure_service.dart | 19 +- .../viewModel/medical_file_view_model.dart | 26 ++ lib/core/viewModel/procedure_View_model.dart | 4 +- lib/locator.dart | 4 + lib/routes.dart | 9 +- .../medical-file/medical_file_details.dart | 428 ++++++++++++++++++ .../medical-file/medical_file_page.dart | 173 +++++++ .../prescription/prescription_screen.dart | 9 +- .../entity_list_checkbox_search_widget.dart | 133 +++--- lib/screens/procedures/procedure_screen.dart | 187 +++++--- .../profile/profile_medical_info_widget.dart | 17 +- 15 files changed, 902 insertions(+), 158 deletions(-) create mode 100644 lib/core/model/medical_file_request_model.dart create mode 100644 lib/core/service/medical_file_service.dart create mode 100644 lib/core/viewModel/medical_file_view_model.dart create mode 100644 lib/screens/medical-file/medical_file_details.dart create mode 100644 lib/screens/medical-file/medical_file_page.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 3e7d9ea7..fc7edf42 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -157,6 +157,8 @@ const UPDATE_PROCEDURE = 'Services/DoctorApplication.svc/REST/PatchProcedure'; const UPDATE_PRESCRIPTION = 'Services/DoctorApplication.svc/REST/PatchPrescription'; +const GET_MEDICAL_FILE = 'Services/DoctorApplication.svc/REST/GetMedicalFile'; + var selectedPatientType = 1; //*********change value to decode json from Dropdown ************ diff --git a/lib/core/model/medical_file_model.dart b/lib/core/model/medical_file_model.dart index 201c88f3..eb88f0d4 100644 --- a/lib/core/model/medical_file_model.dart +++ b/lib/core/model/medical_file_model.dart @@ -1,7 +1,7 @@ class MedicalFileModel { List entityList; int rowcount; - Null statusMessage; + dynamic statusMessage; MedicalFileModel({this.entityList, this.rowcount, this.statusMessage}); diff --git a/lib/core/model/medical_file_request_model.dart b/lib/core/model/medical_file_request_model.dart new file mode 100644 index 00000000..c5a40bb7 --- /dev/null +++ b/lib/core/model/medical_file_request_model.dart @@ -0,0 +1,18 @@ +class MedicalFileRequestModel { + int patientMRN; + String vidaAuthTokenID; + + MedicalFileRequestModel({this.patientMRN, this.vidaAuthTokenID}); + + MedicalFileRequestModel.fromJson(Map json) { + patientMRN = json['PatientMRN']; + vidaAuthTokenID = json['VidaAuthTokenID']; + } + + Map toJson() { + final Map data = new Map(); + data['PatientMRN'] = this.patientMRN; + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + return data; + } +} diff --git a/lib/core/service/medical_file_service.dart b/lib/core/service/medical_file_service.dart new file mode 100644 index 00000000..0f6af46a --- /dev/null +++ b/lib/core/service/medical_file_service.dart @@ -0,0 +1,29 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/model/medical_file_model.dart'; +import 'package:doctor_app_flutter/core/model/medical_file_request_model.dart'; +import 'package:doctor_app_flutter/core/model/prescription_req_model.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; + +class MedicalFileService extends BaseService { + List _medicalFileList = List(); + List get medicalFileList => _medicalFileList; + + MedicalFileRequestModel _fileRequestModel = MedicalFileRequestModel( + patientMRN: 1231755, + vidaAuthTokenID: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiNDM1MGNjZTYtYzc3MS00YjBiLThiNDItMGZhY2IzYzgxMjQ4IiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTYwNTQiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkRPQ1RPUlMiLCJIRUFEIERPQ1RPUlMiLCJBRE1JTklTVFJBVE9SUyIsIlJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIkNPTlNFTlQgIiwiTUVESUNBTCBSRVBPUlQgLSBTSUNLIExFQVZFIE1BTkFHRVIiXSwibmJmIjoxNjA5MjI1MjMwLCJleHAiOjE2MTAwODkyMzAsImlhdCI6MTYwOTIyNTIzMH0.rs7lTBQ1ON4PbR11PBkOyjf818DdeMKuqz2IrCJMYQU", + ); + + Future getMedicalFile() async { + hasError = false; + _medicalFileList.clear(); + await baseAppClient.post(GET_MEDICAL_FILE, + onSuccess: (dynamic response, int statusCode) { + _medicalFileList + .add(MedicalFileModel.fromJson(response['PatientFileList'])); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _fileRequestModel.toJson()); + } +} diff --git a/lib/core/service/procedure_service.dart b/lib/core/service/procedure_service.dart index c7319eed..0152de24 100644 --- a/lib/core/service/procedure_service.dart +++ b/lib/core/service/procedure_service.dart @@ -73,18 +73,15 @@ class ProcedureService extends BaseService { }, body: postProcedureReqModel.toJson()); } - Future updateProcedure() async { + Future updateProcedure(PostProcedureReqModel postProcedureReqModel) async { hasError = false; _procedureList.clear(); - await baseAppClient.post( - GET_CATEGORISE_PROCEDURE, - onSuccess: (dynamic response, int statusCode) { - print("ACCEPTED"); - }, - onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, - ); + await baseAppClient.post(UPDATE_PROCEDURE, + onSuccess: (dynamic response, int statusCode) { + print("ACCEPTED"); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: postProcedureReqModel.toJson()); } } diff --git a/lib/core/viewModel/medical_file_view_model.dart b/lib/core/viewModel/medical_file_view_model.dart new file mode 100644 index 00000000..0ef21095 --- /dev/null +++ b/lib/core/viewModel/medical_file_view_model.dart @@ -0,0 +1,26 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/medical_file_model.dart'; +import 'package:doctor_app_flutter/core/service/medical_file_service.dart'; + +import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; +import 'package:doctor_app_flutter/locator.dart'; + +class MedicalFileViewModel extends BaseViewModel { + bool hasError = false; + MedicalFileService _medicalFileService = locator(); + + List get medicalFileList => + _medicalFileService.medicalFileList; + + Future getMedicalFile() async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _medicalFileService.getMedicalFile(); + if (_medicalFileService.hasError) { + error = _medicalFileService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index ab4deee1..da258e23 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -51,11 +51,11 @@ class ProcedureViewModel extends BaseViewModel { } } - Future updateProcedure() async { + Future updateProcedure(PostProcedureReqModel postProcedureReqModel) async { hasError = false; //_insuranceCardService.clearInsuranceCard(); setState(ViewState.Busy); - await _procedureService.updateProcedure(); + await _procedureService.updateProcedure(postProcedureReqModel); if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); diff --git a/lib/locator.dart b/lib/locator.dart index 8bbf00b0..e6882ab3 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -1,9 +1,11 @@ import 'package:doctor_app_flutter/core/service/dasboard_service.dart'; +import 'package:doctor_app_flutter/core/service/medical_file_service.dart'; import 'package:doctor_app_flutter/core/service/patient_service.dart'; import 'package:doctor_app_flutter/core/service/prescription_service.dart'; import 'package:doctor_app_flutter/core/service/procedure_service.dart'; import 'package:doctor_app_flutter/core/service/sickleave_service.dart'; import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; @@ -45,6 +47,7 @@ void setupLocator() { locator.registerLazySingleton(() => PrescriptionService()); locator.registerLazySingleton(() => ProcedureService()); locator.registerLazySingleton(() => VitalSignsService()); + locator.registerLazySingleton(() => MedicalFileService()); /// View Model locator.registerFactory(() => DoctorReplayViewModel()); @@ -60,4 +63,5 @@ void setupLocator() { locator.registerFactory(() => PrescriptionViewModel()); locator.registerFactory(() => ProcedureViewModel()); locator.registerFactory(() => VitalSignsViewModel()); + locator.registerFactory(() => MedicalFileViewModel()); } diff --git a/lib/routes.dart b/lib/routes.dart index 1915a89d..c2264b66 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/root_page.dart'; +import 'package:doctor_app_flutter/screens/medical-file/medical_file_page.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'; @@ -71,7 +72,7 @@ const String SETTINGS = 'settings'; 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 MEDICAL_FILE = 'patients/radiology'; const String PROGRESS_NOTE = 'patients/progress-note'; const String REFER_PATIENT = 'patients/refer-patient'; const String MY_REFERRAL_DETAIL = 'my_referral_detail'; @@ -119,7 +120,7 @@ var routes = { SERVICES: (_) => ServicesScreen(), LAB_ORDERS: (_) => LabOrdersScreen(), PRESCRIPTIONS: (_) => PrescriptionScreen(), - RADIOLOGY: (_) => RadiologyScreen(), + MEDICAL_FILE: (_) => MedicalFilePage(), PROGRESS_NOTE: (_) => ProgressNoteScreen(), REFER_PATIENT: (_) => ReferPatientScreen(), REFER_PATIENT_TO_DOCTOR: (_) => PatientMakeReferralScreen(), @@ -128,7 +129,9 @@ var routes = { VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), PATIENT_VITAL_SIGN: (_) => PatientVitalSignScreen(), CREATE_EPISODE: (_) => AddSOAPIndex(), - UPDATE_EPISODE: (_) => UpdateSoapIndex(isUpdate: true,), + UPDATE_EPISODE: (_) => UpdateSoapIndex( + isUpdate: true, + ), BODY_MEASUREMENTS: (_) => VitalSignItemDetailsScreen(), IN_PATIENT_PRESCRIPTIONS_DETAILS: (_) => InpatientPrescriptionDetailsScreen(), // VIDEO_CALL: (_) => VideoCallPage(patientData: null), diff --git a/lib/screens/medical-file/medical_file_details.dart b/lib/screens/medical-file/medical_file_details.dart new file mode 100644 index 00000000..4f966781 --- /dev/null +++ b/lib/screens/medical-file/medical_file_details.dart @@ -0,0 +1,428 @@ +import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart'; +import 'package:doctor_app_flutter/icons_app/doctor_app_icons.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/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.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/expandable-widget-header-body.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/material.dart'; + +class MedicalFileDetails extends StatefulWidget { + String age; + String firstName; + String lastName; + String gender; + MedicalFileDetails({this.age, this.firstName, this.lastName, this.gender}); + + @override + _MedicalFileDetailsState createState() => _MedicalFileDetailsState( + firstName: firstName, age: age, lastName: lastName, gender: gender); +} + +class _MedicalFileDetailsState extends State { + String age; + String firstName; + String lastName; + String gender; + + _MedicalFileDetailsState( + {this.age, this.firstName, this.lastName, this.gender}); + bool isPhysicalExam = false; + bool isProcedureExpand = false; + bool isHistoryExpand = false; + bool isAssessmentExpand = false; + + @override + Widget build(BuildContext context) { + return BaseView( + //onModelReady: (model) => model.getMedicalFile(), + builder: + (BuildContext context, MedicalFileViewModel model, Widget child) => + AppScaffold( + isShowAppBar: true, + appBarTitle: 'medical file'.toUpperCase(), + body: SingleChildScrollView( + child: Container( + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + AvatarWidget( + Icon( + gender == "Male" + ? DoctorApp.male + : DoctorApp.female_icon, + size: 70, + color: Colors.white, + ), + ), + SizedBox( + width: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + firstName + ' ' + lastName, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + Row( + children: [ + AppText( + TranslationBase.of(context).age2, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + SizedBox( + width: 5.0, + ), + AppText( + age, + color: Colors.black, + fontWeight: FontWeight.normal, + ), + ], + ), + ], + ) + ], + ), + ), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey, + ), + Padding( + padding: EdgeInsets.all(10.0), + child: Container( + child: Column( + children: [ + Row( + children: [ + AppText( + 'Visit Date : ', + fontWeight: FontWeight.w700, + ), + AppText( + '23/12/2020', + ), + SizedBox(width: 35.0), + AppText( + 'Appt Date : ', + fontWeight: FontWeight.w700, + ), + AppText( + '23/12/2020', + ), + ], + ), + Row( + children: [ + AppText( + 'Doctor : '.toUpperCase(), + fontWeight: FontWeight.w700, + ), + AppText( + 'Muhammad assad'.toUpperCase(), + fontWeight: FontWeight.w700, + ), + ], + ), + Row( + children: [ + AppText( + 'Clinic : ', + fontWeight: FontWeight.w700, + ), + AppText( + 'Gastroenterology', + ), + ], + ), + Row( + children: [ + AppText( + 'Episode Number : ', + fontWeight: FontWeight.w700, + ), + AppText( + '200012334', + ), + ], + ), + SizedBox(height: 15.0), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey.shade400, + ), + SizedBox(height: 25.0), + HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Texts( + 'History of present illness' + .toUpperCase(), + variant: + isHistoryExpand ? "bodyText" : '', + bold: isHistoryExpand ? true : false, + color: Colors.black), + ], + ), + InkWell( + onTap: () { + setState(() { + isHistoryExpand = !isHistoryExpand; + }); + }, + child: Icon(isHistoryExpand + ? EvaIcons.minus + : EvaIcons.plus)) + ], + ), + bodyWidget: Column( + children: [ + Texts( + 'Ms J. K. is an 83 year old retired nurse with a long history of hypertension that was previously well controlled on diuretic therapy. She was first admitted to CPMC in 1995 when she presented with a complaint of intermittent midsternal chest pain.') + ], + ), + isExpand: isHistoryExpand, + ), + SizedBox( + height: 30, + ), + Container( + width: double.infinity, + height: 1, + color: Color(0xffCCCCCC), + ), + SizedBox( + height: 30, + ), + HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Texts('assessment'.toUpperCase(), + variant: + isAssessmentExpand ? "bodyText" : '', + bold: isAssessmentExpand ? true : false, + color: Colors.black), + ], + ), + InkWell( + onTap: () { + setState(() { + isAssessmentExpand = !isAssessmentExpand; + }); + }, + child: Icon(isAssessmentExpand + ? EvaIcons.minus + : EvaIcons.plus)) + ], + ), + bodyWidget: Column( + children: [ + Texts('ssss'), + ], + ), + isExpand: isAssessmentExpand, + ), + SizedBox( + height: 30, + ), + Container( + width: double.infinity, + height: 1, + color: Color(0xffCCCCCC), + ), + SizedBox( + height: 30, + ), + HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Texts('Test / procedures'.toUpperCase(), + variant: + isProcedureExpand ? "bodyText" : '', + bold: isProcedureExpand ? true : false, + color: Colors.black), + ], + ), + InkWell( + onTap: () { + setState(() { + isProcedureExpand = !isProcedureExpand; + }); + }, + child: Icon(isProcedureExpand + ? EvaIcons.minus + : EvaIcons.plus)) + ], + ), + bodyWidget: Column( + children: [ + SizedBox( + height: 20.0, + ), + Row( + children: [ + AppText( + 'Exam Type : ', + fontWeight: FontWeight.w700, + ), + AppText( + '59', + ), + ], + ), + Row( + children: [ + AppText( + 'ABDOMEN', + fontWeight: FontWeight.w700, + ), + ], + ), + Row( + children: [ + AppText( + 'Abnormal: ', + fontWeight: FontWeight.w700, + ), + AppText( + 'no', + ), + ], + ), + SizedBox(height: 15.0), + Row( + children: [ + AppText( + 'Some short remark about the allergy', + fontWeight: FontWeight.w300, + ), + ], + ), + ], + ), + isExpand: isProcedureExpand, + ), + SizedBox( + height: 30, + ), + Container( + width: double.infinity, + height: 1, + color: Color(0xffCCCCCC), + ), + SizedBox( + height: 30, + ), + HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Texts('physical exam'.toUpperCase(), + variant: isPhysicalExam ? "bodyText" : '', + bold: isPhysicalExam ? true : false, + color: Colors.black), + ], + ), + InkWell( + onTap: () { + setState(() { + isPhysicalExam = !isPhysicalExam; + }); + }, + child: Icon(isPhysicalExam + ? EvaIcons.minus + : EvaIcons.plus)) + ], + ), + bodyWidget: Column( + children: [ + SizedBox( + height: 20.0, + ), + Row( + children: [ + AppText( + 'Exam Type : ', + fontWeight: FontWeight.w700, + ), + AppText( + '59', + ), + ], + ), + Row( + children: [ + AppText( + 'ABDOMEN', + fontWeight: FontWeight.w700, + ), + ], + ), + Row( + children: [ + AppText( + 'Abnormal: ', + fontWeight: FontWeight.w700, + ), + AppText( + 'no', + ), + ], + ), + SizedBox(height: 15.0), + Row( + children: [ + AppText( + 'Some short remark about the allergy', + fontWeight: FontWeight.w300, + ), + ], + ), + ], + ), + isExpand: isPhysicalExam, + ), + SizedBox( + height: 30, + ), + Container( + width: double.infinity, + height: 1, + color: Color(0xffCCCCCC), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/screens/medical-file/medical_file_page.dart b/lib/screens/medical-file/medical_file_page.dart new file mode 100644 index 00000000..44fee1be --- /dev/null +++ b/lib/screens/medical-file/medical_file_page.dart @@ -0,0 +1,173 @@ +import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart'; +import 'package:doctor_app_flutter/icons_app/doctor_app_icons.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/screens/medical-file/medical_file_details.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_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/network_base_view.dart'; +import 'package:flutter/material.dart'; + +class MedicalFilePage extends StatefulWidget { + @override + _MedicalFilePageState createState() => _MedicalFilePageState(); +} + +class _MedicalFilePageState extends State { + PatiantInformtion patient; + @override + Widget build(BuildContext context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + patient = routeArgs['patient']; + return BaseView( + onModelReady: (model) => model.getMedicalFile(), + builder: + (BuildContext context, MedicalFileViewModel model, Widget child) => + AppScaffold( + isShowAppBar: true, + appBarTitle: 'medical Report'.toUpperCase(), + body: NetworkBaseView( + baseViewModel: model, + child: Container( + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + AvatarWidget( + Icon( + patient.genderDescription == "Male" + ? DoctorApp.male + : DoctorApp.female_icon, + size: 70, + color: Colors.white, + ), + ), + SizedBox( + width: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patient.firstName + ' ' + patient.lastName, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + Row( + children: [ + AppText( + TranslationBase.of(context).fileNo, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + SizedBox( + width: 5.0, + ), + AppText( + patient.age.toString(), + color: Colors.black, + fontWeight: FontWeight.normal, + ), + ], + ), + AppText( + "ALLERGIC TO: FOOD, ASPIRIN", + color: Color(0xFFB9382C), + fontWeight: FontWeight.bold, + ), + ], + ) + ], + ), + ), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey, + ), + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + itemCount: 2, + itemBuilder: (BuildContext ctxt, int index) { + return Padding( + padding: EdgeInsets.symmetric( + horizontal: 12.0, vertical: 8.0), + child: InkWell( + child: Container( + child: Column( + children: [ + Row( + children: [ + AppText( + 'Branch : ', + fontWeight: FontWeight.w700, + ), + AppText( + model.medicalFileList[0].entityList[0] + .admissions[index].projectName, + ), + ], + ), + Row( + children: [ + AppText( + 'Doctor : '.toUpperCase(), + fontWeight: FontWeight.w700, + ), + AppText( + model.medicalFileList[0].entityList[0] + .admissions[index].doctor + .toUpperCase(), + fontWeight: FontWeight.w700, + ), + ], + ), + Row( + children: [ + AppText( + 'Clinic : ', + fontWeight: FontWeight.w700, + ), + AppText( + model.medicalFileList[0].entityList[0] + .admissions[index].clinic, + ), + ], + ), + SizedBox(height: 10.0), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey.shade400, + ) + ], + ), + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => MedicalFileDetails( + age: patient.age, + firstName: patient.firstName, + lastName: patient.lastName, + gender: patient.genderDescription, + )), + ); + }, + ), + ); + }) + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 2b1e5454..06a6a218 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -76,7 +76,7 @@ class _NewPrescriptionScreenState extends State { Row( children: [ AppText( - TranslationBase.of(context).fileNo, + TranslationBase.of(context).age2, color: Colors.black, fontWeight: FontWeight.bold, ), @@ -84,12 +84,17 @@ class _NewPrescriptionScreenState extends State { width: 5.0, ), AppText( - patient.patientId.toString(), + patient.age.toString(), color: Colors.black, fontWeight: FontWeight.normal, ), ], ), + AppText( + "ALLERGIC TO: FOOD, ASPIRIN", + color: Color(0xFFB9382C), + fontWeight: FontWeight.bold, + ), ], ) ], diff --git a/lib/screens/procedures/entity_list_checkbox_search_widget.dart b/lib/screens/procedures/entity_list_checkbox_search_widget.dart index b9962d27..78f584f6 100644 --- a/lib/screens/procedures/entity_list_checkbox_search_widget.dart +++ b/lib/screens/procedures/entity_list_checkbox_search_widget.dart @@ -20,19 +20,21 @@ class EntityListCheckboxSearchWidget extends StatefulWidget { EntityListCheckboxSearchWidget( {Key key, - this.model, - this.addSelectedHistories, - this.removeHistory, - this.masterList, - this.addHistory, - this.isEntityListSelected}) + this.model, + this.addSelectedHistories, + this.removeHistory, + this.masterList, + this.addHistory, + this.isEntityListSelected}) : super(key: key); @override - _EntityListCheckboxSearchWidgetState createState() => _EntityListCheckboxSearchWidgetState(); + _EntityListCheckboxSearchWidgetState createState() => + _EntityListCheckboxSearchWidgetState(); } -class _EntityListCheckboxSearchWidgetState extends State { +class _EntityListCheckboxSearchWidgetState + extends State { List items = List(); @override @@ -49,75 +51,70 @@ class _EntityListCheckboxSearchWidgetState extends State dummyListData = List(); dummySearchList.forEach((item) { - if (item.procedureName.toLowerCase().contains(query.toLowerCase()) ) { + if (item.procedureName.toLowerCase().contains(query.toLowerCase())) { dummyListData.add(item); } }); @@ -145,4 +142,4 @@ class _EntityListCheckboxSearchWidgetState extends State { Row( children: [ AppText( - TranslationBase.of(context).fileNo, + TranslationBase.of(context).age2, color: Colors.black, fontWeight: FontWeight.bold, ), @@ -86,12 +86,17 @@ class _ProcedureScreenState extends State { width: 5.0, ), AppText( - patient.patientId.toString(), + patient.age.toString(), color: Colors.black, fontWeight: FontWeight.normal, ), ], ), + AppText( + "ALLERGIC TO: FOOD, ASPIRIN", + color: Color(0xFFB9382C), + fontWeight: FontWeight.bold, + ), ], ) ], @@ -268,7 +273,8 @@ class _ProcedureScreenState extends State { fontWeight: FontWeight .w700, - fontSize: 15.0, + fontSize: + 15.0, ), AppText( model @@ -278,7 +284,8 @@ class _ProcedureScreenState extends State { index] .procedureId .toString(), - fontSize: 13.0, + fontSize: + 13.0, ), SizedBox( width: 12.0, @@ -288,20 +295,23 @@ class _ProcedureScreenState extends State { fontWeight: FontWeight .w700, - fontSize: 15.0, + fontSize: + 15.0, ), AppText( 'Urgent', - fontSize: 13.0, - color: - Colors.red, + fontSize: + 13.0, + color: Colors + .red, ), ], ), Row( children: [ Container( - child: Expanded( + child: + Expanded( child: AppText( model @@ -349,7 +359,8 @@ class _ProcedureScreenState extends State { children: [ AppText( 'Some short remark about the procedure', - fontSize: 13.5, + fontSize: + 13.5, ), ], ), @@ -360,7 +371,8 @@ class _ProcedureScreenState extends State { Divider( height: 5.0, thickness: 1.0, - color: Colors.grey, + color: + Colors.grey, ) // SizedBox( // height: 40, @@ -372,7 +384,20 @@ class _ProcedureScreenState extends State { Container( child: Column( children: [ - Icon(Icons.edit) + InkWell( + child: Icon( + Icons.edit), + onTap: () { + updateProcedureForm( + context, + procedureName: model + .procedureList[ + 0] + .entityList[ + index] + .procedureName); + }, + ) ], ), ) @@ -423,6 +448,37 @@ postProcedure({ProcedureViewModel model}) async { } } +updateProcedure({ProcedureViewModel model, String remarks}) async { + PostProcedureReqModel updateProcedureReqModel = new PostProcedureReqModel(); + List controls = List(); + List controlsProcedure = List(); + + updateProcedureReqModel.appointmentNo = 2016054575; + + updateProcedureReqModel.episodeID = 200012166; + updateProcedureReqModel.patientMRN = 3120725; + updateProcedureReqModel.vidaAuthTokenID = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNDg1IiwianRpIjoiZjQ4YTk0OTQtYTczZS00MDI3LWI2MjgtNzc4MjAwMzUyYWEzIiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMTQ4NSIsIk5hbWUiOiJTSEFLRVJBIFBBUlZFRU4gKFVTRUQgQlkgRVNFUlZJQ0VTKSIsIkVtcGxveWVlSWQiOiIxNDg1IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiIxNDg1IiwiU0VTU0lPTklEIjoiMjE1ODUyMTAiLCJDbGluaWNJZCI6IjMiLCJyb2xlIjoiRE9DVE9SUyIsIm5iZiI6MTYwODM2NDU2OCwiZXhwIjoxNjA5MjI4NTY4LCJpYXQiOjE2MDgzNjQ1Njh9.YLbvq5nxPn8o9ZYkcbc5YAX7Jy23Mm0s33oRmE8GHDI'; + + controls.add( + Controls( + code: remarks.isEmpty ? '' : remarks, + controlValue: 'Testing', + ), + ); + controlsProcedure.add( + Procedures(category: "02", procedure: "02011002", controls: controls)); + updateProcedureReqModel.procedures = controlsProcedure; + + await model.updateProcedure(updateProcedureReqModel); + + if (model.state == ViewState.ErrorLocal) { + helpers.showErrorToast(model.error); + } else if (model.state == ViewState.Idle) { + DrAppToastMsg.showSuccesToast('procedure has been updated'); + } +} + void addSelectedProcedure(context, ProcedureViewModel model) { showModalBottomSheet( context: context, @@ -444,14 +500,14 @@ class AddSelectedProcedure extends StatefulWidget { class _AddSelectedProcedureState extends State { TextEditingController procedureController = TextEditingController(); - List entityList= List(); + List entityList = List(); @override Widget build(BuildContext context) { return NetworkBaseView( baseViewModel: widget.model, child: SingleChildScrollView( child: Container( - //height: 490, + height: 790, child: Padding( padding: EdgeInsets.all(12.0), child: Column( @@ -462,28 +518,28 @@ class _AddSelectedProcedureState extends State { fontWeight: FontWeight.w900, ), if (widget.model.categoriesList.length != 0) - EntityListCheckboxSearchWidget( - model: widget.model, - masterList: widget.model.categoriesList[0].entityList, - removeHistory: (item){ - setState(() { - entityList.remove(item); - }); - }, - addHistory: (history){ - setState(() { - entityList.add(history); - }); - }, - addSelectedHistories: (){ - //TODO build your fun herr - // widget.addSelectedHistories(); - }, - isEntityListSelected: (master) => isEntityListSelected(master), - ), - + EntityListCheckboxSearchWidget( + model: widget.model, + masterList: widget.model.categoriesList[0].entityList, + removeHistory: (item) { + setState(() { + entityList.remove(item); + }); + }, + addHistory: (history) { + setState(() { + entityList.add(history); + }); + }, + addSelectedHistories: () { + //TODO build your fun herr + // widget.addSelectedHistories(); + }, + isEntityListSelected: (master) => + isEntityListSelected(master), + ), SizedBox( - height: 0.0, + height: 15.0, ), Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -493,14 +549,19 @@ class _AddSelectedProcedureState extends State { borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), - child: AppTextFormField( - labelText: 'Add Delected Procedures'.toUpperCase(), - borderColor: Colors.white, - textInputType: TextInputType.text, - inputFormatter: ONLY_LETTERS, + child: TextFields( + hintText: 'Order Type'.toUpperCase(), controller: procedureController, ), ), + SizedBox( + height: 15.0, + ), + TextFields( + hintText: 'Remarks', + minLines: 3, + maxLines: 5, + ), SizedBox( height: 80.0, ), @@ -510,7 +571,7 @@ class _AddSelectedProcedureState extends State { alignment: WrapAlignment.center, children: [ AppButton( - title: TranslationBase.of(context).addMedication, + title: 'add Selected Procedures'.toUpperCase(), onPressed: () { Navigator.pop(context); postProcedure(model: widget.model); @@ -528,9 +589,10 @@ class _AddSelectedProcedureState extends State { ), ); } + bool isEntityListSelected(EntityList masterKey) { - Iterable history = - entityList.where((element) => masterKey.procedureId == element.procedureId); + Iterable history = entityList + .where((element) => masterKey.procedureId == element.procedureId); if (history.length > 0) { return true; } @@ -538,15 +600,16 @@ class _AddSelectedProcedureState extends State { } } - - -void updateProcedureForm(context) { +void updateProcedureForm(context, {String procedureName}) { + ProcedureViewModel procedureViewModel = ProcedureViewModel(); + TextEditingController remarksController = TextEditingController(); + TextEditingController orderController = TextEditingController(); showModalBottomSheet( context: context, isScrollControlled: true, builder: (BuildContext bc) { return Container( - height: 500, + height: 400, child: Form( child: Padding( padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), @@ -554,8 +617,8 @@ void updateProcedureForm(context) { crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText( - 'Procedure Name'.toUpperCase(), - fontWeight: FontWeight.w900, + procedureName.toUpperCase(), + fontWeight: FontWeight.w700, ), SizedBox( height: 30.0, @@ -565,11 +628,9 @@ void updateProcedureForm(context) { borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), - child: AppTextFormField( - labelText: 'Order ', - borderColor: Colors.white, - textInputType: TextInputType.number, - inputFormatter: ONLY_NUMBERS, + child: TextFields( + hintText: 'Order ', + controller: orderController, ), ), SizedBox( @@ -580,16 +641,15 @@ void updateProcedureForm(context) { borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), - child: AppTextFormField( - labelText: 'Password', - borderColor: Colors.white, - textInputType: TextInputType.text, - inputFormatter: ONLY_LETTERS, - obscureText: true, + child: TextFields( + hintText: 'Remarks', + controller: remarksController, + maxLines: 5, + minLines: 3, ), ), SizedBox( - height: 190.0, + height: 100.0, ), Container( margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), @@ -597,9 +657,12 @@ void updateProcedureForm(context) { alignment: WrapAlignment.center, children: [ AppButton( - title: 'CONTINUE', + title: 'Update procedure'.toUpperCase(), onPressed: () { Navigator.pop(context); + updateProcedure( + model: procedureViewModel, + remarks: remarksController.text); // authorizationForm(context); }, ), diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 96d7fa35..468a1b9d 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -18,7 +18,6 @@ import 'PatientProfileButton.dart'; *@desc: Profile Medical Info Widget */ class ProfileMedicalInfoWidget extends StatelessWidget { - ProfileMedicalInfoWidget({Key key, this.patient}) : super(key: key); PatiantInformtion patient; @override @@ -57,17 +56,17 @@ class ProfileMedicalInfoWidget extends StatelessWidget { nameLine1: TranslationBase.of(context).lab, nameLine2: TranslationBase.of(context).result, icon: 'lab.png'), + // PatientProfileButton( + // key: key, + // patient: patient, + // route: PRESCRIPTIONS, + // nameLine1: TranslationBase.of(context).medicines, + // nameLine2: TranslationBase.of(context).prescription, + // icon: 'note.png'), PatientProfileButton( key: key, patient: patient, - route: PRESCRIPTIONS, - nameLine1: TranslationBase.of(context).medicines, - nameLine2: TranslationBase.of(context).prescription, - icon: 'note.png'), - PatientProfileButton( - key: key, - patient: patient, - route: RADIOLOGY, + route: MEDICAL_FILE, nameLine1: TranslationBase.of(context).previewHealth, nameLine2: TranslationBase.of(context).summaryReport, icon: 'radiology-1.png'),