mirror of
https://git.meshkee.com/applications/cssd.git
synced 2026-10-10 19:19:17 +03:30
371 lines
9.2 KiB
Dart
Executable File
371 lines
9.2 KiB
Dart
Executable File
import 'dart:convert';
|
|
|
|
import 'package:cssd/models/item_model.dart';
|
|
import 'package:cssd/models/my_item_model.dart';
|
|
import 'package:dio/dio.dart';
|
|
import 'package:file_picker/file_picker.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:random_string/random_string.dart';
|
|
|
|
import '../config/urls.dart';
|
|
import '../config/user.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
class ItemProvider extends ChangeNotifier {
|
|
List<PlatformFile> catchImages = [];
|
|
List<Uint8List> images = [];
|
|
String searchBoxValue = '';
|
|
bool filterOn = false;
|
|
List<ItemResultObject>? items;
|
|
|
|
List<ItemResultObject>? originalItems;
|
|
|
|
ItemDetailObject? result;
|
|
ItemFilterObject? filters = ItemFilterObject(
|
|
id: '',
|
|
hospital: '',
|
|
name: '',
|
|
udi: '',
|
|
size: '',
|
|
specific: '',
|
|
);
|
|
|
|
MyItemFilterObject? myItemsFilters = 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();
|
|
}
|
|
|
|
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 filterData = json.decode(response.body);
|
|
for (var hospital in filterData['data']['MedicalCenters']) {
|
|
result.add({
|
|
'name': hospital['name'].toString(),
|
|
'id': hospital['id'].toString()
|
|
});
|
|
// print(hospital['name']);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
setImages() async {
|
|
images = [];
|
|
for (var image in catchImages) {
|
|
var result = image.bytes;
|
|
// final batchId = randomString(10);
|
|
// addImage(batchId, result, image.path);
|
|
images.add(result!.buffer
|
|
.asUint8List(result.offsetInBytes, result.lengthInBytes));
|
|
}
|
|
notifyListeners();
|
|
}
|
|
|
|
setCatchImages(List<PlatformFile> images) {
|
|
catchImages = images;
|
|
notifyListeners();
|
|
}
|
|
|
|
removeImage(int index) {
|
|
catchImages.removeAt(index);
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<String> addImage(String batchId, dynamic file, String fileName) async {
|
|
var imageListInt = file.cast<int>();
|
|
var dio = new Dio();
|
|
dio.options.headers = {
|
|
'Authorization': User.token,
|
|
'X-Requested-With': 'XMLHttpRequest',
|
|
'Content-Type': 'application/json',
|
|
};
|
|
FormData formData = new FormData.fromMap(
|
|
{
|
|
"batch_id": batchId,
|
|
'model_type': 'Item',
|
|
"file": MultipartFile.fromBytes(imageListInt, filename: fileName)
|
|
},
|
|
);
|
|
|
|
await dio.post(
|
|
Url.addImage,
|
|
data: formData,
|
|
);
|
|
// print(response.statusCode);
|
|
// print(response.statusMessage);
|
|
// print(response.data);
|
|
|
|
return 'Added';
|
|
}
|
|
|
|
Future<String> createItemResult(
|
|
name,
|
|
size,
|
|
specific,
|
|
udi,
|
|
note,
|
|
batchId,
|
|
) async {
|
|
final batchId = randomString(10);
|
|
|
|
for (var image in catchImages) {
|
|
await addImage(batchId, image.bytes, image.path!);
|
|
}
|
|
var response = await http.post(Uri.parse(Url.createItemResult),
|
|
body: json.encode(
|
|
{
|
|
'note': note,
|
|
'size': size,
|
|
'specific': specific,
|
|
'name': name,
|
|
'udi': udi,
|
|
'file_batch_id': batchId,
|
|
},
|
|
),
|
|
headers: {
|
|
'Authorization': User.token,
|
|
'X-Requested-With': 'XMLHttpRequest',
|
|
"Content-Type": "application/json",
|
|
"Accept": "application/json"
|
|
});
|
|
print(response.body);
|
|
if (response.statusCode == 200 || response.statusCode == 201) {
|
|
catchImages = [];
|
|
return 'done';
|
|
} else {
|
|
return 'error';
|
|
}
|
|
}
|
|
|
|
Future<void> updateItemResult(
|
|
id,
|
|
name,
|
|
size,
|
|
specific,
|
|
udi,
|
|
description,
|
|
) async {
|
|
var response = await http.put(Uri.parse(Url.updateItemResult(id)),
|
|
body: json.encode(
|
|
{
|
|
'name': name,
|
|
'udi': udi,
|
|
'note': description,
|
|
'size': size,
|
|
'specific': specific,
|
|
},
|
|
),
|
|
headers: {
|
|
'Authorization': User.token,
|
|
'X-Requested-With': 'XMLHttpRequest',
|
|
"Content-Type": "application/json",
|
|
"Accept": "application/json"
|
|
});
|
|
|
|
print(response.body);
|
|
}
|
|
|
|
Future<bool> removeItems(String id) async {
|
|
var response = await http.post(Uri.parse(Url.removeItems(id)), body: {
|
|
'_method': 'delete'
|
|
}, headers: {
|
|
'Authorization': User.token,
|
|
});
|
|
|
|
print(response.body);
|
|
|
|
if (response.statusCode == 200) {
|
|
items!.removeWhere((item) {
|
|
return item.id.toString() == id;
|
|
});
|
|
}
|
|
|
|
notifyListeners();
|
|
return true;
|
|
}
|
|
|
|
void setFilters(
|
|
id,
|
|
name,
|
|
udi,
|
|
hospital,
|
|
size,
|
|
specific,
|
|
) {
|
|
pageNumber = 1;
|
|
filters = ItemFilterObject(
|
|
id: id,
|
|
name: name,
|
|
udi: udi,
|
|
hospital: hospital,
|
|
size: size,
|
|
specific: specific,
|
|
);
|
|
if (filters!.id == '' &&
|
|
filters!.name == '' &&
|
|
filters!.hospital == '' &&
|
|
filters!.size == '' &&
|
|
filters!.specific != '' &&
|
|
filters!.udi == '') {
|
|
filterOn = false;
|
|
} else {
|
|
filterOn = true;
|
|
}
|
|
notifyListeners();
|
|
}
|
|
|
|
void search(String value) {
|
|
items = [];
|
|
searchBoxValue = value;
|
|
originalItems!.forEach((result) {
|
|
if (result.id.toString().contains(searchBoxValue)) {
|
|
items!.add(result);
|
|
}
|
|
});
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> getItemResults() async {
|
|
String url = Url.itemResults(pageNumber);
|
|
if (filterOn) {
|
|
if (filters!.id != '') {
|
|
url += '&item_id=${filters!.id}';
|
|
}
|
|
if (filters!.name != '') {
|
|
url += '&name=${filters!.name}';
|
|
}
|
|
if (filters!.hospital != '') {
|
|
url += '&medical_center_id=${filters!.hospital}';
|
|
}
|
|
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,
|
|
},
|
|
);
|
|
|
|
var itemsData = json.decode(response.body);
|
|
if (pageNumber == 1) {
|
|
originalItems = [];
|
|
}
|
|
|
|
for (var item in itemsData['data']['data']) {
|
|
originalItems!.add(
|
|
ItemResultObject(
|
|
name: item['name'],
|
|
id: item['id'].toString(),
|
|
size: item['size'].toString(),
|
|
userName: item['user'] != null ? item['user']['name'] : '',
|
|
status: item['status'],
|
|
udi: item['udi'],
|
|
),
|
|
);
|
|
}
|
|
pageNumber += 1;
|
|
|
|
search('');
|
|
}
|
|
|
|
Future<ItemDetailObject> showItemResult(String id) async {
|
|
var response = await http.get(Uri.parse(Url.getItemResult(id)), headers: {
|
|
'Authorization': User.token,
|
|
});
|
|
if (response.statusCode != 200) {
|
|
return ItemDetailObject(
|
|
id: 'null',
|
|
description: 'null',
|
|
name: 'null',
|
|
userName: 'null',
|
|
specific: 'null',
|
|
hospital: 'null',
|
|
size: 'null',
|
|
createdAt: '2019-09-18 10:02:03',
|
|
udi: 'null',
|
|
status: 0,
|
|
);
|
|
}
|
|
var data = json.decode(response.body)['data'];
|
|
print(data);
|
|
result = ItemDetailObject(
|
|
id: data['id'].toString(),
|
|
description: data['note'] != null ? data['note'] : '',
|
|
name: data['name'] != null ? data['name'] : '',
|
|
hospital:
|
|
data['user'] != null ? data['user']['medical_center']['name'] : '',
|
|
userName: data['user'] != null ? data['user']['name'] : '',
|
|
size: data['size'] != null ? data['size'] : '',
|
|
specific: data['specific'] != null ? data['specific'] : '',
|
|
createdAt: data['created_at'] != null ? data['created_at'] : '',
|
|
udi: data['udi'] != null ? data['udi'] : '',
|
|
status: data['status'],
|
|
);
|
|
return result!;
|
|
}
|
|
|
|
Future<bool> changeStatus(String id) async {
|
|
print(id);
|
|
var response = await http.post(
|
|
Uri.parse(Url.changeItemStatus(id)),
|
|
headers: {
|
|
'Authorization': User.token,
|
|
'X-Requested-With': 'XMLHttpRequest',
|
|
"Content-Type": "application/json",
|
|
"Accept": "application/json"
|
|
},
|
|
);
|
|
|
|
var itemData = json.decode(response.body);
|
|
|
|
try {
|
|
if (itemData['status'] == 'Success') {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
Future<bool> exportItems() async {
|
|
var response = await http.get(
|
|
Uri.parse(
|
|
Url.exportItems,
|
|
),
|
|
headers: {'Authorization': User.token},
|
|
);
|
|
print(response.body);
|
|
return true;
|
|
}
|
|
}
|