|
|
|
|
@ -32,8 +32,7 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
List<ThresholdRange> threshold = [];
|
|
|
|
|
double maxYForThreeDots = 0.0;
|
|
|
|
|
double maxYForCompleteGraph = 0.0;
|
|
|
|
|
List months = ['Jan','Feb','Mar','April','May','Jun','July','Aug','Sep','Oct','Nov','Dec'];
|
|
|
|
|
|
|
|
|
|
List months = ['Jan', 'Feb', 'Mar', 'April', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
|
|
|
|
|
|
|
|
String get labReportPDF => _labsService.labReportPDF;
|
|
|
|
|
|
|
|
|
|
@ -94,13 +93,13 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
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);
|
|
|
|
|
// setState(ViewState.Error);
|
|
|
|
|
} else {
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
// setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getPatientLabResult({required PatientLabOrders patientLabOrder, required bool isVidaPlus, bool isTablet = false}) async {
|
|
|
|
|
getPatientLabResult({required PatientLabOrders patientLabOrder, required bool isVidaPlus, bool isTablet = false}) async {
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
await _labsService.getPatientLabResult(patientLabOrder: patientLabOrder, isVidaPlus: isVidaPlus);
|
|
|
|
|
if (_labsService.hasError) {
|
|
|
|
|
@ -109,54 +108,48 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
} else {
|
|
|
|
|
_labsService.labResultList.forEach((element) {
|
|
|
|
|
List<LabResultList> patientLabOrdersClinic = labResultLists.where((elementClinic) => elementClinic.filterName == element.testCode).toList();
|
|
|
|
|
element.percentage =
|
|
|
|
|
getPercentage(element.calculatedResultFlag?? ResultFlag.N, isTablet);
|
|
|
|
|
element.percentage = getPercentage(element.calculatedResultFlag ?? ResultFlag.N, isTablet);
|
|
|
|
|
if (patientLabOrdersClinic.length != 0) {
|
|
|
|
|
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element);
|
|
|
|
|
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element);
|
|
|
|
|
} else {
|
|
|
|
|
labResultLists.add(LabResultList(
|
|
|
|
|
filterName: element.testCode,
|
|
|
|
|
description: element.packageShortDescription,
|
|
|
|
|
lab: element));
|
|
|
|
|
labResultLists.add(LabResultList(filterName: element.testCode, description: element.packageShortDescription, lab: element));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
recalculatePercentage(isTablet){
|
|
|
|
|
for(int i = 0;i<labResultLists.length;i++){
|
|
|
|
|
for (int j = 0; j<(labResultLists[i].patientLabResultList?.length??0 );j++){
|
|
|
|
|
|
|
|
|
|
labResultLists[i].patientLabResultList![j].percentage = getPercentage(labResultLists[i].patientLabResultList![j].calculatedResultFlag?? ResultFlag.N, isTablet);
|
|
|
|
|
}
|
|
|
|
|
recalculatePercentage(isTablet) {
|
|
|
|
|
for (int i = 0; i < labResultLists.length; i++) {
|
|
|
|
|
for (int j = 0; j < (labResultLists[i].patientLabResultList?.length ?? 0); j++) {
|
|
|
|
|
labResultLists[i].patientLabResultList![j].percentage = getPercentage(labResultLists[i].patientLabResultList![j].calculatedResultFlag ?? ResultFlag.N, isTablet);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double getPercentage(ResultFlag flag, bool isTablet) {
|
|
|
|
|
double percentage = 0.0;
|
|
|
|
|
var division = (1/15);
|
|
|
|
|
print("its a tablet $isTablet");
|
|
|
|
|
var division = (1 / 15);
|
|
|
|
|
switch (flag) {
|
|
|
|
|
case ResultFlag.N:
|
|
|
|
|
percentage = division * (isTablet?7.25:6.85);
|
|
|
|
|
percentage = division * (isTablet ? 7.25 : 6.85);
|
|
|
|
|
break;
|
|
|
|
|
case ResultFlag.H:
|
|
|
|
|
percentage = division * (isTablet?11:10.9);
|
|
|
|
|
percentage = division * (isTablet ? 11 : 10.9);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ResultFlag.L:
|
|
|
|
|
percentage = division * (isTablet?3.5:2.95);
|
|
|
|
|
percentage = division * (isTablet ? 3.5 : 2.95);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ResultFlag.CL:
|
|
|
|
|
case ResultFlag.LCL:
|
|
|
|
|
percentage = division * (isTablet?0.7:.04);
|
|
|
|
|
percentage = division * (isTablet ? 0.7 : .04);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ResultFlag.HCH:
|
|
|
|
|
case ResultFlag.CH:
|
|
|
|
|
percentage = division * (isTablet?13.5:13.3);
|
|
|
|
|
percentage = division * (isTablet ? 13.5 : 13.3);
|
|
|
|
|
break;
|
|
|
|
|
case ResultFlag.IRR:
|
|
|
|
|
percentage = 0;
|
|
|
|
|
@ -178,7 +171,6 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
error = _labsService.error!;
|
|
|
|
|
setState(ViewState.Error);
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
/// commented out based on PAP-304
|
|
|
|
|
// bool isShouldClear = false;
|
|
|
|
|
// if (_labsService.labOrdersResultsList.length == 1) {
|
|
|
|
|
@ -192,32 +184,32 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
// _labsService.labOrdersResultsList.clear();
|
|
|
|
|
|
|
|
|
|
var sortedResponse = _labsService.sortByFlagAndValue(_labsService.labOrdersResultsList);
|
|
|
|
|
print("the sorted list is ${sortedResponse}");
|
|
|
|
|
var recentThree = _labsService.getMostRecentThree(sortedResponse);
|
|
|
|
|
print("the recentThree list is ${recentThree}");
|
|
|
|
|
var mappedToThresholdValue = _labsService.getThresholdValue();
|
|
|
|
|
// var mappedToThresholdValue = _labsService.buildThresholdList(recentThree);
|
|
|
|
|
// _labsService.adjustLabOrderResults(sortedResponse);
|
|
|
|
|
print("the recentThree list is ${mappedToThresholdValue}");
|
|
|
|
|
threshold = mappedToThresholdValue;
|
|
|
|
|
List months = ['Jan','Feb','Mar','April','May','Jun','July','Aug','Sep','Oct','Nov','Dec'];
|
|
|
|
|
threshold = mappedToThresholdValue;
|
|
|
|
|
List months = ['Jan', 'Feb', 'Mar', 'April', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
|
|
|
|
|
|
|
|
double counter = 1;
|
|
|
|
|
recentThree.reversed.forEach((element) {
|
|
|
|
|
try {
|
|
|
|
|
var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!);
|
|
|
|
|
// debugPrint("the double.parse(element.resultValue!) is ${double.parse(element.resultValue!)}");
|
|
|
|
|
if(double.parse(element.resultValue!)> maxYForThreeDots){
|
|
|
|
|
debugPrint("the double.parse(element.resultValue!) is ${double.parse(element.resultValue!)}");
|
|
|
|
|
|
|
|
|
|
if (double.parse(element.resultValue!) > maxYForThreeDots) {
|
|
|
|
|
maxYForThreeDots = double.parse(element.resultValue!);
|
|
|
|
|
}
|
|
|
|
|
// threePointGraphValue.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime));
|
|
|
|
|
threePointGraphValue.add(DataPoint( labelValue: counter,value : double.parse(element.resultValue!), actualValue: element.resultValue!,label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime, referenceRangeValue:element.calculatedResultFlag ??"IRR"));
|
|
|
|
|
threePointGraphValue.add(DataPoint(
|
|
|
|
|
labelValue: counter,
|
|
|
|
|
value: double.parse(element.resultValue!),
|
|
|
|
|
actualValue: element.resultValue!,
|
|
|
|
|
label: "${months[dateTime.month - 1]} ${dateTime.year}",
|
|
|
|
|
date: dateTime,
|
|
|
|
|
referenceRangeValue: element.calculatedResultFlag ?? "IRR"));
|
|
|
|
|
counter++;
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
});
|
|
|
|
|
debugPrint("the maxY is ${maxYForThreeDots}");
|
|
|
|
|
|
|
|
|
|
threePointGraphValue.last.label = "thisResult";
|
|
|
|
|
threePointGraphValue.last.isStringResource = true;
|
|
|
|
|
@ -227,33 +219,31 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
|
|
|
|
|
/// This function is used to create a full graph data points for the lab results.
|
|
|
|
|
/// @param onComplete: A callback function that is called when the data points are created.
|
|
|
|
|
createFullGraphDatPoints(
|
|
|
|
|
VoidCallback onComplete
|
|
|
|
|
){
|
|
|
|
|
createFullGraphDatPoints(VoidCallback onComplete) {
|
|
|
|
|
maxYForCompleteGraph = 0.0;
|
|
|
|
|
completeeGraphValues.clear();
|
|
|
|
|
setState(ViewState.Busy);
|
|
|
|
|
double counter = 1;
|
|
|
|
|
threshold = _labsService.getThresholdValue();
|
|
|
|
|
threshold = _labsService.getThresholdValue();
|
|
|
|
|
_labsService.labOrdersResultsList.reversed.forEach((element) {
|
|
|
|
|
try {
|
|
|
|
|
print("the mapping is being done");
|
|
|
|
|
var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!);
|
|
|
|
|
if(double.parse(element.resultValue!)> maxYForCompleteGraph){
|
|
|
|
|
if (double.parse(element.resultValue!) > maxYForCompleteGraph) {
|
|
|
|
|
maxYForCompleteGraph = double.parse(element.resultValue!);
|
|
|
|
|
}
|
|
|
|
|
// completeeGraphValues.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime));
|
|
|
|
|
completeeGraphValues.add(DataPoint( labelValue: counter,value : double.parse(element.resultValue!), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime,actualValue: element.resultValue!, referenceRangeValue:element.calculatedResultFlag??"IRR" ));
|
|
|
|
|
completeeGraphValues.add(DataPoint(
|
|
|
|
|
labelValue: counter,
|
|
|
|
|
value: double.parse(element.resultValue!),
|
|
|
|
|
label: "${months[dateTime.month - 1]} ${dateTime.year}",
|
|
|
|
|
date: dateTime,
|
|
|
|
|
actualValue: element.resultValue!,
|
|
|
|
|
referenceRangeValue: element.calculatedResultFlag ?? "IRR"));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print("the mapping is having exception $e");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
++counter;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
print("the label values are $counter");
|
|
|
|
|
print("the completeeGraphValues length are ${completeeGraphValues.length}");
|
|
|
|
|
print("the completeeGraphValues last value of label ias ${completeeGraphValues.last.labelValue}");
|
|
|
|
|
completeeGraphValues.last.label = "thisResult";
|
|
|
|
|
completeeGraphValues.last.isStringResource = true;
|
|
|
|
|
setState(ViewState.Idle);
|
|
|
|
|
@ -287,8 +277,7 @@ class LabsViewModel extends BaseViewModel {
|
|
|
|
|
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);
|
|
|
|
|
File file = File("$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + "." + ext);
|
|
|
|
|
await file.writeAsBytes(bytes);
|
|
|
|
|
return file.path;
|
|
|
|
|
}
|
|
|
|
|
|