merge-requests/533/head
Sultan Khan 5 years ago
commit e445b5bb60

@ -439,6 +439,10 @@ const Map<String, Map<String, String>> localizedValues = {
'en': "Expected Admission Date",
'ar': 'تاريخ القبول المتوقع'
},
'admissionDate': {
'en': "Admission Date",
'ar': 'تاريخ القبول'
},
// 'emergencyAdmission': {'en': "EMERGENCY ADMISSION", 'ar': 'دخول الطوارئ'},
'isSickLeaveRequired': {
'en': "Is Sick Leave Required",
@ -856,4 +860,5 @@ const Map<String, Map<String, String>> localizedValues = {
"updateTheApp": {"en": "Update The App", "ar": "تحديث التطبيق"},
"admission-date": {"en": "Admission Date", "ar": "تاريخ القبول"},
"noOfDays": {"en": "No of days", "ar": "عدد الأيام"},
"numOfDays": {"en": "Number of Days", "ar": "عدد الأيام"},
};

@ -68,4 +68,29 @@ class VitalSignsService extends BaseService {
body: body,
);
}
Future getInPatientVitalSignHistory(PatiantInformtion patient) async {
hasError = false;
Map<String, dynamic> body = Map();
body['PatientID'] = patient.patientId;
body['InOutPatientType'] = 1;
body['PatientTypeID'] = 1;
await baseAppClient.post(
GET_PATIENT_VITAL_SIGN,
onSuccess: (dynamic response, int statusCode) {
patientVitalSignsHistory.clear();
if (response['List_DoctorPatientVitalSign'] != null) {
response['List_DoctorPatientVitalSign'].forEach((v) {
patientVitalSignsHistory.add(new VitalSignHistory.fromJson(v));
});
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error.toString();
},
body: body,
);
}
}

