Merge branch 'development' of https://gitlab.com/Cloud_Solution/doctor_app_flutter into episode_fixes_dev

merge-requests/787/head
Elham Rababh 3 years ago
commit 42ecf9a0fb

@ -64,7 +64,7 @@ class PatientSearchRequestModel {
data['SearchType'] = this.searchType;
data['MobileNo'] = this.mobileNo;
data['IdentificationNo'] = this.identificationNo;
//data['NursingStationID'] = this.nursingStationID;
data['NursingStationID'] = this.nursingStationID;
data['ClinicID'] = this.clinicID;
data['ProjectID'] = this.projectID;
return data;

@ -32,35 +32,7 @@ class DoctorReplyService extends BaseService {
}, body: _requestDoctorReply.toJson(),);
}
Future replay(
String referredDoctorRemarks, ListGtMyPatientsQuestions model) async {
RequestMyReferralPatientModel _requestMyReferralPatient =
RequestMyReferralPatientModel();
RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks =
RequestAddReferredDoctorRemarks();
_requestAddReferredDoctorRemarks.admissionNo = model.admissionNo.toString();
_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) {
print("succsss");
// model.referredDoctorRemarks = referredDoctorRemarks;
// listMyReferralPatientModel[listMyReferralPatientModel.indexOf(model)] =
// model;
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
);
}
Future createDoctorResponse(
Future createDoctorResponse(
CreateDoctorResponseModel createDoctorResponseModel) async {
hasError = false;
await baseAppClient.post(

@ -155,7 +155,7 @@ class PatientSearchViewModel extends BaseViewModel {
setState(ViewState.Error);
}
} else {
// setDefaultInPatientList();
setDefaultInPatientList();
setState(ViewState.Idle);
}
}

@ -106,7 +106,7 @@ class DashboardViewModel extends BaseViewModel {
GetSpecialClinicalCareListResponseModel getSpecialClinic(clinicId){
GetSpecialClinicalCareListResponseModel special ;
specialClinicalCareList.forEach((element) {
if(element.clinicID == 1){
if(element.clinicID == clinicId){
special = element;
}
});

@ -14,6 +14,7 @@ class DoctorReplayViewModel extends BaseViewModel {
Future getDoctorReply() async {
setState(ViewState.Busy);
await getDoctorProfile();
await _doctorReplyService.getDoctorReply();
if (_doctorReplyService.hasError) {
error = _doctorReplyService.error;
@ -22,16 +23,6 @@ class DoctorReplayViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
Future replay(
String referredDoctorRemarks, ListGtMyPatientsQuestions model) async {
setState(ViewState.BusyLocal);
await _doctorReplyService.replay(referredDoctorRemarks, model);
if (_doctorReplyService.hasError) {
error = _doctorReplyService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future createDoctorResponse(
String response, ListGtMyPatientsQuestions model) async {

@ -1,9 +1,6 @@
import 'package:doctor_app_flutter/util/date-utils.dart';
class ListGtMyPatientsQuestions {
String setupID;
int projectID;
@ -26,9 +23,9 @@ class ListGtMyPatientsQuestions {
String dateofBirth;
String mobileNumber;
String emailAddress;
int admissionNo;
int referringDoctor;
int lineItemNo;
int infoStatus;
String infoDesc;
String doctorResponse;
String age;
String genderDescription;
bool isVidaCall;
@ -55,9 +52,9 @@ class ListGtMyPatientsQuestions {
this.dateofBirth,
this.mobileNumber,
this.emailAddress,
this.admissionNo,
this.referringDoctor,
this.lineItemNo,
this.infoStatus,
this.infoDesc,
this.doctorResponse,
this.age,
this.genderDescription,
this.isVidaCall});
@ -84,9 +81,9 @@ class ListGtMyPatientsQuestions {
dateofBirth = json['DateofBirth'];
mobileNumber = json['MobileNumber'];
emailAddress = json['EmailAddress'];
admissionNo = json['AdmissionNo'];
referringDoctor = json['ReferringDoctor'];
lineItemNo = json['LineItemNo'];
infoStatus = json['InfoStatus'];
infoDesc = json['InfoDesc'];
doctorResponse = json['DoctorResponse'];
age = json['Age'];
genderDescription = json['GenderDescription'];
isVidaCall = json['IsVidaCall'];
@ -115,9 +112,9 @@ class ListGtMyPatientsQuestions {
data['DateofBirth'] = this.dateofBirth;
data['MobileNumber'] = this.mobileNumber;
data['EmailAddress'] = this.emailAddress;
data['AdmissionNo'] = this.admissionNo;
data['ReferringDoctor'] = this.referringDoctor;
data['LineItemNo'] = this.lineItemNo;
data['InfoStatus'] = this.infoStatus;
data['InfoDesc'] = this.infoDesc;
data['DoctorResponse'] = this.doctorResponse;
data['Age'] = this.age;
data['GenderDescription'] = this.genderDescription;
data['IsVidaCall'] = this.isVidaCall;
@ -125,3 +122,4 @@ class ListGtMyPatientsQuestions {
}
}

@ -28,8 +28,12 @@ class DoctorReplayChat extends StatelessWidget {
@override
Widget build(BuildContext context) {
if(reply.doctorResponse.isNotEmpty){
msgController.text = reply.doctorResponse;
}
return BaseView<DoctorReplayViewModel>(
onModelReady: (model) async {},
onModelReady: (model) async {
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
@ -103,7 +107,7 @@ class DoctorReplayChat extends StatelessWidget {
SizedBox(height: 30,),
Container(
// color: Color(0xFF2B353E),
width: MediaQuery.of(context).size.width * 0.9,
width: MediaQuery.of(context).size.width * 0.8,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Color(0xFF2B353E),
@ -128,8 +132,8 @@ class DoctorReplayChat extends StatelessWidget {
children: [
Container(
margin: EdgeInsets.only(top: 5),
width: 60,
height: 60,
width: 50,
height: 50,
child: Image.asset(
reply.gender == 1
? 'assets/images/male_avatar.png'
@ -140,7 +144,7 @@ class DoctorReplayChat extends StatelessWidget {
Divider(),
SizedBox(width: 10,),
Container(
width: MediaQuery.of(context).size.width * 0.35,
width: MediaQuery.of(context).size.width * 0.31,
child: AppText(
reply.patientName
.toString(),
@ -152,7 +156,7 @@ class DoctorReplayChat extends StatelessWidget {
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 4),
margin: EdgeInsets.symmetric(horizontal: 0),
child: InkWell(
onTap: () {
launch("tel://" +reply.mobileNumber);
@ -172,7 +176,7 @@ class DoctorReplayChat extends StatelessWidget {
AppText(
reply.createdOn !=null?AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(reply.createdOn)):AppDateUtils.getDayMonthYearDateFormatted(DateTime.now()),
fontWeight: FontWeight
.w600,
.w500,
color: Colors.white,
fontSize: 14,
),
@ -217,6 +221,113 @@ class DoctorReplayChat extends StatelessWidget {
),
),
SizedBox(height: 30,),
SizedBox(height: 30,),
Align(
alignment: Alignment.centerRight,
child: Container(
// color: Color(0xFF2B353E),
width: MediaQuery.of(context).size.width * 0.8,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
border: Border.all(
color: HexColor('#707070') ,
width: 0.30),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
margin: EdgeInsets.only(top: 5),
width: 50,
height: 50,
child: Image.asset(
previousModel.doctorProfile.gender == 0
? 'assets/images/male_avatar.png'
: 'assets/images/female_avatar.png',
fit: BoxFit.cover,
),
),
Divider(),
SizedBox(width: 10,),
Container(
width: MediaQuery.of(context).size.width * 0.35,
child: AppText(
previousModel.doctorProfile.doctorName,
fontSize: 14,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
fontWeight: FontWeight.bold,
// fontSize: 18
),
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
AppText(
reply.createdOn !=null?AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(reply.createdOn)):AppDateUtils.getDayMonthYearDateFormatted(DateTime.now()),
fontWeight: FontWeight
.w500,
color: Color(0xFF2B353E),
fontSize: 14,
),
AppText(
reply.createdOn !=null?AppDateUtils.getHour(AppDateUtils.getDateTimeFromServerFormat(reply.createdOn)):AppDateUtils.getHour(DateTime.now()),
fontSize: 14,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
// fontSize: 18
),
],
),
],
),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: MediaQuery.of(context).size.width * 0.7,
child: AppText(
reply.doctorResponse,
fontSize: 15,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
// fontSize: 18
),
),
),
],
),
],
),
],
),
),
),
],
),
),
@ -248,9 +359,9 @@ class DoctorReplayChat extends StatelessWidget {
suffixIconColor: Colors.green,
onSuffixTap: ()async {
GifLoaderDialogUtils.showMyDialog(context);
await model.createDoctorResponse(msgController.text, reply);
if(model.state == ViewState.ErrorLocal) {
Helpers.showErrorToast(model.error);
await previousModel.createDoctorResponse(msgController.text, reply);
if(previousModel.state == ViewState.ErrorLocal) {
Helpers.showErrorToast(previousModel.error);
} else {
DrAppToastMsg.showSuccesToast("Thank you for your replay ");
await previousModel.getDoctorReply();
@ -263,7 +374,7 @@ class DoctorReplayChat extends StatelessWidget {
},
// hintColor: Colors.black,
fontWeight: FontWeight.w600,
fontWeight: FontWeight.w500,
maxLines: 50,
minLines: 3,
controller: msgController,

@ -71,7 +71,7 @@ class _HomeScreenState extends State<HomeScreen> {
await model.getDashboard();
await model.getDoctorProfile(isGetProfile: true);
await model.checkDoctorHasLiveCare();
// await model.getSpecialClinicalCareList();
await model.getSpecialClinicalCareList();
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,

@ -16,14 +16,16 @@ import '../../routes.dart';
class InPatientPage extends StatefulWidget {
final bool isMyInPatient;
final PatientSearchViewModel patientSearchViewModel;
InPatientPage(this.isMyInPatient);
InPatientPage(this.isMyInPatient, this.patientSearchViewModel);
@override
_InPatientPageState createState() => _InPatientPageState();
}
class _InPatientPageState extends State<InPatientPage> {
TextEditingController _searchController = TextEditingController();
bool isSortDes = false;
@ -36,166 +38,159 @@ class _InPatientPageState extends State<InPatientPage> {
@override
Widget build(BuildContext context) {
return BaseView<PatientSearchViewModel>(
onModelReady: (model) async {
await model.setDefaultInPatientList();
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
Container(
margin: EdgeInsets.all(16.0),
child: Stack(
children: [
AppTextFieldCustom(
hintText: TranslationBase.of(context).searchPatientName,
isTextFieldHasSuffix: true,
suffixIcon: IconButton(
icon: Icon(
Icons.search,
color: Colors.black,
),
onPressed: () {},
),
controller: _searchController,
onChanged: (value) {
model.filterSearchResults(value);
}),
Positioned(
right: 35,
top:5,
child: IconButton(
return AppScaffold(
baseViewModel: widget.patientSearchViewModel,
isShowAppBar: false,
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: MediaQuery.of(context).size.height * 0.070,
),
Container(
margin: EdgeInsets.all(16.0),
child: Stack(
children: [
AppTextFieldCustom(
hintText: TranslationBase.of(context).searchPatientName,
isTextFieldHasSuffix: true,
suffixIcon: IconButton(
icon: Icon(
isSortDes
? FontAwesomeIcons.sortAmountDown
: FontAwesomeIcons.sortAmountUp,
Icons.search,
color: Colors.black,
),
iconSize: 20,
// padding: EdgeInsets.only(bottom: 30),
onPressed: () {
GifLoaderDialogUtils.showMyDialog(context);
model.sortInPatient(isDes: isSortDes);
isSortDes = !isSortDes;
GifLoaderDialogUtils.hideDialog(context);
},
onPressed: () {},
),
)
],
),
),
model.state == ViewState.Idle?model.filteredInPatientItems.length > 0
? Expanded(
child: Container(
margin: EdgeInsets.symmetric(horizontal: 16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...List.generate(
model.filteredInPatientItems.length, (index) {
if (!widget.isMyInPatient)
return PatientCard(
patientInfo:
model.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: model
.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": model
.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else if (model.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID &&
widget.isMyInPatient)
return PatientCard(
patientInfo:
model.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: model
.filteredInPatientItems[index]
.doctorId ==
model.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
controller: _searchController,
onChanged: (value) {
widget.patientSearchViewModel.filterSearchResults(value);
}),
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": model
.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else
return SizedBox();
}),
SizedBox(
height: 15,
)
],
),
),
),
)
: Expanded(
child: SingleChildScrollView(
child: Container(
child: ErrorMessage(
error:
TranslationBase.of(context).noDataAvailable)),
),
): Center(
child: Container(
height: 300,
width: 300,
child: Image.asset(
"assets/images/progress-loading-red.gif"),
Positioned(
right: 35,
top:5,
child: IconButton(
icon: Icon(
isSortDes
? FontAwesomeIcons.sortAmountDown
: FontAwesomeIcons.sortAmountUp,
color: Colors.black,
),
iconSize: 20,
// padding: EdgeInsets.only(bottom: 30),
onPressed: () {
GifLoaderDialogUtils.showMyDialog(context);
widget.patientSearchViewModel.sortInPatient(isDes: isSortDes);
isSortDes = !isSortDes;
GifLoaderDialogUtils.hideDialog(context);
},
),
],
),
)
],
),
),
widget.patientSearchViewModel.state == ViewState.Idle?widget.patientSearchViewModel.filteredInPatientItems.length > 0
? Expanded(
child: Container(
margin: EdgeInsets.symmetric(horizontal: 16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...List.generate(
widget.patientSearchViewModel.filteredInPatientItems.length, (index) {
if (!widget.isMyInPatient)
return PatientCard(
patientInfo:
widget.patientSearchViewModel.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: widget.patientSearchViewModel.filteredInPatientItems[index]
.doctorId ==
widget.patientSearchViewModel.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": widget.patientSearchViewModel.
filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else if (widget.patientSearchViewModel.filteredInPatientItems[index]
.doctorId ==
widget.patientSearchViewModel.doctorProfile.doctorID &&
widget.isMyInPatient)
return PatientCard(
patientInfo:
widget.patientSearchViewModel.filteredInPatientItems[index],
patientType: "1",
arrivalType: "1",
isInpatient: true,
isMyPatient: widget.patientSearchViewModel
.filteredInPatientItems[index]
.doctorId ==
widget.patientSearchViewModel.doctorProfile.doctorID,
onTap: () {
FocusScopeNode currentFocus =
FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
Navigator.of(context).pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": widget.patientSearchViewModel.filteredInPatientItems[index],
"patientType": "1",
"from": "0",
"to": "0",
"isSearch": false,
"isInpatient": true,
"arrivalType": "1",
});
},
);
else
return SizedBox();
}),
SizedBox(
height: 15,
)
],
),
),
),
)
: Expanded(
child: SingleChildScrollView(
child: Container(
child: ErrorMessage(
error:
TranslationBase.of(context).noDataAvailable)),
),
): Center(
child: Container(
height: 300,
width: 300,
child: Image.asset(
"assets/images/progress-loading-red.gif"),
),
),
],
),
);
}

@ -65,12 +65,12 @@ class _PatientInPatientScreenState extends State<PatientInPatientScreen>
return BaseView<PatientSearchViewModel>(
onModelReady: (model) async {
model.clearPatientList();
// if (widget.specialClinic != null) {
// await model.getSpecialClinicalCareMappingList(widget.specialClinic.clinicID);
// requestModel.nursingStationID =
// model.specialClinicalCareMappingList[0].nursingStationID;
// requestModel.clinicID = 0;
// }
if (widget.specialClinic != null) {
await model.getSpecialClinicalCareMappingList(widget.specialClinic.clinicID);
requestModel.nursingStationID =
model.specialClinicalCareMappingList[0].nursingStationID;
requestModel.clinicID = 0;
}
model.getInPatientList(requestModel);
},
builder: (_, model, w) =>
@ -265,8 +265,8 @@ class _PatientInPatientScreenState extends State<PatientInPatientScreen>
physics: BouncingScrollPhysics(),
controller: _tabController,
children: [
InPatientPage(false),
InPatientPage(true),
InPatientPage(false, model),
InPatientPage(true,model),
DischargedPatient(),
],
),

Loading…
Cancel
Save