Files
cssd/lib/providers/test_results.dart
T
2020-05-10 14:09:07 +04:30

242 lines
6.4 KiB
Dart

import 'dart:convert';
import 'package:cssd/config/urls.dart';
import 'package:cssd/config/user.dart';
import 'package:cssd/models/test_result_models.dart';
// import 'package:cssd/providers/test_result.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class TestResultsProvider with ChangeNotifier {
String searchBoxValue = '';
bool filterOn = false;
List<TestResultObject> items;
List<TestResultObject> originalItems;
// List<TestResult> items = [];
Map<String, dynamic> result;
TestResultFilterObject _filters = TestResultFilterObject(
id: '',
labelID: '',
userName: '',
hospital: '',
testType: '',
fDate: '',
uDate: '',
);
void resetFilters() {
filterOn = false;
_filters = TestResultFilterObject(
id: '',
labelID: '',
userName: '',
hospital: '',
testType: '',
fDate: '',
uDate: '',
);
}
int pageNumber = 1;
void resetPageNumber() => pageNumber = 1;
bool isloading = false;
void resetLoading() {
isloading = false;
notifyListeners();
}
void setLoading() {
isloading = true;
// notifyListeners();
}
TestResultFilterObject get filters {
return _filters;
}
void search(String value) {
print(value);
items = [];
searchBoxValue = value;
originalItems.forEach((result) {
if (result.name.toString().contains(searchBoxValue)) {
items.add(result);
}
});
notifyListeners();
}
void setFilters(id, labelId, username, testType, hospital, fDate, uDate) {
pageNumber = 1;
_filters = TestResultFilterObject(
id: id,
labelID: labelId,
userName: username,
hospital: hospital,
testType: testType,
fDate: fDate,
uDate: uDate);
if (_filters.id == '' &&
_filters.labelID == '' &&
_filters.testType == '' &&
_filters.hospital == '' &&
_filters.userName == '' &&
_filters.fDate == '' &&
_filters.uDate == '') {
filterOn = false;
} else {
filterOn = true;
}
notifyListeners();
}
Future<List<Map<String, String>>> getFilterItems() async {
var response = await http.get(
Url.filterItems,
headers: {
'Authorization': User.token,
},
);
List<Map<String, String>> result = [];
Map<String, String> hospitals = {};
Map<String, String> testTypes = {};
var filterDatas = json.decode(response.body);
for (var hospital in filterDatas['data']['MedicalCenters']) {
hospitals.addAll({hospital['name']: hospital['id'].toString()});
}
result.add(hospitals);
for (var testType in filterDatas['data']['TestTypes']) {
testTypes.addAll({testType['name']: testType['id'].toString()});
}
result.add(testTypes);
return result;
}
Future<void> getTestResults() async {
String url = Url.testResults(pageNumber);
if (filterOn) {
items = [];
if (_filters.id != '') {
url += '&device_id=${_filters.id}';
}
if (_filters.labelID != '') {
url += '&device_label=${_filters.labelID}';
}
if (_filters.hospital != '') {
url += '&medicalCenter_id=${_filters.hospital}';
}
if (_filters.testType != '') {
url += '&testType_id=${_filters.testType}';
}
if (_filters.userName != '') {
url += '&user_name=${_filters.userName}';
}
if (_filters.fDate != '') {
url += '&fromPicker=${_filters.fDate}';
}
if (_filters.uDate != '') {
url += '&upToPicker=${_filters.uDate}';
}
print(url);
}
//'device_id=3526&testType_id=107&medicalCenter_id=2&user_name=erfan&fromPicker=2020-05-12&upToPicker=2020-05-19&device_label=Instrument%20ID&page=1'
var response = await http.get(
url,
headers: {
'Authorization': User.token,
},
);
var testResultData = json.decode(response.body);
if (pageNumber == 1) {
originalItems = [];
items = [];
}
for (var item in testResultData['data']['data']) {
originalItems.add(
TestResultObject(
id: item['id'].toString(),
name: item['test_type']['name'],
deviceId: item['device_id'].toString(),
result: item['verified'] == 'Verified' ? 'Verified' : 'Not Verified',
date: item['date'],
hospital: item['user']['medical_center']['name'],
),
);
}
pageNumber += 1;
search('');
notifyListeners();
}
static Future<void> updateTestResult(String id, values) async {
var response = await http.post(
Url.updateTestResult(id),
body: json.encode(values),
headers: {
'Authorization': User.token,
'X-Requested-With': 'XMLHttpRequest',
"Content-Type": "application/json",
"Accept": "application/json"
},
);
print(response.body);
}
static Future<void> createTestResult(values) async {
var response = await http
.post(Url.createTestResult, body: json.encode(values), headers: {
'Authorization': User.token,
'X-Requested-With': 'XMLHttpRequest',
"Content-Type": "application/json",
"Accept": "application/json"
});
print(response.body);
}
Future<Map<String, dynamic>> showTestResult(String id) async {
var response = await http.get(Url.getTestResult(id), headers: {
'Authorization': User.token,
});
var data = json.decode(response.body)['data'];
// print(data);
result = {
'id': data['id'],
'auto_cleave_id': data['inputs']['Autoclave ID'] != null
? data['inputs']['Autoclave ID']
: '',
'test_code': data['test_type_id'] != null ? data['test_type_id'] : '',
'date': data['created_at'] != null ? data['created_at'] : '',
'verified': data['verified'] != null ? data['verified'] : '',
'description':
data['inputs']['Note'] != null ? data['inputs']['Note'] : '',
'test_type_name':
data['test_type']['name'] != null ? data['test_type']['name'] : '',
};
return result;
}
Future<bool> removeTestResult(String id) async {
var response = await http.post(Url.removeTestResult(id), body: {
'_method': 'delete'
}, headers: {
'Authorization': User.token,
});
if (response.statusCode == 200) {
items.removeWhere((item) {
return item.id.toString() == id;
});
}
notifyListeners();
return true;
}
}