Merge branch 'diplomatic-quarter-live' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into sultan

merge-update-with-lab-changes
Sultan Khan 5 years ago
commit d779c6dd0a

@ -1154,4 +1154,12 @@ const Map localizedValues = {
"en": "This service allows you to chat with customer service directly without the need to call.", "en": "This service allows you to chat with customer service directly without the need to call.",
"ar": "المحادثة المباشرة: هذه الخدمة تمكنك التحدث كتابياً مع خدمة العملاء مباشرة دون الحاجة الى الاتصال هاتفياً." "ar": "المحادثة المباشرة: هذه الخدمة تمكنك التحدث كتابياً مع خدمة العملاء مباشرة دون الحاجة الى الاتصال هاتفياً."
}, },
"send-email": {
"en": "Send a copy of this report to the email",
"ar": "أرسل نسخة من هذا التقرير إلى البريد الإلكتروني"
},
"update-email": {
"en": "Update Email",
"ar": "تحديث البريد الالكتروني"
}
}; };

@ -92,8 +92,7 @@ class LabResultList {
String filterName = ""; String filterName = "";
List<LabResult> patientLabResultList = List(); List<LabResult> patientLabResultList = List();
LabResultList( LabResultList({this.filterName, LabResult lab}) {
{this.filterName, LabResult lab}) {
patientLabResultList.add(lab); patientLabResultList.add(lab);
} }
} }

@ -115,18 +115,16 @@ class LabsViewModel extends BaseViewModel {
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
_labsService.labResultList.forEach((element) { _labsService.labResultList.forEach((element) {
List<LabResultList> patientLabOrdersClinic = labResultLists List<LabResultList> patientLabOrdersClinic = labResultLists.where((elementClinic) => elementClinic.filterName == element.testCode).toList();
.where(
(elementClinic) => elementClinic.filterName == element.testCode)
.toList();
if (patientLabOrdersClinic.length != 0) { if (patientLabOrdersClinic.length != 0) {
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])]
.patientLabResultList var value= labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList
.add(element); .where((e) => e.sampleCollectedOn== element.sampleCollectedOn && e.resultValue ==element.resultValue ).toList();
if(value.isEmpty)
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList.add(element);
} else { } else {
labResultLists labResultLists.add(LabResultList(filterName: element.testCode, lab: element));
.add(LabResultList(filterName: element.testCode, lab: element));
} }
}); });
setState(ViewState.Idle); setState(ViewState.Idle);

@ -179,20 +179,20 @@ class _AllHabibMedicalServiceState extends State<AllHabibMedicalService> {
'assets/images/al-habib_online_payment_service_icon.png', 'assets/images/al-habib_online_payment_service_icon.png',
title: TranslationBase.of(context).onlinePaymentService, title: TranslationBase.of(context).onlinePaymentService,
), ),
ServicesContainer( // ServicesContainer(
onTap: () { // onTap: () {
Navigator.push( // Navigator.push(
context, // context,
FadePage( // FadePage(
page: ErOptions( // page: ErOptions(
isAppbar: true, // isAppbar: true,
), // ),
), // ),
); // );
}, // },
imageLocation: 'assets/images/emergency_service_image.png', // imageLocation: 'assets/images/emergency_service_image.png',
title: TranslationBase.of(context).emergencyService, // title: TranslationBase.of(context).emergencyService,
), // ),
ServicesContainer( ServicesContainer(
onTap: () => Navigator.push( onTap: () => Navigator.push(
context, context,

@ -28,6 +28,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import '../../widgets/data_display/medical/LabResult/LineChartCurved.dart';
import '../../locator.dart'; import '../../locator.dart';
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
@ -527,6 +528,11 @@ class _HomePageState extends State<HomePage> {
], ],
), ),
), ),
SizedBox(height: 8,),
// Padding(
// padding: const EdgeInsets.all(8.0),
// child: LineChartSample1(),
// ),
SizedBox( SizedBox(
height: 8, height: 8,
), ),

