From 45cde2cb72255f84987b5c9d6adf0cad98f737d3 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 8 Dec 2020 14:04:06 +0200 Subject: [PATCH] refactor Referred Patient Service --- .../service/referred_patient_service.dart | 65 +++++++++++++++ lib/core/viewModel/referred_view_model.dart | 40 +++++++++ lib/locator.dart | 4 + lib/providers/referral_patient_provider.dart | 77 ----------------- lib/providers/referred_patient_provider.dart | 83 ------------------- lib/screens/dashboard_screen.dart | 7 +- .../doctor/my_referred_patient_screen.dart | 50 +++++------ .../doctor/my_referred_patient_widget.dart | 35 +++----- 8 files changed, 143 insertions(+), 218 deletions(-) create mode 100644 lib/core/service/referred_patient_service.dart create mode 100644 lib/core/viewModel/referred_view_model.dart delete mode 100644 lib/providers/referral_patient_provider.dart delete mode 100644 lib/providers/referred_patient_provider.dart diff --git a/lib/core/service/referred_patient_service.dart b/lib/core/service/referred_patient_service.dart new file mode 100644 index 00000000..0fb3de64 --- /dev/null +++ b/lib/core/service/referred_patient_service.dart @@ -0,0 +1,65 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/models/doctor/verify_referral_doctor_remarks.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; + +class ReferredPatientService extends BaseService { + List _listMyReferredPatientModel = []; + + List get listMyReferredPatientModel => + _listMyReferredPatientModel; + + Helpers helpers = Helpers(); + + RequestMyReferralPatientModel _requestMyReferralPatient = + RequestMyReferralPatientModel(); + VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = + VerifyReferralDoctorRemarks(); + + Future getMyReferredPatient() async { + await baseAppClient.post( + GET_MY_REFERRED_PATIENT, + onSuccess: (dynamic response, int statusCode) { + _listMyReferredPatientModel.clear(); + response['List_MyReferredPatient'].forEach((v) { + listMyReferredPatientModel.add(MyReferredPatientModel.fromJson(v)); + }); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _requestMyReferralPatient.toJson(), + ); + } + + Future verify(MyReferredPatientModel model) async { + _verifyreferraldoctorremarks.patientID = model.projectId; + _verifyreferraldoctorremarks.admissionNo = model.admissionNo; + _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; + _verifyreferraldoctorremarks.referredDoctorRemarks = + model.referredDoctorRemarks; + _verifyreferraldoctorremarks.referringDoctor = model.referringDoctor; + _verifyreferraldoctorremarks.firstName = model.firstName; + _verifyreferraldoctorremarks.middleName = model.middleName; + _verifyreferraldoctorremarks.lastName = model.lastName; + _verifyreferraldoctorremarks.patientMobileNumber = model.mobileNumber; + _verifyreferraldoctorremarks.patientIdentificationID = + model.patientIdentificationNo; + + await baseAppClient.post( + GET_MY_REFERRED_PATIENT, + onSuccess: (dynamic response, int statusCode) { + listMyReferredPatientModel[listMyReferredPatientModel.indexOf(model)] = + model; + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _verifyreferraldoctorremarks.toJson(), + ); + } +} diff --git a/lib/core/viewModel/referred_view_model.dart b/lib/core/viewModel/referred_view_model.dart new file mode 100644 index 00000000..b12241e3 --- /dev/null +++ b/lib/core/viewModel/referred_view_model.dart @@ -0,0 +1,40 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/hospitals_model.dart'; +import 'package:doctor_app_flutter/core/service/doctor_reply_service.dart'; +import 'package:doctor_app_flutter/core/service/hospital/hospitals_service.dart'; +import 'package:doctor_app_flutter/core/service/referral_patient_service.dart'; +import 'package:doctor_app_flutter/core/service/referred_patient_service.dart'; +import 'package:doctor_app_flutter/core/service/schedule_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_doctor_working_hours_table_model.dart'; +import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; + +import '../../locator.dart'; +import 'base_view_model.dart'; + +class ReferredPatientViewModel extends BaseViewModel { + ReferredPatientService _referralPatientService = locator(); + + List get listMyReferredPatientModel => _referralPatientService.listMyReferredPatientModel; + + Future getMyReferredPatient() async { + setState(ViewState.Busy); + await _referralPatientService.getMyReferredPatient(); + if (_referralPatientService.hasError) { + error = _referralPatientService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future verify(MyReferredPatientModel model) async { + setState(ViewState.BusyLocal); + await _referralPatientService.verify(model); + if (_referralPatientService.hasError) { + error = _referralPatientService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/locator.dart b/lib/locator.dart index e394aa52..47fce510 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -3,10 +3,12 @@ import 'package:get_it/get_it.dart'; import 'core/service/doctor_reply_service.dart'; import 'core/service/hospital/hospitals_service.dart'; import 'core/service/referral_patient_service.dart'; +import 'core/service/referred_patient_service.dart'; import 'core/service/schedule_service.dart'; import 'core/viewModel/doctor_replay_view_model.dart'; import 'core/viewModel/hospital_view_model.dart'; import 'core/viewModel/referral_view_model.dart'; +import 'core/viewModel/referred_view_model.dart'; import 'core/viewModel/schedule_view_model.dart'; GetIt locator = GetIt.instance; @@ -18,10 +20,12 @@ void setupLocator() { locator.registerLazySingleton(() => DoctorReplyService()); locator.registerLazySingleton(() => ScheduleService()); locator.registerLazySingleton(() => ReferralPatientService()); + locator.registerLazySingleton(() => ReferredPatientService()); /// View Model locator.registerFactory(() => HospitalViewModel()); locator.registerFactory(() => DoctorReplayViewModel()); locator.registerFactory(() => ScheduleViewModel()); locator.registerFactory(() => ReferralPatientViewModel()); + locator.registerFactory(() => ReferredPatientViewModel()); } diff --git a/lib/providers/referral_patient_provider.dart b/lib/providers/referral_patient_provider.dart deleted file mode 100644 index afc4d2b7..00000000 --- a/lib/providers/referral_patient_provider.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/models/doctor/request_add_referred_doctor_remarks.dart'; -import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/util/helpers.dart'; -import 'package:flutter/cupertino.dart'; - - -class MyReferralPatientProvider with ChangeNotifier { - List listMyReferralPatientModel = []; - - bool isLoading = true; - bool isError = false; - String error = ''; - Helpers helpers = Helpers(); - BaseAppClient baseAppClient = BaseAppClient(); - - - RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); - - MyReferralPatientProvider() { - getMyReferralPatient(); - } - - getMyReferralPatient() async { - try { - await baseAppClient.post(GET_MY_REFERRAL_PATIENT, - body: _requestMyReferralPatient.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_MyReferralPatient'].forEach((v) { - listMyReferralPatientModel.add(MyReferralPatientModel.fromJson(v)); - }); - isError = false; - isLoading = false; - }, - onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, - ); - notifyListeners(); - } catch (error) { - isLoading = false; - isError = true; - this.error = 'Something wrong happened, please contact the admin'; - notifyListeners(); - } - } - - Future replay( - String referredDoctorRemarks, MyReferralPatientModel model) async { - try { - _requestAddReferredDoctorRemarks.admissionNo = model.admissionNo; - _requestAddReferredDoctorRemarks.patientID = model.patientID; - _requestAddReferredDoctorRemarks.referredDoctorRemarks = referredDoctorRemarks; - _requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo; - _requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor; - await baseAppClient.post(ADD_REFERRED_DOCTOR_REMARKS, - body: _requestAddReferredDoctorRemarks.toJson(), - onSuccess: (dynamic body, int statusCode) { - model.referredDoctorRemarks = referredDoctorRemarks; - listMyReferralPatientModel[ - listMyReferralPatientModel.indexOf(model)] = model; - notifyListeners(); - }, - onFailure: (String error, int statusCode) { - throw (error); - }, - ); - } catch (error) { - throw error; - } - } -} diff --git a/lib/providers/referred_patient_provider.dart b/lib/providers/referred_patient_provider.dart deleted file mode 100644 index 2aba752c..00000000 --- a/lib/providers/referred_patient_provider.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; -import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/models/doctor/verify_referral_doctor_remarks.dart'; - -import 'package:flutter/cupertino.dart'; -import '../util/helpers.dart'; - - -class MyReferredPatientProvider with ChangeNotifier { - List listMyReferredPatientModel = []; - - bool isLoading = true; - bool isError = false; - String error = ''; - Helpers helpers = Helpers(); - RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = VerifyReferralDoctorRemarks(); - MyReferredPatientProvider() { - getMyReferralPatient(); - } - BaseAppClient baseAppClient = BaseAppClient(); - - - getMyReferralPatient() async { - try { - await baseAppClient.post(GET_MY_REFERRED_PATIENT, - body: _requestMyReferralPatient.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_MyReferredPatient'].forEach((v) { - listMyReferredPatientModel.add(MyReferredPatientModel.fromJson(v)); - }); - isError = false; - isLoading = false; - }, - onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, - ); - notifyListeners(); - } catch (error) { - isLoading = false; - isError = true; - this.error = 'Something wrong happened, please contact the admin'; - notifyListeners(); - } - } - - - Future verify( - MyReferredPatientModel model) async { - try { - _verifyreferraldoctorremarks.patientID=model.projectId; - _verifyreferraldoctorremarks.admissionNo =model.admissionNo; - _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; - _verifyreferraldoctorremarks.referredDoctorRemarks=model.referredDoctorRemarks; - _verifyreferraldoctorremarks.referringDoctor=model.referringDoctor; - _verifyreferraldoctorremarks.firstName=model.firstName; - _verifyreferraldoctorremarks.middleName=model.middleName; - _verifyreferraldoctorremarks.lastName=model.lastName; - _verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber; - _verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo; - - await baseAppClient.post(GET_MY_REFERRED_PATIENT, - body: _verifyreferraldoctorremarks.toJson(), - onSuccess: (dynamic body, int statusCode) { - - listMyReferredPatientModel[ - listMyReferredPatientModel.indexOf(model)] = model; - notifyListeners(); - }, - onFailure: (String error, int statusCode) { - throw(error); - }, - ); - } catch (error) { - throw(error); - } - } -} diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 6b2bd275..bb1f8252 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -8,7 +8,6 @@ import 'package:doctor_app_flutter/providers/auth_provider.dart'; import 'package:doctor_app_flutter/providers/hospital_provider.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; -import 'package:doctor_app_flutter/providers/referred_patient_provider.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; @@ -854,11 +853,7 @@ class _DashboardScreenState extends State { context, MaterialPageRoute( builder: (context) => - ChangeNotifierProvider( - create: (_) => - MyReferredPatientProvider(), - child: MyReferredPatient(), - ), + MyReferredPatient(), ), ); }, diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index ec91b4c3..5fd18cd0 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -1,42 +1,33 @@ -import 'package:doctor_app_flutter/providers/referred_patient_provider.dart'; +import 'package:doctor_app_flutter/core/viewModel/referred_view_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/doctor/my_referred_patient_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import '../../widgets/shared/app_scaffold_widget.dart'; class MyReferredPatient extends StatelessWidget { - MyReferredPatientProvider referredPatientProvider; @override Widget build(BuildContext context) { - referredPatientProvider = Provider.of(context); - return AppScaffold( + return BaseView( + onModelReady: (model) => model.getMyReferredPatient(), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, appBarTitle: TranslationBase.of(context).myReferredPatient, - body: referredPatientProvider.isLoading - ? DrAppCircularProgressIndeicator() - : referredPatientProvider.isError - ? Center( - child: AppText( - referredPatientProvider.error, - color: Theme.of(context).errorColor, - ), - ) - : referredPatientProvider.listMyReferredPatientModel.length == 0 - ? Center( - child: AppText( - TranslationBase.of(context).errorNoSchedule, - color: Theme.of(context).errorColor, - ), - ) - : Container( - padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), - child: ListView( - children: [ - Column( + body: model.listMyReferredPatientModel.length == 0 + ? Center( + child: AppText( + TranslationBase.of(context).errorNoSchedule, + color: Theme.of(context).errorColor, + ), + ) + : Container( + padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), + child: ListView( + children: [ + Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( @@ -45,11 +36,12 @@ class MyReferredPatient extends StatelessWidget { Container( child: Column( //children: referredPatientProvider.listMyReferralPatientModel.map((item) { - children: referredPatientProvider + children: model .listMyReferredPatientModel .map((item) { return MyReferredPatientWidget( myReferredPatientModel: item, + model:model ); }).toList(), ), @@ -59,6 +51,6 @@ class MyReferredPatient extends StatelessWidget { ], ), ), - ); + )); } } diff --git a/lib/widgets/doctor/my_referred_patient_widget.dart b/lib/widgets/doctor/my_referred_patient_widget.dart index c4ad4f29..d9adaf3b 100644 --- a/lib/widgets/doctor/my_referred_patient_widget.dart +++ b/lib/widgets/doctor/my_referred_patient_widget.dart @@ -1,27 +1,22 @@ -import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.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/viewModel/referred_view_model.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:flutter/material.dart'; - -import 'package:doctor_app_flutter/config/size_config.dart'; - -import 'package:doctor_app_flutter/providers/referred_patient_provider.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/shared/Text.dart'; -import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_button.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; import 'package:flutter/cupertino.dart'; - -import 'package:provider/provider.dart'; +import 'package:flutter/material.dart'; class MyReferredPatientWidget extends StatefulWidget { final MyReferredPatientModel myReferredPatientModel; + final ReferredPatientViewModel model; - MyReferredPatientWidget({Key key, this.myReferredPatientModel}); + MyReferredPatientWidget({Key key, this.myReferredPatientModel, this.model}); @override _MyReferredPatientWidgetState createState() => @@ -293,23 +288,17 @@ class _MyReferredPatientWidgetState extends State { child: Button( onTap: () async { try { - setState(() { - _isLoading = true; - }); - await Provider.of(context, listen: false).verify(widget.myReferredPatientModel); - setState(() { - _isLoading = false; - }); + + await widget.model.verify(widget.myReferredPatientModel); + DrAppToastMsg.showSuccesToast('Verify Successfully'); } catch (e) { - setState(() { - _isLoading = false; - }); + DrAppToastMsg.showErrorToast(e); } }, title: TranslationBase.of(context).verify, - loading: _isLoading, + loading: widget.model.state == ViewState.BusyLocal, ), ) ],