import 'dart:convert'; import 'package:cssd/models/my_item_model.dart'; import 'package:flutter/foundation.dart'; import '../config/urls.dart'; import '../config/user.dart'; import 'package:http/http.dart' as http; class MyItemProvider extends ChangeNotifier { String searchBoxValue = ''; bool filterOn = false; List? myItems; List? hospitalItems; List? originalMyItems; List? originalHospitalItems; List? originalMyItemsRequests; List? originalHospitalItemsRequests; List? originalItemHistory; MyItemFilterObject? filters = MyItemFilterObject( id: '', name: '', udi: '', size: '', specific: '', ); int pageNumber = 1; void resetPageNumber() => pageNumber = 1; bool isloading = false; void resetLoading() { isloading = false; notifyListeners(); } void setLoading() { isloading = true; // notifyListeners(); } void searchMyItems(String value) { myItems = []; searchBoxValue = value; originalMyItems!.forEach((result) { if (result.id.toString().contains(searchBoxValue)) { myItems!.add(result); } }); notifyListeners(); } void searchHospitalItems(String value) { hospitalItems = []; searchBoxValue = value; originalHospitalItems!.forEach((result) { if (result.id.toString().contains(searchBoxValue)) { hospitalItems!.add(result); } }); notifyListeners(); } void setFilters( id, name, udi, size, specific, ) { pageNumber = 1; filters = MyItemFilterObject( id: id, name: name, udi: udi, size: size, specific: specific, ); if (filters!.id == '' && filters!.name == '' && filters!.size == '' && filters!.specific != '' && filters!.udi == '') { filterOn = false; } else { filterOn = true; } notifyListeners(); } Future getMyItems() async { String url = Url.getMyItems(pageNumber); if (filterOn) { if (filters!.id != '') { url += '&item_id=${filters!.id}'; } if (filters!.name != '') { url += '&name=${filters!.name}'; } if (filters!.size != '') { url += '&size=${filters!.size}'; } if (filters!.specific != '') { url += '&specific=${filters!.specific}'; } if (filters!.udi != '') { url += '&udi=${filters!.udi}'; } } var response = await http.get( Uri.parse(url), headers: {'Authorization': User.token, "Accept": "application/json"}, ); var itemsData = json.decode(response.body); if (pageNumber == 1) { originalMyItems = []; } for (var item in itemsData['data']) { originalMyItems!.add( MyItemResultObject( name: item['name'], id: item['id'].toString(), size: item['size'].toString(), ), ); } pageNumber += 1; searchMyItems(''); } Future getHospitalItems() async { String url = Url.getHospitalItems(pageNumber); if (filterOn) { if (filters!.id != '') { url += '&item_id=${filters!.id}'; } if (filters!.name != '') { url += '&name=${filters!.name}'; } if (filters!.size != '') { url += '&size=${filters!.size}'; } if (filters!.specific != '') { url += '&specific=${filters!.specific}'; } if (filters!.udi != '') { url += '&udi=${filters!.udi}'; } } var response = await http.get( Uri.parse(url), headers: {'Authorization': User.token, "Accept": "application/json"}, ); print(response.body); var itemsData = json.decode(response.body); if (pageNumber == 1) { originalHospitalItems = []; } for (var item in itemsData['data']) { originalHospitalItems!.add( MyItemResultObject( name: item['name'], id: item['id'].toString(), size: item['size'].toString(), userName: item['user'] != null ? item['user']['name'] : '', ), ); } pageNumber += 1; searchHospitalItems(''); } Future getItemsHistory(String id) async { String url = Url.getItemResult(id); var response = await http.get( Uri.parse(url), headers: {'Authorization': User.token, "Accept": "application/json"}, ); var itemsData = json.decode(response.body)['data']; String fromDate = ''; String toDate = ''; String userHistory = ''; for (var transfer in itemsData['transfers']) { fromDate = transfer['from_date'] != null ? transfer['from_date'].toString() : ''; toDate = transfer['to_date'] != null ? transfer['to_date'].toString() : ''; userHistory = transfer['user']['name'].toString(); } if (itemsData.isNotEmpty) { originalItemHistory!.add( MyItemResultObject( name: itemsData['name'], id: itemsData['id'].toString(), size: itemsData['size'].toString(), fromDate: fromDate, toDate: toDate, userHistory: userHistory, ), ); originalItemHistory!.reversed.toList(); } } Future getMyItemRequests() async { String url = Url.getMyItemRequests; var response = await http.get( Uri.parse(url), headers: {'Authorization': User.token, "Accept": "application/json"}, ); var itemsData = json.decode(response.body); originalMyItemsRequests = []; for (var item in itemsData['data']) { originalMyItemsRequests!.add( MyItemResultObject( name: item['transferable']['name'], id: item['transferable']['id'].toString(), size: item['transferable']['size'].toString(), requestId: item['id'].toString(), ), ); } } Future getHospitalItemRequests() async { String url = Url.getHospitalItemRequests; var response = await http.get( Uri.parse(url), headers: {'Authorization': User.token, "Accept": "application/json"}, ); var itemsData = json.decode(response.body); print(itemsData); originalHospitalItemsRequests = []; for (var item in itemsData['data']) { originalHospitalItemsRequests!.add( MyItemResultObject( name: item['transferable']['name'].toString(), id: item['transferable']['id'].toString(), size: item['transferable']['size'].toString(), userName: item['user'] != null ? item['user']['name'] : '', requestId: item['id'].toString(), ), ); } } Future transferItems(String itemId, String userId) async { var response = await http.post( Uri.parse(Url.transferItems(itemId)), body: json.encode( { 'user_id': userId, }, ), headers: { 'Authorization': User.token, 'X-Requested-With': 'XMLHttpRequest', "Content-Type": "application/json", "Accept": "application/json" }, ); var itemData = json.decode(response.body); print(itemData); } Future repairItems(String itemId, String value) async { var response = await http.post( Uri.parse(Url.repairItems(itemId)), body: json.encode( { 'status': value, }, ), headers: { 'Authorization': User.token, 'X-Requested-With': 'XMLHttpRequest', "Content-Type": "application/json", "Accept": "application/json" }, ); print(response.statusCode); } Future verifyItemRequests(String id, String value) async { var response = await http.post( Uri.parse(Url.verifyItemRequests(id, value)), body: json.encode({'status': value}), headers: { 'Authorization': User.token, 'X-Requested-With': 'XMLHttpRequest', "Content-Type": "application/json", "Accept": "application/json" }, ); var itemData = json.decode(response.body); print(response.statusCode); print(itemData); try { if (itemData['data']['transfers']['status'] == 'approved') { return true; } else { return false; } } catch (e) { print(e); return false; } } }