Refactoring some issues in procedures screen

merge-requests/985/head
RoaaGhali98 4 years ago
parent d743c2c99c
commit e85a32274a

@ -24,7 +24,6 @@ import 'package:doctor_app_flutter/screens/procedures/ProcedureType.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:flutter/cupertino.dart';
import '../../widgets/shared/loader/gif_loader_dialog_utils.dart';
class ProcedureViewModel extends BaseViewModel {
//TODO Hussam clean it
@ -68,8 +67,24 @@ class ProcedureViewModel extends BaseViewModel {
List<ProcedureTempleteDetailsModel> get procedureTemplateDetails =>
_procedureService.templateDetailsList;
List<PatientLabOrdersList> _patientLabOrdersListClinic = List();
List<PatientLabOrdersList> _patientLabOrdersListHospital = 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;
@ -433,4 +448,12 @@ class ProcedureViewModel extends BaseViewModel {
Utils.showErrorToast(error);
}
}
bool isEntityListSelected(cpe.EntityList masterKey, List<cpe.EntityList> entityList) {
Iterable<cpe.EntityList> history = entityList.where((element) => masterKey.procedureId == element.procedureId);
if (history.length > 0) {
return true;
}
return false;
}
}

@ -167,7 +167,7 @@ class _AddProcedurePageState extends State<AddProcedurePage> {
// widget.addSelectedHistories();
},
isEntityListSelected: (master) =>
isEntityListSelected(master),
widget.model.isEntityListSelected(master,entityList),
)),
],
),
@ -210,15 +210,4 @@ class _AddProcedurePageState extends State<AddProcedurePage> {
),
);
}
///TODO Elham* move it to view model
bool isEntityListSelected(EntityList masterKey) {
Iterable<EntityList> history = entityList
.where((element) => masterKey.procedureId == element.procedureId);
if (history.length > 0) {
return true;
}
return false;
}
}

@ -4,12 +4,10 @@ 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/tab_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../core/viewModel/project_view_model.dart';
import '../../utils/tab_utils.dart';
import 'ProcedureType.dart';
import 'add-favourite-procedure.dart';
import 'add-procedure-page.dart';
@ -94,7 +92,7 @@ class _BaseAddProcedureTabPageState extends State<BaseAddProcedureTabPage>
top: 0, left: 0, right: 0, bottom: 0),
unselectedLabelColor: Colors.grey[800],
tabs: [
tabWidget(
TabWidget.tabWidget(
screenSize,
_activeTab == 0,
@ -102,7 +100,7 @@ class _BaseAddProcedureTabPageState extends State<BaseAddProcedureTabPage>
.getFavouriteTabName(context),
isFirst: true,context: context
),
tabWidget(
TabWidget.tabWidget(
screenSize,
_activeTab == 1,
procedureType.getAllLabelName(context),
@ -148,41 +146,4 @@ class _BaseAddProcedureTabPageState extends State<BaseAddProcedureTabPage>
),
);
}
///TODO Elham* move it to new file
Widget tabWidget(
Size screenSize,
bool isActive,
String title, {
int counter = -1,
bool isFirst = false,
bool isMiddle = false,
bool isLast = false,
context,
}) {
ProjectViewModel projectViewModel = Provider.of(context);
return Center(
child: Container(
height: TabUtils.getTabHeight(context),
decoration: TabUtils.getBoxTabsBoxDecoration(
isActive: isActive,
isFirst: isFirst,
isMiddle: isMiddle,
isLast: isLast,
projectViewModel: projectViewModel),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TabUtils.getTabText(title: title, isActive: isActive),
if (counter != -1)
TabUtils.getTabCounter(isActive: isActive, counter: counter)
],
),
),
);
}
}

@ -84,7 +84,7 @@ class _EntityListCheckboxSearchWidgetState
suffixIcon: EvaIcons.search,
suffixIconColor: Color(0xff2B353E),
onChanged: (value) {
filterSearchResults(value);
widget.model.filterSearchResults(value, widget.masterList, items);
},
hasBorder: false,
),
@ -246,29 +246,4 @@ class _EntityListCheckboxSearchWidgetState
),
);
}
///TODO Elham* move it to view model
void filterSearchResults(String query) {
List<EntityList> dummySearchList = List();
dummySearchList.addAll(widget.masterList);
if (query.isNotEmpty) {
List<EntityList> dummyListData = List();
dummySearchList.forEach((item) {
if (item.procedureName.toLowerCase().contains(query.toLowerCase())) {
dummyListData.add(item);
}
});
setState(() {
items.clear();
items.addAll(dummyListData);
});
return;
} else {
setState(() {
items.clear();
items.addAll(widget.masterList);
});
}
}
}

