Merge branch 'development' into medical-profile-services

merge-requests/679/head
mosazaid 5 years ago
commit 70d171a599

@ -328,4 +328,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69
COCOAPODS: 1.10.0.rc.1
COCOAPODS: 1.10.1

@ -24,7 +24,7 @@ class BaseAppClient {
bool isAllowAny = false}) async {
String url = BASE_URL + endPoint;
bool callLog= true;
bool callLog = true;
try {
Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
String token = await sharedPref.getString(TOKEN);
@ -48,7 +48,8 @@ class BaseAppClient {
if (body['EditedBy'] == '') {
body.remove("EditedBy");
}
body['TokenID'] = token ?? '';
body['TokenID'] = "@dm!n";// token ?? '';
// body['TokenID'] = "@dm!n" ?? '';
String lang = await sharedPref.getString(APP_Language);
if (lang != null && lang == 'ar')
body['LanguageID'] = 1;
@ -74,9 +75,9 @@ class BaseAppClient {
//int projectID = await sharedPref.getInt(PROJECT_ID);
//if (projectID == 2 || projectID == 3)
// body['PatientOutSA'] = true;
// body['PatientOutSA'] = true;
//else
body['PatientOutSA'] = false;
body['PatientOutSA'] = false;
body['DeviceTypeID'] = Platform.isAndroid ? 1 : 2;
print("URL : $url");
@ -104,7 +105,9 @@ class BaseAppClient {
if (body['OTP_SendType'] != null) {
onFailure(getError(parsed), statusCode);
} else if (!isAllowAny) {
await Provider.of<AuthenticationViewModel>(AppGlobal.CONTEX, listen: false).logout();
await Provider.of<AuthenticationViewModel>(AppGlobal.CONTEX,
listen: false)
.logout();
Helpers.showErrorToast('Your session expired Please login again');
}
if (isAllowAny) {

@ -4,8 +4,8 @@ const MAX_SMALL_SCREEN = 660;
const ONLY_NUMBERS = "[0-9]";
const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]";
// const BASE_URL = 'https://hmgwebservices.com/';
const BASE_URL = 'https://uat.hmgwebservices.com/';
const BASE_URL = 'https://hmgwebservices.com/';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh";
const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList";
const PATIENT_PROGRESS_NOTE_URL =
@ -283,11 +283,14 @@ const GET_SICK_LEAVE_PATIENT = "Services/Patients.svc/REST/GetPatientSickLeave";
const GET_MY_OUT_PATIENT =
"Services/DoctorApplication.svc/REST/GetMyOutPatient";
const PATIENT_MEDICAL_REPORT_GET_LIST = "Services/Patients.svc/REST/DAPP_ListMedicalReport";
const PATIENT_MEDICAL_REPORT_GET_TEMPLATE = "Services/Patients.svc/REST/DAPP_GetTemplateByID";
const PATIENT_MEDICAL_REPORT_INSERT = "Services/Patients.svc/REST/DAPP_InsertMedicalReport";
const PATIENT_MEDICAL_REPORT_VERIFIED = "Services/Patients.svc/REST/DAPP_VerifiedMedicalReport";
const PATIENT_MEDICAL_REPORT_GET_LIST =
"Services/Patients.svc/REST/DAPP_ListMedicalReport";
const PATIENT_MEDICAL_REPORT_GET_TEMPLATE =
"Services/Patients.svc/REST/DAPP_GetTemplateByID";
const PATIENT_MEDICAL_REPORT_INSERT =
"Services/Patients.svc/REST/DAPP_InsertMedicalReport";
const PATIENT_MEDICAL_REPORT_VERIFIED =
"Services/Patients.svc/REST/DAPP_VerifiedMedicalReport";
const GET_PROCEDURE_TEMPLETE =
'Services/Doctors.svc/REST/DAPP_ProcedureTemplateGet';

@ -115,7 +115,7 @@ class ProcedureViewModel extends BaseViewModel {
tempId = templateId;
hasError = false;
//_insuranceCardService.clearInsuranceCard();
setState(ViewState.Busy);
setState(ViewState.BusyLocal);
await _procedureService.getProcedureTemplateDetails(templateId: templateId);
if (_procedureService.hasError) {
error = _procedureService.error;

@ -0,0 +1,189 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.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_template_details_request_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ExpansionProcedure extends StatefulWidget {
final ProcedureTempleteModel procedureTempleteModel;
final ProcedureViewModel model;
final Function(ProcedureTempleteDetailsModel) removeFavProcedure;
final Function(ProcedureTempleteDetailsModel) addFavProcedure;
final Function(ProcedureTempleteDetailsModel) addProceduresRemarks;
final bool Function(ProcedureTempleteModel) isEntityListSelected;
final bool Function(ProcedureTempleteDetailsModel) isEntityFavListSelected;
const ExpansionProcedure(
{Key key,
this.procedureTempleteModel,
this.model,
this.removeFavProcedure,
this.addFavProcedure,
this.addProceduresRemarks,
this.isEntityListSelected,
this.isEntityFavListSelected})
: super(key: key);
@override
_ExpansionProcedureState createState() => _ExpansionProcedureState();
}
class _ExpansionProcedureState extends State<ExpansionProcedure> {
bool _isShowMore = false;
List<ProcedureTempleteDetailsModel> _templateDetailsList = List();
BaseAppClient baseAppClient = BaseAppClient();
@override
Widget build(BuildContext context) {
return Column(
children: [
InkWell(
onTap: () async {
if (!_isShowMore && _templateDetailsList.isEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
await getProcedureTemplateDetails(widget.procedureTempleteModel.templateID);
GifLoaderDialogUtils.hideDialog(context);
}
setState(() {
_isShowMore = !_isShowMore;
});
},
child: Container(
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(5.0),
)),
child: Row(
children: <Widget>[
Expanded(
child: Row(
children: [
Icon(
Icons.folder,
size: 20,
color: Color(0xff575757),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10, vertical: 0),
child: AppText(
"Procedures for " +
widget.procedureTempleteModel.templateName,
fontSize: 16.0,
variant: "bodyText",
bold: true,
color: Color(0xff575757)),
),
),
],
)),
Container(
width: 25,
height: 25,
child: Icon(
_isShowMore
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down,
color: Colors.grey[800],
size: 22,
),
)
],
),
),
),
if (_isShowMore)
AnimatedContainer(
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.white,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(5.0),
bottomRight: Radius.circular(5.0),
)),
duration: Duration(milliseconds: 7000),
child: Column(
children:
_templateDetailsList.map((itemProcedure) {
return Container(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 11),
child: Checkbox(
value: widget
.isEntityFavListSelected(itemProcedure),
activeColor: Color(0xffD02127),
onChanged: (bool newValue) {
setState(() {
if (widget.isEntityFavListSelected(itemProcedure)) {
widget.removeFavProcedure(itemProcedure);
} else {
widget.addFavProcedure(itemProcedure);
}
});
}),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10, vertical: 0),
child: AppText(itemProcedure.procedureName,
fontSize: 14.0,
variant: "bodyText",
bold: true,
color: Color(0xff575757)),
),
),
],
),
],
),
),
);
}).toList(),
),
),
SizedBox(
height: 10,
),
],
);
}
getProcedureTemplateDetails(templateId)async {
ProcedureTempleteDetailsRequestModel _procedureTempleteDetailsRequestModel = ProcedureTempleteDetailsRequestModel(templateID: templateId, searchType: 1, patientID: 0);
_templateDetailsList.clear();
await baseAppClient.post(GET_PROCEDURE_TEMPLETE_DETAILS,
onSuccess: (dynamic response, int statusCode) {
response['HIS_ProcedureTemplateDetailsList'].forEach((template) {
setState(() {
_templateDetailsList.add(ProcedureTempleteDetailsModel.fromJson(template));
});
});
}, onFailure: (String error, int statusCode) {
DrAppToastMsg.showErrorToast(error);
}, body: _procedureTempleteDetailsRequestModel.toJson());
}
}

