WD: lab result changes of IRR.

merge-update-with-lab-changes
taha.alam 1 year ago
parent 9047ebf723
commit 636a67b720

@ -22,12 +22,12 @@ var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:2018/'; // var BASE_URL = 'http://10.50.100.198:2018/';
// var BASE_URL = 'https://uat.hmgwebservices.com/'; // 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://orash.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidamergeuat.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/'; // var BASE_URL = 'http://10.50.100.198:4422/';

@ -2143,7 +2143,6 @@ const Map localizedValues = {
"readMore": {"en": "Read More", "ar": "اقرأ أكثر"}, "readMore": {"en": "Read More", "ar": "اقرأ أكثر"},
"showLess": {"en": "Show Less", "ar": "عرض أقل"}, "showLess": {"en": "Show Less", "ar": "عرض أقل"},
"change": {"en": "Change", "ar": "فرق"}, "change": {"en": "Change", "ar": "فرق"},
"download": {"en": "Download", "ar": "تحميل"},
"referenceRange": {"en": "Reference Range", "ar": "النطاق المرجعي"}, "referenceRange": {"en": "Reference Range", "ar": "النطاق المرجعي"},
"criticalLow": {"en": "Critical Low", "ar": "النطاق المرجعي"}, "criticalLow": {"en": "Critical Low", "ar": "النطاق المرجعي"},
"criticalHigh": {"en": "Critical High", "ar": "حرج مرتفع"}, "criticalHigh": {"en": "Critical High", "ar": "حرج مرتفع"},

@ -17,7 +17,8 @@ enum ResultFlag {
CL('criticalLow'), CL('criticalLow'),
CH('criticalHigh'), CH('criticalHigh'),
HCH('highCriticalHigh'), HCH('highCriticalHigh'),
LCL('lowCriticalLow'); LCL('lowCriticalLow'),
IRR('interpretive');
final String value; final String value;
@ -39,6 +40,8 @@ enum ResultFlag {
return ResultFlag.HCH; return ResultFlag.HCH;
case 'LCL': case 'LCL':
return ResultFlag.LCL; return ResultFlag.LCL;
case '':
return ResultFlag.IRR;
default: default:
return null; return null;
} }
@ -60,6 +63,8 @@ enum ResultFlag {
return 'HCH'; return 'HCH';
case ResultFlag.LCL: case ResultFlag.LCL:
return 'LCL'; return 'LCL';
case ResultFlag.IRR:
return '';
} }
} }
@ -79,6 +84,8 @@ enum ResultFlag {
return ResultTypes.highCriticalHigh; return ResultTypes.highCriticalHigh;
case ResultFlag.LCL: case ResultFlag.LCL:
return ResultTypes.lowCriticalLow; return ResultTypes.lowCriticalLow;
case ResultFlag.IRR:
return ResultTypes.IRR;
} }
} }
} }

@ -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, onSuccess: (dynamic response, int statusCode) {
await baseAppClient.post(SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) { await baseAppClient.post(SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) {
if (isDownload) { if (isDownload) {
labReportPDF = response['LabReportsPDFContent']; labReportPDF = response['PdfContent'];
} }
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;

@ -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/filter_type.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/labs/LabOrderResult.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/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.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 '../../../locator.dart';
import '../base_view_model.dart'; import '../base_view_model.dart';
@ -139,6 +145,9 @@ class LabsViewModel extends BaseViewModel {
case ResultFlag.CH: //6 case ResultFlag.CH: //6
percentage = division * 3.8; percentage = division * 3.8;
break; break;
case ResultFlag.IRR:
percentage = 0;
break;
} }
return percentage * 100; 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 { 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); await _labsService.sendLabReportEmail(patientLabOrder: patientLabOrder, userObj: userObj, isVidaPlus: isVidaPlus, isDownload: isDownload);
setState(ViewState.Idle);
if (_labsService.hasError) { if (_labsService.hasError) {
error = _labsService.error!; error = _labsService.error!;
} else { } else {
if (isDownload) { if (isDownload) {
if (labReportPDF.isNotEmpty) {
String path = await _createFileFromString(labReportPDF, "pdf");
try {
OpenFilex.open(path);
} catch (ex) {
AppToast.showErrorToast(message: "Cannot open file.");
}
}
} else { } else {
AppToast.showSuccessToast(message: mes!); AppToast.showSuccessToast(message: mes!);
} }
} }
} }
Future<String> _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;
}
} }