@ -85,126 +85,125 @@ class _ProcedureCheckOutScreenState extends State<ProcedureCheckOutScreen> {
SizedBox(
height: 30,
),
///TODO Elham* user view list builder
...List.generate(
widget.items.length,
(index) => Container(
margin: EdgeInsets.only(bottom: 15.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.all(Radius.circular(10.0))),
child: ExpansionTile(
initiallyExpanded: true,
title: Row(
children: [
Icon(
Icons.check_box,
color: Color(0xffD02127),
size: 30.5,
),
SizedBox(
width: 6.0,
),
Expanded(
child: AppText(
widget.items[index].procedureName)),
],
),
ListView.builder(
scrollDirection: Axis.vertical,
itemCount: widget.items.length,
shrinkWrap: true,
itemBuilder: (BuildContext ctxt, int index) {
return Container(
margin: EdgeInsets.only(bottom: 15.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.all(Radius.circular(10.0))),
child: ExpansionTile(
initiallyExpanded: true,
title: Row(
children: [
Container(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 11),
child: AppText(
TranslationBase.of(context)
.orderType,
fontWeight: FontWeight.w700,
color: Color(0xff2B353E),
),
),
],
),
Row(
children: [
Radio(
activeColor: Color(0xFFD02127),
value: 0,
groupValue:
widget.items[index].selectedType,
onChanged: (value) {
widget.items[index].selectedType =
0;
setState(() {
widget.items[index].type =
value.toString();
});
},
),
AppText(
'routine',
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
Radio(
activeColor: Color(0xFFD02127),
groupValue:
widget.items[index].selectedType,
value: 1,
onChanged: (value) {
widget.items[index].selectedType =
1;
setState(() {
widget.items[index].type =
value.toString();
});
},
),
AppText(
TranslationBase.of(context).urgent,
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
],
),
],
),
),
Icon(
Icons.check_box,
color: Color(0xffD02127),
size: 30.5,
),
SizedBox(
height: 2.0,
width: 6.0,
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 12, vertical: 15.0),
child: TextFields(
hintText: TranslationBase.of(context).remarks,
controller: remarksController,
onChanged: (value) {
widget.items[index].remarks = value;
},
minLines: 3,
maxLines: 5,
borderWidth: 0.5,
borderColor: Colors.grey[500],
Expanded(
child:
AppText(widget.items[index].procedureName)),
],
),
children: [
Container(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 11),
child: AppText(
TranslationBase.of(context).orderType,
fontWeight: FontWeight.w700,
color: Color(0xff2B353E),
),
),
],
),
Row(
children: [
Radio(
activeColor: Color(0xFFD02127),
value: 0,
groupValue:
widget.items[index].selectedType,
onChanged: (value) {
widget.items[index].selectedType = 0;
setState(() {
widget.items[index].type =
value.toString();
});
},
),
AppText(
'routine',
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
Radio(
activeColor: Color(0xFFD02127),
groupValue:
widget.items[index].selectedType,
value: 1,
onChanged: (value) {
widget.items[index].selectedType = 1;
setState(() {
widget.items[index].type =
value.toString();
});
},
),
AppText(
TranslationBase.of(context).urgent,
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
],
),
],
),
),
SizedBox(
height: 19.0,
),
SizedBox(
height: 2.0,
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 12, vertical: 15.0),
child: TextFields(
hintText: TranslationBase.of(context).remarks,
controller: remarksController,
onChanged: (value) {
widget.items[index].remarks = value;
},
minLines: 3,
maxLines: 5,
borderWidth: 0.5,
borderColor: Colors.grey[500],
),
//DividerWithSpacesAround(),
],
),
)),
),
SizedBox(
height: 19.0,
),
//DividerWithSpacesAround(),
],
),
);
}),
SizedBox(
height: 90,
),
@ -222,31 +221,7 @@ class _ProcedureCheckOutScreenState extends State<ProcedureCheckOutScreen> {
color: AppGlobal.appGreenColor,
fontWeight: FontWeight.w700,
onPressed: () async {
///TODO Elham* move it to function
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);
addProcedures(model);
},
),
],
@ -255,4 +230,29 @@ 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);
}
}

