2024-02-02 18:00:51 +06:30
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
|
|
|
import 'package:fcs/domain/entities/carton.dart';
|
|
|
|
|
import 'package:logging/logging.dart';
|
|
|
|
|
|
|
|
|
|
import '../../../domain/constants.dart';
|
|
|
|
|
import '../../main/model/base_model.dart';
|
|
|
|
|
|
|
|
|
|
class CartonSelectionModel extends BaseModel {
|
|
|
|
|
final log = Logger("CartonSelectionModel");
|
|
|
|
|
// for search
|
|
|
|
|
String query = "";
|
|
|
|
|
int offset = 0;
|
|
|
|
|
bool reachEnd = false;
|
|
|
|
|
List<Carton> cartons = [];
|
|
|
|
|
|
2024-02-05 17:49:12 +06:30
|
|
|
bool isLoading = false;
|
2024-02-05 11:13:12 +06:30
|
|
|
|
2024-02-02 18:00:51 +06:30
|
|
|
// for default carton
|
|
|
|
|
DocumentSnapshot? _lastDocument;
|
|
|
|
|
bool ended = false;
|
|
|
|
|
|
|
|
|
|
List<Carton> selectedCartonList = [];
|
|
|
|
|
|
|
|
|
|
Timer? t;
|
|
|
|
|
search(String term, {bool imm = false, required String shipmentId}) async {
|
|
|
|
|
query = term;
|
|
|
|
|
cartons.clear();
|
|
|
|
|
offset = 0;
|
|
|
|
|
reachEnd = false;
|
|
|
|
|
t?.cancel();
|
|
|
|
|
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
|
|
|
|
|
await loadMoreSearch(term: term, shipmentId: shipmentId);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> loadMoreSearch(
|
|
|
|
|
{required String term, required String shipmentId}) async {
|
|
|
|
|
if (term == "") {
|
|
|
|
|
await _refresh(shipmentId);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// int rowPerPage = 21;
|
|
|
|
|
// List<Carton> list = [];
|
|
|
|
|
// SearchPara searchPara = SearchPara(filters: [], term: term);
|
|
|
|
|
// isLoading = true;
|
|
|
|
|
|
|
|
|
|
// var path =
|
|
|
|
|
// "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}";
|
|
|
|
|
|
|
|
|
|
// var result = await requestAPI(path, "GET",
|
|
|
|
|
// token: await getToken(), url: Config.instance.searchURL);
|
|
|
|
|
|
|
|
|
|
// if (result != null) {
|
|
|
|
|
// for (var row in result) {
|
|
|
|
|
// var item = ArtistExt.fromMapForSearch(row);
|
|
|
|
|
// list.add(item);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// for (var p in list) {
|
|
|
|
|
// selectedArtistList.contains(p)
|
|
|
|
|
// ? p.isSelected = true
|
|
|
|
|
// : p.isSelected = false;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// artists.addAll(list);
|
|
|
|
|
// offset += rowPerPage;
|
|
|
|
|
// if (list.length < rowPerPage) {
|
|
|
|
|
// reachEnd = true;
|
|
|
|
|
// }
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addDefaultCartons(String shipmentId) async {
|
|
|
|
|
cartons.clear();
|
|
|
|
|
await _refresh(shipmentId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
selectCarton(Carton a) {
|
|
|
|
|
if (a.isSelected) {
|
|
|
|
|
selectedCartonList.add(a);
|
|
|
|
|
} else {
|
|
|
|
|
selectedCartonList.remove(a);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> _refresh(String shipmentId) async {
|
|
|
|
|
cartons.clear();
|
|
|
|
|
_lastDocument = null;
|
|
|
|
|
ended = false;
|
|
|
|
|
await loadMoreData(shipmentId);
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> loadMoreData(String shipmentId) async {
|
|
|
|
|
int rowPerPage = 20;
|
|
|
|
|
|
|
|
|
|
try {
|
2024-02-05 11:13:12 +06:30
|
|
|
isLoading = true;
|
2024-02-02 18:00:51 +06:30
|
|
|
String path = "/$cartons_collection";
|
|
|
|
|
Query query = FirebaseFirestore.instance
|
|
|
|
|
.collection(path)
|
2024-02-05 17:49:12 +06:30
|
|
|
// .where("fcs_shipment_id", isEqualTo: shipmentId)
|
2024-02-02 18:00:51 +06:30
|
|
|
// .where("status", isEqualTo: carton_processing_status)
|
|
|
|
|
// .where("carton_type", isEqualTo: carton_mix_box)
|
|
|
|
|
.where("is_deleted", isEqualTo: false)
|
|
|
|
|
.orderBy("created_at", descending: true);
|
|
|
|
|
|
|
|
|
|
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<Carton> list = querySnap.docs.map((documentSnapshot) {
|
|
|
|
|
var p = Carton.fromMap(documentSnapshot.data() as Map<String, dynamic>,
|
|
|
|
|
documentSnapshot.id);
|
|
|
|
|
return p;
|
|
|
|
|
}).toList();
|
|
|
|
|
|
|
|
|
|
for (var p in list) {
|
|
|
|
|
selectedCartonList.contains(p)
|
|
|
|
|
? p.isSelected = true
|
|
|
|
|
: p.isSelected = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cartons.addAll(list);
|
|
|
|
|
if (list.length < rowPerPage) ended = true;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("error:$e");
|
2024-02-05 17:49:12 +06:30
|
|
|
} finally {
|
2024-02-05 11:13:12 +06:30
|
|
|
isLoading = false;
|
2024-02-02 18:00:51 +06:30
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
clearSelection() {
|
|
|
|
|
selectedCartonList.clear();
|
|
|
|
|
cartons.clear();
|
|
|
|
|
query = "";
|
|
|
|
|
}
|
2024-02-09 17:40:51 +06:30
|
|
|
|
2024-02-02 18:00:51 +06:30
|
|
|
}
|