84 lines
2.3 KiB
Dart
84 lines
2.3 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:fcs/model/constants.dart';
|
|
import 'package:fcs/vo/report.dart';
|
|
import 'package:fcs/vo/report_user.dart';
|
|
import 'package:fcs/vo/user.dart';
|
|
|
|
import '../config.dart';
|
|
import 'base_model.dart';
|
|
import 'firebase_helper.dart';
|
|
|
|
class ReportUserModel extends BaseModel {
|
|
List<ReportUser> reportUsers = [];
|
|
void initUser(user) {
|
|
super.initUser(user);
|
|
}
|
|
|
|
@override
|
|
logout() async {}
|
|
|
|
Future<List<ReportUser>> getUsersForReport(String reportID) async {
|
|
List<ReportUser> users = [];
|
|
String path = "/$report_user_collection";
|
|
|
|
QuerySnapshot snapshots = await Firestore.instance
|
|
.collection(path)
|
|
.where('report_id', isEqualTo: reportID)
|
|
.getDocuments();
|
|
snapshots.documents.forEach((d) {
|
|
users.add(ReportUser.fromMap(d.data, d.documentID));
|
|
});
|
|
return users;
|
|
}
|
|
|
|
Future<List<User>> findUser(String searchUser) async {
|
|
if (searchUser == null || searchUser == '') return List();
|
|
|
|
var bytes = utf8.encode(searchUser);
|
|
var base64Str = base64.encode(bytes);
|
|
HtmlEscape htmlEscape = const HtmlEscape();
|
|
String escapeUser = htmlEscape.convert(base64Str);
|
|
|
|
int limit = 20;
|
|
List<User> _users = [];
|
|
|
|
try {
|
|
var data = await request(
|
|
"/api/fts/$user_collection/$escapeUser/$limit", "GET",
|
|
token: await getToken(), url: Config.instance.reportURL);
|
|
if (data == null) return List();
|
|
|
|
data.forEach((user) {
|
|
var _user = User.fromUserJson(user);
|
|
_users.add(_user);
|
|
});
|
|
} catch (e) {
|
|
// permission error
|
|
log.warning("user error:" + e.toString());
|
|
return null;
|
|
}
|
|
return _users;
|
|
}
|
|
|
|
Future<void> updateReportForAllUsers(Report report) async {
|
|
await request("/report", "PUT",
|
|
payload: {'id': report.id, 'for_all_users': report.forAllUser},
|
|
token: await getToken());
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> assignUser(ReportUser reportUser) async {
|
|
await request("/report_user", "POST",
|
|
payload: reportUser.toMap(), token: await getToken());
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> deleteReportUser(ReportUser reportUser) async {
|
|
await request("/report_user", "DELETE",
|
|
payload: reportUser.toMap(), token: await getToken());
|
|
notifyListeners();
|
|
}
|
|
}
|