import 'dart:async'; import 'dart:typed_data'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:path/path.dart' as Path; import 'package:fcs/model/constants.dart'; import 'package:fcs/vo/do.dart'; import 'package:fcs/vo/popup_menu.dart'; import 'base_model.dart'; import 'firebase_helper.dart'; class DeliveryModel extends BaseModel { StreamSubscription listener; List dos = []; PopupMenu popupMenu = new PopupMenu(index: 0); int dateIndex = 0; DateTime selectedDate = DateTime.now(); int timber = 0; void initUser(user) async { super.initUser(user); _loadDOs(); } Future _loadDOs() async { if (!user.isOwnerAndAbove() && !user.hasDelivery()) { return; } String path = "/$biz_collection/${setting.okEnergyId}/$dos_collection"; var startDate = new DateTime( selectedDate.year, selectedDate.month, selectedDate.day, 0, 0, 0); var endDate = new DateTime( selectedDate.year, selectedDate.month, selectedDate.day, 23, 59, 59); listener = getDeliverySnapshot( path, 'delivery_date', startDate, endDate, 'do_number') .listen((snaps) async { dos.clear(); snaps.documents.forEach((d) { dos.add(DOSubmission.fromMap(d.data, d.documentID)); }); notifyListeners(); }); } @override logout() async { if (listener != null) await listener.cancel(); dos = []; } Future getDO(String id) async { String path = "/$biz_collection/${setting.okEnergyId}/$dos_collection"; if (user.isBuyer()) { path = "/$biz_collection/${setting.okEnergyId}/$buyer_collection/${user.docID}/$dos_collection"; } var doSnap = await getDocSnap(path, id); return DOSubmission.fromMap(doSnap.data, doSnap.documentID); } Future endDelivery(DOSubmission doObj, Uint8List img) async { String path = Path.join(do_files_path, user.docID); String imgUrl = await uploadStorageData(path, img, fileName: doObj.id); doObj.doReceiptUrl = imgUrl; await request("/do/ended", "POST", payload: doObj.toMap(), token: await getToken()); } void filterData( String status, DateTime dateTime, int _selectedIndex, int _dateIndex) { dos.clear(); var startDate = new DateTime(dateTime.year, dateTime.month, dateTime.day, 0, 0, 0); var endDate = new DateTime(dateTime.year, dateTime.month, dateTime.day, 23, 59, 59); if (listener != null) { listener.cancel(); } this.popupMenu.index = _selectedIndex; this.dateIndex = _dateIndex; this.selectedDate = dateTime == null ? new DateTime( selectedDate.year, selectedDate.month, selectedDate.day, 0, 0, 0) : dateTime; String path = "/$biz_collection/${setting.okEnergyId}/$dos_collection"; if (user.isBuyer()) { path = "/$biz_collection/${setting.okEnergyId}/$buyer_collection/${user.docID}/$dos_collection"; } if (status != null && dateTime == null) { listener = getDeliveryStatusSnapshot(path, status, 'do_number') .listen((snaps) async { dos.clear(); snaps.documents.forEach((d) { dos.add(DOSubmission.fromMap(d.data, d.documentID)); }); notifyListeners(); }); } else if (dateTime != null && status == null) { listener = getDeliveryDateSnapshot( path, 'delivery_date', startDate, endDate, 'do_number') .listen((snaps) async { dos.clear(); snaps.documents.forEach((d) { dos.add(DOSubmission.fromMap(d.data, d.documentID)); }); notifyListeners(); }); } else if (status != null && dateTime != null) { listener = getDeliveryDataSnapshot( path, status, 'delivery_date', startDate, endDate, 'do_number') .listen((snaps) async { dos.clear(); snaps.documents.forEach((d) { dos.add(DOSubmission.fromMap(d.data, d.documentID)); }); notifyListeners(); }); } else { listener = getQuerySnapshotByOrder(path, 'do_number').listen((snaps) async { dos.clear(); snaps.documents.forEach((d) { dos.add(DOSubmission.fromMap(d.data, d.documentID)); }); notifyListeners(); }); } } }