update package detal list and update cargo type input in carton section

This commit is contained in:
tzw
2025-03-25 17:38:51 +06:30
parent 3d4bc43de4
commit 2bd75f0333
14 changed files with 597 additions and 812 deletions

View File

@@ -5,59 +5,68 @@ import 'package:logging/logging.dart';
import '../../../constants.dart';
import '../../../domain/entities/package.dart';
import '../../../pagination/paginator_listener.dart';
import '../../main/model/base_model.dart';
class PackageSelectionModel extends BaseModel {
final log = Logger("PackageSelectionModel");
String query = "";
List<Package> packages = [];
List<Package> selectedPackages = [];
PaginatorListener<Package>? getPackages;
List<Package> packages = [];
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;
@override
logout() async {
packages.clear();
_lastDocument = null;
ended = false;
t?.cancel();
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
await refresh(
term: term,
shipmentId: shipmentId,
consigneeId: consigneeId,
senderId: senderId);
});
getPackages?.close();
}
loadPackages(
{required String senderId,
required String consigneeId,
required String shipmentId}) {
if (user == null) return;
String path = "/$packages_collection";
Query col = FirebaseFirestore.instance
.collection(path)
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("fcs_shipment_id", isEqualTo: shipmentId);
Query pageQuery = FirebaseFirestore.instance
.collection(path)
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("fcs_shipment_id", isEqualTo: shipmentId);
pageQuery = pageQuery.orderBy("created_date", descending: true);
getPackages?.close();
getPackages = PaginatorListener<Package>(
col, pageQuery, (data, id) => Package.fromMap(data, id),
rowPerLoad: 30);
}
Future<void> refresh(
{required String shipmentId,
required String senderId,
required String consigneeId,
String term = ""}) async {
required String consigneeId}) async {
packages.clear();
_lastDocument = null;
ended = false;
await loadMoreData(
shipmentId: shipmentId,
senderId: senderId,
consigneeId: consigneeId,
term: term);
shipmentId: shipmentId,
senderId: senderId,
consigneeId: consigneeId,
);
notifyListeners();
}
Future<void> loadMoreData(
{required String shipmentId,
required String senderId,
required String consigneeId,
String term = ""}) async {
required String consigneeId}) async {
int rowPerPage = 20;
try {
@@ -69,12 +78,9 @@ class PackageSelectionModel extends BaseModel {
whereIn: [package_processed_status, package_packed_status])
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("fcs_shipment_id", isEqualTo: shipmentId)
.where("is_deleted", isEqualTo: false);
if (term != "") {
query = query.where("tracking_id", isEqualTo: term);
}
query = query.orderBy("created_date", descending: true);
if (_lastDocument != null) {
@@ -92,10 +98,6 @@ class PackageSelectionModel extends BaseModel {
return p;
}).toList();
for (var p in list) {
selectedPackages.contains(p) ? p.isChecked = true : p.isChecked = false;
}
packages.addAll(list);
if (list.length < rowPerPage) ended = true;
notifyListeners();
@@ -106,22 +108,8 @@ class PackageSelectionModel extends BaseModel {
}
}
selectPackage(Package a) {
if (a.isChecked) {
selectedPackages.add(a);
} else {
selectedPackages.remove(a);
}
}
addSelectedPackage(List<Package> list) {
selectedPackages = list;
}
clearSelection() {
selectedPackages.clear();
packages.clear();
query = "";
}
Future<List<Package>> getPackagesBySenderAndConsigneeId(
@@ -174,4 +162,21 @@ class PackageSelectionModel extends BaseModel {
}
return list;
}
Future<int?> getPackageCount(
{required String senderId,
required String consigneeId,
required String shipmentId}) async {
String path = "/$packages_collection";
AggregateQuerySnapshot query = await FirebaseFirestore.instance
.collection(path)
.where("sender_id", isEqualTo: senderId)
.where("user_id", isEqualTo: consigneeId)
.where("fcs_shipment_id", isEqualTo: shipmentId)
.count()
.get();
return query.count;
}
}