@ -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/medical/labs_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/LabResult/laboratory_result_widget.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/LabResult/laboratory_result_widget.dart';
@ -51,18 +50,17 @@ class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
children: [ children: [
LaboratoryResultWidget( LaboratoryResultWidget(
onTap: () async { onTap: () async {
GifLoaderDialogUtils.showMyDialog(context);
await model.sendLabReportEmail( await model.sendLabReportEmail(
patientLabOrder: widget.patientLabOrders, patientLabOrder: widget.patientLabOrders,
mes: TranslationBase.of(context).sendSuc, mes: TranslationBase.of(context).sendSuc,
userObj: projectViewModel.user, userObj: projectViewModel.user,
isVidaPlus: Utils.isVidaPlusProject( isVidaPlus: Utils.isVidaPlusProject(
projectViewModel, projectViewModel,
int.parse(widget.patientLabOrders!.projectID!), int.parse(widget.patientLabOrders!.projectID!),
), ),
); isDownload: true);
GifLoaderDialogUtils.hideDialog(context);
}, },
showConfirmMessageDialog: false,
billNo: widget.patientLabOrders!.invoiceNo, billNo: widget.patientLabOrders!.invoiceNo,
// details: model.patientLabSpecialResult[index].resultDataHTML, // details: model.patientLabSpecialResult[index].resultDataHTML,
details: model.patientLabSpecialResult.isEmpty details: model.patientLabSpecialResult.isEmpty

@ -3059,7 +3059,6 @@ class TranslationBase {
String get EROnlineCheckInWaitTurn => localizedValues["EROnlineCheckInWaitTurn"][locale.languageCode]; String get EROnlineCheckInWaitTurn => localizedValues["EROnlineCheckInWaitTurn"][locale.languageCode];
String get EROnlineCheckInWaitTurnInstruction => localizedValues["EROnlineCheckInWaitTurnInstruction"][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 share => localizedValues["share"][locale.languageCode];
String get normal => localizedValues["normal"][locale.languageCode]; String get normal => localizedValues["normal"][locale.languageCode];

@ -11,7 +11,6 @@ import 'package:diplomaticquarterapp/widgets/new_design/doctor_header.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -22,8 +21,18 @@ class LaboratoryResultWidget extends StatefulWidget {
final String? orderNo; final String? orderNo;
final String? projectName; final String? projectName;
final PatientLabOrders? patientLabOrder; 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 @override
_LaboratoryResultWidgetState createState() => _LaboratoryResultWidgetState(); _LaboratoryResultWidgetState createState() => _LaboratoryResultWidgetState();
@ -91,6 +100,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
buttonColor: Color(0xFF09AA28), buttonColor: Color(0xFF09AA28),
buttonTitle: TranslationBase.of(context).download, buttonTitle: TranslationBase.of(context).download,
buttonIcon: "assets/images/svg/download_1.svg", buttonIcon: "assets/images/svg/download_1.svg",
showConfirmMessageDialog: widget.showConfirmMessageDialog,
); );
} }

@ -4,6 +4,8 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
///@author
///
enum ResultTypes { enum ResultTypes {
lowCriticalLow, lowCriticalLow,
criticalLow, criticalLow,
@ -12,6 +14,7 @@ enum ResultTypes {
high, high,
criticalHigh, criticalHigh,
highCriticalHigh, highCriticalHigh,
IRR,
unknown unknown
} }
@ -413,15 +416,22 @@ class ItemResultCardWidgetWithParams extends StatelessWidget {
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
// Progress Bar // Progress Bar
SizedBox( Visibility(
height: 55, visible: type != ResultTypes.IRR,
child: CustomResultProgressBar( child: Column(
percentage: percentage, children: [
value: subTitle, SizedBox(
type: type, height: 55,
), child: CustomResultProgressBar(
percentage: percentage,
value: subTitle,
type: type,
),
),
const SizedBox(height: 12),
],
), ),
const SizedBox(height: 12), ),
// Note Section // Note Section
if (note.isNotEmpty) if (note.isNotEmpty)
Column( Column(
@ -468,6 +478,7 @@ class ItemResultCardWidgetWithParams extends StatelessWidget {
return Color(0xFFEAB157); return Color(0xFFEAB157);
case ResultTypes.normal: case ResultTypes.normal:
return Color(0xFF09AA28); return Color(0xFF09AA28);
//todo handle irr here
default: default:
return Color(0xFF09AA28); return Color(0xFF09AA28);
} }
@ -511,8 +522,9 @@ class ResultStatusWidget extends StatelessWidget {
icon = Icons.check_circle; icon = Icons.check_circle;
break; break;
case ResultTypes.unknown: case ResultTypes.unknown:
color = const Color(0xFFEAB157); case ResultTypes.IRR:
icon = Icons.arrow_circle_up; color = Color(0xFF09AA28);
icon = Icons.check_circle;
break; break;
} }

Loading…
Cancel
Save