Refactoring procedure pages

merge-requests/992/head
RoaaGhali98 4 years ago
parent 28defc2582
commit 9f7cdba8b7

@ -9,6 +9,7 @@ import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dar
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';
import 'package:doctor_app_flutter/core/model/procedure/procedure_template_details_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_model.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart';
@ -68,28 +69,6 @@ class ProcedureViewModel extends BaseViewModel {
List<ProcedureTempleteDetailsModel> get procedureTemplateDetails =>
_procedureService.templateDetailsList;
List<ProcedureTempleteDetailsModel> entityList = List();
Future filterSearchResults(String query,List<cpe.EntityList> masterList, List<cpe.EntityList> items) async {
List<cpe.EntityList> dummySearchList = List();
dummySearchList.addAll(masterList);
if (query.isNotEmpty) {
List<cpe.EntityList> dummyListData = List();
dummySearchList.forEach((item) {
if (item.procedureName.toLowerCase().contains(query.toLowerCase())) {
dummyListData.add(item);
}
});
items.clear();
items.addAll(dummyListData);
} else {
items.clear();
items.addAll(masterList);
}
}
Future getProcedure({int mrn, String patientType, int appointmentNo}) async {
hasError = false;
await getDoctorProfile();
@ -461,7 +440,7 @@ class ProcedureViewModel extends BaseViewModel {
return false;
}
isProcedureEntityListSelected({ProcedureTempleteDetailsModel masterKey, List<ProcedureTempleteDetailsModel> entityList }) {
bool isProcedureEntityListSelected(ProcedureTempleteDetailsModel masterKey, List<ProcedureTempleteDetailsModel> entityList) {
Iterable<ProcedureTempleteDetailsModel> history = entityList.where(
(element) =>
masterKey.templateID == element.templateID &&
@ -472,6 +451,8 @@ class ProcedureViewModel extends BaseViewModel {
return false;
}
Future addProcedures(ProcedureViewModel model,
List<ProcedureTempleteDetailsModel> items,
PatiantInformtion patient,
@ -500,4 +481,41 @@ class ProcedureViewModel extends BaseViewModel {
Navigator.pop(context);
Navigator.pop(context);
}
Future filterSearchResults(String query,List<cpe.EntityList> masterList, List<cpe.EntityList> items) async {
List<cpe.EntityList> dummySearchList = List();
dummySearchList.addAll(masterList);
if (query.isNotEmpty) {
List<cpe.EntityList> dummyListData = List();
dummySearchList.forEach((item) {
if (item.procedureName.toLowerCase().contains(query.toLowerCase())) {
dummyListData.add(item);
}
});
items.clear();
items.addAll(dummyListData);
} else {
items.clear();
items.addAll(masterList);
}
}
void filterProcedureSearchResults(String query, List<ProcedureTempleteModel> masterList, List<ProcedureTempleteModel> items) {
List<ProcedureTempleteModel> dummySearchList = List();
dummySearchList.addAll(masterList);
if (query.isNotEmpty) {
List<ProcedureTempleteModel> dummyListData = List();
dummySearchList.forEach((item) {
if (item.templateName.toLowerCase().contains(query.toLowerCase())) {
dummyListData.add(item);
}
});
items.clear();
items.addAll(dummyListData);
return;
} else {
items.clear();
items.addAll(masterList);
}
}
}

@ -63,145 +63,144 @@ class _AddProcedurePageState extends State<AddProcedurePage> {
builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
AppScaffold(
isShowAppBar: false,
body: Column(
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
Expanded(
child: NetworkBaseView(
body: SingleChildScrollView(
child: Column(
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
NetworkBaseView(
baseViewModel: model,
child: SingleChildScrollView(
child: Container(
child: Padding(
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (procedureType == ProcedureType.PROCEDURE)
Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
AppText(
TranslationBase.of(context)
.pleaseEnterProcedure,
fontWeight: FontWeight.w700,
fontSize: 20,
),
],
),
SizedBox(
height:
MediaQuery.of(context).size.height * 0.02,
),
Row(
children: [
Container(
width: MediaQuery.of(context).size.width *
0.79,
child: AppTextFieldCustom(
hintText: TranslationBase.of(context)
.searchProcedureHere,
isTextFieldHasSuffix: false,
maxLines: 1,
minLines: 1,
hasBorder: true,
controller: procedureName,
),
),
SizedBox(
width: MediaQuery.of(context).size.width *
0.02,
child: Container(
child: Padding(
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (procedureType == ProcedureType.PROCEDURE)
Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
AppText(
TranslationBase.of(context)
.pleaseEnterProcedure,
fontWeight: FontWeight.w700,
fontSize: 20,
),
],
),
SizedBox(
height:
MediaQuery.of(context).size.height * 0.02,
),
Row(
children: [
Container(
width: MediaQuery.of(context).size.width *
0.79,
child: AppTextFieldCustom(
hintText: TranslationBase.of(context)
.searchProcedureHere,
isTextFieldHasSuffix: false,
maxLines: 1,
minLines: 1,
hasBorder: true,
controller: procedureName,
),
Expanded(
child: InkWell(
onTap: () {
if (procedureName.text.isNotEmpty &&
procedureName.text.length >= 3)
model.getProcedureCategory(
patientId: patient.patientId,
categoryName:
procedureName.text);
else
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.atLeastThreeCharacters,
);
},
child: Icon(
Icons.search,
size: 25.0,
),
),
SizedBox(
width: MediaQuery.of(context).size.width *
0.02,
),
Expanded(
child: InkWell(
onTap: () {
if (procedureName.text.isNotEmpty &&
procedureName.text.length >= 3)
model.getProcedureCategory(
patientId: patient.patientId,
categoryName:
procedureName.text);
else
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.atLeastThreeCharacters,
);
},
child: Icon(
Icons.search,
size: 25.0,
),
),
],
),
],
),
if ((procedureType == ProcedureType.PROCEDURE
? procedureName.text.isNotEmpty
: true) &&
model.categoriesList.length != 0)
NetworkBaseView(
baseViewModel: model,
child: EntityListCheckboxSearchWidget(
model: widget.model,
masterList:
model.categoriesList[0].entityList,
removeHistory: (item) {
setState(() {
entityList.remove(item);
});
},
addHistory: (history) {
setState(() {
entityList.add(history);
});
},
addSelectedHistories: () {
},
isEntityListSelected: (master) =>
widget.model.isEntityListSelected(master,entityList),
)),
],
),
),
],
),
],
),
if ((procedureType == ProcedureType.PROCEDURE
? procedureName.text.isNotEmpty
: true) &&
model.categoriesList.length != 0)
NetworkBaseView(
baseViewModel: model,
child: EntityListCheckboxSearchWidget(
model: widget.model,
masterList:
model.categoriesList[0].entityList,
removeProcedure: (item) {
setState(() {
entityList.remove(item);
});
},
addProcedure: (history) {
setState(() {
entityList.add(history);
});
},
addSelectedHistories: () {
},
isEntityListSelected: (master) =>
widget.model.isEntityListSelected(master,entityList),
)),
SizedBox(height: 10,)
],
),
),
),
),
),
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: procedureType.getAddButtonTitle(context),
fontWeight: FontWeight.w700,
color: AppGlobal.appGreenColor,
onPressed: () async {
if (entityList.isEmpty == true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.fillTheMandatoryProcedureDetails,
);
return;
}
await this.model.preparePostProcedure(
orderType: selectedType.toString(),
entityList: entityList,
patient: patient,
remarks: remarksController.text);
Navigator.pop(context);
},
),
],
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: procedureType.getAddButtonTitle(context),
fontWeight: FontWeight.w700,
color: AppGlobal.appGreenColor,
onPressed: () async {
if (entityList.isEmpty == true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.fillTheMandatoryProcedureDetails,
);
return;
}
await this.model.preparePostProcedure(
orderType: selectedType.toString(),
entityList: entityList,
patient: patient,
remarks: remarksController.text);
Navigator.pop(context);
},
),
],
),
),
),
],
],
),
),
),
);

