diff --git a/lib/core/service/SOAP_service.dart b/lib/core/service/SOAP_service.dart index 09530d50..426e0811 100644 --- a/lib/core/service/SOAP_service.dart +++ b/lib/core/service/SOAP_service.dart @@ -3,6 +3,8 @@ import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintR import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.dart'; import 'package:doctor_app_flutter/models/SOAP/GetAllergiesResModel.dart'; +import 'package:doctor_app_flutter/models/SOAP/GetAssessmentReqModel.dart'; +import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetGetProgressNoteReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetGetProgressNoteResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart'; @@ -27,6 +29,7 @@ class SOAPService extends LookupService { List patientHistoryList = []; List patientPhysicalExamList = []; List patientProgressNoteList = []; + List patientAssessmentList = []; Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async { await baseAppClient.post( @@ -266,6 +269,7 @@ class SOAPService extends LookupService { response['ProgressNoteList']['entityList'].forEach((v) { patientProgressNoteList.add(GetGetProgressNoteResModel.fromJson(v)); }); + }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; @@ -273,14 +277,18 @@ class SOAPService extends LookupService { } Future getPatientAssessment( - PostAssessmentRequestModel getPatientAssessmentRequestModel) async { + GetAssessmentReqModel getAssessmentReqModel) async { hasError = false; await baseAppClient.post (GET_ASSESSMENT, onSuccess: (dynamic response, int statusCode) { print("Success"); + patientAssessmentList.clear(); + response['AssessmentList']['entityList'].forEach((v) { + patientAssessmentList.add(GetAssessmentResModel.fromJson(v)); + }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: getPatientAssessmentRequestModel.toJson()); + }, body: getAssessmentReqModel.toJson()); } } diff --git a/lib/core/viewModel/SOAP_view_model.dart b/lib/core/viewModel/SOAP_view_model.dart index 8d03a04e..697e9934 100644 --- a/lib/core/viewModel/SOAP_view_model.dart +++ b/lib/core/viewModel/SOAP_view_model.dart @@ -5,6 +5,8 @@ import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintR import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.dart'; import 'package:doctor_app_flutter/models/SOAP/GetAllergiesResModel.dart'; +import 'package:doctor_app_flutter/models/SOAP/GetAssessmentReqModel.dart'; +import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetGetProgressNoteReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetGetProgressNoteResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart'; @@ -64,14 +66,19 @@ class SOAPViewModel extends BaseViewModel { List get patientAllergiesList => _SOAPService.patientAllergiesList; + List get patientHistoryList => _SOAPService.patientHistoryList; - List get patientPhysicalExamList => + + List get patientPhysicalExamList => _SOAPService.patientPhysicalExamList; - List get patientProgressNoteList => + List get patientProgressNoteList => _SOAPService.patientProgressNoteList; + List get patientAssessmentList => + _SOAPService.patientAssessmentList; + Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async { setState(ViewState.Busy); await _SOAPService.getAllergies(getAllergiesRequestModel); @@ -266,9 +273,9 @@ class SOAPViewModel extends BaseViewModel { } Future getPatientAssessment( - PostAssessmentRequestModel getPatientAssessmentRequestModel) async { + GetAssessmentReqModel getAssessmentReqModel) async { setState(ViewState.Busy); - await _SOAPService.getPatientAssessment(getPatientAssessmentRequestModel); + await _SOAPService.getPatientAssessment(getAssessmentReqModel); if (_SOAPService.hasError) { error = _SOAPService.error; setState(ViewState.Busy); @@ -276,14 +283,12 @@ class SOAPViewModel extends BaseViewModel { setState(ViewState.Idle); } - // ignore: missing_return MasterKeyModel getOneMasterKey( - {@required MasterKeysService masterKeys, int id, int typeId}) { + {@required MasterKeysService masterKeys, dynamic id, int typeId}) { switch (masterKeys) { case MasterKeysService.Allergies: List result = allergiesList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -294,7 +299,6 @@ class SOAPViewModel extends BaseViewModel { case MasterKeysService.HistoryFamily: List result = historyFamilyList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -304,7 +308,6 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.HistoryMedical: List result = historyMedicalList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -314,7 +317,6 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.HistorySocial: List result = historySocialList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -324,7 +326,6 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.HistorySports: List result = historySocialList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -334,17 +335,13 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.HistorySurgical: List result = historySurgicalList.where((element) { - print(element.id == id); - return element.id == id && - element.typeId == masterKeys.getMasterKeyService(); - }).toList(); + return element.id == id;}).toList(); if (result.isNotEmpty) { return result.first; } break; case MasterKeysService.PhysicalExamination: List result = physicalExaminationList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -354,7 +351,6 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.AllergySeverity: List result = allergySeverityList.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -371,7 +367,6 @@ class SOAPViewModel extends BaseViewModel { case MasterKeysService.DiagnosisType: List result = listOfDiagnosisType.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -381,7 +376,6 @@ class SOAPViewModel extends BaseViewModel { break; case MasterKeysService.DiagnosisCondition: List result = listOfDiagnosisCondition.where((element) { - print(element.id == id); return element.id == id && element.typeId == masterKeys.getMasterKeyService(); }).toList(); @@ -390,11 +384,8 @@ class SOAPViewModel extends BaseViewModel { } break; case MasterKeysService.ICD10: - listOfICD10.clear(); List result = listOfICD10.where((element) { - print(element.id == id); - return element.id == id && - element.typeId == masterKeys.getMasterKeyService(); + return element.code == id ; }).toList(); if (result.isNotEmpty) { return result.first; diff --git a/lib/models/SOAP/GetAssessmentReqModel.dart b/lib/models/SOAP/GetAssessmentReqModel.dart new file mode 100644 index 00000000..1085bf8c --- /dev/null +++ b/lib/models/SOAP/GetAssessmentReqModel.dart @@ -0,0 +1,40 @@ +class GetAssessmentReqModel { + int patientMRN; + int appointmentNo; + String episodeID; + String from; + String to; + int clinicID; + int doctorID; + + GetAssessmentReqModel( + {this.patientMRN, + this.appointmentNo, + this.episodeID, + this.from, + this.to, + this.clinicID, + this.doctorID}); + + GetAssessmentReqModel.fromJson(Map json) { + patientMRN = json['PatientMRN']; + appointmentNo = json['AppointmentNo']; + episodeID = json['EpisodeID']; + from = json['From']; + to = json['To']; + clinicID = json['ClinicID']; + doctorID = json['DoctorID']; + } + + Map toJson() { + final Map data = new Map(); + data['PatientMRN'] = this.patientMRN; + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + data['From'] = this.from; + data['To'] = this.to; + data['ClinicID'] = this.clinicID; + data['DoctorID'] = this.doctorID; + return data; + } +} diff --git a/lib/models/SOAP/GetAssessmentResModel.dart b/lib/models/SOAP/GetAssessmentResModel.dart new file mode 100644 index 00000000..4d1b1b68 --- /dev/null +++ b/lib/models/SOAP/GetAssessmentResModel.dart @@ -0,0 +1,72 @@ +class GetAssessmentResModel { + int appointmentNo; + String asciiDesc; + String clinicDescription; + int clinicID; + bool complexDiagnosis; + int conditionID; + int createdBy; + String createdOn; + int diagnosisTypeID; + int doctorID; + String doctorName; + int episodeId; + String icdCode10ID; + int patientMRN; + String remarks; + + GetAssessmentResModel( + {this.appointmentNo, + this.asciiDesc, + this.clinicDescription, + this.clinicID, + this.complexDiagnosis, + this.conditionID, + this.createdBy, + this.createdOn, + this.diagnosisTypeID, + this.doctorID, + this.doctorName, + this.episodeId, + this.icdCode10ID, + this.patientMRN, + this.remarks}); + + GetAssessmentResModel.fromJson(Map json) { + appointmentNo = json['appointmentNo']; + asciiDesc = json['ascii_Desc']; + clinicDescription = json['clinicDescription']; + clinicID = json['clinicID']; + complexDiagnosis = json['complexDiagnosis']; + conditionID = json['conditionID']; + createdBy = json['createdBy']; + createdOn = json['createdOn']; + diagnosisTypeID = json['diagnosisTypeID']; + doctorID = json['doctorID']; + doctorName = json['doctorName']; + episodeId = json['episodeId']; + icdCode10ID = json['icdCode10ID']; + patientMRN = json['patientMRN']; + remarks = json['remarks']; + } + + Map toJson() { + final Map data = new Map(); + data['appointmentNo'] = this.appointmentNo; + data['ascii_Desc'] = this.asciiDesc; + data['clinicDescription'] = this.clinicDescription; + data['clinicID'] = this.clinicID; + data['complexDiagnosis'] = this.complexDiagnosis; + data['conditionID'] = this.conditionID; + data['createdBy'] = this.createdBy; + data['createdOn'] = this.createdOn; + data['diagnosisTypeID'] = this.diagnosisTypeID; + data['doctorID'] = this.doctorID; + data['doctorName'] = this.doctorName; + data['episodeId'] = this.episodeId; + data['icdCode10ID'] = this.icdCode10ID; + data['patientMRN'] = this.patientMRN; + data['remarks'] = this.remarks; + return data; + } +} diff --git a/lib/models/SOAP/GetHistoryReqModel.dart b/lib/models/SOAP/GetHistoryReqModel.dart index 9b852e9b..1df26690 100644 --- a/lib/models/SOAP/GetHistoryReqModel.dart +++ b/lib/models/SOAP/GetHistoryReqModel.dart @@ -1,18 +1,45 @@ class GetHistoryReqModel { int patientMRN; int historyType; + String episodeID; + String from; + String to; + int clinicID; + int doctorID; + int appointmentNo; - GetHistoryReqModel({this.patientMRN, this.historyType}); + GetHistoryReqModel( + {this.patientMRN, + this.historyType, + this.episodeID, + this.from, + this.to, + this.clinicID, + this.doctorID, + this.appointmentNo}); GetHistoryReqModel.fromJson(Map json) { patientMRN = json['PatientMRN']; historyType = json['HistoryType']; + episodeID = json['EpisodeID']; + from = json['From']; + to = json['To']; + clinicID = json['ClinicID']; + doctorID = json['DoctorID']; + appointmentNo = json['AppointmentNo']; + } Map toJson() { final Map data = new Map(); data['PatientMRN'] = this.patientMRN; data['HistoryType'] = this.historyType; + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + data['From'] = this.from; + data['To'] = this.to; + data['ClinicID'] = this.clinicID; + data['DoctorID'] = this.doctorID; return data; } } diff --git a/lib/routes.dart b/lib/routes.dart index ea865e8d..728b5f06 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -139,7 +139,7 @@ var routes = { PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(), PATIENT_ADMISSION_REQUEST_2: (_) => AdmissionRequestSecondScreen(), PATIENT_ADMISSION_REQUEST_3: (_) => AdmissionRequestThirdScreen(), - CREATE_EPISODE: (_) => AddSOAPIndex(), + CREATE_EPISODE: (_) => UpdateSoapIndex(isUpdate: true,), UPDATE_EPISODE: (_) => UpdateSoapIndex( isUpdate: true, ), diff --git a/lib/util/helpers.dart b/lib/util/helpers.dart index a2692c74..9a398949 100644 --- a/lib/util/helpers.dart +++ b/lib/util/helpers.dart @@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:html/parser.dart'; import '../config/size_config.dart'; import '../util/dr_app_toast_msg.dart'; @@ -353,6 +354,13 @@ class Helpers { // Navigator.of(AppGlobal.CONTEX).popUntil((ModalRoute.withName(LOGIN))); } + String parseHtmlString(String htmlString) { + final document = parse(htmlString); + final String parsedString = parse(document.body.text).documentElement.text; + + return parsedString; + } + static InputDecoration textFieldSelectorDecoration( String hintText, String selectedText, bool isDropDown, {Icon suffixIcon, Color dropDownColor}) { diff --git a/lib/widgets/patients/profile/SOAP/add_SOAP_index.dart b/lib/widgets/patients/profile/SOAP/add_SOAP_index.dart index 5a698af9..9b4d092d 100644 --- a/lib/widgets/patients/profile/SOAP/add_SOAP_index.dart +++ b/lib/widgets/patients/profile/SOAP/add_SOAP_index.dart @@ -15,7 +15,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'steps_widget.dart'; +import '../soap_update/steps_widget.dart'; class AddSOAPIndex extends StatefulWidget { final bool isUpdate; diff --git a/lib/widgets/patients/profile/patient-page-header-widget.dart b/lib/widgets/patients/profile/patient-page-header-widget.dart index 1567487d..3e870be5 100644 --- a/lib/widgets/patients/profile/patient-page-header-widget.dart +++ b/lib/widgets/patients/profile/patient-page-header-widget.dart @@ -44,7 +44,7 @@ class PatientPageHeaderWidget extends StatelessWidget { height: 5, ), AppText( - patient.firstName + ' ' + patient.lastName, + patient.firstName + ' ' + patient.lastName, color: Colors.black, fontWeight: FontWeight.bold, ), diff --git a/lib/widgets/patients/profile/SOAP/steps_widget.dart b/lib/widgets/patients/profile/soap_update/steps_widget.dart similarity index 100% rename from lib/widgets/patients/profile/SOAP/steps_widget.dart rename to lib/widgets/patients/profile/soap_update/steps_widget.dart diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart index 1339c2f2..d9828795 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart @@ -24,6 +24,7 @@ import 'package:doctor_app_flutter/widgets/shared/expandable-widget-header-body. import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:html/parser.dart'; class UpdateSubjectivePage extends StatefulWidget { final Function changePageViewIndex; @@ -50,28 +51,14 @@ class _UpdateSubjectivePageState extends State { TextEditingController complaintsController = TextEditingController(); final formKey = GlobalKey(); getHistory(SOAPViewModel model) async{ - GetHistoryReqModel getHistoryMedicalReqModel = GetHistoryReqModel( - patientMRN: widget.patientInfo.patientMRN, - historyType: - MasterKeysService.HistoryMedical.getMasterKeyService()); - GetHistoryReqModel getHistorySportsReqModel = GetHistoryReqModel( - patientMRN: widget.patientInfo.patientMRN, - historyType: - MasterKeysService.HistorySports.getMasterKeyService()); - GetHistoryReqModel getHistorySurgicalReqModel = GetHistoryReqModel( - patientMRN: widget.patientInfo.patientMRN, - historyType: - MasterKeysService.HistorySurgical.getMasterKeyService()); - GetHistoryReqModel getHistoryFamilyReqModel = GetHistoryReqModel( - patientMRN: widget.patientInfo.patientMRN, - historyType: - MasterKeysService.HistoryFamily.getMasterKeyService()); - await model.getPatientHistories(getHistoryMedicalReqModel); - await model.getPatientHistories(getHistorySportsReqModel); - await model.getPatientHistories(getHistorySurgicalReqModel); - await model.getPatientHistories(getHistoryFamilyReqModel); + GetHistoryReqModel getHistoryReqModel = GetHistoryReqModel( + patientMRN: widget.patientInfo.patientMRN, + episodeID: widget.patientInfo.episodeNo.toString(), + appointmentNo: widget.patientInfo.appointmentNo + ); + await model.getPatientHistories(getHistoryReqModel); - if(model.patientHistoryList.isNotEmpty) { + if (model.patientHistoryList.isNotEmpty) { if (model.historyFamilyList.isEmpty) { await model.getMasterLookup(MasterKeysService.HistoryFamily); } @@ -112,7 +99,8 @@ class _UpdateSubjectivePageState extends State { } @override Widget build(BuildContext context) { - return BaseView( + + return BaseView( onModelReady: (model) async { GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP( patientMRN: widget.patientInfo.patientMRN, @@ -126,8 +114,8 @@ class _UpdateSubjectivePageState extends State { episodeID: widget.patientInfo.episodeNo); await model.getPatientChiefComplaint(getChiefComplaintReqModel); if (model.patientChiefComplaintList.isNotEmpty) { - complaintsController.text = - model.patientChiefComplaintList[0].chiefComplaint; + complaintsController.text = helpers.parseHtmlString(model.patientChiefComplaintList[0].chiefComplaint) + ; illnessController.text = model.patientChiefComplaintList[0].hopi; } await model.getPatientAllergy(generalGetReqForSOAP); @@ -390,41 +378,27 @@ class _UpdateSubjectivePageState extends State { await postChiefComplaint(model: model); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); - } else { - if (myHistoryList.length != 0) { - await postHistories(model: model, myHistoryList: myHistoryList); - if (model.state == ViewState.ErrorLocal) { - helpers.showErrorToast(model.error); - } else { - if (myAllergiesList.length != 0) { - await postAllergy(myAllergiesList: myAllergiesList, model: model); - if (model.state == ViewState.ErrorLocal) { - helpers.showErrorToast(model.error); - } else { - widget.changePageViewIndex(1); - } - } else { - widget.changePageViewIndex(1); - } - } - } else { - if (myAllergiesList.length != 0) { - await postAllergy(myAllergiesList: myAllergiesList, model: model); - if (model.state == ViewState.ErrorLocal) { - helpers.showErrorToast(model.error); - } else { - widget.changePageViewIndex(1); - } - } else { - widget.changePageViewIndex(1); - } + } + + if (myHistoryList.length != 0) { + await postHistories(model: model, myHistoryList: myHistoryList); + if (model.state == ViewState.ErrorLocal) { + helpers.showErrorToast(model.error); + } + } + if (myAllergiesList.length != 0) { + await postAllergy(myAllergiesList: myAllergiesList, model: model); + if (model.state == ViewState.ErrorLocal) { + helpers.showErrorToast(model.error); } } + + widget.changePageViewIndex(1); + } else { helpers.showErrorToast('Please add required field correctly'); } - widget.changePageViewIndex(1); } @@ -487,13 +461,12 @@ class _UpdateSubjectivePageState extends State { }); - if (model.patientAllergiesList.isEmpty) { + if (model.patientHistoryList.isEmpty) { await model.postHistories(postHistoriesRequestModel); } else { await model.patchHistories(postHistoriesRequestModel); } - await model.patchHistories(postHistoriesRequestModel); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index 61c7f20b..c25b0d5b 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/GetAssessmentReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_assement.dart'; import 'package:doctor_app_flutter/models/SOAP/post_assessment_request_model.dart'; @@ -36,19 +37,53 @@ class UpdateAssessmentPage extends StatefulWidget { class _UpdateAssessmentPageState extends State { bool isAssessmentExpand = false; - - List assessmentList; - dynamic _referTo; - - TextEditingController remarksController = TextEditingController(); - @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; return BaseView( + onModelReady: (model) async{ + + widget.mySelectedAssessment.appointmentId =widget.patientInfo.appointmentNo; + GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel( + patientMRN: widget.patientInfo.patientMRN, + episodeID: widget.patientInfo.episodeNo.toString(), + appointmentNo: widget.patientInfo.appointmentNo); + await model.getPatientAssessment(getAssessmentReqModel); + if(model.patientAssessmentList.isNotEmpty){ + if (model.listOfDiagnosisCondition.length == 0) { + await model.getMasterLookup(MasterKeysService.DiagnosisCondition); + } + if (model.listOfDiagnosisType.length == 0) { + await model.getMasterLookup(MasterKeysService.DiagnosisType); + } + if (model.listOfICD10.length == 0) { + await model.getMasterLookup(MasterKeysService.ICD10); + } + + MasterKeyModel selectedICD = model.getOneMasterKey( + masterKeys: MasterKeysService.ICD10, + id: model.patientAssessmentList[0].icdCode10ID, + ); + widget.mySelectedAssessment.selectedICD= selectedICD; + MasterKeyModel diagnosisCondition = model.getOneMasterKey( + masterKeys: MasterKeysService.DiagnosisCondition, + id: model.patientAssessmentList[0].conditionID, + ); + + widget.mySelectedAssessment.selectedDiagnosisCondition = diagnosisCondition; + MasterKeyModel diagnosisType = model.getOneMasterKey( + masterKeys: MasterKeysService.DiagnosisType, + id: model.patientAssessmentList[0].diagnosisTypeID, + ); + + widget.mySelectedAssessment.selectedDiagnosisType = diagnosisType; + widget.mySelectedAssessment.remark = model.patientAssessmentList[0].remarks; + } + }, builder: (_, model, w) => AppScaffold( isShowAppBar: false, + baseViewModel: model, body: SingleChildScrollView( physics: ScrollPhysics(), child: Center( @@ -58,66 +93,67 @@ class _UpdateAssessmentPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( - height: 30, - ), - HeaderBodyExpandableNotifier( - headerWidget: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( + height: 30, + ), + HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Texts('ASSESSMENT', - variant: + Row( + children: [ + Texts('ASSESSMENT', + variant: isAssessmentExpand ? "bodyText" : '', - bold: isAssessmentExpand ? true : false, - color: Colors.black), - Icon( - FontAwesomeIcons.asterisk, - color: AppGlobal.appPrimaryColor, - size: 12, - ) + bold: isAssessmentExpand ? true : false, + color: Colors.black), + Icon( + FontAwesomeIcons.asterisk, + color: AppGlobal.appPrimaryColor, + size: 12, + ) + ], + ), + InkWell( + onTap: () { + setState(() { + isAssessmentExpand = !isAssessmentExpand; + }); + }, + child: Icon(isAssessmentExpand + ? EvaIcons.minus + : EvaIcons.plus)) ], ), - InkWell( - onTap: () { - setState(() { - isAssessmentExpand = !isAssessmentExpand; - }); - }, - child: Icon(isAssessmentExpand - ? EvaIcons.minus - : EvaIcons.plus)) - ], - ), - bodyWidget: Column(children: [ - SizedBox( - height: 20, - ), - Column( - children: [ - Container( - margin: + bodyWidget: Column(children: [ + SizedBox( + height: 20, + ), + Column( + children: [ + Container( + margin: EdgeInsets.only(left: 5, right: 5, top: 15), - child: TextFields( - hintText: "Add ASSESSMENT", - fontSize: 13.5, - onTapTextFields: () { - openAssessmentDialog(context); - }, - readOnly: true, - // hintColor: Colors.black, - suffixIcon: EvaIcons.plusCircleOutline, - suffixIconColor: AppGlobal.appPrimaryColor, - fontWeight: FontWeight.w600, - // controller: messageController, - validator: (value) { - if (value == null) - return TranslationBase - .of(context) - .emptyMessage; - else - return null; - }), + child: TextFields( + hintText: "Add ASSESSMENT", + fontSize: 13.5, + onTapTextFields: () { + openAssessmentDialog(context); + }, + readOnly: true, + // hintColor: Colors.black, + suffixIcon: EvaIcons.plusCircleOutline, + suffixIconColor: AppGlobal + .appPrimaryColor, + fontWeight: FontWeight.w600, + // controller: messageController, + validator: (value) { + if (value == null) + return TranslationBase + .of(context) + .emptyMessage; + else + return null; + }), ), SizedBox( height: 20, @@ -242,7 +278,7 @@ class _UpdateAssessmentPageState extends State { height: 6, ), AppText( - widget.mySelectedAssessment.remark, + widget.mySelectedAssessment.remark??"", fontSize: 10, color: Colors.grey, ), @@ -263,7 +299,7 @@ class _UpdateAssessmentPageState extends State { fontSize: 16, ), AppText( - "R07.1".toUpperCase(), + widget.mySelectedAssessment.selectedICD.code.toUpperCase()??"", fontSize: 10, color: Colors.grey, ), @@ -291,44 +327,68 @@ class _UpdateAssessmentPageState extends State { isExpand: isAssessmentExpand, ), DividerWithSpacesAround( - height: 30, - ), - AppButton( - title: TranslationBase.of(context).next, - loading: model.state == ViewState.BusyLocal, - onPressed: () async { - await submitAssessment(model); - }, - ), - SizedBox( - height: 30, + height: 30, + ), + AppButton( + title: TranslationBase + .of(context) + .next, + loading: model.state == ViewState.BusyLocal, + onPressed: () async { + await submitAssessment(model); + }, + ), + SizedBox( + height: 30, + ), + ], ), - ], + ), ), - ), - ), - ))); + ))); } submitAssessment(SOAPViewModel model) async { if (widget.mySelectedAssessment.selectedDiagnosisCondition != null && - widget.mySelectedAssessment.selectedDiagnosisType != null) { - PatchAssessmentReqModel patchAssessmentReqModel = - new PatchAssessmentReqModel( - patientMRN: widget.patientInfo.patientMRN, - episodeId: widget.patientInfo.episodeNo, - appointmentNo: widget.patientInfo.appointmentNo, - remarks: widget.mySelectedAssessment.remark, - complexDiagnosis: true, - conditionId: - widget.mySelectedAssessment.selectedDiagnosisCondition.id, - diagnosisTypeId: - widget.mySelectedAssessment.selectedDiagnosisType.id, - icdcode10Id: "1", - prevIcdCode10ID: "1" - ); + widget.mySelectedAssessment.selectedDiagnosisType != null && widget.mySelectedAssessment.selectedICD !=null ) { + + if(model.patientAssessmentList.isEmpty){ + PostAssessmentRequestModel postAssessmentRequestModel = + new PostAssessmentRequestModel( + patientMRN: widget.patientInfo.patientMRN, + episodeId: widget.patientInfo.episodeNo, + appointmentNo: widget.patientInfo.appointmentNo, + icdCodeDetails: [ + new IcdCodeDetails( + remarks: widget.mySelectedAssessment.remark, + complexDiagnosis: true, + conditionId: + widget.mySelectedAssessment.selectedDiagnosisCondition.id, + diagnosisTypeId: + widget.mySelectedAssessment.selectedDiagnosisType.id, + icdcode10Id: widget.mySelectedAssessment.selectedICD.code) + ]); + + await model.postAssessment(postAssessmentRequestModel); + } else { + PatchAssessmentReqModel patchAssessmentReqModel = + PatchAssessmentReqModel( + patientMRN: widget.patientInfo.patientMRN, + episodeID: widget.patientInfo.episodeNo, + appointmentNo: widget.patientInfo.appointmentNo, + remarks: widget.mySelectedAssessment.remark, + complexDiagnosis: true, + conditionId: + widget.mySelectedAssessment.selectedDiagnosisCondition.id, + diagnosisTypeId: + widget.mySelectedAssessment.selectedDiagnosisType.id, + icdcode10Id: widget.mySelectedAssessment.selectedICD.code, + prevIcdCode10ID: model.patientAssessmentList[0].icdCode10ID + ); + + await model.patchAssessment(patchAssessmentReqModel); + } - await model.patchAssessment(patchAssessmentReqModel); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); @@ -363,9 +423,9 @@ class _UpdateAssessmentPageState extends State { class AddAssessmentDetails extends StatefulWidget { final MySelectedAssessment mySelectedAssessment; final Function() addSelectedAssessment; - + final PatiantInformtion patientInfo; const AddAssessmentDetails( - {Key key, this.mySelectedAssessment, this.addSelectedAssessment}) + {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo}) : super(key: key); @override @@ -376,13 +436,13 @@ class _AddAssessmentDetailsState extends State { // MasterKeyModel _selectedDiagnosisCondition; // MasterKeyModel _selectedDiagnosisType; TextEditingController remarkController = TextEditingController(); - TextEditingController appointmentIdController = TextEditingController( - text: "234567"); + TextEditingController appointmentIdController = TextEditingController(); GlobalKey key = new GlobalKey>(); @override Widget build(BuildContext context) { remarkController.text = widget.mySelectedAssessment.remark??""; + appointmentIdController.text = widget.mySelectedAssessment.appointmentId.toString(); final screenSize = MediaQuery .of(context) .size; @@ -644,7 +704,7 @@ class _AddAssessmentDetailsState extends State { class PatchAssessmentReqModel { int patientMRN; int appointmentNo; - int episodeId; + int episodeID; String icdcode10Id; String prevIcdCode10ID; int conditionId; @@ -655,7 +715,7 @@ class PatchAssessmentReqModel { PatchAssessmentReqModel( {this.patientMRN, this.appointmentNo, - this.episodeId, + this.episodeID, this.icdcode10Id, this.prevIcdCode10ID, this.conditionId, @@ -664,28 +724,28 @@ class PatchAssessmentReqModel { this.remarks}); PatchAssessmentReqModel.fromJson(Map json) { - patientMRN = json['patientMRN']; - appointmentNo = json['appointmentNo']; - episodeId = json['episodeId']; - icdcode10Id = json['icdcode10Id']; - prevIcdCode10ID = json['prevIcdCode10ID']; - conditionId = json['conditionId']; - diagnosisTypeId = json['diagnosisTypeId']; - complexDiagnosis = json['complexDiagnosis']; - remarks = json['remarks']; + patientMRN = json['PatientMRN']; + appointmentNo = json['AppointmentNo']; + episodeID = json['EpisodeID']; + icdcode10Id = json['Icdcode10Id']; + prevIcdCode10ID = json['PrevIcdCode10ID']; + conditionId = json['ConditionId']; + diagnosisTypeId = json['DiagnosisTypeId']; + complexDiagnosis = json['ComplexDiagnosis']; + remarks = json['Remarks']; } Map toJson() { final Map data = new Map(); - data['patientMRN'] = this.patientMRN; - data['appointmentNo'] = this.appointmentNo; - data['episodeId'] = this.episodeId; - data['icdcode10Id'] = this.icdcode10Id; - data['prevIcdCode10ID'] = this.prevIcdCode10ID; - data['conditionId'] = this.conditionId; - data['diagnosisTypeId'] = this.diagnosisTypeId; - data['complexDiagnosis'] = this.complexDiagnosis; - data['remarks'] = this.remarks; + data['PatientMRN'] = this.patientMRN; + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + data['Icdcode10Id'] = this.icdcode10Id; + data['PrevIcdCode10ID'] = this.prevIcdCode10ID; + data['ConditionId'] = this.conditionId; + data['DiagnosisTypeId'] = this.diagnosisTypeId; + data['ComplexDiagnosis'] = this.complexDiagnosis; + data['Remarks'] = this.remarks; return data; } } diff --git a/lib/widgets/patients/profile/soap_update/update_objective_page.dart b/lib/widgets/patients/profile/soap_update/update_objective_page.dart index 55be0be6..2a342542 100644 --- a/lib/widgets/patients/profile/soap_update/update_objective_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_objective_page.dart @@ -84,8 +84,7 @@ class _UpdateObjectivePageState extends State { }, builder: (_, model, w) => AppScaffold( isShowAppBar: false, - //TODO: retrun it back - // baseViewModel: model, + baseViewModel: model, body: SingleChildScrollView( physics: ScrollPhysics(), child: Center( @@ -379,7 +378,11 @@ class _UpdateObjectivePageState extends State { )); }); - await model.patchPhysicalExam(postPhysicalExamRequestModel); + if(model.patientPhysicalExamList.isEmpty) { + await model.postPhysicalExam(postPhysicalExamRequestModel); + } else { + await model.patchPhysicalExam(postPhysicalExamRequestModel); + } if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); diff --git a/lib/widgets/patients/profile/soap_update/update_plan_page.dart b/lib/widgets/patients/profile/soap_update/update_plan_page.dart index 506ff103..d5ad12e9 100644 --- a/lib/widgets/patients/profile/soap_update/update_plan_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_plan_page.dart @@ -63,8 +63,8 @@ class _UpdatePlanPageState extends State { await model.getPatientProgressNote(getGetProgressNoteReqModel); if (model.patientProgressNoteList.isNotEmpty) { - progressNoteController.text = - model.patientProgressNoteList[0].planNote; + progressNoteController.text = helpers + .parseHtmlString(model.patientProgressNoteList[0].planNote); } }, builder: (_, model, w) => AppScaffold( diff --git a/lib/widgets/patients/profile/soap_update/update_soap_index.dart b/lib/widgets/patients/profile/soap_update/update_soap_index.dart index 744f5244..9e5dd82b 100644 --- a/lib/widgets/patients/profile/soap_update/update_soap_index.dart +++ b/lib/widgets/patients/profile/soap_update/update_soap_index.dart @@ -9,7 +9,7 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/assessment_page.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/objective_page.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/plan_page.dart'; -import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/steps_widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/steps_widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/subjective/subjective_page.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart'; diff --git a/pubspec.lock b/pubspec.lock index 493985a1..9cbacb6d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -239,6 +239,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.2" cupertino_icons: dependency: "direct main" description: @@ -385,6 +392,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.6" + html: + dependency: "direct main" + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+4" http: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index e15a7182..91283a89 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -63,6 +63,9 @@ dependencies: #Autocomplete TextField autocomplete_textfield: ^1.7.3 + # Html + html: ^0.14.0+4 + #speech to text