diff --git a/lib/config/config.dart b/lib/config/config.dart index f60b7762..3c8f2985 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -22,12 +22,12 @@ var PACKAGES_ORDER_HISTORY = '/api/orders/items'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; // var BASE_URL = 'http://10.50.100.198:2018/'; // var BASE_URL = 'https://uat.hmgwebservices.com/'; -// var BASE_URL = 'https://hmgwebservices.com/'; +var BASE_URL = 'https://hmgwebservices.com/'; // var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/'; -var BASE_URL = 'https://webservices.hmg.com/'; +// var BASE_URL = 'https://webservices.hmg.com/'; // var BASE_URL = 'http://10.50.100.198:4422/'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 0d5a2848..35af85dc 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -2143,7 +2143,6 @@ const Map localizedValues = { "readMore": {"en": "Read More", "ar": "اقرأ أكثر"}, "showLess": {"en": "Show Less", "ar": "عرض أقل"}, "change": {"en": "Change", "ar": "فرق"}, - "download": {"en": "Download", "ar": "تحميل"}, "referenceRange": {"en": "Reference Range", "ar": "النطاق المرجعي"}, "criticalLow": {"en": "Critical Low", "ar": "النطاق المرجعي"}, "criticalHigh": {"en": "Critical High", "ar": "حرج مرتفع"}, diff --git a/lib/core/model/labs/lab_result.dart b/lib/core/model/labs/lab_result.dart index 476d65bf..ecfbd104 100644 --- a/lib/core/model/labs/lab_result.dart +++ b/lib/core/model/labs/lab_result.dart @@ -17,7 +17,8 @@ enum ResultFlag { CL('criticalLow'), CH('criticalHigh'), HCH('highCriticalHigh'), - LCL('lowCriticalLow'); + LCL('lowCriticalLow'), + IRR('interpretive'); final String value; @@ -39,6 +40,8 @@ enum ResultFlag { return ResultFlag.HCH; case 'LCL': return ResultFlag.LCL; + case '': + return ResultFlag.IRR; default: return null; } @@ -60,6 +63,8 @@ enum ResultFlag { return 'HCH'; case ResultFlag.LCL: return 'LCL'; + case ResultFlag.IRR: + return ''; } } @@ -79,6 +84,8 @@ enum ResultFlag { return ResultTypes.highCriticalHigh; case ResultFlag.LCL: return ResultTypes.lowCriticalLow; + case ResultFlag.IRR: + return ResultTypes.IRR; } } } diff --git a/lib/core/service/medical/labs_service.dart b/lib/core/service/medical/labs_service.dart index be0f257f..5167bb52 100644 --- a/lib/core/service/medical/labs_service.dart +++ b/lib/core/service/medical/labs_service.dart @@ -234,7 +234,7 @@ class LabsService extends BaseService { // await baseAppClient.post(SEND_LAB_RESULT_EMAIL, onSuccess: (dynamic response, int statusCode) { await baseAppClient.post(SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) { if (isDownload) { - labReportPDF = response['LabReportsPDFContent']; + labReportPDF = response['PdfContent']; } }, onFailure: (String error, int statusCode) { hasError = true; diff --git a/lib/core/viewModels/medical/labs_view_model.dart b/lib/core/viewModels/medical/labs_view_model.dart index 6cf3918a..48fc8b39 100644 --- a/lib/core/viewModels/medical/labs_view_model.dart +++ b/lib/core/viewModels/medical/labs_view_model.dart @@ -1,3 +1,7 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:typed_data'; + import 'package:diplomaticquarterapp/core/enum/filter_type.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/labs/LabOrderResult.dart'; @@ -9,6 +13,8 @@ import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.da import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart'; +import 'package:open_filex/open_filex.dart'; +import 'package:path_provider/path_provider.dart'; import '../../../locator.dart'; import '../base_view_model.dart'; @@ -139,6 +145,9 @@ class LabsViewModel extends BaseViewModel { case ResultFlag.CH: //6 percentage = division * 3.8; break; + case ResultFlag.IRR: + percentage = 0; + break; } return percentage * 100; @@ -177,14 +186,35 @@ class LabsViewModel extends BaseViewModel { } sendLabReportEmail({PatientLabOrders? patientLabOrder, String? mes, AuthenticatedUser? userObj, required bool isVidaPlus, bool isDownload = false}) async { + setState(ViewState.Busy); + await _labsService.sendLabReportEmail(patientLabOrder: patientLabOrder, userObj: userObj, isVidaPlus: isVidaPlus, isDownload: isDownload); + setState(ViewState.Idle); + if (_labsService.hasError) { error = _labsService.error!; } else { if (isDownload) { + if (labReportPDF.isNotEmpty) { + String path = await _createFileFromString(labReportPDF, "pdf"); + try { + OpenFilex.open(path); + } catch (ex) { + AppToast.showErrorToast(message: "Cannot open file."); + } + } } else { AppToast.showSuccessToast(message: mes!); } } } + + Future _createFileFromString(String encodedStr, String ext) async { + Uint8List bytes = base64.decode(encodedStr); + String dir = (await getApplicationDocumentsDirectory()).path; + File file = File( + "$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + "." + ext); + await file.writeAsBytes(bytes); + return file.path; + } } diff --git a/lib/pages/medical/labs/laboratory_result_page.dart b/lib/pages/medical/labs/laboratory_result_page.dart index 0c356b03..5d6ce4ea 100644 --- a/lib/pages/medical/labs/laboratory_result_page.dart +++ b/lib/pages/medical/labs/laboratory_result_page.dart @@ -6,7 +6,6 @@ import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/LabResult/laboratory_result_widget.dart'; @@ -51,18 +50,17 @@ class _LaboratoryResultPageState extends State { children: [ LaboratoryResultWidget( onTap: () async { - GifLoaderDialogUtils.showMyDialog(context); await model.sendLabReportEmail( - patientLabOrder: widget.patientLabOrders, - mes: TranslationBase.of(context).sendSuc, - userObj: projectViewModel.user, - isVidaPlus: Utils.isVidaPlusProject( - projectViewModel, - int.parse(widget.patientLabOrders!.projectID!), - ), - ); - GifLoaderDialogUtils.hideDialog(context); + patientLabOrder: widget.patientLabOrders, + mes: TranslationBase.of(context).sendSuc, + userObj: projectViewModel.user, + isVidaPlus: Utils.isVidaPlusProject( + projectViewModel, + int.parse(widget.patientLabOrders!.projectID!), + ), + isDownload: true); }, + showConfirmMessageDialog: false, billNo: widget.patientLabOrders!.invoiceNo, // details: model.patientLabSpecialResult[index].resultDataHTML, details: model.patientLabSpecialResult.isEmpty diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 3ba35106..2f73b4d1 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -3059,7 +3059,6 @@ class TranslationBase { String get EROnlineCheckInWaitTurn => localizedValues["EROnlineCheckInWaitTurn"][locale.languageCode]; String get EROnlineCheckInWaitTurnInstruction => localizedValues["EROnlineCheckInWaitTurnInstruction"][locale.languageCode]; - String get download => localizedValues["download"][locale.languageCode]; String get share => localizedValues["share"][locale.languageCode]; String get normal => localizedValues["normal"][locale.languageCode]; 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 f4c9d6d0..90960ecb 100644 --- a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart +++ b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart @@ -11,7 +11,6 @@ import 'package:diplomaticquarterapp/widgets/new_design/doctor_header.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; -import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:provider/provider.dart'; @@ -22,8 +21,18 @@ class LaboratoryResultWidget extends StatefulWidget { final String? orderNo; final String? projectName; final PatientLabOrders? patientLabOrder; + final bool showConfirmMessageDialog; - const LaboratoryResultWidget({Key? key, this.onTap, this.billNo, this.details, this.orderNo, this.projectName, this.patientLabOrder}) : super(key: key); + const LaboratoryResultWidget( + {Key? key, + this.onTap, + this.billNo, + this.details, + this.orderNo, + this.projectName, + this.patientLabOrder, + this.showConfirmMessageDialog = true}) + : super(key: key); @override _LaboratoryResultWidgetState createState() => _LaboratoryResultWidgetState(); @@ -91,6 +100,7 @@ class _LaboratoryResultWidgetState extends State { buttonColor: Color(0xFF09AA28), buttonTitle: TranslationBase.of(context).download, buttonIcon: "assets/images/svg/download_1.svg", + showConfirmMessageDialog: widget.showConfirmMessageDialog, ); } diff --git a/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart b/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart index 633ff678..bf3578c6 100644 --- a/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart +++ b/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart @@ -4,6 +4,8 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:flutter/material.dart'; +///@author +/// enum ResultTypes { lowCriticalLow, criticalLow, @@ -12,6 +14,7 @@ enum ResultTypes { high, criticalHigh, highCriticalHigh, + IRR, unknown } @@ -413,15 +416,22 @@ class ItemResultCardWidgetWithParams extends StatelessWidget { ), const SizedBox(height: 10), // Progress Bar - SizedBox( - height: 55, - child: CustomResultProgressBar( - percentage: percentage, - value: subTitle, - type: type, - ), + Visibility( + visible: type != ResultTypes.IRR, + child: Column( + children: [ + SizedBox( + height: 55, + child: CustomResultProgressBar( + percentage: percentage, + value: subTitle, + type: type, + ), + ), + const SizedBox(height: 12), + ], ), - const SizedBox(height: 12), + ), // Note Section if (note.isNotEmpty) Column( @@ -468,6 +478,7 @@ class ItemResultCardWidgetWithParams extends StatelessWidget { return Color(0xFFEAB157); case ResultTypes.normal: return Color(0xFF09AA28); + //todo handle irr here default: return Color(0xFF09AA28); } @@ -511,8 +522,9 @@ class ResultStatusWidget extends StatelessWidget { icon = Icons.check_circle; break; case ResultTypes.unknown: - color = const Color(0xFFEAB157); - icon = Icons.arrow_circle_up; + case ResultTypes.IRR: + color = Color(0xFF09AA28); + icon = Icons.check_circle; break; }