@ -20,15 +20,18 @@ class AddFavouriteProcedure extends StatefulWidget {
const AddFavouriteProcedure({Key key, this.model, this.patient})
: super(key: key);
@override
_AddFavouriteProcedureState createState() => _AddFavouriteProcedureState();
}
class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
_AddFavouriteProcedureState({this.patient, this.model});
ProcedureViewModel model;
PatiantInformtion patient;
List<ProcedureTempleteDetailsModel> entityList = List();
@override
Widget build(BuildContext context) {
return BaseView<ProcedureViewModel>(
@ -49,12 +52,7 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
Expanded(
child: NetworkBaseView(
baseViewModel: model,
child:
// selectedCategory != null
// ? selectedCategory['categoryId'] == 02 ||
// selectedCategory['categoryId'] == 03
// ?
EntityListCheckboxSearchFavProceduresWidget(
child: EntityListCheckboxSearchFavProceduresWidget(
model: widget.model,
masterList: widget.model.procedureTemplate,
removeFavProcedure: (item) {
@ -73,30 +71,7 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
},
isEntityFavListSelected: (master) =>
isEntityListSelected(master),
)
// : ProcedureListWidget(
// model: widget.model,
// masterList: widget.model
// .categoriesList[0].entityList,
// removeHistory: (item) {
// setState(() {
// entityList.remove(item);
// });
// },
// addHistory: (history) {
// setState(() {
// entityList.add(history);
// });
// },
// addSelectedHistories: () {
// //TODO build your fun herr
// // widget.addSelectedHistories();
// },
// isEntityListSelected: (master) =>
// isEntityListSelected(master),
// )
// : null,
),
)),
),
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
@ -108,8 +83,6 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
color: Color(0xff359846),
fontWeight: FontWeight.w700,
onPressed: () {
//print(entityList.toString());
onPressed:
if (entityList.isEmpty == true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
@ -119,12 +92,6 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
}
Navigator.pop(context);
// postProcedure(
// orderType: selectedType.toString(),
// entityList: entityList,
// patient: patient,
// model: widget.model,
// remarks: remarksController.text);
},
),
],
@ -138,7 +105,7 @@ class _AddFavouriteProcedureState extends State<AddFavouriteProcedure> {
bool isEntityListSelected(ProcedureTempleteDetailsModel masterKey) {
Iterable<ProcedureTempleteDetailsModel> history = entityList
.where((element) => masterKey.templateID == element.templateID);
.where((element) => masterKey.templateID == element.templateID && masterKey.procedureName == element.procedureName);
if (history.length > 0) {
return true;
}

@ -11,6 +11,8 @@ import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'ExpansionProcedure.dart';
class EntityListCheckboxSearchFavProceduresWidget extends StatefulWidget {
final ProcedureViewModel model;
final Function addSelectedHistories;
@ -70,6 +72,7 @@ class _EntityListCheckboxSearchFavProceduresWidgetState
}
TextEditingController remarksController = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
@ -102,116 +105,14 @@ class _EntityListCheckboxSearchFavProceduresWidgetState
items.length != 0
? Column(
children: items.map((historyInfo) {
return Column(
children: [
ExpansionTile(
title: InkWell(
onTap: () {
widget.model
.getProcedureTemplateDetails(
templateId:
historyInfo.templateID);
},
child: Row(
children: [
Icon(
Icons.folder,
size: 20,
color: Color(0xff575757),
),
Expanded(
child: Padding(
padding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 0),
child: AppText(
"Procedures for " +
historyInfo.templateName,
fontSize: 16.0,
variant: "bodyText",
bold: true,
color: Color(0xff575757)),
),
),
],
),
),
children: [
Column(
children: widget
.model.procedureTemplateDetails
.map((itemProcedure) {
return Container(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 12),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding:
const EdgeInsets
.symmetric(
horizontal: 11),
child: Checkbox(
value: widget
.isEntityFavListSelected(
itemProcedure),
activeColor: Color(
0xffD02127),
onChanged: (bool
newValue) {
setState(() {
if (widget
.isEntityFavListSelected(
itemProcedure)) {
widget.removeFavProcedure(
itemProcedure);
} else {
widget.addFavProcedure(
itemProcedure);
}
});
}),
),
Expanded(
child: Padding(
padding:
const EdgeInsets
.symmetric(
horizontal:
10,
vertical: 0),
child: AppText(
itemProcedure
.procedureName,
fontSize: 14.0,
variant:
"bodyText",
bold: true,
color: Color(
0xff575757)),
),
),
],
),
],
),
),
);
}).toList(),
),
SizedBox(
height: 2.0,
),
DividerWithSpacesAround(),
],
),
],
return ExpansionProcedure(
procedureTempleteModel: historyInfo,
model: widget.model,
removeFavProcedure: widget.removeFavProcedure,
addFavProcedure: widget.addFavProcedure,
addProceduresRemarks: widget.addProceduresRemarks,
isEntityListSelected: widget.isEntityListSelected,
isEntityFavListSelected: widget.isEntityFavListSelected,
);
}).toList(),
)

