Files
fcs/lib/pages/carton/model/package_selection_model.dart

149 lines
4.0 KiB
Dart
Raw Normal View History

2024-02-05 17:49:12 +06:30
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:logging/logging.dart';
2024-09-22 16:49:59 +06:30
import '../../../constants.dart';
2024-02-05 17:49:12 +06:30
import '../../../domain/entities/package.dart';
import '../../main/model/base_model.dart';
class PackageSelectionModel extends BaseModel {
final log = Logger("PackageSelectionModel");
String query = "";
List<Package> packages = [];
2024-03-04 17:09:47 +06:30
List<Package> selectedPackages = [];
2024-02-05 17:49:12 +06:30
bool isLoading = false;
DocumentSnapshot? _lastDocument;
bool ended = false;
Timer? t;
search(String term,
{bool imm = false,
required String shipmentId,
required String senderId,
required String consigneeId}) async {
query = term;
packages.clear();
2024-03-04 17:09:47 +06:30
_lastDocument = null;
ended = false;
2024-02-05 17:49:12 +06:30
t?.cancel();
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
2024-03-04 17:09:47 +06:30
await refresh(
2024-02-05 17:49:12 +06:30
term: term,
shipmentId: shipmentId,
consigneeId: consigneeId,
senderId: senderId);
});
}
2024-03-04 17:09:47 +06:30
Future<void> refresh(
2024-02-05 17:49:12 +06:30
{required String shipmentId,
required String senderId,
2024-03-04 17:09:47 +06:30
required String consigneeId,
String term = ""}) async {
2024-02-05 17:49:12 +06:30
packages.clear();
_lastDocument = null;
ended = false;
await loadMoreData(
2024-03-04 17:09:47 +06:30
shipmentId: shipmentId,
senderId: senderId,
consigneeId: consigneeId,
term: term);
2024-02-05 17:49:12 +06:30
notifyListeners();
}
Future<void> loadMoreData(
{required String shipmentId,
required String senderId,
2024-03-04 17:09:47 +06:30
required String consigneeId,
String term = ""}) async {
2024-02-05 17:49:12 +06:30
int rowPerPage = 20;
try {
isLoading = true;
String path = "/$packages_collection";
Query query = FirebaseFirestore.instance
.collection(path)
2025-02-17 20:13:30 +06:30
.where("status",
whereIn: [package_processed_status, package_packed_status])
2024-03-04 17:09:47 +06:30
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("is_deleted", isEqualTo: false);
if (term != "") {
query = query.where("tracking_id", isEqualTo: term);
}
query = query.orderBy("created_date", descending: true);
2024-02-05 17:49:12 +06:30
if (_lastDocument != null) {
query = query.startAfterDocument(_lastDocument!);
}
QuerySnapshot querySnap = await query.limit(rowPerPage).get();
if (querySnap.docs.isEmpty) return;
_lastDocument = querySnap.docs[querySnap.docs.length - 1];
List<Package> list = querySnap.docs.map((documentSnapshot) {
var p = Package.fromMap(documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return p;
}).toList();
for (var p in list) {
2024-03-04 17:09:47 +06:30
selectedPackages.contains(p) ? p.isChecked = true : p.isChecked = false;
2024-02-05 17:49:12 +06:30
}
packages.addAll(list);
if (list.length < rowPerPage) ended = true;
notifyListeners();
} catch (e) {
log.warning("error:$e");
} finally {
isLoading = false;
}
}
2024-03-04 17:09:47 +06:30
selectPackage(Package a) {
if (a.isChecked) {
selectedPackages.add(a);
} else {
selectedPackages.remove(a);
}
}
addSelectedPackage(List<Package> list) {
selectedPackages = list;
}
2024-02-05 17:49:12 +06:30
clearSelection() {
2024-03-04 17:09:47 +06:30
selectedPackages.clear();
2024-02-05 17:49:12 +06:30
packages.clear();
query = "";
}
2024-03-04 17:09:47 +06:30
Future<List<Package>> getPackagesBySenderAndConsigneeId(
{required String senderId, required String consigneeId}) async {
List<Package> list = [];
try {
String path = "/$packages_collection";
var snaps = await FirebaseFirestore.instance
.collection(path)
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("is_deleted", isEqualTo: false)
.get(const GetOptions(source: Source.server));
list = snaps.docs
.map((documentSnapshot) =>
Package.fromMap(documentSnapshot.data(), documentSnapshot.id))
.toList();
} catch (e) {
log.warning("Error!! $e");
list = [];
}
return list;
}
2024-02-05 17:49:12 +06:30
}