141 lines
4.3 KiB
Dart
141 lines
4.3 KiB
Dart
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<QuerySnapshot> listener;
|
|
|
|
List<DOSubmission> 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<void> _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<DOSubmission> 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<void> 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();
|
|
});
|
|
}
|
|
}
|
|
}
|