@ -0,0 +1,227 @@
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/viewModel/procedure_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/shared/TextFields.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';
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ProcedureCheckOutScreen extends StatefulWidget {
@override
_ProcedureCheckOutScreenState createState() =>
_ProcedureCheckOutScreenState();
}
class _ProcedureCheckOutScreenState extends State<ProcedureCheckOutScreen> {
List<EntityList> items = List();
List<String> remarksList = List();
List<int> typeList = List();
int selectedType = 0;
setSelectedType(int val) {
setState(() {
selectedType = val;
});
}
@override
Widget build(BuildContext context) {
return BaseView<ProcedureViewModel>(
builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
AppScaffold(
backgroundColor: Color(0xffF8F8F8).withOpacity(0.9),
isShowAppBar: false,
body: Column(
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
color: Colors.white,
),
Container(
color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Row(
//mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
child: Icon(
Icons.arrow_back_ios_sharp,
size: 24.0,
),
onTap: () {
Navigator.pop(context);
},
),
SizedBox(
width: 5.0,
),
AppText(
'Add Procedure',
fontWeight: FontWeight.w700,
fontSize: 20,
),
],
),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.022,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: ListView.builder(
scrollDirection: Axis.vertical,
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: 1,
itemBuilder: (BuildContext context, int index) {
return Container(
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,
),
AppText('Procedure Name'),
],
),
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: selectedType,
onChanged: (value) {
// historyInfo.type =
// setSelectedType(value).toString();
//
// historyInfo.type = value.toString();
},
),
AppText(
'routine',
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
Radio(
activeColor: Color(0xFFD02127),
groupValue: selectedType,
value: 1,
onChanged: (value) {
// historyInfo.type =
// setSelectedType(value).toString();
//
// historyInfo.type = value.toString();
},
),
AppText(
TranslationBase.of(context).urgent,
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
],
),
],
),
),
),
SizedBox(
height: 2.0,
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 12, vertical: 15.0),
child: TextFields(
hintText: TranslationBase.of(context).remarks,
//controller: remarksController,
onChanged: (value) {
// historyInfo.remarks = value;
},
minLines: 3,
maxLines: 5,
borderWidth: 0.5,
borderColor: Colors.grey[500],
),
),
SizedBox(
height: 19.0,
),
//DividerWithSpacesAround(),
],
),
);
}),
),
],
),
bottomSheet: Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context).addSelectedProcedures,
color: Color(0xff359846),
fontWeight: FontWeight.w700,
onPressed: () {
//print(entityList.toString());
onPressed:
// if (entityList.isEmpty == true) {
// DrAppToastMsg.showErrorToast(
// TranslationBase.of(context)
// .fillTheMandatoryProcedureDetails,
// );
// return;
// }
Navigator.pop(context);
// postProcedure(
// orderType: selectedType.toString(),
// entityList: entityList,
// patient: patient,
// model: widget.model,
// remarks: remarksController.text);
},
),
],
),
),
),
);
}
}

@ -7,6 +7,7 @@ import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/procedures/add-procedure-form.dart';
import 'package:doctor_app_flutter/screens/procedures/add_procedure_homeScreen.dart';
import 'package:doctor_app_flutter/screens/procedures/procedure_checkout_screen.dart';
import 'package:doctor_app_flutter/screens/procedures/update-procedure.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -102,13 +103,18 @@ class ProcedureScreen extends StatelessWidget {
patient.patientStatusType == 43)
InkWell(
onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => AddProcedureHome(
// patient: patient,
// model: model,
// )),
// );
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddProcedureHome(
patient: patient,
model: model,
)),
builder: (context) => ProcedureCheckOutScreen()),
);
},
child: Container(

Loading…
Cancel
Save