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 items; List originalItems; // List items = []; Map 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>> getFilterItems() async { var response = await http.get( Url.filterItems, headers: { 'Authorization': User.token, }, ); List> result = []; Map hospitals = {}; Map 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 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 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 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> 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 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; } }