@ -4,7 +4,7 @@ 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/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart';
import 'package:doctor_app_flutter/screens/prescription/add_prescription/add_prescription.dart';
import 'package:doctor_app_flutter/screens/procedures/add_favourite_procedure.dart';
import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/add_favourite_procedure.dart';
import 'package:doctor_app_flutter/screens/procedures/add_procedure_page.dart';
import 'package:doctor_app_flutter/screens/procedures/procedure_type.dart';
import 'package:doctor_app_flutter/screens/procedures/tab_widget.dart';

@ -13,8 +13,8 @@ import '../../config/config.dart';
class EntityListCheckboxSearchWidget extends StatefulWidget {
final ProcedureViewModel model;
final Function addSelectedHistories;
final Function(EntityList) removeHistory;
final Function(EntityList) addHistory;
final Function(EntityList) removeProcedure;
final Function(EntityList) addProcedure;
final bool Function(EntityList) isEntityListSelected;
final List<EntityList> masterList;
@ -22,9 +22,9 @@ class EntityListCheckboxSearchWidget extends StatefulWidget {
{Key key,
this.model,
this.addSelectedHistories,
this.removeHistory,
this.removeProcedure,
this.masterList,
this.addHistory,
this.addProcedure,
this.isEntityListSelected,
})
: super(key: key);
@ -103,11 +103,11 @@ class _EntityListCheckboxSearchWidgetState
setState(() {
if (widget.isEntityListSelected(
historyInfo)) {
widget.removeHistory(
widget.removeProcedure(
historyInfo);
} else {
widget
.addHistory(historyInfo);
.addProcedure(historyInfo);
}
});
}),

