diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart index 807d8bc1..98c6143b 100644 --- a/lib/core/service/prescription_service.dart +++ b/lib/core/service/prescription_service.dart @@ -65,17 +65,17 @@ class PrescriptionService extends BaseService { Future getMedicationList() async { hasError = false; - _drugRequestModel.search =[""]; + _drugRequestModel.search = [""]; await baseAppClient.post(SEARCH_DRUG, onSuccess: (dynamic response, int statusCode) { - allMedicationList = []; - response['MedicationList']['entityList'].forEach((v) { - allMedicationList.add(GetMedicationResponseModel.fromJson(v)); - }); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: _drugRequestModel.toJson()); + allMedicationList = []; + response['MedicationList']['entityList'].forEach((v) { + allMedicationList.add(GetMedicationResponseModel.fromJson(v)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _drugRequestModel.toJson()); } Future postPrescription( diff --git a/lib/core/viewModel/medicine_view_model.dart b/lib/core/viewModel/medicine_view_model.dart index 6b780858..23dd0306 100644 --- a/lib/core/viewModel/medicine_view_model.dart +++ b/lib/core/viewModel/medicine_view_model.dart @@ -12,8 +12,8 @@ class MedicineViewModel extends BaseViewModel { get pharmaciesList => _medicineService.pharmaciesList; PrescriptionService _prescriptionService = locator(); - List get allMedicationList => _prescriptionService.allMedicationList; - + List get allMedicationList => + _prescriptionService.allMedicationList; Future getMedicineItem(String itemName) async { setState(ViewState.Busy); @@ -24,6 +24,7 @@ class MedicineViewModel extends BaseViewModel { } else setState(ViewState.Idle); } + Future getMedicationList() async { setState(ViewState.Busy); await _prescriptionService.getMedicationList(); diff --git a/lib/core/viewModel/prescription_view_model.dart b/lib/core/viewModel/prescription_view_model.dart index 467a715c..34f86ffd 100644 --- a/lib/core/viewModel/prescription_view_model.dart +++ b/lib/core/viewModel/prescription_view_model.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; +import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug_model.dart'; import 'package:doctor_app_flutter/core/service/prescription_service.dart'; @@ -13,11 +14,13 @@ import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign- class PrescriptionViewModel extends BaseViewModel { bool hasError = false; PrescriptionService _prescriptionService = locator(); + List get allMedicationList => + _prescriptionService.allMedicationList; List get prescriptionList => _prescriptionService.prescriptionList; List get drugsList => _prescriptionService.doctorsList; - List get allMedicationList => _prescriptionService.allMedicationList; + //List get allMedicationList => _prescriptionService.allMedicationList; Future getPrescription({int mrn}) async { hasError = false; @@ -46,6 +49,16 @@ class PrescriptionViewModel extends BaseViewModel { } } + Future getMedicationList() async { + setState(ViewState.Busy); + await _prescriptionService.getMedicationList(); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + Future updatePrescription( PostPrescriptionReqModel updatePrescriptionReqModel, int mrn) async { hasError = false; diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index 2f8b47cb..5c1bd3b4 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -1,7 +1,9 @@ +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; 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/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; @@ -16,6 +18,7 @@ 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/patients/dynamic_elements.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_text_form_field.dart'; @@ -23,6 +26,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.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:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:intl/intl.dart'; @@ -105,6 +109,9 @@ class _PrescriptionFormWidgetState extends State { TextEditingController instructionController = TextEditingController(); DateTime selectedDate; dynamic selectedDrug; + GetMedicationResponseModel _selectedMedication; + GlobalKey key = + new GlobalKey>(); TextEditingController drugIdController = TextEditingController(); TextEditingController doseController = TextEditingController(); @@ -344,7 +351,9 @@ class _PrescriptionFormWidgetState extends State { // patient = routeArgs['patient']; return BaseView( - onModelReady: (model) => model.getDrugs(drugName: textSeartch), + onModelReady: (model) async { + await model.getMedicationList(); + }, builder: (BuildContext context, PrescriptionViewModel model, Widget child) => NetworkBaseView( @@ -378,152 +387,73 @@ class _PrescriptionFormWidgetState extends State { //mainAxisAlignment: MainAxisAlignment.end, children: [ Container( - height: screenSize.height * 0.070, + height: MediaQuery.of(context).size.height * + 0.070, child: InkWell( - onTap: model.drugsList != null && - model.drugsList.length > 0 + onTap: model.allMedicationList != null ? () { - return drugDialog = - ListSelectDialog( - list: model.drugsList, - attributeName: 'GenericName', - attributeValueId: 'ItemId', - okText: - TranslationBase.of(context) - .ok, - okFunction: (selectedValue) { - setState(() { - selectedDrug = selectedValue; - }); - }, - /* searchWidget: Row( - children: [ - Expanded( - child: TextField( - decoration: Helpers - .textFieldSelectorDecoration( - TranslationBase.of( - context) - .search, - searchController.text != - null && - searchController - .text != - "" - ? searchController - .text - : null, - false, - ), - onChanged: (String str) { - textSeartch = str; - }, - controller: - searchController, - enabled: true, - ), - ), - Container( - child: InkWell( - child: Icon( - Icons.search, - color: Colors.black, - ), - onTap: () async { - Navigator.of(context) - .pop(); - await searchMedicine( - context, - model, - textSeartch); - showDialog( - barrierDismissible: - false, - context: context, - builder: (BuildContext - context) { - return drugDialog; - }, - ); - }, - ), - margin: - EdgeInsets.symmetric( - horizontal: 8), - ) - ], - ),*/ - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return drugDialog; - }, - ); + setState(() { + _selectedMedication = null; + }); } : null, - child: Row( - children: [ - Expanded( - child: TextField( - decoration: Helpers - .textFieldSelectorDecoration( + child: _selectedMedication == null + ? AutoCompleteTextField< + GetMedicationResponseModel>( + decoration: + textFieldSelectorDecoration( TranslationBase.of(context) - .search, - searchController.text != null && - searchController.text != - "" - ? searchController.text + .searchMedicineNameHere, + _selectedMedication != null + ? _selectedMedication + .genericName : null, - false, + true, ), - onChanged: (String str) { - textSeartch = str; - }, - controller: searchController, - enabled: true, - ), - ), - Container( - child: InkWell( - child: Icon( - Icons.search, - color: Colors.black, + itemSubmitted: (item) => setState( + () => + _selectedMedication = item), + key: key, + suggestions: + model.allMedicationList, + itemBuilder: (context, + suggestion) => + new Padding( + child: Texts(suggestion + .description + + '/' + + suggestion.genericName), + padding: + EdgeInsets.all(8.0)), + itemSorter: (a, b) => 1, + itemFilter: (suggestion, input) => + suggestion.genericName + .toLowerCase() + .startsWith( + input.toLowerCase()) || + suggestion.description + .toLowerCase() + .startsWith( + input.toLowerCase()) || + suggestion.keywords + .toLowerCase() + .startsWith( + input.toLowerCase()), + ) + : TextField( + decoration: + textFieldSelectorDecoration( + TranslationBase.of(context) + .searchMedicineNameHere, + _selectedMedication != null + ? _selectedMedication + .description + + ('${_selectedMedication.genericName}') + : null, + true, ), - onTap: () async { - // Navigator.of(context) - // .pop(); - await searchMedicine( - context, model, textSeartch); - showDialog( - barrierDismissible: false, - context: context, - builder: - (BuildContext context) { - return drugDialog; - }, - ); - }, + enabled: false, ), - margin: EdgeInsets.symmetric( - horizontal: 8), - ) - ], - ), /*TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context) - .searchMedicine, - selectedDrug != null - ? selectedDrug['GenericName'] - : null, - true, - suffixIcon: Icon( - Icons.search, - color: Colors.black, - )), - enabled: true, - ),*/ ), ), SizedBox( @@ -603,47 +533,21 @@ class _PrescriptionFormWidgetState extends State { Container( width: MediaQuery.of(context).size.width * - 0.5, - child: InkWell( - onTap: strengthList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: strengthList, - attributeName: 'name', - attributeValueId: 'id', - okText: TranslationBase.of( - context) - .ok, - okFunction: - (selectedValue) { - setState(() { - strength = - selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: - (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: - textFieldSelectorDecoration( - TranslationBase.of(context) - .strength, - strength != null - ? strength['name'] - : null, - true), - enabled: false, - ), + 0.650, + child: TextFields( + hintText: TranslationBase.of(context) + .strength, + controller: strengthController, + keyboardType: TextInputType.number, + validator: (value) { + if (value.isEmpty && + strengthController.text.length > + 4) + return TranslationBase.of(context) + .emptyMessage; + else + return null; + }, ), ), SizedBox( @@ -652,7 +556,7 @@ class _PrescriptionFormWidgetState extends State { Container( width: MediaQuery.of(context).size.width * - 0.40, + 0.250, child: InkWell( onTap: unitsList != null ? () { @@ -958,15 +862,15 @@ class _PrescriptionFormWidgetState extends State { onPressed: () { formKey.currentState.save(); Navigator.pop(context); - openDrugToDrug(); - if (strength == null || - route == null || + //openDrugToDrug(); + if (route == null || frequency == null || indication == null || doseTime == null || duration == null || - selectedDrug == null || - selectedDate == null) { + selectedDate == null || + units == null || + _selectedMedication == null) { DrAppToastMsg.showErrorToast( "Please Fill All Fields"); return; @@ -974,7 +878,32 @@ class _PrescriptionFormWidgetState extends State { if (formKey.currentState.validate()) { Navigator.pop(context); - openDrugToDrug(); + { + postProcedure( + dose: strengthController.text, + doseUnit: + units['id'].toString(), + patient: widget.patient, + doseTimeIn: + doseTime['id'].toString(), + model: widget.model, + duration: + duration['id'].toString(), + frequency: frequency['id'] + .toString(), + route: route['id'].toString(), + drugId: _selectedMedication + .itemId + .toString(), + strength: + strengthController.text, + indication: + indicationController.text, + instruction: + instructionController + .text, + doseTime: selectedDate); + } } { // Navigator.push( @@ -1070,7 +999,7 @@ class _PrescriptionFormWidgetState extends State { title: TranslationBase.of(context).addMedication, onPressed: () { postProcedure( - dose: strength['id'].toString(), + dose: strengthController.text, doseUnit: units['id'].toString(), patient: widget.patient, doseTimeIn: doseTime['id'].toString(), @@ -1079,7 +1008,7 @@ class _PrescriptionFormWidgetState extends State { frequency: frequency['id'].toString(), route: route['id'].toString(), drugId: selectedDrug['ItemId'].toString(), - strength: strength['id'].toString(), + strength: strengthController.text, indication: indicationController.text, instruction: instructionController.text, doseTime: selectedDate); diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 4d000838..00fc38b8 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -754,8 +754,7 @@ class _NewPrescriptionScreenState extends State { route = selectedValue; }); if (route == null) { - helpers - .showErrorToast('plase fill'); + route = route['id']; } }, ); @@ -904,10 +903,15 @@ class _NewPrescriptionScreenState extends State { model: model, drugId: drugId, remarks: remarksController.text, - route: route['id'].toString(), - frequency: - frequencyUpdate['id'].toString(), - dose: doseTime['id'].toString(), + route: route != null + ? route['id'].toString() + : rouat, + frequency: frequencyUpdate != null + ? frequencyUpdate['id'].toString() + : frequency, + dose: doseTime != null + ? doseTime['id'].toString() + : dose, enteredRemarks: enteredRemarks); Navigator.pop(context); },