From a6a541b903875f5b2f6d37db1ee2b6eb65186a5a Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 8 Nov 2023 12:57:33 +0300 Subject: [PATCH] Lab Orders CR implementation contd. --- lib/config/localized_values.dart | 1 + lib/core/model/labs/patient_lab_orders.dart | 20 +++++++++---- .../medical/labs/laboratory_result_page.dart | 1 + lib/pages/medical/labs/labs_home_page.dart | 3 ++ lib/uitl/translations_delegate_base.dart | 1 + lib/uitl/utils.dart | 30 +++++++++++++++++++ .../medical/LabResult/LabResultWidget.dart | 5 ++-- .../LabResult/laboratory_result_widget.dart | 5 ++-- .../data_display/medical/doctor_card.dart | 27 ++++++++++++++++- lib/widgets/my_rich_text.dart | 6 ++-- 10 files changed, 86 insertions(+), 13 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 63619f59..23f95d05 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1901,4 +1901,5 @@ const Map localizedValues = { "habibCallCenter": {"en": "Please contact AlHabib call center to update your insurance manually.", "ar": "يرجى الاتصال بمركز اتصال الحبيب لتحديث التأمين الخاص بك يدوياً."}, "cashAmountUpdateInsurance": {"en": "Please note that this is the cash amount, If you want to update your insurance, Please tap below:", "ar": "يرجى ملاحظة أن هذا هو المبلغ النقدي، إذا كنت ترغب في تحديث التأمين الخاص بك، يرجى النقر أدناه:"}, "validInsurance": {"en": "Do you have a valid insurance?", "ar": "هل لديك تأمين صالح؟"}, + "resultStatus": {"en": "Result Status: ", "ar": "حالة النتيجة: "}, }; \ No newline at end of file diff --git a/lib/core/model/labs/patient_lab_orders.dart b/lib/core/model/labs/patient_lab_orders.dart index c2908023..2a5fcb8a 100644 --- a/lib/core/model/labs/patient_lab_orders.dart +++ b/lib/core/model/labs/patient_lab_orders.dart @@ -36,6 +36,9 @@ class PatientLabOrders { String setupID; List speciality; bool isLiveCareAppointment; + int status; + String statusDesc; + PatientLabOrders( {this.actualDoctorRate, this.clinicDescription, @@ -69,8 +72,11 @@ class PatientLabOrders { this.projectNameN, this.qR, this.setupID, - this.invoiceNo_VP, - this.speciality,this.isLiveCareAppointment}); + this.invoiceNo_VP, + this.speciality, + this.isLiveCareAppointment, + this.status, + this.statusDesc}); PatientLabOrders.fromJson(Map json) { actualDoctorRate = json['ActualDoctorRate']; @@ -107,7 +113,8 @@ class PatientLabOrders { setupID = json['SetupID']; invoiceNo_VP = json['invoiceNo_VP']; isLiveCareAppointment = json['IsLiveCareAppointment']; - // speciality = json['Speciality'].cast(); + status = json['Status']; + statusDesc = json['StatusDesc']; } Map toJson() { @@ -146,7 +153,9 @@ class PatientLabOrders { data['SetupID'] = this.setupID; data['Speciality'] = this.speciality; data['IsLiveCareAppointment'] = this.isLiveCareAppointment; - data['invoiceNo_VP'] =this.invoiceNo_VP; + data['invoiceNo_VP'] = this.invoiceNo_VP; + data['Status'] = this.status; + data['StatusDesc'] = this.statusDesc; return data; } } @@ -155,8 +164,7 @@ class PatientLabOrdersList { String filterName = ""; List patientLabOrdersList = List(); - PatientLabOrdersList( - {this.filterName, PatientLabOrders patientDoctorAppointment}) { + PatientLabOrdersList({this.filterName, PatientLabOrders patientDoctorAppointment}) { patientLabOrdersList.add(patientDoctorAppointment); } } diff --git a/lib/pages/medical/labs/laboratory_result_page.dart b/lib/pages/medical/labs/laboratory_result_page.dart index d5bb9035..4051a153 100644 --- a/lib/pages/medical/labs/laboratory_result_page.dart +++ b/lib/pages/medical/labs/laboratory_result_page.dart @@ -66,6 +66,7 @@ class _LaboratoryResultPageState extends State { details: model.patientLabSpecialResult.isEmpty ? null : getSpecialResults(model), orderNo: widget.patientLabOrders.orderNo, patientLabOrder: widget.patientLabOrders, + projectName: widget.patientLabOrders.projectName, ), itemCount: 1, ), diff --git a/lib/pages/medical/labs/labs_home_page.dart b/lib/pages/medical/labs/labs_home_page.dart index 26738778..70f658e9 100644 --- a/lib/pages/medical/labs/labs_home_page.dart +++ b/lib/pages/medical/labs/labs_home_page.dart @@ -86,6 +86,9 @@ class LabsHomePage extends StatelessWidget { isLiveCareAppointment: labOrder.isLiveCareAppointment, date: labOrder.orderDate, isSortByClinic: _isSortByClinic, + isLabOrderResult: true, + resultStatus: labOrder.status, + resultStatusDesc: labOrder.statusDesc, //projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(labOrder.orderDate) : DateUtil.getMonthDayYearDateFormatted(labOrder.orderDate), ); }, diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 7af2010a..91a09f0c 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2910,6 +2910,7 @@ class TranslationBase { String get habibCallCenter => localizedValues["habibCallCenter"][locale.languageCode]; String get cashAmountUpdateInsurance => localizedValues["cashAmountUpdateInsurance"][locale.languageCode]; String get validInsurance => localizedValues["validInsurance"][locale.languageCode]; + String get resultStatus => localizedValues["resultStatus"][locale.languageCode]; } diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index a39029b8..c7f57f9d 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -775,6 +775,36 @@ class Utils { ); } + static Widget tableColumnValueWithFlowChart(String text, String flowChartText, {bool isLast = false, bool isCapitable = true, ProjectViewModel mProjectViewModel}) { + ProjectViewModel projectViewModel = mProjectViewModel ?? Provider.of(AppGlobal.context); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox(height: 12), + Text( + isCapitable && !projectViewModel.isArabic ? text.toLowerCase().capitalizeFirstofEach : text, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff575757), letterSpacing: -0.4, height: 16 / 10), + ), + SizedBox(height: 12), + AutoSizeText( + flowChartText, + maxLines: 1, + minFontSize: 6, + style: TextStyle(decoration: TextDecoration.underline, fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xffD02127), letterSpacing: -0.48, height: 18 / 12), + ), + if (!isLast) + Divider( + height: 1, + color: Color(0xffEFEFEF), + thickness: 1, + ) + ], + ); + } + static Future isGoogleServicesAvailable() async { GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability(); String status = availability.toString().split('.').last; diff --git a/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart b/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart index 9a974aef..f8a0a9cc 100644 --- a/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart +++ b/lib/widgets/data_display/medical/LabResult/LabResultWidget.dart @@ -161,7 +161,7 @@ class LabResultWidget extends StatelessWidget { Utils.tableColumnTitle(TranslationBase.of(context).description, showDivider: false), Utils.tableColumnTitle(TranslationBase.of(context).value, showDivider: false), Utils.tableColumnTitle(TranslationBase.of(context).range, showDivider: false), - Utils.tableColumnTitle("", showDivider: false), + Utils.tableColumnTitle(TranslationBase.of(context).unit, showDivider: false), ], ), ); @@ -202,7 +202,8 @@ class LabResultWidget extends StatelessWidget { }, child: Padding( padding: EdgeInsets.only(left: !projectViewModel.isArabic ? 0 : 12, right: !projectViewModel.isArabic ? 12 : 0), - child: Utils.tableColumnValueWithUnderLine(TranslationBase.of(context).viewFlowChart, isLast: true, isCapitable: false), + // child: Utils.tableColumnValueWithUnderLine(TranslationBase.of(context).viewFlowChart, isLast: true, isCapitable: false), + child: Utils.tableColumnValueWithFlowChart(labResultList[i].uOM, TranslationBase.of(context).viewFlowChart, isLast: true, isCapitable: false), ), ) : Container(), diff --git a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart index f08bc3dd..6241eb5c 100644 --- a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart +++ b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart @@ -19,9 +19,10 @@ class LaboratoryResultWidget extends StatefulWidget { final String billNo; final String details; final String orderNo; + final String projectName; final PatientLabOrders patientLabOrder; - const LaboratoryResultWidget({Key key, this.onTap, this.billNo, this.details, this.orderNo, this.patientLabOrder}) : super(key: key); + const LaboratoryResultWidget({Key key, this.onTap, this.billNo, this.details, this.orderNo, this.projectName, this.patientLabOrder}) : super(key: key); @override _LaboratoryResultWidgetState createState() => _LaboratoryResultWidgetState(); @@ -49,7 +50,7 @@ class _LaboratoryResultWidgetState extends State { widget.patientLabOrder.doctorImageURL, widget.patientLabOrder.speciality, widget.billNo, - widget.patientLabOrder.projectName, + widget.projectName, widget.patientLabOrder.orderDate, null, widget.patientLabOrder.nationalityFlagURL, diff --git a/lib/widgets/data_display/medical/doctor_card.dart b/lib/widgets/data_display/medical/doctor_card.dart index 12454335..9e4de615 100644 --- a/lib/widgets/data_display/medical/doctor_card.dart +++ b/lib/widgets/data_display/medical/doctor_card.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; @@ -34,6 +35,9 @@ class DoctorCard extends StatelessWidget { final bool isSickLeave; final int sickLeaveStatus; final int projectID; + final bool isLabOrderResult; + final int resultStatus; + final String resultStatusDesc; DoctorCard( {this.name, @@ -54,7 +58,10 @@ class DoctorCard extends StatelessWidget { this.isParentAppointment = false, this.isSickLeave = false, this.sickLeaveStatus = 0, - this.projectID = 0}); + this.projectID = 0, + this.isLabOrderResult = false, + this.resultStatus, + this.resultStatusDesc}); ProjectViewModel projectViewModel; @@ -217,6 +224,8 @@ class DoctorCard extends StatelessWidget { ), ], ), + if (isLabOrderResult) + MyRichText(TranslationBase.of(context).resultStatus, resultStatusDesc ?? "", projectViewModel.isArabic, valueColor: getResultStatusColor(resultStatus)), ], ), ), @@ -252,6 +261,22 @@ class DoctorCard extends StatelessWidget { ); } + Color getResultStatusColor(int resultStatus) { + Color statusColor = Color(0xff2B353E); + + if (resultStatus == 17 || resultStatus == 16) { + statusColor = CustomColors.green; + } + if (resultStatus == 45) { + statusColor = CustomColors.orange; + } + if (resultStatus == 44) { + statusColor = CustomColors.accentColor; + } + + return statusColor; + } + String getStatusText(BuildContext context) { String statusText = ""; if (sickLeaveStatus == 1) { diff --git a/lib/widgets/my_rich_text.dart b/lib/widgets/my_rich_text.dart index c3d108c5..cf426db5 100644 --- a/lib/widgets/my_rich_text.dart +++ b/lib/widgets/my_rich_text.dart @@ -4,7 +4,9 @@ class MyRichText extends StatelessWidget { final String title; final String value; final bool isArabic; - MyRichText(this.title,this.value,this.isArabic,{Key key}) : super(key: key); + Color valueColor; + + MyRichText(this.title, this.value, this.isArabic, {this.valueColor}); @override Widget build(BuildContext context) { @@ -16,7 +18,7 @@ class MyRichText extends StatelessWidget { children: [ TextSpan( text: " $value", - style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, fontFamily: isArabic ? 'Cairo' : 'Poppins', color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12), + style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, fontFamily: isArabic ? 'Cairo' : 'Poppins', color: valueColor ?? Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12), ) ]), );