@ -13,7 +13,6 @@ class ExpansionProcedure extends StatefulWidget {
final Function(ProcedureTempleteDetailsModel) removeFavProcedure;
final Function(ProcedureTempleteDetailsModel) addFavProcedure;
final Function(ProcedureTempleteDetailsModel) selectProcedures;
final bool Function(ProcedureTempleteModel) isEntityListSelected;
final bool Function(ProcedureTempleteDetailsModel) isEntityFavListSelected;
final bool isProcedure;

@ -4,8 +4,8 @@ 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/prescription/prescription_checkout_screen.dart';
import 'package:doctor_app_flutter/screens/procedures/entity_list_fav_procedure.dart';
import 'package:doctor_app_flutter/screens/procedures/procedure_checkout_screen.dart';
import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/entity_list_fav_procedure.dart';
import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/procedure_checkout_screen.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';
@ -44,7 +44,7 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
@override
Widget build(BuildContext context) {
return BaseView<ProcedureViewModel>(
builder: (BuildContext context, ProcedureViewModel model_,
builder: (BuildContext context, ProcedureViewModel procedureViewModel,
Widget child) =>
AppScaffold(
isShowAppBar: false,
@ -67,7 +67,7 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
});
},
isEntityFavListSelected: (master) =>
isEntityListSelected(master),
procedureViewModel.isProcedureEntityListSelected(master, entityList),
groupProcedures: groupProcedures,
selectProcedures: (selectedProcedure) {
setState(() {
@ -131,15 +131,4 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
})),
);
}
bool isEntityListSelected(ProcedureTempleteDetailsModel masterKey) {
Iterable<ProcedureTempleteDetailsModel> history = entityList.where(
(element) =>
masterKey.templateID == element.templateID &&
masterKey.procedureName == element.procedureName);
if (history.length > 0) {
return true;
}
return false;
}
}

@ -8,8 +8,8 @@ import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../../config/config.dart';
import '../../widgets/shared/text_fields/app_text_field_custom_serach.dart';
import '../../../config/config.dart';
import '../../../widgets/shared/text_fields/app_text_field_custom_serach.dart';
class EntityListCheckboxSearchFavProceduresWidget extends StatefulWidget {
final ProcedureViewModel model;
@ -95,7 +95,7 @@ class _EntityListCheckboxSearchFavProceduresWidgetState
AppTextFieldCustomSearch(
searchController: patientFileInfoController,
onChangeFun: (value) {
filterSearchResults(value);
widget.model.filterProcedureSearchResults(value, widget.masterList, items);
},
marginTop: 5,
inputFormatters: [
@ -140,28 +140,4 @@ class _EntityListCheckboxSearchFavProceduresWidgetState
),
);
}
///TODO Elham* move it to view model and try to make it work for every search
void filterSearchResults(String query) {
List<ProcedureTempleteModel> dummySearchList = List();
dummySearchList.addAll(widget.masterList);
if (query.isNotEmpty) {
List<ProcedureTempleteModel> dummyListData = List();
dummySearchList.forEach((item) {
if (item.templateName.toLowerCase().contains(query.toLowerCase())) {
dummyListData.add(item);
}
});
setState(() {
items.clear();
items.addAll(dummyListData);
});
return;
} else {
setState(() {
items.clear();
items.addAll(widget.masterList);
});
}
}
}

@ -1,9 +1,6 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
import 'package:doctor_app_flutter/core/model/procedure/procedure_template_details_model.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/locator.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/utils/translations_delegate_base_utils.dart';
@ -13,8 +10,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../config/config.dart';
import '../../../config/config.dart';
class ProcedureCheckOutScreen extends StatefulWidget {
final List<ProcedureTempleteDetailsModel> items;
@ -221,7 +217,7 @@ class _ProcedureCheckOutScreenState extends State<ProcedureCheckOutScreen> {
color: AppGlobal.appGreenColor,
fontWeight: FontWeight.w700,
onPressed: () async {
addProcedures(model);
model.addProcedures(model, widget.items, widget.patient, remarksController, context);
},
),
],
@ -230,29 +226,4 @@ class _ProcedureCheckOutScreenState extends State<ProcedureCheckOutScreen> {
),
);
}
Future addProcedures(ProcedureViewModel model) async {
List<EntityList> entityList = List();
widget.items.forEach((element) {
entityList.add(
EntityList(
procedureId: element.procedureID,
remarks: element.remarks,
categoryID: element.categoryID,
type: element.type,
),
);
});
await locator<AnalyticsService>().logEvent(
eventCategory: "Procedure Checkout Screen",
eventAction: "Add New Procedure",
);
Navigator.pop(context);
await model.preparePostProcedure(
entityList: entityList,
patient: widget.patient,
remarks: remarksController.text);
Navigator.pop(context);
Navigator.pop(context);
}
}
Loading…
Cancel
Save