@ -138,42 +138,6 @@ class PatientService extends BaseService {
return Future.value(localRes);
}
Future getPatientVitalSign(patient) async {
hasError = false;
await baseAppClient.post(
GET_PATIENT_VITAL_SIGN,
onSuccess: (dynamic response, int statusCode) {
_patientVitalSignList = [];
response['List_DoctorPatientVitalSign'].forEach((v) {
_patientVitalSignList.add(new VitalSignResModel.fromJson(v));
});
if (_patientVitalSignList.length > 0) {
List<VitalSignResModel> patientVitalSignOrderdSubListTemp = [];
patientVitalSignOrderdSubListTemp = _patientVitalSignList;
patientVitalSignOrderdSubListTemp
.sort((VitalSignResModel a, VitalSignResModel b) {
return b.vitalSignDate.microsecondsSinceEpoch -
a.vitalSignDate.microsecondsSinceEpoch;
});
patientVitalSignOrderdSubList.clear();
int length = patientVitalSignOrderdSubListTemp.length >= 20
? 20
: patientVitalSignOrderdSubListTemp.length;
for (int x = 0; x < length; x++) {
patientVitalSignOrderdSubList
.add(patientVitalSignOrderdSubListTemp[x]);
}
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: patient,
);
}
Future getLabResultOrders(patient) async {
hasError = false;
await baseAppClient.post(

@ -38,7 +38,7 @@ class VitalSignsViewModel extends BaseViewModel {
}
Future getPatientVitalSignHistory(
PatiantInformtion patient, String from, String to) async {
PatiantInformtion patient, String from, String to, bool isInPatient) async {
setState(ViewState.Busy);
if (from == null || from == "0") {
from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd');
@ -47,7 +47,12 @@ class VitalSignsViewModel extends BaseViewModel {
to = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd');
}
await _vitalSignService.getPatientVitalSignsHistory(patient, from, to);
if(isInPatient){
await _vitalSignService.getInPatientVitalSignHistory(patient);
}else {
await _vitalSignService.getPatientVitalSignsHistory(patient, from, to);
}
if (_vitalSignService.hasError) {
error = _vitalSignService.error;
setState(ViewState.Error);

@ -66,16 +66,6 @@ class PatientViewModel extends BaseViewModel {
return localRes;
}
Future getPatientVitalSign(patient) async {
setState(ViewState.Busy);
await _patientService.getPatientVitalSign(patient);
if (_patientService.hasError) {
error = _patientService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future getLabResultOrders(patient) async {
setState(ViewState.Busy);
await _patientService.getLabResultOrders(patient);

@ -35,7 +35,7 @@ class VitalSignHistory {
var triageCategory;
var gCScore;
var lineItemNo;
DateTime vitalSignDate;
var vitalSignDate;
var actualTimeTaken;
var sugarLevel;
var fBS;

@ -2,7 +2,6 @@ import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
/// *
/// By Mousa Zaid Mousa Abuzaid

@ -7,7 +7,9 @@ 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/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design_in_patient.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget_in_patient.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget_search.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
@ -63,8 +65,11 @@ class PatientProfileScreen extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PatientProfileHeaderNewDesign(
patient, patientType, arrivalType),
!isFromSearch && patientType == "1"
? PatientProfileHeaderNewDesignInPatient(
patient, patientType, arrivalType)
: PatientProfileHeaderNewDesign(
patient, patientType, arrivalType),
Expanded(
child: Padding(
padding: const EdgeInsets.all(16.0),
@ -79,13 +84,21 @@ class PatientProfileScreen extends StatelessWidget {
from: from,
to: to,
)
: ProfileMedicalInfoWidget(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
from: from,
to: to,
),
: patientType == "1"
? ProfileMedicalInfoWidgetInPatient(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
from: from,
to: to,
)
: ProfileMedicalInfoWidget(
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
from: from,
to: to,
),
],
),
),

@ -35,7 +35,7 @@ class VitalSignDetailsScreen extends StatelessWidget {
return BaseView<VitalSignsViewModel>(
onModelReady: (model) =>
model.getPatientVitalSignHistory(patient, from, to),
model.getPatientVitalSignHistory(patient, from, to, patientType == "1"),
builder: (_, mode, widget) => AppScaffold(
baseViewModel: mode,
isShowAppBar: true,

@ -1235,6 +1235,7 @@ class TranslationBase {
String get admissionDate =>
localizedValues['admission-date'][locale.languageCode];
String get noOfDays => localizedValues['noOfDays'][locale.languageCode];
String get numOfDays => localizedValues['numOfDays'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -110,6 +110,9 @@ class PatientProfileButton extends StatelessWidget {
}
void navigator(BuildContext context, route) {
if(route == null)
return;
if (from == null) {
from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd');
}

@ -0,0 +1,238 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/util/date-utils.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/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
class PatientProfileHeaderNewDesignInPatient extends StatelessWidget {
final PatiantInformtion patient;
final String patientType;
final String arrivalType;
final double height;
PatientProfileHeaderNewDesignInPatient(
this.patient, this.patientType, this.arrivalType,
{this.height = 0.0});
@override
Widget build(BuildContext context) {
int gender = 1;
if (patient.patientDetails != null) {
gender = patient.patientDetails.gender;
} else {
gender = patient.gender;
}
return Container(
padding: EdgeInsets.only(
left: 0,
right: 5,
bottom: 5,
),
decoration: BoxDecoration(
color: Colors.white,
),
height: height == 0 ? 200 : height,
child: Container(
padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
margin: EdgeInsets.only(top: 50),
child: Column(
children: [
Container(
padding: EdgeInsets.only(left: 12.0),
child: Row(children: [
IconButton(
icon: Icon(Icons.arrow_back_ios),
color: Colors.black, //Colors.black,
onPressed: () => Navigator.pop(context),
),
Expanded(
child: AppText(
patient.firstName != null
? (Helpers.capitalize(patient.firstName) +
" " +
Helpers.capitalize(patient.lastName))
: Helpers.capitalize(patient.patientDetails.fullName),
fontSize: SizeConfig.textMultiplier * 2.2,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
),
),
gender == 1
? Icon(
DoctorApp.male_2,
color: Colors.blue,
)
: Icon(
DoctorApp.female_1,
color: Colors.pink,
),
Container(
margin: EdgeInsets.symmetric(horizontal: 4),
child: InkWell(
onTap: () {
// should call patient or show mobile number : patient.mobileNumber
},
child: Icon(
Icons.phone,
color: Colors.black87,
),
),
),
]),
),
Row(children: [
Padding(
padding: EdgeInsets.only(left: 12.0),
child: Container(
width: 60,
height: 60,
child: Image.asset(
gender == 1
? 'assets/images/male_avatar.png'
: 'assets/images/female_avatar.png',
fit: BoxFit.cover,
),
),
),
SizedBox(
width: 10,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
AppText(
TranslationBase.of(context).fileNumber,
fontSize: 1.2 * SizeConfig.textMultiplier,
),
AppText(patient.patientId.toString(),
fontSize: 1.4 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w700),
],
),
Row(
children: [
AppText(
"7:00 PM st",
fontWeight: FontWeight.bold,
fontSize: 1.4 * SizeConfig.textMultiplier,
),
],
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
AppText(
"${TranslationBase.of(context).admissionDate}: ",
fontSize: 1.2 * SizeConfig.textMultiplier,
),
AppText(
DateUtils.convertDateFromServerFormat(
patient.createdOn, "dd MMM,yyyy"),
fontSize: 1.4 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w700),
],
),
Row(
children: [
AppText(
patient.nationalityName ??
patient.nationality ??
patient.nationalityId ??
'',
fontWeight: FontWeight.bold,
fontSize: 1.4 * SizeConfig.textMultiplier,
),
patient.nationalityFlagURL != null
? ClipRRect(
borderRadius: BorderRadius.circular(20.0),
child: Image.network(
patient.nationalityFlagURL,
height: 25,
width: 30,
errorBuilder: (BuildContext context,
Object exception,
StackTrace stackTrace) {
return Text('No Image');
},
))
: SizedBox()
],
)
],
),
Row(
children: [
AppText(
"${TranslationBase.of(context).numOfDays}: ",
fontSize: 1.2 * SizeConfig.textMultiplier,
),
AppText("4 st",
fontSize: 1.4 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w700),
],
),
],
),
),
]),
],
),
),
);
}
convertDateFormat2(String str) {
String newDate;
const start = "/Date(";
if (str.isNotEmpty) {
const end = "+0300)";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
var date = new DateTime.fromMillisecondsSinceEpoch(
int.parse(str.substring(startIndex + start.length, endIndex)));
newDate = date.year.toString() +
"/" +
date.month.toString().padLeft(2, '0') +
"/" +
date.day.toString().padLeft(2, '0');
}
return newDate.toString();
}
isToday(date) {
DateTime tempDate = new DateFormat("yyyy-MM-dd").parse(date);
return DateFormat("yyyy-MM-dd").format(tempDate) ==
DateFormat("yyyy-MM-dd").format(DateTime.now());
}
myBoxDecoration() {
return BoxDecoration(
border: Border(
top: BorderSide(
color: Colors.green,
width: 5,
),
),
borderRadius: BorderRadius.circular(10));
}
}

@ -0,0 +1,164 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/models/SOAP/PostEpisodeReqModel.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import '../../../config/size_config.dart';
import '../../shared/app_texts_widget.dart';
class ProfileMedicalInfoWidgetInPatient extends StatelessWidget {
final String from;
final String to;
final PatiantInformtion patient;
final String patientType;
final String arrivalType;
ProfileMedicalInfoWidgetInPatient(
{Key key,
this.patient,
this.patientType,
this.arrivalType,
this.from,
this.to});
@override
Widget build(BuildContext context) {
return BaseView<SOAPViewModel>(
onModelReady: (model) async {},
builder: (_, model, w) => GridView.count(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: 1 / 1.0,
crossAxisCount: 3,
children: [
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
from: from,
to: to,
nameLine1: TranslationBase.of(context).vital,
nameLine2: TranslationBase.of(context).signs,
route: VITAL_SIGN_DETAILS,
icon: 'patient/vital_signs.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: LAB_RESULT,
nameLine1: TranslationBase.of(context).lab,
nameLine2: TranslationBase.of(context).result,
icon: 'patient/lab_results.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: RADIOLOGY_PATIENT,
nameLine1: TranslationBase.of(context).radiology,
nameLine2: TranslationBase.of(context).result,
icon: 'patient/health_summary.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: ORDER_PRESCRIPTION_NEW,
nameLine1: TranslationBase.of(context).patient,
nameLine2: TranslationBase.of(context).prescription,
icon: 'patient/order_prescription.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: PROGRESS_NOTE,
nameLine1: TranslationBase.of(context).progress,
nameLine2: TranslationBase.of(context).note,
icon: 'patient/Progress_notes.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: null,
nameLine1: "Text",
nameLine2: TranslationBase.of(context).orders,
icon: 'patient/Progress_notes.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: ORDER_PROCEDURE,
nameLine1: TranslationBase.of(context).orders,
nameLine2: TranslationBase.of(context).procedures,
icon: 'patient/Order_Procedures.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: MEDICAL_FILE,
nameLine1: "Medical",
//TranslationBase.of(context).medicalReport,
nameLine2: "Report",
//TranslationBase.of(context).summaryReport,
icon: 'patient/health_summary.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: null,
nameLine1: "Health",
//TranslationBase.of(context).medicalReport,
nameLine2: "Summery",
//TranslationBase.of(context).summaryReport,
icon: 'patient/health_summary.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: null,
nameLine1: TranslationBase.of(context).referral,
nameLine2: TranslationBase.of(context).patient,
icon: 'patient/refer_patient.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: null,
nameLine1: TranslationBase.of(context).insurance,
nameLine2: TranslationBase.of(context).approvals,
icon: 'patient/vital_signs.png'),
PatientProfileButton(
key: key,
patient: patient,
patientType: patientType,
arrivalType: arrivalType,
route: null,
nameLine1: "Discharge",
nameLine2: "Summery",
icon: 'patient/patient_sick_leave.png'),
],
),
);
}
}
Loading…
Cancel
Save