Merge branch 'fix_insurance_update' into 'diplomatic-quarter-live'

fix LabResult

See merge request Cloud_Solution/diplomatic-quarter!166
dq_and_master
Mohammad Aljammal 4 years ago
commit 735ed91f9c

@ -1168,4 +1168,12 @@ const Map localizedValues = {
"en": "Insurance Cards",
"ar": "بطاقات التأمين"
},
'labResult': {
"en": "Lab results",
"ar": "نتائج التحاليل المخبرية"
},
'details':{
'en':'Details',
'ar':'التفاصيل'
}
};

@ -1,9 +1,9 @@
class LabResult {
String description;
Null femaleInterpretativeData;
dynamic femaleInterpretativeData;
int gender;
int lineItemNo;
Null maleInterpretativeData;
dynamic maleInterpretativeData;
String notes;
String packageID;
int patientID;
@ -13,11 +13,11 @@ class LabResult {
String sampleCollectedOn;
String sampleReceivedOn;
String setupID;
Null superVerifiedOn;
dynamic superVerifiedOn;
String testCode;
String uOM;
String verifiedOn;
Null verifiedOnDateTime;
dynamic verifiedOnDateTime;
LabResult(
{this.description,

@ -139,7 +139,7 @@ class BaseAppClient {
parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
} else if (!parsed['IsAuthenticated']) {
// await logout();
await logout();
//helpers.showErrorToast('Your session expired Please login agian');
} else {

@ -32,6 +32,7 @@ class LabsService extends BaseService {
List<PatientLabSpecialResult> patientLabSpecialResult = List();
List<LabResult> labResultList = List();
List<LabResult> labOrdersResultsList = List();
Future getLaboratoryResult(
{String projectID,
@ -77,6 +78,28 @@ class LabsService extends BaseService {
}, body: body);
}
Future getPatientLabOrdersResults({PatientLabOrders patientLabOrder,String procedure}) async {
hasError = false;
Map<String, dynamic> body = Map();
body['InvoiceNo'] = patientLabOrder.invoiceNo;
body['OrderNo'] = patientLabOrder.orderNo;
body['isDentalAllowedBackend'] = false;
body['SetupID'] = patientLabOrder.setupID;
body['ProjectID'] = patientLabOrder.projectID;
body['ClinicID'] = patientLabOrder.clinicID;
body['Procedure'] = procedure;
await baseAppClient.post(GET_Patient_LAB_RESULT,
onSuccess: (dynamic response, int statusCode) {
labOrdersResultsList.clear();
response['ListPLR'].forEach((lab) {
labOrdersResultsList.add(LabResult.fromJson(lab));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
RequestSendLabReportEmail _requestSendLabReportEmail =
RequestSendLabReportEmail();

@ -12,6 +12,9 @@ class LabsViewModel extends BaseViewModel {
FilterType filterType = FilterType.Clinic;
LabsService _labsService = locator<LabsService>();
List<LabResult> get labOrdersResultsList => _labsService.labOrdersResultsList;
List<PatientLabOrdersList> _patientLabOrdersListClinic = List();
List<PatientLabOrdersList> _patientLabOrdersListHospital = List();
@ -105,18 +108,15 @@ class LabsViewModel extends BaseViewModel {
getPatientLabResult({PatientLabOrders patientLabOrder}) async {
setState(ViewState.Busy);
await _labsService.getPatientLabResult(
patientLabOrder: patientLabOrder
);
await _labsService.getPatientLabResult(patientLabOrder: patientLabOrder);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
_labsService.labResultList.forEach((element) {
List<LabResultList> patientLabOrdersClinic =
labResultLists
.where((elementClinic) =>
elementClinic.filterName == element.testCode)
List<LabResultList> patientLabOrdersClinic = labResultLists
.where(
(elementClinic) => elementClinic.filterName == element.testCode)
.toList();
if (patientLabOrdersClinic.length != 0) {
@ -124,16 +124,26 @@ class LabsViewModel extends BaseViewModel {
.patientLabResultList
.add(element);
} else {
labResultLists.add(LabResultList(
filterName: element.testCode,
lab: element));
labResultLists
.add(LabResultList(filterName: element.testCode, lab: element));
}
});
setState(ViewState.Idle);
}
}
getPatientLabOrdersResults({PatientLabOrders patientLabOrder,String procedure}) async {
setState(ViewState.Busy);
await _labsService.getPatientLabOrdersResults(patientLabOrder: patientLabOrder,procedure: procedure);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
sendLabReportEmail({PatientLabOrders patientLabOrder}) async {
setState(ViewState.Busy);
await _labsService.sendLabReportEmail(patientLabOrder: patientLabOrder);

@ -2,7 +2,7 @@ import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/laboratory_result_widget.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/LabResult/laboratory_result_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

@ -19,6 +19,21 @@ class DateUtil {
return DateTime.now();
}
static DateTime convertStringToDateTime(String date) {
if (date != null) {
try {
var dateT = date.split('/');
var year = dateT[2].substring(0,4);
return DateTime(int.parse(year),int.parse(dateT[1]),int.parse(dateT[0]));
} catch (e) {
print(e);
}
return DateTime.now();
} else
return DateTime.now();
}
static String convertDateToString(DateTime date) {
const start = "/Date(";
const end = "+0300)";

@ -943,6 +943,8 @@ String get fileno => localizedValues['fileno'][locale.languageCode];
String get cancelled => localizedValues['cancelled'][locale.languageCode];
String get requestMedicalReport => localizedValues['request-medical-report'][locale.languageCode];
String get insurCards => localizedValues['insur-cards'][locale.languageCode];
String get labResult => localizedValues['labResult'][locale.languageCode];
String get details => localizedValues['details'][locale.languageCode];
}

@ -62,3 +62,10 @@ class TimeSeriesSales {
TimeSeriesSales(this.time, this.sales);
}
class TimeSeriesSales2 {
final DateTime time;
final double sales;
TimeSeriesSales2(this.time, this.sales);
}

@ -0,0 +1,42 @@
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'lab_result_chart_and_detials.dart';
class FlowChartPage extends StatelessWidget {
final PatientLabOrders patientLabOrder;
final String filterName;
FlowChartPage({this.patientLabOrder, this.filterName});
@override
Widget build(BuildContext context) {
return BaseView<LabsViewModel>(
onModelReady: (model) => model.getPatientLabOrdersResults(
patientLabOrder: patientLabOrder, procedure: filterName),
builder: (context, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: filterName,
baseViewModel: model,
body: SingleChildScrollView(
child: model.labOrdersResultsList.isNotEmpty
? Container(
child: LabResultChartAndDetails(
name: filterName,
labResult: model.labOrdersResultsList,
),
)
: Container(
child: Center(
child: Texts('no Data'),
),
),
),
),
);
}
}

@ -1,18 +1,23 @@
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../text.dart';
import '../../text.dart';
import 'FlowChartPage.dart';
class LabResultWidget extends StatelessWidget {
final String filterName ;
final List<LabResult> patientLabResultList;
final PatientLabOrders patientLabOrder;
LabResultWidget({Key key, this.filterName, this.patientLabResultList}) : super(key: key);
LabResultWidget({Key key, this.filterName, this.patientLabResultList, this.patientLabOrder}) : super(key: key);
ProjectViewModel projectViewModel;
@override
Widget build(BuildContext context) {
@ -30,7 +35,15 @@ class LabResultWidget extends StatelessWidget {
Texts(filterName),
InkWell(
onTap: () {
//TODO model.getPatientLabResult(patientLabOrder: widget.patientLabOrder);
Navigator.push(
context,
FadePage(
page: FlowChartPage(
filterName: filterName,
patientLabOrder: patientLabOrder,
),
),
);
},
child: Texts(
TranslationBase.of(context).showMoreBtn,

@ -0,0 +1,112 @@
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class LabResultDetailsWidget extends StatefulWidget {
final List<LabResult> labResult;
LabResultDetailsWidget({
this.labResult,
});
@override
_VitalSignDetailsWidgetState createState() => _VitalSignDetailsWidgetState();
}
class _VitalSignDetailsWidgetState extends State<LabResultDetailsWidget> {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0)),
border: Border.all(color: Colors.grey, width: 1),
),
margin: EdgeInsets.all(20),
child: Container(
color: Colors.transparent,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Table(
border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]),
),
children: fullData(),
),
],
),
),
);
}
List<TableRow> fullData() {
List<TableRow> tableRow = [];
tableRow.add(TableRow(children: [
Container(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0),
),
),
child: Center(
child: Texts(
TranslationBase.of(context).date,
color: Colors.white,
),
),
height: 60,
),
),
Container(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0),
),
),
child: Center(
child: Texts(TranslationBase.of(context).labResult, color: Colors.white),
),
height: 60),
)
]));
widget.labResult.forEach((vital) {
tableRow.add(TableRow(children: [
Container(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Texts(
// '${DateUtil.getWeekDay(vital.vitalSignDate.weekday)}, ${vital.vitalSignDate.day} ${DateUtil.getMonth(vital.vitalSignDate.month)}, ${vital.vitalSignDate.year} ',
'${vital.sampleCollectedOn}',
textAlign: TextAlign.center,
),
),
),
),
Container(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Texts(
'${vital.resultValue}',
textAlign: TextAlign.center,
),
),
),
),
]));
});
return tableRow;
}
}

