Files

346 lines
9.5 KiB
Dart
Executable File

import 'dart:convert';
import '../config/urls.dart';
import '../config/user.dart';
import '../models/label_models.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class LabelsProvider extends ChangeNotifier {
String searchBoxValue = '';
bool filterOn = false;
List<LabelResultObject>? items;
List<LabelResultObject>? originalItems;
List<String> packageVals = [];
List<TextEditingController> packageValues = [];
String initialPackageValue = '';
String? packageId;
int curPackageVal = 1;
resetPackageVals() {
packageVals = [];
packageValues = [];
initialPackageValue = '';
packageId = null;
curPackageVal = 1;
// notifyListeners();
}
// addPackageVal() {
// curPackageVal += 1;
// TextEditingController lbl = new TextEditingController();
// lbl.text = initialPackageValue;
// packageValues.add(lbl);
// notifyListeners();
// }
changePackageVal(String value, int index) {
packageValues[index].text = value;
notifyListeners();
}
LabelDetailsObject? result;
LabelFilterObject filters = LabelFilterObject(
id: '',
cycleNumber: '',
sterilizerId: '',
hospital: '',
);
int pageNumber = 1;
void resetPageNumber() => pageNumber = 1;
bool isloading = false;
void resetLoading() {
isloading = false;
notifyListeners();
}
void setLoading() {
isloading = true;
notifyListeners();
}
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
// notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<List<Map<String, String>>> getHospitalsFilters() async {
var response = await http.get(
Uri.parse(Url.filterItems),
headers: {
'Authorization': User.token,
},
);
List<Map<String, String>> result = [];
var filterDatas = json.decode(response.body);
for (var hospital in filterDatas['data']['MedicalCenters']) {
result.add({
'name': hospital['name'].toString(),
'id': hospital['id'].toString()
});
// print(hospital);
}
return result;
}
Future<List<String>> getPackageFilters() async {
var response = await http.get(
Uri.parse(Url.packageItems),
headers: {
'Authorization': User.token,
},
);
List<String> result = [];
var filterDatas = json.decode(response.body);
for (var package in filterDatas['data']) {
// result.add(
// "${package['name']} - ${package['package_id'] != null ? package['package_id'] : ''}");
result.add("${package['id'].toString()} - ${package['name'].toString()}");
}
if (result.isEmpty) result.add("");
packageVals = result;
initialPackageValue = packageId ?? "";
TextEditingController newLbl = new TextEditingController();
newLbl.text = initialPackageValue;
packageValues.add(newLbl);
notifyListeners();
return result;
}
Future<void> createLabelResult(lotNumber, cycleNumber, sterileDate, packageId,
expireDate, sterilizerId) async {
// List<Map<String, Object>> pkgs = [];
// for (var package in packages) {
// pkgs.add({'name': '', 'id': package});
// }
var response = await http.post(Uri.parse(Url.createLabelResult),
body: json.encode(
{
'sterile_date': sterileDate,
'expire_date': expireDate,
'sterilizer_id': sterilizerId,
'cycle_number': cycleNumber,
'lot_number': lotNumber,
'package_id': packageId,
},
),
headers: {
'Authorization': User.token,
'X-Requested-With': 'XMLHttpRequest',
"Content-Type": "application/json",
"Accept": "application/json"
});
print(response.body);
}
Future<void> updateLabelResult(
id,
lotNumber,
cycleNumber,
sterileDate,
// package,
expireDate,
sterilizerId,
) async {
// print(labs);
print(
{
'sterile_date': sterileDate,
'expire_date': expireDate,
'sterilizer_id': sterilizerId,
'cycle_number': cycleNumber,
'lot_number': lotNumber,
// 'package_id': package['id'],
},
);
var response = await http.put(Uri.parse(Url.updateLabelResult(id)),
body: json.encode(
{
'sterile_date': sterileDate,
'expire_date': expireDate,
'sterilizer_id': sterilizerId,
'cycle_number': cycleNumber,
'lot_number': lotNumber,
// 'package_id': package['id'],
// 'package': {
// 'id': package['id'],
// 'name': package['name'],
// },
},
),
headers: {
'Authorization': User.token,
'X-Requested-With': 'XMLHttpRequest',
"Content-Type": "application/json",
"Accept": "application/json"
});
print(response.body);
}
Future<bool> removeLabels(String id) async {
var response = await http.post(Uri.parse(Url.removeLabels(id)), body: {
'_method': 'delete'
}, headers: {
'Authorization': User.token,
});
if (response.statusCode == 200) {
items!.removeWhere((item) {
return item.id.toString() == id;
});
}
notifyListeners();
return true;
}
void setFilters(id, cycleNumber, sterilizerId, hospital) {
pageNumber = 1;
filters = LabelFilterObject(
id: id,
cycleNumber: cycleNumber,
sterilizerId: sterilizerId,
hospital: hospital,
);
if (filters.id == '' &&
filters.cycleNumber == '' &&
filters.sterilizerId == '' &&
filters.hospital == '') {
filterOn = false;
} else {
filterOn = true;
}
// notifyListeners();
}
Future<void> search(String value) async {
items = [];
searchBoxValue = value;
var response = await http.get(
Uri.parse(Url.searchLabels(value)),
headers: {
'Authorization': User.token,
},
);
var testResultData = json.decode(response.body);
for (var item in testResultData['data']) {
items!.add(
LabelResultObject(
expireDate: item['expire_date'],
id: item['id'].toString(),
packageName: item['package'] != null
? item['package']['name'].toString()
: ' ',
packageId:
item['package'] != null ? item['package']['id'].toString() : ' ',
),
);
}
resetLoading();
notifyListeners();
}
Future<void> getLabelResults() async {
String url = Url.labelResults(pageNumber);
if (filterOn) {
items = [];
// url = Url.labelResults(pNum);
if (filters.id != '') {
url += '&label_id=${filters.id}';
}
if (filters.hospital != '') {
url += '&medical_center_id=${filters.hospital}';
}
if (filters.sterilizerId != '') {
url += '&sterilizer_id=${filters.sterilizerId}';
}
if (filters.cycleNumber != '') {
url += '&cycle_number=${filters.cycleNumber}';
}
}
var response = await http.get(
Uri.parse(url),
headers: {
'Authorization': User.token,
},
);
var testResultData = json.decode(response.body);
if (pageNumber == 1) {
originalItems = [];
items = [];
}
for (var item in testResultData['data']) {
// print(item);
originalItems!.add(
LabelResultObject(
expireDate: item['expire_date'],
id: item['id'].toString(),
packageName: item['package'] != null
? item['package']['name'].toString()
: ' ',
packageId:
item['package'] != null ? item['package']['id'].toString() : ' ',
),
);
}
pageNumber += 1;
items = originalItems;
notifyListeners();
}
Future<LabelDetailsObject> showLabelResult(String id) async {
var response = await http.get(
Uri.parse(Url.getLabelResult(id)),
headers: {
'Authorization': User.token,
},
);
if (response.statusCode != 200) {
return LabelDetailsObject(
id: 'null',
package: 'null',
packageId: 'null',
hospitalName: 'null',
createDate: 'null',
expireDate: 'null',
sterileDate: 'null',
sterileId: 'null',
cycleNumber: 'null',
lotNumber: 'null',
);
}
var data = json.decode(response.body)['data'];
print(data);
result = LabelDetailsObject(
id: data['id'].toString(),
package: data['package'] != null ? data['package']['name'] : '',
packageId:
data['package'] != null ? data['package']['id'].toString() : '',
hospitalName: data['user']['medical_center']['name'],
createDate: data['created_at'] != null ? data['created_at'] : '',
expireDate: data['expire_date'] != null ? data['expire_date'] : '',
sterileDate: data['sterile_date'] != null ? data['sterile_date'] : '',
sterileId: data['sterilizer_id'] != null ? data['sterilizer_id'] : '',
cycleNumber: data['cycle_number'] != null ? data['cycle_number'] : '',
lotNumber: data['lot_number'] != null ? data['lot_number'] : '',
);
return result!;
}
}