diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index 269aeefd..d9e77686 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -7,7 +7,8 @@ import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart'; import 'package:doctor_app_flutter/core/model/labs/patient_lab_special_result.dart'; import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; -import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart' as cpe; +import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart' + as cpe; import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_templateModel.dart'; @@ -71,10 +72,17 @@ class ProcedureViewModel extends BaseViewModel { List get procedureTemplateDetails => _procedureService.templateDetailsList; - Future getProcedure({int mrn, String patientType, int appointmentNo}) async { + Future getProcedure( + {int mrn, + String patientType, + int appointmentNo, + bool isLocalBusy = false}) async { hasError = false; await getDoctorProfile(); - setState(ViewState.Busy); + if (isLocalBusy) + setState(ViewState.BusyLocal); + else + setState(ViewState.Busy); await _procedureService.getProcedure( mrn: mrn, appointmentNo: appointmentNo); if (_procedureService.hasError) { @@ -88,10 +96,16 @@ class ProcedureViewModel extends BaseViewModel { } Future getProcedureCategory( - {String categoryName, String categoryID, patientId}) async { + {String categoryName, + String categoryID, + patientId, + bool isLocalBusy = false}) async { if (categoryName == null) return; hasError = false; - setState(ViewState.Busy); + if (isLocalBusy) + setState(ViewState.BusyLocal); + else + setState(ViewState.Busy); await _procedureService.getProcedureCategory( categoryName: categoryName, categoryID: categoryID, @@ -115,19 +129,23 @@ class ProcedureViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future getProcedureTemplate({String categoryID, bool isLocalBusy = false, BuildContext context}) async { + Future getProcedureTemplate( + {String categoryID, + bool isLocalBusy = false, + BuildContext context}) async { if (isLocalBusy) { setState(ViewState.BusyLocal); } else { - setState(ViewState.Busy); + setState(ViewState.Busy); } - await _procedureService.getProcedureTemplate(categoryID: categoryID, isLocalBusy: false); + await _procedureService.getProcedureTemplate( + categoryID: categoryID, isLocalBusy: false); if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); } else setTemplateListDependOnId(); - setState(ViewState.Idle); + setState(ViewState.Idle); } setTemplateListDependOnId() { @@ -167,27 +185,33 @@ class ProcedureViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future postProcedure( - PostProcedureReqModel postProcedureReqModel, int mrn, {bool isLocalBusy = false}) async { + Future postProcedure(PostProcedureReqModel postProcedureReqModel, int mrn, + {bool isLocalBusy = false}) async { hasError = false; - if(isLocalBusy) setState(ViewState.BusyLocal); else - setState(ViewState.Busy); + if (isLocalBusy) + setState(ViewState.BusyLocal); + else + setState(ViewState.Busy); await _procedureService.postProcedure(postProcedureReqModel); if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); } else { - await getProcedure(mrn: mrn); + await getProcedure(mrn: mrn, isLocalBusy:isLocalBusy); setState(ViewState.Idle); } } Future validationProcedure( - ProcedureValidationRequestModel procedureValadteRequestModel) async { + ProcedureValidationRequestModel procedureValidateRequestModel, + {bool isLocalBusy = false}) async { hasError = false; - //_insuranceCardService.clearInsuranceCard(); - setState(ViewState.Busy); - await _procedureService.validationProcedure(procedureValadteRequestModel); + if (isLocalBusy) { + setState(ViewState.BusyLocal); + } else { + setState(ViewState.Busy); + } + await _procedureService.validationProcedure(procedureValidateRequestModel); if (_procedureService.hasError) { error = _procedureService.error; setState(ViewState.ErrorLocal); @@ -366,15 +390,14 @@ class ProcedureViewModel extends BaseViewModel { DrAppToastMsg.showSuccesToast(mes); } - Future preparePostProcedure( - {String remarks, - String orderType, - PatiantInformtion patient, - List entityList, - ProcedureType procedureType, - bool isLocalBusy = false, - }) async { - + Future preparePostProcedure({ + String remarks, + String orderType, + PatiantInformtion patient, + List entityList, + ProcedureType procedureType, + bool isLocalBusy = false, + }) async { ///TODO Roaa Move it to function if (isLocalBusy) { setState(ViewState.BusyLocal); @@ -416,19 +439,21 @@ class ProcedureViewModel extends BaseViewModel { }); postProcedureReqModel.procedures = controlsProcedure; - await validationProcedure(procedureValadteRequestModel); + await validationProcedure(procedureValadteRequestModel, + isLocalBusy: isLocalBusy); if (state == ViewState.Idle) { if (valadteProcedureList[0].entityList.length == 0) { - await postProcedure(postProcedureReqModel, patient.patientMRN, isLocalBusy:isLocalBusy); + await postProcedure(postProcedureReqModel, patient.patientMRN, + isLocalBusy: isLocalBusy); if (state == ViewState.ErrorLocal) { Utils.showErrorToast(error); - getProcedure(mrn: patient.patientMRN); + getProcedure(mrn: patient.patientMRN, isLocalBusy: isLocalBusy); } else if (state == ViewState.Idle) { DrAppToastMsg.showSuccesToast('procedure has been added'); - if(Navigator.canPop(AppGlobal.CONTEX)) - Navigator.pop(AppGlobal.CONTEX); - if(Navigator.canPop(AppGlobal.CONTEX)) + if (Navigator.canPop(AppGlobal.CONTEX)) + Navigator.pop(AppGlobal.CONTEX); + if (Navigator.canPop(AppGlobal.CONTEX)) Navigator.pop(AppGlobal.CONTEX); } } else { @@ -445,18 +470,21 @@ class ProcedureViewModel extends BaseViewModel { } } - bool isEntityListSelected(cpe.EntityList masterKey, List entityList) { - Iterable history = entityList.where((element) => masterKey.procedureId == element.procedureId); + bool isEntityListSelected( + cpe.EntityList masterKey, List entityList) { + Iterable history = entityList + .where((element) => masterKey.procedureId == element.procedureId); if (history.length > 0) { return true; } return false; } - bool isProcedureEntityListSelected(ProcedureTempleteDetailsModel masterKey, List entityList) { + bool isProcedureEntityListSelected(ProcedureTempleteDetailsModel masterKey, + List entityList) { Iterable history = entityList.where( - (element) => - masterKey.templateID == element.templateID && + (element) => + masterKey.templateID == element.templateID && masterKey.procedureName == element.procedureName); if (history.length > 0) { return true; @@ -464,12 +492,12 @@ class ProcedureViewModel extends BaseViewModel { return false; } - - - Future addProcedures(ProcedureViewModel model, + Future addProcedures( + ProcedureViewModel model, List items, PatiantInformtion patient, - TextEditingController remarksController,{bool isLocalBusy = false}) async { + TextEditingController remarksController, + {bool isLocalBusy = false}) async { if (isLocalBusy) { setState(ViewState.BusyLocal); } else { @@ -493,11 +521,12 @@ class ProcedureViewModel extends BaseViewModel { await model.preparePostProcedure( entityList: entityList, patient: patient, - remarks: remarksController.text, isLocalBusy: isLocalBusy); - + remarks: remarksController.text, + isLocalBusy: isLocalBusy); } - Future filterSearchResults(String query,List masterList, List items) async { + Future filterSearchResults(String query, List masterList, + List items) async { List dummySearchList = List(); dummySearchList.addAll(masterList); if (query.isNotEmpty) { @@ -515,7 +544,10 @@ class ProcedureViewModel extends BaseViewModel { } } - void filterProcedureSearchResults(String query, List masterList, List items) { + void filterProcedureSearchResults( + String query, + List masterList, + List items) { List dummySearchList = List(); dummySearchList.addAll(masterList); if (query.isNotEmpty) { @@ -525,12 +557,12 @@ class ProcedureViewModel extends BaseViewModel { dummyListData.add(item); } }); - items.clear(); - items.addAll(dummyListData); + items.clear(); + items.addAll(dummyListData); return; } else { - items.clear(); - items.addAll(masterList); + items.clear(); + items.addAll(masterList); } } } diff --git a/lib/screens/procedures/add_procedure_page.dart b/lib/screens/procedures/add_procedure_page.dart index be3dc059..6e174f71 100644 --- a/lib/screens/procedures/add_procedure_page.dart +++ b/lib/screens/procedures/add_procedure_page.dart @@ -1,4 +1,5 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; @@ -6,6 +7,7 @@ import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/procedures/procedure_type.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; +import 'package:doctor_app_flutter/widgets/bottom_sheet/custom_bottom_sheet_container.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'; @@ -118,18 +120,33 @@ class _AddProcedurePageState extends State { ), Expanded( child: InkWell( - onTap: () { + onTap: () async { if (procedureName.text.isNotEmpty && - procedureName.text.length >= 3) - model.getProcedureCategory( + procedureName.text.length >= 3) { + GifLoaderDialogUtils.showMyDialog(context); + await model.getProcedureCategory( patientId: patient.patientId, categoryName: - procedureName.text); - else + procedureName.text, + isLocalBusy: true + ); + if(model.state == ViewState.ErrorLocal){ + DrAppToastMsg.showErrorToast( + model.error + ); + + } + GifLoaderDialogUtils.hideDialog(context); + + } + + else { DrAppToastMsg.showErrorToast( TranslationBase.of(context) .atLeastThreeCharacters, ); + } + }, child: Icon( Icons.search, @@ -172,43 +189,35 @@ class _AddProcedurePageState extends State { ), ), ), - Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: procedureType.getAddButtonTitle(context), - fontWeight: FontWeight.w700, - color: AppGlobal.appGreenColor, - onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); - if (entityList.isEmpty == true) { - DrAppToastMsg.showErrorToast( - TranslationBase.of(context) - .fillTheMandatoryProcedureDetails, - ); - GifLoaderDialogUtils.hideDialog(context); - return; - } - GifLoaderDialogUtils.showMyDialog(context); - await this.model.preparePostProcedure( - orderType: selectedType.toString(), - entityList: entityList, - patient: patient, - remarks: remarksController.text, - procedureType: ProcedureType.PROCEDURE, - isLocalBusy: true, - ); - Navigator.pop(context); - }, - ), - ], - ), - ), ], ), ), + bottomSheet: model.state == ViewState.BusyLocal? Container(height: 0,):CustomBottomSheetContainer( + label: procedureType.getAddButtonTitle(context), + onTap: () async { + { + GifLoaderDialogUtils.showMyDialog(context); + if (entityList.isEmpty == true) { + DrAppToastMsg.showErrorToast( + TranslationBase.of(context) + .fillTheMandatoryProcedureDetails, + ); + GifLoaderDialogUtils.hideDialog(context); + return; + } + GifLoaderDialogUtils.showMyDialog(context); + await model.preparePostProcedure( + orderType: selectedType.toString(), + entityList: entityList, + patient: patient, + remarks: remarksController.text, + procedureType: ProcedureType.PROCEDURE, + isLocalBusy: true, + ); + GifLoaderDialogUtils.hideDialog(context); + } + } + ), ), ); } diff --git a/lib/screens/procedures/procedure_card.dart b/lib/screens/procedures/procedure_card.dart index afff9a92..1a213f9c 100644 --- a/lib/screens/procedures/procedure_card.dart +++ b/lib/screens/procedures/procedure_card.dart @@ -13,6 +13,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +/// TODO Roaa Add translation and make sure it working fine + class ProcedureCard extends StatelessWidget { final Function onTap; final EntityList entityList; diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart index 8e959d91..a477e061 100644 --- a/lib/screens/procedures/procedure_screen.dart +++ b/lib/screens/procedures/procedure_screen.dart @@ -124,9 +124,6 @@ class ProcedureScreen extends StatelessWidget { .entityList[index].procedureId, limetNo: model.procedureList[0] .entityList[index].lineItemNo); - // } else - // Helpers.showErrorToast( - // 'You Cant Update This Procedure'); }, patient: patient, doctorID: model?.doctorProfile?.doctorID, diff --git a/lib/screens/procedures/update_procedure.dart b/lib/screens/procedures/update_procedure.dart index bad37158..52862163 100644 --- a/lib/screens/procedures/update_procedure.dart +++ b/lib/screens/procedures/update_procedure.dart @@ -7,9 +7,13 @@ import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_header.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; +import 'package:doctor_app_flutter/widgets/bottom_sheet/bottom_sheet_container.dart'; +import 'package:doctor_app_flutter/widgets/bottom_sheet/custom_bottom_sheet_container.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; @@ -89,18 +93,22 @@ class _UpdateProcedureWidgetState extends State { List entityList = List(); dynamic selectedCategory; + /// TODO Roaa Add translation and make sure it working fine @override Widget build(BuildContext context) { - final screenSize = MediaQuery.of(context).size; return StatefulBuilder(builder: (BuildContext context, StateSetter setState /*You can rename this!*/) { return BaseView( onModelReady: (model) => model.getCategory(), builder: (BuildContext context, ProcedureViewModel model, Widget child) => - NetworkBaseView( + AppScaffold( + isShowAppBar: true, baseViewModel: model, - child: SingleChildScrollView( + appBar: PatientSearchHeader( + title: "Update Procedure", + ), + body: SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 0.9, child: Form( @@ -165,49 +173,24 @@ class _UpdateProcedureWidgetState extends State { SizedBox( height: 70.0, ), - Container( - margin: - EdgeInsets.all(SizeConfig.widthMultiplier * 2), - child: Column( - children: [ - AppButton( - color: AppGlobal.appGreenColor, - title: TranslationBase.of(context) - .updateProcedure - .toUpperCase(), - onPressed: () { - Navigator.pop(context); - updateProcedure( - limetNO: widget.limetNo, - orderNo: widget.orderNo, - orderType: selectedType.toString(), - categorieId: widget.categoryId, - procedureId: widget.procedureId, - entityList: entityList, - patient: widget.patient, - model: widget.model, - remarks: widget.remarksController.text); - // authorizationForm(context); - }, - ), - SizedBox( - height: 20.0, - ), - AppButton( - title: TranslationBase.of(context).cancel, - color: AppGlobal.appRedColor, - onPressed: () { - Navigator.pop(context); - }, - ) - ], - ), - ), ], ), ), )), ), + bottomSheet: CustomBottomSheetContainer( + label: TranslationBase.of(context).updateProcedure.toUpperCase(), + onTap: () => updateProcedure( + limetNO: widget.limetNo, + orderNo: widget.orderNo, + orderType: selectedType.toString(), + categorieId: widget.categoryId, + procedureId: widget.procedureId, + entityList: entityList, + patient: widget.patient, + model: widget.model, + remarks: widget.remarksController.text), + ), ), ); });