@ -0,0 +1,111 @@
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../../routes.dart';
class ConfirmSendEmailDialog extends StatefulWidget {
final String email;
final GestureTapCallback onTapSendEmail;
ConfirmSendEmailDialog({this.email, this.onTapSendEmail});
@override
_ConfirmSendEmailDialogState createState() => _ConfirmSendEmailDialogState();
}
class _ConfirmSendEmailDialogState extends State<ConfirmSendEmailDialog> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
contentPadding: EdgeInsets.fromLTRB(28.0, 24.0, 28.0, 0.0),
title: Center(
child: Texts(
TranslationBase.of(context).confirm,
color: Colors.black,
),
),
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(
child: Texts(
TranslationBase.of(context).sendConfEmail,
color: Colors.grey,
),
),
Texts(
widget.email,
color: Colors.grey,
),
SizedBox(
height: 5,
),
Divider(),
SizedBox(
height: 5.0,
),
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Container(
width: double.maxFinite,
child: Center(
child: Texts(
TranslationBase.of(context).cancel,
color: Colors.red,
),
),
),
),
SizedBox(
height: 15.0,
),
InkWell(
onTap: () {
Navigator.pop(context);
widget.onTapSendEmail();
},
child: Container(
width: double.maxFinite,
child: Center(
child: Texts(TranslationBase.of(context).sendEmail),
),
),
),
SizedBox(
height: 15.0,
),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(
SETTINGS,
);
},
child: Container(
width: double.maxFinite,
child: Center(
child: Texts(TranslationBase.of(context).updateEmail),
),
),
),
SizedBox(
height: 20.0,
),
],
)
],
);
}
}

