diff --git a/lib/config/config.dart b/lib/config/config.dart index a7ffc7c0..1ce6750d 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -251,6 +251,7 @@ const SEND_PRESCRIPTION_EMAIL = const GET_PRESCRIPTION_REPORT_ENH = 'Services/Patients.svc/REST/GetPrescriptionReport_enh'; const GET_PHARMACY_LIST = "Services/Patients.svc/REST/GetPharmcyList"; +const UPDATE_PROGRESS_NOTE_FOR_INPATIENT = "Services/DoctorApplication.svc/REST/UpdateProgressNoteForInPatient"; var selectedPatientType = 1; diff --git a/lib/core/model/note/note_model.dart b/lib/core/model/note/note_model.dart new file mode 100644 index 00000000..797f9b6d --- /dev/null +++ b/lib/core/model/note/note_model.dart @@ -0,0 +1,92 @@ +class NoteModel { + String setupID; + int projectID; + int patientID; + int patientType; + String admissionNo; + int lineItemNo; + int visitType; + String notes; + String assessmentDate; + String visitTime; + int status; + String nursingRemarks; + String createdOn; + String editedOn; + int createdBy; + int admissionClinicID; + String admissionClinicName; + Null doctorClinicName; + String doctorName; + String visitTypeDesc; + + NoteModel( + {this.setupID, + this.projectID, + this.patientID, + this.patientType, + this.admissionNo, + this.lineItemNo, + this.visitType, + this.notes, + this.assessmentDate, + this.visitTime, + this.status, + this.nursingRemarks, + this.createdOn, + this.editedOn, + this.createdBy, + this.admissionClinicID, + this.admissionClinicName, + this.doctorClinicName, + this.doctorName, + this.visitTypeDesc}); + + NoteModel.fromJson(Map json) { + setupID = json['SetupID']; + projectID = json['ProjectID']; + patientID = json['PatientID']; + patientType = json['PatientType']; + admissionNo = json['AdmissionNo']; + lineItemNo = json['LineItemNo']; + visitType = json['VisitType']; + notes = json['Notes']; + assessmentDate = json['AssessmentDate']; + visitTime = json['VisitTime']; + status = json['Status']; + nursingRemarks = json['NursingRemarks']; + createdOn = json['CreatedOn']; + editedOn = json['EditedOn']; + createdBy = json['CreatedBy']; + admissionClinicID = json['AdmissionClinicID']; + admissionClinicName = json['AdmissionClinicName']; + doctorClinicName = json['DoctorClinicName']; + doctorName = json['DoctorName']; + visitTypeDesc = json['VisitTypeDesc']; + } + + Map toJson() { + final Map data = new Map(); + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['PatientID'] = this.patientID; + data['PatientType'] = this.patientType; + data['AdmissionNo'] = this.admissionNo; + data['LineItemNo'] = this.lineItemNo; + data['VisitType'] = this.visitType; + data['Notes'] = this.notes; + data['AssessmentDate'] = this.assessmentDate; + data['VisitTime'] = this.visitTime; + data['Status'] = this.status; + data['NursingRemarks'] = this.nursingRemarks; + data['CreatedOn'] = this.createdOn; + data['EditedOn'] = this.editedOn; + data['CreatedBy'] = this.createdBy; + data['AdmissionClinicID'] = this.admissionClinicID; + data['AdmissionClinicName'] = this.admissionClinicName; + data['DoctorClinicName'] = this.doctorClinicName; + data['DoctorName'] = this.doctorName; + data['VisitTypeDesc'] = this.visitTypeDesc; + return data; + } +} diff --git a/lib/core/model/note/update_note_model.dart b/lib/core/model/note/update_note_model.dart new file mode 100644 index 00000000..20fd4b86 --- /dev/null +++ b/lib/core/model/note/update_note_model.dart @@ -0,0 +1,80 @@ +class UpdateNoteReqModel { + int projectID; + int createdBy; + int admissionNo; + int lineItemNo; + String notes; + bool verifiedNote; + bool cancelledNote; + int languageID; + String stamp; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + int patientTypeID; + + UpdateNoteReqModel( + {this.projectID, + this.createdBy, + this.admissionNo, + this.lineItemNo, + this.notes, + this.verifiedNote, + this.cancelledNote, + this.languageID, + this.stamp, + this.iPAdress, + this.versionID, + this.channel, + this.tokenID, + this.sessionID, + this.isLoginForDoctorApp, + this.patientOutSA, + this.patientTypeID}); + + UpdateNoteReqModel.fromJson(Map json) { + projectID = json['ProjectID']; + createdBy = json['CreatedBy']; + admissionNo = json['AdmissionNo']; + lineItemNo = json['LineItemNo']; + notes = json['Notes']; + verifiedNote = json['VerifiedNote']; + cancelledNote = json['CancelledNote']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + patientTypeID = json['PatientTypeID']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['CreatedBy'] = this.createdBy; + data['AdmissionNo'] = this.admissionNo; + data['LineItemNo'] = this.lineItemNo; + data['Notes'] = this.notes; + data['VerifiedNote'] = this.verifiedNote; + data['CancelledNote'] = this.cancelledNote; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['PatientTypeID'] = this.patientTypeID; + return data; + } +} diff --git a/lib/core/service/patient_service.dart b/lib/core/service/patient_service.dart index 4f135eaa..29a1d445 100644 --- a/lib/core/service/patient_service.dart +++ b/lib/core/service/patient_service.dart @@ -1,6 +1,8 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/core/model/note/note_model.dart'; +import 'package:doctor_app_flutter/core/model/note/update_note_model.dart'; import 'package:doctor_app_flutter/core/service/base/base_service.dart'; import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/doctor/request_schedule.dart'; @@ -51,9 +53,9 @@ class PatientService extends BaseService { List get labResultList => _labResultList; // TODO: replace var with model - var _patientProgressNoteList = []; + List _patientProgressNoteList = []; - get patientProgressNoteList => _patientProgressNoteList; + List get patientProgressNoteList => _patientProgressNoteList; // TODO: replace var with model var _insuranceApporvalsList = []; @@ -277,7 +279,10 @@ class PatientService extends BaseService { PATIENT_PROGRESS_NOTE_URL, onSuccess: (dynamic response, int statusCode) { _patientProgressNoteList = []; - _patientProgressNoteList = response['List_GetPregressNoteForInPatient']; + // _patientProgressNoteList = + response['List_GetPregressNoteForInPatient'].forEach((v) { + _patientProgressNoteList.add(new NoteModel.fromJson(v)); + }); }, onFailure: (String error, int statusCode) { hasError = true; @@ -287,6 +292,23 @@ class PatientService extends BaseService { ); } + + Future updatePatientProgressNote(UpdateNoteReqModel req) async { + hasError = false; + + await baseAppClient.post( + PATIENT_PROGRESS_NOTE_URL, + onSuccess: (dynamic response, int statusCode) { + print("ok"); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: req.toJson(), + ); + } + Future getClinicsList() async { hasError = false; diff --git a/lib/core/viewModel/patient_view_model.dart b/lib/core/viewModel/patient_view_model.dart index 00b64204..785a978c 100644 --- a/lib/core/viewModel/patient_view_model.dart +++ b/lib/core/viewModel/patient_view_model.dart @@ -1,4 +1,6 @@ import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/note/note_model.dart'; +import 'package:doctor_app_flutter/core/model/note/update_note_model.dart'; import 'package:doctor_app_flutter/core/service/patient_service.dart'; import 'package:doctor_app_flutter/models/patient/lab_orders/lab_orders_res_model.dart'; import 'package:doctor_app_flutter/models/patient/lab_result/lab_result.dart'; @@ -39,7 +41,7 @@ class PatientViewModel extends BaseViewModel { get insuranceApporvalsList => _patientService.insuranceApporvalsList; - get patientProgressNoteList => _patientService.patientProgressNoteList; + List get patientProgressNoteList => _patientService.patientProgressNoteList; List get clinicsList => _patientService.clinicsList; @@ -146,6 +148,16 @@ class PatientViewModel extends BaseViewModel { setState(ViewState.Idle); } + Future updatePatientProgressNote(UpdateNoteReqModel req) async { + setState(ViewState.BusyLocal); + await _patientService.getPatientProgressNote(req); + if (_patientService.hasError) { + error = _patientService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + Future getClinicsList() async { setState(ViewState.Busy); await _patientService.getClinicsList(); diff --git a/lib/screens/patients/profile/note/progress_note_screen.dart b/lib/screens/patients/profile/note/progress_note_screen.dart index 37374009..129d2ca6 100644 --- a/lib/screens/patients/profile/note/progress_note_screen.dart +++ b/lib/screens/patients/profile/note/progress_note_screen.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/core/model/note/note_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/models/patient/progress_note_request.dart'; @@ -31,7 +32,7 @@ class ProgressNoteScreen extends StatefulWidget { } class _ProgressNoteState extends State { - var notesList; + List notesList; var filteredNotesList; final _controller = TextEditingController(); var _isInit = true; @@ -80,8 +81,10 @@ class _ProgressNoteState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => AddNoteOrder( - + builder: (context) => UpdateNoteOrder( + patientModel: model, + patient: patient, + visitType: widget.visitType, )), ); },label: 'Add a New Order',), @@ -128,7 +131,7 @@ class _ProgressNoteState extends State { ), Expanded( child: AppText( - notesList[index]["DoctorName"]??'',fontWeight: FontWeight.w600), + notesList[index].doctorName??'',fontWeight: FontWeight.w600), ), ], ), @@ -137,11 +140,11 @@ class _ProgressNoteState extends State { children: [ AppText( notesList[index] - ["CreatedOn"] != + .createdOn != null ? DateUtils .getDayMonthYearDateFormatted( - DateUtils.getDateTimeFromServerFormat(notesList[index]["CreatedOn"] )) + DateUtils.getDateTimeFromServerFormat(notesList[index].createdOn)) : DateUtils .getDayMonthYearDateFormatted( DateTime.now()), @@ -150,11 +153,11 @@ class _ProgressNoteState extends State { ), AppText( notesList[index] - ["CreatedOn"] != + .createdOn != null ? DateUtils .getHour( - DateUtils.getDateTimeFromServerFormat(notesList[index]["CreatedOn"] )) + DateUtils.getDateTimeFromServerFormat(notesList[index].createdOn )) : DateUtils .getHour( DateTime.now()), @@ -174,12 +177,24 @@ class _ProgressNoteState extends State { children: [ Expanded( child: AppText( - notesList[index]["Notes"], + notesList[index].notes, fontSize: 10, ), ), InkWell( - onTap: () {}, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => UpdateNoteOrder( + note: notesList[index], + patientModel: model, + patient: patient, + visitType: widget.visitType, + + )), + ); + }, child: Icon( DoctorApp.edit, size: 18, @@ -195,57 +210,6 @@ class _ProgressNoteState extends State { ), ], ); - - // RoundedContainer( - // backgroundColor: Colors.white, - // child: Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // ExpansionTile( - // title: Container( - // child: Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // AppText( - // notesList[index] - // ["DoctorName"], - // marginTop: 10, - // marginLeft: 10, - // marginBottom: 5, - // fontWeight: FontWeight.bold, - // ), - // AppText( - // convertDateFormat( - // notesList[index] - // ["AssessmentDate"]), - // marginLeft: 10, - // color: Colors.grey[600], - // ), - // ], - // ), - // ), - // children: [ - // Divider( - // color: Colors.black, - // height: 20, - // thickness: 1, - // indent: 0, - // endIndent: 0, - // ), - // Row(mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // AppText( - // notesList[index]["Notes"], - // margin: 5, - // ), - // ], - // ) - // ], - // ), - // ], - // )); }), ), ), @@ -273,24 +237,24 @@ class _ProgressNoteState extends State { )); } - searchData(String str, PatientViewModel model) { - var strExist = str.length > 0 ? true : false; - - if (strExist) { - filteredNotesList = null; - filteredNotesList = model.patientProgressNoteList - .where((note) => - note["DoctorName"].toString().contains(str.toUpperCase())) - .toList(); - setState(() { - notesList = filteredNotesList; - }); - } else { - setState(() { - notesList = model.patientProgressNoteList; - }); - } - } + // searchData(String str, PatientViewModel model) { + // var strExist = str.length > 0 ? true : false; + // + // if (strExist) { + // filteredNotesList = null; + // filteredNotesList = model.patientProgressNoteList + // .where((note) => + // note["DoctorName"].toString().contains(str.toUpperCase())) + // .toList(); + // setState(() { + // notesList = filteredNotesList; + // }); + // } else { + // setState(() { + // notesList = model.patientProgressNoteList; + // }); + // } + // } convertDateFormat(String str) { const start = "/Date("; diff --git a/lib/screens/patients/profile/note/update_note.dart b/lib/screens/patients/profile/note/update_note.dart index 34f5433e..1e242c7b 100644 --- a/lib/screens/patients/profile/note/update_note.dart +++ b/lib/screens/patients/profile/note/update_note.dart @@ -1,34 +1,44 @@ 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/medical_file_model.dart'; +import 'package:doctor_app_flutter/core/model/note/note_model.dart'; +import 'package:doctor_app_flutter/core/model/note/update_note_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/models/patient/progress_note_request.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/screens/procedures/entity_list_checkbox_search_widget.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:flutter/material.dart'; -class AddNoteOrder extends StatefulWidget { - // final ProcedureViewModel model; - // final PatiantInformtion patient; - // - // const AddNoteOrder({Key key, this.model, this.patient}) - // : super(key: key); +class UpdateNoteOrder extends StatefulWidget { + final NoteModel note; + final PatientViewModel patientModel; + final PatiantInformtion patient; + final int visitType; + + const UpdateNoteOrder( + {Key key, this.note, this.patientModel, this.patient, this.visitType}) + : super(key: key); + @override - _AddNoteOrderState createState() => - _AddNoteOrderState(); + _UpdateNoteOrderState createState() => + _UpdateNoteOrderState(); } -class _AddNoteOrderState extends State { +class _UpdateNoteOrderState extends State { int selectedType; - ProcedureViewModel model; - PatiantInformtion patient; + TextEditingController progressNoteController = TextEditingController(); @@ -40,16 +50,22 @@ class _AddNoteOrderState extends State { @override Widget build(BuildContext context) { - return BaseView( - // onModelReady: (model) => model.getProcedureCategory( - // categoryName: "Radiology", categoryID: "03"), - builder: (BuildContext context, ProcedureViewModel model, Widget child) => + if (widget.note != null) { + progressNoteController.text = widget.note.notes; + } + return BaseView( + builder: (BuildContext context, PatientViewModel model, Widget child) => AppScaffold( isShowAppBar: false, - backgroundColor: Theme.of(context).scaffoldBackgroundColor, + backgroundColor: Theme + .of(context) + .scaffoldBackgroundColor, body: SingleChildScrollView( child: Container( - height: MediaQuery.of(context).size.height * 1.0, + height: MediaQuery + .of(context) + .size + .height * 1.0, child: Padding( padding: EdgeInsets.all(0.0), child: Column( @@ -92,9 +108,34 @@ class _AddNoteOrderState extends State { AppButton( title: 'Add Progress Note', color: Color(0xff359846), + disabled: progressNoteController.text.isEmpty, fontWeight: FontWeight.w700, - onPressed: () { + onPressed: () async { + UpdateNoteReqModel reqModel = UpdateNoteReqModel( + admissionNo: int.parse(widget.patient.admissionNo), + cancelledNote: false, + lineItemNo: 30, + notes + :progressNoteController.text, verifiedNote: false); + + GifLoaderDialogUtils.showMyDialog(context); + await model.updatePatientProgressNote(reqModel); + if (model.state == ViewState.ErrorLocal) { + Helpers.showErrorToast("Error"); + } else { + ProgressNoteRequest progressNoteRequest = ProgressNoteRequest( + visitType: widget.visitType, + // if equal 5 then this will return progress note + admissionNo: int.parse(widget.patient.admissionNo), + projectID: widget.patient.projectId, + patientTypeID: widget.patient.patientType, + languageID: 2); + await widget.patientModel.getPatientProgressNote( + progressNoteRequest); + } + GifLoaderDialogUtils.hideDialog(context); + Navigator.of(context).pop(); }, ), ],