@ -0,0 +1,74 @@
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'Lab_Result_details_wideget.dart';
class LabResultChartAndDetails extends StatelessWidget {
LabResultChartAndDetails({
Key key,
@required this.labResult,
@required this.name,
}) : super(key: key);
final List<LabResult> labResult;
final String name;
List<TimeSeriesSales> _timeSeriesData = [];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
AppExpandableNotifier(
headerWidget: AppTimeSeriesChart(
seriesList: generateData(),
chartName: name,
startDate: DateUtil.convertStringToDateTime(labResult[0].sampleCollectedOn),
endDate: DateTime.now(),
),
bodyWidget: LabResultDetailsWidget(
labResult: labResult,
),
),
],
);
}
generateData() {
if (labResult.length > 0) {
int x =0;
labResult.forEach(
(element) {
try {
var resultValueDouble =double.parse(element.resultValue);
var resultValueInt = resultValueDouble.toInt();
_timeSeriesData.add(
TimeSeriesSales(
DateUtil.convertStringToDateTime(element.sampleCollectedOn),
resultValueInt,
),
);
} catch (e) {
print(e);
}
},
);
}
return [
new charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: _timeSeriesData,
)
];
}
}

@ -12,7 +12,7 @@ import 'package:flutter_html/flutter_html.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
import '../text.dart';
import '../../text.dart';
import 'LabResultWidget.dart';
class LaboratoryResultWidget extends StatefulWidget {
@ -232,6 +232,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
...List.generate(
model.labResultLists.length,
(index) => LabResultWidget(
patientLabOrder: widget.patientLabOrder,
filterName: model
.labResultLists[index].filterName,
patientLabResultList: model

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart';
@ -59,7 +60,7 @@ class _AppExpandableNotifier extends State<AppExpandableNotifier> {
Padding(
padding: EdgeInsets.all(10),
child: Text(
widget.title ?? 'Details',
widget.title ?? TranslationBase.of(context).details,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2,

Loading…
Cancel
Save