import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/config.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/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_chief_complaint_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_histories_request_model.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/SOAP/subjective/add_allergies_widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/subjective/add_history_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/expandable-widget-header-body.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class SubjectivePage extends StatefulWidget { final Function changePageViewIndex; final List myAllergiesList; final List myHistoryList; final PatiantInformtion patientInfo; SubjectivePage( {Key key, this.changePageViewIndex, this.myAllergiesList, this.myHistoryList, this.patientInfo}); @override _SubjectivePageState createState() => _SubjectivePageState(); } class _SubjectivePageState extends State { bool isChiefExpand = false; bool isHistoryExpand = false; bool isAllergiesExpand = false; TextEditingController illnessController = TextEditingController(); TextEditingController complaintsController = TextEditingController(); final formKey = GlobalKey(); @override Widget build(BuildContext context) { return BaseView( // onModelReady: (model) => model.getMasterLookup(MasterKeysService.Allergies), builder: (_, model, w) => AppScaffold( isShowAppBar: false, baseViewModel: model, body: SingleChildScrollView( physics: ScrollPhysics(), child: Center( child: FractionallySizedBox( widthFactor: 0.9, child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: 30, ), HeaderBodyExpandableNotifier( headerWidget: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Texts('CHIEF COMPLAINTS', variant: isChiefExpand ? "bodyText" : '', bold: isChiefExpand ? true : false, color: Colors.black), Icon( FontAwesomeIcons.asterisk, color: AppGlobal.appPrimaryColor, size: 12, ) ], ), InkWell( onTap: () { setState(() { isChiefExpand = !isChiefExpand; }); }, child: Icon( isChiefExpand ? EvaIcons.minus : EvaIcons.plus)) ], ), bodyWidget: Form( key: formKey, child: Column(children: [ SizedBox( height: 20, ), Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( hintText: "Add Chief Complaints", fontSize: 13.5, // hintColor: Colors.black, fontWeight: FontWeight.w600, maxLines: 25, minLines: 13, controller: complaintsController, validator: (value) { if (value == null || value == "") return TranslationBase.of(context) .emptyMessage; else if (value.length < 25) return TranslationBase.of(context) .chiefComplaintLength; //""; else return null; }), ), SizedBox( height: 20, ), Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( hintText: "History of Present Illness", fontSize: 13.5, // hintColor: Colors.black, fontWeight: FontWeight.w600, maxLines: 25, minLines: 13, controller: illnessController, validator: (value) { if (value == null || value =="") return TranslationBase .of(context) .emptyMessage; else return null; }), ), SizedBox( height: 20, ), // TODO return it back when we need it. // AddMedication(), ]), ), isExpand: isChiefExpand, ), 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('History'.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: [ AddHistoryWidget(myHistoryList: widget.myHistoryList) ], ), 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('Allergies'.toUpperCase(), variant: isAllergiesExpand ? "bodyText" : '', bold: isAllergiesExpand ? true : false, color: Colors.black), ], ), InkWell( onTap: () { setState(() { isAllergiesExpand = !isAllergiesExpand; }); }, child: Icon(isAllergiesExpand ? EvaIcons.minus : EvaIcons.plus)) ], ), bodyWidget: Column( children: [ AddAllergiesWidget( myAllergiesList: widget.myAllergiesList, ), SizedBox( height: 30, ), ], ), isExpand: isAllergiesExpand, ), SizedBox( height: 30, ), Container( width: double.infinity, height: 1, color: Color(0xffCCCCCC), ), SizedBox( height: 30, ), AppButton( title: TranslationBase.of(context).next, loading: model.state == ViewState.BusyLocal, onPressed: () async { addSubjectiveInfo( model: model, myAllergiesList: widget.myAllergiesList, myHistoryList: widget.myHistoryList); }, ), ], ), ), ), ), ), ); } addSubjectiveInfo( {SOAPViewModel model, List myAllergiesList, List myHistoryList}) async { formKey.currentState.save(); formKey.currentState.validate(); // if(complaintsController.text.isNotEmpty && illnessController.text.isNotEmpty && complaintsController.text.length>25) { // 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); // } // } // } // } else { // helpers.showErrorToast('Please add required field correctly'); // } widget.changePageViewIndex(1); } postAllergy( {List myAllergiesList, SOAPViewModel model}) async { PostAllergyRequestModel postAllergyRequestModel = new PostAllergyRequestModel(); widget.myAllergiesList.forEach((allergy) { if (postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM == null) postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM = []; //TODO: make static value dynamic postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM .add(ListHisProgNotePatientAllergyDiseaseVM( allergyDiseaseId: allergy.selectedAllergy.id, allergyDiseaseType: allergy.selectedAllergy.typeId, patientMRN: widget.patientInfo.patientMRN, episodeId: widget.patientInfo.episodeNo, appointmentNo: widget.patientInfo.appointmentNo, severity: allergy.selectedAllergySeverity.id, remarks: allergy.remark, createdBy: 4709, // createdOn: DateTime.now() .toIso8601String(), //"2020-08-14T20:37:22.780Z", editedBy: 4709, editedOn: DateTime.now() .toIso8601String(), //"2020-08-14T20:37:22.780Z", isChecked: false, isUpdatedByNurse: false)); }); await model.postAllergy(postAllergyRequestModel); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); } } postHistories( {List myHistoryList, SOAPViewModel model}) async { PostHistoriesRequestModel postHistoriesRequestModel = new PostHistoriesRequestModel(); widget.myHistoryList.forEach((history) { if (postHistoriesRequestModel.listMedicalHistoryVM == null) postHistoriesRequestModel.listMedicalHistoryVM = []; //TODO: make static value dynamic postHistoriesRequestModel.listMedicalHistoryVM.add(ListMedicalHistoryVM( patientMRN: widget.patientInfo.patientMRN, episodeId: widget.patientInfo.episodeNo, appointmentNo: widget.patientInfo.appointmentNo, remarks: "", historyId: history.id, historyType: history.typeId, isChecked: false, )); }); await model.postHistories(postHistoriesRequestModel); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); } } postChiefComplaint({SOAPViewModel model}) async { formKey.currentState.save(); if (formKey.currentState.validate()) { PostChiefComplaintRequestModel postChiefComplaintRequestModel = //TODO: make static value dynamic new PostChiefComplaintRequestModel( patientMRN: widget.patientInfo.patientMRN, episodeID: widget.patientInfo.episodeNo, appointmentNo: widget.patientInfo.appointmentNo, chiefComplaint: complaintsController.text, currentMedication: " currentMedication ", hopi: illnessController.text, isLactation: false, ispregnant: false, numberOfWeeks: 22); await model.postChiefComplaint(postChiefComplaintRequestModel); } } }