@ -12,6 +12,8 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'confirm_send_email_dialog.dart';
class PrescriptionItemsPage extends StatelessWidget { class PrescriptionItemsPage extends StatelessWidget {
final Prescriptions prescriptions; final Prescriptions prescriptions;
@ -30,47 +32,60 @@ class PrescriptionItemsPage extends StatelessWidget {
height: MediaQuery.of(context).size.height * 0.8, height: MediaQuery.of(context).size.height * 0.8,
child: Column( child: Column(
children: [ children: [
if (!prescriptions.isInOutPatient)
if(!prescriptions.isInOutPatient) ...List.generate(
...List.generate(model.prescriptionReportList.length, (index) => InkWell( model.prescriptionReportList.length,
(index) => InkWell(
onTap: () => Navigator.push( onTap: () => Navigator.push(
context, context,
FadePage( FadePage(
page: PrescriptionDetailsPage( page: PrescriptionDetailsPage(
prescriptionReport: model.prescriptionReportList[index], prescriptionReport:
model.prescriptionReportList[index],
), ),
), ),
), ),
child: Container( child: Container(
width: double.infinity, width: double.infinity,
margin: EdgeInsets.only(top: 10, left: 10, right: 10), margin:
EdgeInsets.only(top: 10, left: 10, right: 10),
padding: EdgeInsets.all(8.0), padding: EdgeInsets.all(8.0),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(10.0), Radius.circular(10.0),
), ),
border: Border.all(color: Colors.grey[200], width: 0.5), border: Border.all(
color: Colors.grey[200], width: 0.5),
), ),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
ClipRRect( ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(5)), borderRadius:
BorderRadius.all(Radius.circular(5)),
child: Image.network( child: Image.network(
model.prescriptionReportList[index].imageSRCUrl, model.prescriptionReportList[index]
.imageSRCUrl,
fit: BoxFit.cover, fit: BoxFit.cover,
width: 60, width: 60,
height: 70, height: 70,
), ),
), ),
SizedBox(width: 10,), SizedBox(
width: 10,
),
Expanded( Expanded(
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Center( child: Center(
child: Texts(model.prescriptionReportList[index].itemDescription.isNotEmpty? child: Texts(model
model.prescriptionReportList[index].itemDescription :model .prescriptionReportList[index]
.prescriptionReportList[index].itemDescriptionN)), .itemDescription
.isNotEmpty
? model.prescriptionReportList[index]
.itemDescription
: model.prescriptionReportList[index]
.itemDescriptionN)),
)), )),
Icon( Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
@ -81,29 +96,40 @@ class PrescriptionItemsPage extends StatelessWidget {
), ),
), ),
)) ))
else else
...List.generate( ...List.generate(
model.prescriptionReportEnhList.length, model.prescriptionReportEnhList.length,
(index) => InkWell( (index) => InkWell(
onTap: (){ onTap: () {
PrescriptionReport prescriptionReport = PrescriptionReport( PrescriptionReport prescriptionReport =
imageSRCUrl: model.prescriptionReportEnhList[index].imageSRCUrl, PrescriptionReport(
itemDescription: model.prescriptionReportEnhList[index].itemDescription, imageSRCUrl: model
itemDescriptionN: model.prescriptionReportEnhList[index].itemDescription, .prescriptionReportEnhList[index].imageSRCUrl,
routeN: model.prescriptionReportEnhList[index].route, itemDescription: model
frequency: model.prescriptionReportEnhList[index].frequency, .prescriptionReportEnhList[index]
frequencyN: model.prescriptionReportEnhList[index].frequency, .itemDescription,
doseDailyQuantity: model.prescriptionReportEnhList[index].doseDailyQuantity, itemDescriptionN: model
.prescriptionReportEnhList[index]
.itemDescription,
routeN:
model.prescriptionReportEnhList[index].route,
frequency: model
.prescriptionReportEnhList[index].frequency,
frequencyN: model
.prescriptionReportEnhList[index].frequency,
doseDailyQuantity: model
.prescriptionReportEnhList[index]
.doseDailyQuantity,
days: model.prescriptionReportEnhList[index].days, days: model.prescriptionReportEnhList[index].days,
itemID: model.prescriptionReportEnhList[index].itemID, itemID:
remarks: model.prescriptionReportEnhList[index].remarks model.prescriptionReportEnhList[index].itemID,
); remarks: model
.prescriptionReportEnhList[index].remarks);
Navigator.push( Navigator.push(
context, context,
FadePage( FadePage(
page: PrescriptionDetailsPage( page: PrescriptionDetailsPage(
prescriptionReport:prescriptionReport, prescriptionReport: prescriptionReport,
), ),
), ),
); );
@ -116,13 +142,16 @@ class PrescriptionItemsPage extends StatelessWidget {
ClipRRect( ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(5)), borderRadius: BorderRadius.all(Radius.circular(5)),
child: Image.network( child: Image.network(
model.prescriptionReportEnhList[index].imageSRCUrl, model
.prescriptionReportEnhList[index].imageSRCUrl,
fit: BoxFit.cover, fit: BoxFit.cover,
width: 60, width: 60,
height: 70, height: 70,
), ),
), ),
SizedBox(width: 10,), SizedBox(
width: 10,
),
Expanded( Expanded(
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
@ -159,21 +188,17 @@ class PrescriptionItemsPage extends StatelessWidget {
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: Button( child: Button(
label: TranslationBase.of(context).sendCopy, label: TranslationBase.of(context).sendCopy,
onTap: () => model.sendPrescriptionEmail( onTap: () {
appointmentDate: prescriptions.appointmentDate, showConfirmMessage(context,model);
patientID: prescriptions.patientID, },
clinicName: prescriptions.companyName,
doctorName: prescriptions.doctorName,
mes: TranslationBase.of(context).sendSuc,
projectID: prescriptions.projectID),
loading: model.state == ViewState.BusyLocal, loading: model.state == ViewState.BusyLocal,
), ),
), ),
if(false) if (false)
Container( Container(
width: MediaQuery.of(context).size.width * 0.8, width: MediaQuery.of(context).size.width * 0.8,
child: Button( child: Button(
label:TranslationBase.of(context).resendOrder, label: TranslationBase.of(context).resendOrder,
backgroundColor: Colors.green[200], backgroundColor: Colors.green[200],
)) ))
], ],
@ -182,4 +207,22 @@ class PrescriptionItemsPage extends StatelessWidget {
), ),
); );
} }
void showConfirmMessage(BuildContext context, PrescriptionsViewModel model) {
showDialog(
context: context,
child: ConfirmSendEmailDialog(
email: model.user.emailAddress,
onTapSendEmail: () {
model.sendPrescriptionEmail(
appointmentDate: prescriptions.appointmentDate,
patientID: prescriptions.patientID,
clinicName: prescriptions.companyName,
doctorName: prescriptions.doctorName,
mes: TranslationBase.of(context).sendSuc,
projectID: prescriptions.projectID);
},
),
);
}
} }