@ -127,43 +127,46 @@ class ProcedureScreen extends StatelessWidget {
),
),
if (model.procedureList.isNotEmpty)
///TODO Elham* use list view builder
...List.generate(
model.procedureList[0].rowcount,
(index) => ProcedureCard(
categoryID: model.procedureList[0].entityList[index].categoryID,
entityList: model.procedureList[0].entityList[index],
onTap: () {
if (model.procedureList[0].entityList[index].categoryID ==
2 ||
model.procedureList[0].entityList[index].categoryID == 4)
updateProcedureForm(context,
model: model,
patient: patient,
remarks: model
.procedureList[0].entityList[index].remarks,
orderType: model
.procedureList[0].entityList[index].orderType
.toString(),
orderNo: model
.procedureList[0].entityList[index].orderNo,
procedureName: model.procedureList[0]
.entityList[index].procedureName,
categoreId: model
.procedureList[0].entityList[index].categoryID
.toString(),
procedureId: model.procedureList[0]
.entityList[index].procedureId,
limetNo: model.procedureList[0].entityList[index]
.lineItemNo);
// } else
// Helpers.showErrorToast(
// 'You Cant Update This Procedure');
},
patient: patient,
doctorID: model?.doctorProfile?.doctorID,
),
),
ListView.builder(
scrollDirection: Axis.vertical,
itemCount: model.procedureList[0].rowcount,
shrinkWrap: true,
itemBuilder: (BuildContext ctxt, int index) {
return ProcedureCard(
categoryID: model
.procedureList[0].entityList[index].categoryID,
entityList: model.procedureList[0].entityList[index],
onTap: () {
if (model.procedureList[0].entityList[index].categoryID ==
2 ||
model.procedureList[0].entityList[index].categoryID == 4)
updateProcedureForm(context,
model: model,
patient: patient,
remarks: model.procedureList[0]
.entityList[index].remarks,
orderType: model.procedureList[0]
.entityList[index].orderType
.toString(),
orderNo: model.procedureList[0]
.entityList[index].orderNo,
procedureName: model.procedureList[0]
.entityList[index].procedureName,
categoreId: model.procedureList[0]
.entityList[index].categoryID
.toString(),
procedureId: model.procedureList[0]
.entityList[index].procedureId,
limetNo: model.procedureList[0]
.entityList[index].lineItemNo);
// } else
// Helpers.showErrorToast(
// 'You Cant Update This Procedure');
},
patient: patient,
doctorID: model?.doctorProfile?.doctorID,
);
}),
if (model.state == ViewState.ErrorLocal ||
(model.procedureList.isNotEmpty &&
model.procedureList[0].entityList.isEmpty))

@ -0,0 +1,41 @@
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/utils/tab_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class TabWidget {
static Widget tabWidget(
Size screenSize,
bool isActive,
String title,
{
int counter = -1,
bool isFirst = false,
bool isMiddle = false,
bool isLast = false,
context,
}) {
ProjectViewModel projectViewModel = Provider.of(context);
return Center(
child: Container(
height: TabUtils.getTabHeight(context),
decoration: TabUtils.getBoxTabsBoxDecoration(
isActive: isActive,
isFirst: isFirst,
isMiddle: isMiddle,
isLast: isLast,
projectViewModel: projectViewModel),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TabUtils.getTabText(title: title, isActive: isActive),
if (counter != -1)
TabUtils.getTabCounter(isActive: isActive, counter: counter)
],
),
),
);
}
}

@ -265,15 +265,4 @@ class _UpdateProcedureWidgetState extends State<UpdateProcedureWidget> {
model.getProcedure(mrn: patient.patientMRN);
}
}
///TODO Elham* move it to view model
bool isEntityListSelected(EntityList masterKey) {
Iterable<EntityList> history = entityList
.where((element) => masterKey.procedureId == element.procedureId);
if (history.length > 0) {
return true;
}
return false;
}
}

Loading…
Cancel
Save