diff --git a/lib/models/SOAP/my_selected_assement.dart b/lib/models/SOAP/my_selected_assement.dart index b5f82379..4d4afc2d 100644 --- a/lib/models/SOAP/my_selected_assement.dart +++ b/lib/models/SOAP/my_selected_assement.dart @@ -6,12 +6,21 @@ class MySelectedAssessment { MasterKeyModel selectedDiagnosisType; String remark; int appointmentId; + int createdBy; + String createdOn; + int doctorID; + String doctorName; + String icdCode10ID; MySelectedAssessment( {this.selectedICD, this.selectedDiagnosisCondition, this.selectedDiagnosisType, - this.remark, this.appointmentId}); + this.remark, this.appointmentId, this.createdBy, + this.createdOn, + this.doctorID, + this.doctorName, + this.icdCode10ID}); MySelectedAssessment.fromJson(Map json) { selectedICD = json['selectedICD'] != null @@ -25,6 +34,11 @@ class MySelectedAssessment { : null; remark = json['remark']; appointmentId = json['appointmentId']; + createdBy = json['createdBy']; + createdOn = json['createdOn']; + doctorID = json['doctorID']; + doctorName = json['doctorName']; + icdCode10ID = json['icdCode10ID']; } Map toJson() { @@ -41,7 +55,11 @@ class MySelectedAssessment { } data['remark'] = this.remark; data['appointmentId'] = this.appointmentId; - + data['createdBy'] = this.createdBy; + data['createdOn'] = this.createdOn; + data['doctorID'] = this.doctorID; + data['doctorName'] = this.doctorName; + data['icdCode10ID'] = this.icdCode10ID; return data; } } 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 79d8878c..1a38de87 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -25,11 +25,13 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class UpdateAssessmentPage extends StatefulWidget { final Function changePageViewIndex; - final MySelectedAssessment mySelectedAssessment; + List mySelectedAssessmentList; final PatiantInformtion patientInfo; - UpdateAssessmentPage( - {Key key, this.changePageViewIndex, this.mySelectedAssessment, this.patientInfo}); + UpdateAssessmentPage({Key key, + this.changePageViewIndex, + this.mySelectedAssessmentList, + this.patientInfo}); @override _UpdateAssessmentPageState createState() => _UpdateAssessmentPageState(); @@ -43,8 +45,7 @@ class _UpdateAssessmentPageState extends State { return BaseView( onModelReady: (model) async{ - - widget.mySelectedAssessment.appointmentId =widget.patientInfo.appointmentNo; + widget.mySelectedAssessmentList.clear(); GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel( patientMRN: widget.patientInfo.patientMRN, episodeID: widget.patientInfo.episodeNo.toString(), @@ -60,25 +61,33 @@ class _UpdateAssessmentPageState extends State { if (model.listOfICD10.length == 0) { await model.getMasterLookup(MasterKeysService.ICD10); } + model.patientAssessmentList.forEach((element) { + MasterKeyModel diagnosisType = model.getOneMasterKey( + masterKeys: MasterKeysService.DiagnosisType, + id: element.diagnosisTypeID, + ); + MasterKeyModel selectedICD = model.getOneMasterKey( + masterKeys: MasterKeysService.ICD10, + id: element.icdCode10ID, + ); + MasterKeyModel diagnosisCondition = model.getOneMasterKey( + masterKeys: MasterKeysService.DiagnosisCondition, + id: element.conditionID, + ); + MySelectedAssessment temMySelectedAssessment = MySelectedAssessment( + appointmentId: element.appointmentNo, + remark: element.remarks, + selectedDiagnosisType: diagnosisType, + selectedDiagnosisCondition: diagnosisCondition, + selectedICD: selectedICD, + doctorID: element.doctorID, + doctorName: element.doctorName, + createdBy: element.createdBy, + icdCode10ID: element.icdCode10ID + ); - 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; + widget.mySelectedAssessmentList.add(temMySelectedAssessment); + }); } }, builder: (_, model, w) => AppScaffold( @@ -130,7 +139,6 @@ class _UpdateAssessmentPageState extends State { ), Column( children: [ - if(model.patientAssessmentList.isEmpty) Container( margin: EdgeInsets.only(left: 5, right: 5, top: 15), @@ -138,7 +146,8 @@ class _UpdateAssessmentPageState extends State { hintText: TranslationBase.of(context).addAssessment, fontSize: 13.5, onTapTextFields: () { - openAssessmentDialog(context); + openAssessmentDialog(context,isUpdate: false, + model: model); }, readOnly: true, // hintColor: Colors.black, @@ -159,266 +168,239 @@ class _UpdateAssessmentPageState extends State { SizedBox( height: 20, ), - if(widget.mySelectedAssessment != null && - widget.mySelectedAssessment - .appointmentId != - null && widget.mySelectedAssessment - .selectedDiagnosisType != null && - widget.mySelectedAssessment - .selectedDiagnosisCondition != null) - Container( - margin: EdgeInsets.only( - left: 5, right: 5, top: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment - .spaceBetween, - crossAxisAlignment: CrossAxisAlignment - .start, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment - .start, - children: [ - Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AppText( - "12".toUpperCase(), - fontWeight: FontWeight.bold, - fontSize: 16, - ), - AppText( - "DEC".toUpperCase(), - fontSize: 10, - color: Colors.grey, - ), - ], - ) - ], - ), - Column( - crossAxisAlignment: CrossAxisAlignment - .start, - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - AppText( - "Appointment #: ", - fontWeight: FontWeight.bold, - fontSize: 16, - ), - AppText( - widget.mySelectedAssessment - .appointmentId - .toString(), - fontSize: 10, - color: Colors.grey, - ), - ], - ), - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - AppText( - widget.mySelectedAssessment - .selectedDiagnosisCondition - .nameEn, - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ], - ), - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - AppText( - "Type : ", - fontWeight: FontWeight.bold, - fontSize: 16, - ), - AppText( - widget.mySelectedAssessment - .selectedDiagnosisType - .nameEn, - fontSize: 10, - color: Colors.grey, - ), - ], - ), - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - AppText( - "Doc : ", - fontWeight: FontWeight.bold, - fontSize: 16, - ), - AppText( - "Anas Abdullah", - fontSize: 10, - color: Colors.grey, - ), - ], - ), - SizedBox( - height: 6, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - SizedBox( - height: 6, - ), - Container( - width: MediaQuery.of(context).size.width * 0.5, - child: AppText( - widget.mySelectedAssessment.remark??"", + + Column( + children: widget.mySelectedAssessmentList.map(( + assessment) { + return Container( + margin: EdgeInsets.only( + left: 5, right: 5, top: 15), + child: Row( + mainAxisAlignment: MainAxisAlignment + .spaceBetween, + crossAxisAlignment: CrossAxisAlignment + .start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment + .start, + children: [ + Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + "12".toUpperCase(), + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + AppText( + "DEC".toUpperCase(), fontSize: 10, color: Colors.grey, ), - ), - ], - ), - ], - ), - Column( - crossAxisAlignment: CrossAxisAlignment - .start, - children: [ - Row( - - children: [ - AppText( - "ICD: ".toUpperCase(), - fontWeight: FontWeight.bold, - fontSize: 16, - ), - Container( - child: AppText( - widget.mySelectedAssessment.selectedICD.code.trim().toUpperCase()??"", + ], + ) + ], + ), + Column( + crossAxisAlignment: CrossAxisAlignment + .start, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + "Appointment #: ", + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + AppText( + assessment + .appointmentId + .toString(), fontSize: 10, color: Colors.grey, ), - ), - ], - ) - ], - ), - Column( - children: [ - InkWell( - onTap: () { - openAssessmentDialog(context); - }, - child: Icon(EvaIcons - .edit2Outline), - ) - ], - ), - ], - ), - ) + ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + assessment + .selectedDiagnosisCondition + .nameEn, + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + "Type : ", + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + AppText( + assessment + .selectedDiagnosisType + .nameEn, + fontSize: 10, + color: Colors.grey, + ), + ], + ), + if(assessment.doctorName != null) + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + "Doc : ", + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + AppText( + assessment.doctorName??'', + fontSize: 10, + color: Colors.grey, + ), + ], + ), + SizedBox( + height: 6, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + SizedBox( + height: 6, + ), + Container( + width: MediaQuery + .of(context) + .size + .width * 0.5, + child: AppText( + assessment.remark ?? "", + fontSize: 10, + color: Colors.grey, + ), + ), + ], + ), + ], + ), + Column( + crossAxisAlignment: CrossAxisAlignment + .start, + children: [ + Row( + + children: [ + AppText( + "ICD: ".toUpperCase(), + fontWeight: FontWeight + .bold, + fontSize: 16, + ), + Container( + child: AppText( + assessment.selectedICD + .code.trim() + .toUpperCase() ?? + "", + fontSize: 10, + color: Colors.grey, + ), + ), + ], + ) + ], + ), + Column( + children: [ + InkWell( + onTap: () { + openAssessmentDialog( + context, isUpdate: true, + assessment: assessment, + model: model); + }, + child: Icon(EvaIcons + .edit2Outline), + ) + ], + ), + ], + ), + ); + }).toList(),) ], ) ]), isExpand: isAssessmentExpand, ), - DividerWithSpacesAround( - height: 30, - ), - AppButton( - title: TranslationBase - .of(context) - .next, - loading: model.state == ViewState.BusyLocal, - onPressed: () async { - await submitAssessment(model); - }, - ), - SizedBox( - height: 30, - ), - ], + DividerWithSpacesAround( + height: 30, ), - ), + AppButton( + title: TranslationBase + .of(context) + .next, + loading: model.state == ViewState.BusyLocal, + onPressed: () async { + widget.changePageViewIndex(3); + }, + ), + SizedBox( + height: 30, + ), + ], ), - ))); + ), + ), + ))); } - submitAssessment(SOAPViewModel model) async { - if (widget.mySelectedAssessment.selectedDiagnosisCondition != null && - 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); - } - - if (model.state == ViewState.ErrorLocal) { - helpers.showErrorToast(model.error); - } else { - widget.changePageViewIndex(3); - } - } else { - helpers.showErrorToast(TranslationBase.of(context).requiredMsg); + openAssessmentDialog(BuildContext context, + { + MySelectedAssessment assessment, bool isUpdate, + SOAPViewModel model + }) { + if (assessment == null) { + assessment = MySelectedAssessment( + remark: '', appointmentId: widget.patientInfo.appointmentNo); } - - widget.changePageViewIndex(3); - } - - openAssessmentDialog(BuildContext context) { showModalBottomSheet( backgroundColor: Colors.white, isScrollControlled: true, context: context, builder: (context) { return AddAssessmentDetails( - mySelectedAssessment: widget.mySelectedAssessment, - addSelectedAssessment: () { + mySelectedAssessment: assessment, + patientInfo: widget.patientInfo, + isUpdate: isUpdate, + mySelectedAssessmentList: widget.mySelectedAssessmentList, + addSelectedAssessment: (MySelectedAssessment mySelectedAssessment, + bool isUpdate) async { setState(() { - Navigator.of(context).pop(); + }); }); }); @@ -428,32 +410,34 @@ class _UpdateAssessmentPageState extends State { class AddAssessmentDetails extends StatefulWidget { final MySelectedAssessment mySelectedAssessment; - final Function() addSelectedAssessment; + final List mySelectedAssessmentList; + final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment; final PatiantInformtion patientInfo; - const AddAssessmentDetails( - {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo}) - : super(key: key); + final bool isUpdate; + + AddAssessmentDetails( + {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo, this.isUpdate = false, this.mySelectedAssessmentList}); + @override _AddAssessmentDetailsState createState() => _AddAssessmentDetailsState(); } class _AddAssessmentDetailsState extends State { - // MasterKeyModel _selectedDiagnosisCondition; - // MasterKeyModel _selectedDiagnosisType; TextEditingController remarkController = TextEditingController(); TextEditingController appointmentIdController = TextEditingController(); GlobalKey key = new GlobalKey>(); @override Widget build(BuildContext context) { - remarkController.text = widget.mySelectedAssessment.remark??""; - appointmentIdController.text = widget.mySelectedAssessment.appointmentId.toString(); + remarkController.text = widget.mySelectedAssessment.remark ?? ""; + appointmentIdController.text = + widget.mySelectedAssessment.appointmentId.toString(); final screenSize = MediaQuery .of(context) .size; InputDecoration textFieldSelectorDecoration(String hintText, - String selectedText, bool isDropDown,{IconData icon}) { + String selectedText, bool isDropDown, {IconData icon}) { //TODO: make one Input InputDecoration for all return InputDecoration( focusedBorder: OutlineInputBorder( @@ -686,16 +670,34 @@ class _AddAssessmentDetailsState extends State { ), AppButton( title: "Add".toUpperCase(), - onPressed: () { - setState(() { + loading: model.state == ViewState.BusyLocal, + onPressed: () async { widget.mySelectedAssessment.remark = remarkController.text; widget.mySelectedAssessment .appointmentId = int.parse( appointmentIdController.text); - - widget.addSelectedAssessment(); - }); + if (widget.mySelectedAssessment + .selectedDiagnosisCondition != + null && + widget.mySelectedAssessment + .selectedDiagnosisType != + null && + widget.mySelectedAssessment + .selectedICD != null) { + widget.addSelectedAssessment( + widget.mySelectedAssessment, + widget.isUpdate); + await submitAssessment( + isUpdate: widget.isUpdate, + model: model, + mySelectedAssessment: widget + .mySelectedAssessment); + } else { + helpers.showErrorToast(TranslationBase + .of(context) + .requiredMsg); + } }, ), ])), @@ -704,6 +706,61 @@ class _AddAssessmentDetailsState extends State { ))), ); } + + submitAssessment( + {SOAPViewModel model, MySelectedAssessment mySelectedAssessment, bool isUpdate = false}) async { + if (isUpdate) { + PatchAssessmentReqModel patchAssessmentReqModel = + PatchAssessmentReqModel( + patientMRN: widget.patientInfo.patientMRN, + episodeID: widget.patientInfo.episodeNo, + appointmentNo: widget.patientInfo.appointmentNo, + remarks: mySelectedAssessment.remark, + complexDiagnosis: true, + conditionId: + mySelectedAssessment.selectedDiagnosisCondition.id, + diagnosisTypeId: + mySelectedAssessment.selectedDiagnosisType.id, + icdcode10Id: mySelectedAssessment.selectedICD.code, + prevIcdCode10ID: mySelectedAssessment.icdCode10ID + ); + + await model.patchAssessment(patchAssessmentReqModel); + } else { + PostAssessmentRequestModel postAssessmentRequestModel = + new PostAssessmentRequestModel( + patientMRN: widget.patientInfo.patientMRN, + episodeId: widget.patientInfo.episodeNo, + appointmentNo: widget.patientInfo.appointmentNo, + icdCodeDetails: [ + new IcdCodeDetails( + remarks: mySelectedAssessment.remark, + complexDiagnosis: true, + conditionId: + mySelectedAssessment.selectedDiagnosisCondition.id, + diagnosisTypeId: + mySelectedAssessment.selectedDiagnosisType.id, + icdcode10Id: mySelectedAssessment.selectedICD.code) + ]); + + await model.postAssessment(postAssessmentRequestModel); + } + + + if (model.state == ViewState.ErrorLocal) { + helpers.showErrorToast(model.error); + } else { + mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code; + + if (!isUpdate) { + widget.mySelectedAssessmentList.add(mySelectedAssessment); + } + Navigator.of(context).pop(); + } + + + // widget.changePageViewIndex(3); + } } 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 3b793d6a..84b8cc61 100644 --- a/lib/widgets/patients/profile/soap_update/update_soap_index.dart +++ b/lib/widgets/patients/profile/soap_update/update_soap_index.dart @@ -33,7 +33,7 @@ class _UpdateSoapIndexState extends State List myAllergiesList= List(); List myHistoryList = List(); List mySelectedExamination = List(); - MySelectedAssessment mySelectedAssessment = MySelectedAssessment(); + List mySelectedAssessment = List(); changePageViewIndex(pageIndex) { _controller.jumpToPage(pageIndex); } @@ -106,7 +106,7 @@ class _UpdateSoapIndexState extends State ), UpdateAssessmentPage( changePageViewIndex: changePageViewIndex, - mySelectedAssessment: + mySelectedAssessmentList: mySelectedAssessment, patientInfo: patient, ),