@ -1015,6 +1015,8 @@ class TranslationBase {
String get lastVisit => localizedValues['last-visit'][locale.languageCode]; String get lastVisit => localizedValues['last-visit'][locale.languageCode];
String get tapTitle => localizedValues['tap-title'][locale.languageCode]; String get tapTitle => localizedValues['tap-title'][locale.languageCode];
String get later => localizedValues['later'][locale.languageCode]; String get later => localizedValues['later'][locale.languageCode];
String get sendConfEmail => localizedValues['send-email'][locale.languageCode];
String get updateEmail => localizedValues['update-email'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -37,7 +37,7 @@ class LargeAvatar extends StatelessWidget {
borderRadius: BorderRadius.all(Radius.circular(radius)), borderRadius: BorderRadius.all(Radius.circular(radius)),
child: Image.network( child: Image.network(
url.trim(), url.trim(),
fit: BoxFit.cover, fit: BoxFit.fill,
width: width, width: width,
height: height, height: height,
), ),

@ -0,0 +1,194 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../../../core/model/labs/LabOrderResult.dart';
class LineChartCurved extends StatefulWidget {
final String title;
final List<LabOrderResult> labResult;
LineChartCurved({this.title, this.labResult});
@override
State<StatefulWidget> createState() => LineChartCurvedState();
}
class LineChartCurvedState extends State<LineChartCurved> {
bool isShowingMainData;
@override
void initState() {
super.initState();
isShowingMainData = true;
}
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 1.23,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 4,
),
Text(
widget.title,
style: TextStyle(
color: Colors.black,
fontSize: 32,
fontWeight: FontWeight.bold,
letterSpacing: 2),
textAlign: TextAlign.center,
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(right: 16.0, left: 6.0),
child: LineChart(
sampleData1(),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
const SizedBox(
height: 10,
),
],
),
],
),
),
);
}
LineChartData sampleData1() {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(show: true, drawVerticalLine: true,drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 12,
),
margin: 10,
getTitles: (value) {
print(value);
if(widget.labResult.length>value.toInt())
{ DateTime date = DateUtil.convertStringToDate(widget.labResult[value.toInt()].verifiedOnDateTime);
return '${date.day}/ ${date.year}';}
return '';
}
,
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 14,
),
getTitles: (value) {
return '${value.toInt()}';
},
margin: 8,
//reservedSize: 30,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (widget.labResult.length-1).toDouble(),
maxY: getMaxY(),
minY: getMinY(),
lineBarsData: getData(),
);
}
double getMaxY(){
double max =0;
widget.labResult.forEach((element) {
double resultValueDouble =double.parse(element.resultValue);
if(resultValueDouble>max)
max = resultValueDouble;
});
return max.roundToDouble();
}
double getMinY(){
double min =double.parse(widget.labResult[0].resultValue);
widget.labResult.forEach((element) {
double resultValueDouble =double.parse(element.resultValue);
if(resultValueDouble<min)
min = resultValueDouble;
});
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData() {
List<FlSpot> spots = List();
for (int index = 0; index < widget.labResult.length ; index++) {
var resultValueDouble = double.parse(widget.labResult[index].resultValue);
spots.add(FlSpot(index.toDouble(), resultValueDouble));
}
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [Theme.of(context).primaryColor],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
return [
lineChartBarData1,
];
}
}

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'LineChartCurved.dart';
import 'Lab_Result_details_wideget.dart'; import 'Lab_Result_details_wideget.dart';
class LabResultChartAndDetails extends StatelessWidget { class LabResultChartAndDetails extends StatelessWidget {
@ -26,11 +27,9 @@ class LabResultChartAndDetails extends StatelessWidget {
return Column( return Column(
children: <Widget>[ children: <Widget>[
AppExpandableNotifier( AppExpandableNotifier(
headerWidget: AppTimeSeriesChart( headerWidget: Padding(
seriesList: generateData(), padding: const EdgeInsets.all(8.0),
chartName: name, child: LineChartCurved(title: name,labResult:labResult,),
startDate: DateUtil.convertStringToDate(labResult[0].verifiedOnDateTime),
endDate: DateUtil.convertStringToDate(labResult[labResult.length-1].verifiedOnDateTime),
), ),
bodyWidget: LabResultDetailsWidget( bodyWidget: LabResultDetailsWidget(
labResult: labResult, labResult: labResult,

@ -140,7 +140,7 @@ class DoctorCard extends StatelessWidget {
onTap: onEmailTap, onTap: onEmailTap,
child: Icon( child: Icon(
Icons.email, Icons.email,
color: Colors.red, color: Theme.of(context).primaryColor,
), ),
) )
], ],

@ -28,6 +28,9 @@ dependencies:
#Dependency Injection #Dependency Injection
get_it: ^4.0.2 get_it: ^4.0.2
#chart
fl_chart: ^0.12.1
# Permissions # Permissions
permission_handler: ^5.0.0+hotfix.3 permission_handler: ^5.0.0+hotfix.3
device_info: ^0.4.2+4 device_info: ^0.4.2+4

Loading…
Cancel
Save