diff --git a/lib/config/config.dart b/lib/config/config.dart index d5c4e413..3c272d82 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -353,7 +353,7 @@ var CAN_PAY_FOR_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/CanPayForWal var CHANNEL = 3; var GENERAL_ID = 'Cs2020@2016\$2958'; var IP_ADDRESS = '10.20.10.20'; -var VERSION_ID = 17.5; +var VERSION_ID = 17.6; var SETUP_ID = '91877'; var LANGUAGE = 2; // var PATIENT_OUT_SA = 0; diff --git a/lib/core/service/medical/labs_service.dart b/lib/core/service/medical/labs_service.dart index 89ca56cc..9b3904be 100644 --- a/lib/core/service/medical/labs_service.dart +++ b/lib/core/service/medical/labs_service.dart @@ -125,7 +125,7 @@ class LabsService extends BaseService { } Future updateWorkplaceName(String workplaceName, String workplaceNameAR, String occupation, String occupationAR, int requestNumber, String setupID, int projectID) async { - // Future updateWorkplaceName(String workplaceName, String workplaceNameAR, int requestNumber, String setupID, int projectID) async { + // Future updateWorkplaceName(String workplaceName, String workplaceNameAR, int requestNumber, String setupID, int projectID) async { hasError = false; Map body = Map(); @@ -233,7 +233,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 525a084e..ea45a312 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'; @@ -76,13 +82,7 @@ class LabsViewModel extends BaseViewModel { getLaboratoryResult({String? projectID, int? clinicID, String? invoiceNo, String? invoiceType, String? orderNo, String? setupID, bool? isVidaPlus}) async { setState(ViewState.Busy); - await _labsService.getLaboratoryResult(invoiceNo: invoiceNo, - invoiceType: invoiceType, - orderNo: orderNo, - projectID: projectID, - clinicID: clinicID, - setupID: setupID, - isVidaPlus: isVidaPlus); + await _labsService.getLaboratoryResult(invoiceNo: invoiceNo, invoiceType: invoiceType, orderNo: orderNo, projectID: projectID, clinicID: clinicID, setupID: setupID, isVidaPlus: isVidaPlus); if (_labsService.hasError) { error = _labsService.error!; setState(ViewState.Error); @@ -109,7 +109,7 @@ class LabsViewModel extends BaseViewModel { // }) // .toList(); // if (value.isEmpty) - labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element); + labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element); } else { labResultLists.add(LabResultList(filterName: element.testCode, lab: element)); } @@ -156,9 +156,25 @@ class LabsViewModel extends BaseViewModel { 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 2b506b6a..8441492e 100644 --- a/lib/pages/medical/labs/laboratory_result_page.dart +++ b/lib/pages/medical/labs/laboratory_result_page.dart @@ -65,6 +65,7 @@ class _LaboratoryResultPageState extends State { mes: TranslationBase.of(context).sendSuc, userObj: projectViewModel.user, languageID: projectViewModel.isArabic ? 1 : 2, + isDownload: true, isVidaPlus: Utils.isVidaPlusProject( projectViewModel, int.parse(widget.patientLabOrders!.projectID!), @@ -119,14 +120,6 @@ class _LaboratoryResultPageState extends State { ); } - 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; - } - String getSpecialResults(LabsViewModel model) { String labResults = ""; model.patientLabSpecialResult.forEach((element) { 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 6ad54a8f..c492ee55 100644 --- a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart +++ b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart @@ -67,6 +67,10 @@ class _LaboratoryResultWidgetState extends State { widget.patientLabOrder!.actualDoctorRate!, widget.patientLabOrder!.noOfPatientsRate!, projectViewModel.user.emailAddress!), + buttonTitle: TranslationBase.of(context).downloadReport, + buttonIcon: "assets/images/new/download_1.svg", + showConfirmMessageDialog: false, + isDownload: true, onTap: widget.onTap!, ), SizedBox(height: 10), diff --git a/lib/widgets/new_design/doctor_header.dart b/lib/widgets/new_design/doctor_header.dart index e3495561..11dd6724 100644 --- a/lib/widgets/new_design/doctor_header.dart +++ b/lib/widgets/new_design/doctor_header.dart @@ -25,6 +25,7 @@ class DoctorHeader extends StatelessWidget { final String? buttonIcon; final bool isNeedToShowButton; final bool isShowName; + final bool isDownload; DoctorHeader( {Key? key, @@ -35,6 +36,7 @@ class DoctorHeader extends StatelessWidget { this.isShowName = false, this.buttonIcon, this.showConfirmMessageDialog = true, + this.isDownload = false, this.onRatingAndReviewTap}) : super(key: key); @@ -107,7 +109,9 @@ class DoctorHeader extends StatelessWidget { if (headerModel.nationalityFlagURL != null) Padding( padding: const EdgeInsets.only(top: 8.0), - child: headerModel.nationalityFlagURL.isNotEmpty && headerModel.nationalityFlagURL != null && headerModel.nationalityFlagURL != 'null'? Image.network(headerModel.nationalityFlagURL, height: 20) : SizedBox(), + child: headerModel.nationalityFlagURL.isNotEmpty && headerModel.nationalityFlagURL != null && headerModel.nationalityFlagURL != 'null' + ? Image.network(headerModel.nationalityFlagURL, height: 20) + : SizedBox(), ), ], ) @@ -178,7 +182,8 @@ class DoctorHeader extends StatelessWidget { child: Container( padding: EdgeInsets.only(top: 10, bottom: 10, right: 15, left: 15), decoration: BoxDecoration( - color: Color(0XFFD02127), borderRadius: projectViewModel.isArabic ? BorderRadius.only(topRight: Radius.circular(10)) : BorderRadius.only(topLeft: Radius.circular(10))), + color: isDownload ? CustomColors.green : CustomColors.accentColor, + borderRadius: projectViewModel.isArabic ? BorderRadius.only(topRight: Radius.circular(10)) : BorderRadius.only(topLeft: Radius.circular(10))), child: Row( mainAxisSize: MainAxisSize.min, children: [