2import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
3import 'package:isar/isar.dart';
4import '../../features/collections/data/models/req/req_collection_confirmation_model.dart';
5import '../../features/collections/data/models/req/req_collection_information_model.dart';
6import '../../features/collections/data/models/req/req_collection_payment_model.dart';
7import '../../features/collections/data/models/req/req_collection_rating_model.dart';
8import '../../features/collections/data/models/req/req_collection_validation_model.dart';
9import '../isar/isar_local_database.dart';
10import '../isar/models/collections/pending_collection_operation_isar_model.dart';
11import '../../features/collections/data/datasources/collection_remote_datasource.dart';
12import '../../core/services/service_locator.dart';
23 .isSyncedEqualTo(
false)
26 return pendingOperations == 0;
35 .isSyncedEqualTo(
false)
38 return pendingOperations == 0;
47 .isSyncedEqualTo(
false)
48 .sortByTimestampDesc()
57 required Map<String, dynamic> data,
58 required
int operationOrder,
69 if (existingOperation != null && existingOperation.isSynced)
return;
71 if (existingOperation != null) {
73 existingOperation.payload = jsonEncode(data);
74 existingOperation.operationOrder = operationOrder;
75 existingOperation.timestamp = DateTime.now();
76 existingOperation.isSynced =
false;
85 operationOrder: operationOrder,
86 timestamp: DateTime.now(),
95 final hasInternet = await InternetConnection().hasInternetAccess;
96 if (!hasInternet)
return;
103 .isSyncedEqualTo(
false)
104 .collectionIdProperty()
107 final uniqueCollections = pendingCollections.toSet().toList();
116 .isSyncedEqualTo(
false)
117 .sortByOperationOrder()
121 for (
final operation in operations) {
128 operation.isSynced =
true;
138 final data = jsonDecode(operation.payload);
140 switch (operation.step) {
159 final int idToInt =
int.parse(
id);
161 final int? cancelationReasonId = data[
'cancellationReason']?[
'id'];
166 cancelationReasonId: cancelationReasonId?.toString(),
177 reqValidationCollectionModel: ReqCollectionValidationModel.fromJson(data),
188 reqInformationCollectionModel: ReqCollectionInformationModel.fromJson(data),
199 reqCollectionConfirmationModel: ReqCollectionConfirmationModel.fromJson(data),
210 reqCollectionPaymentModel: ReqCollectionPaymentModel.fromJson(data),
221 reqCollectionRatingModel: ReqCollectionRatingModel.fromJson(data),
static IsarLocalDatabase get instance
Future< void > syncPendingOperations() async
Future< bool > _processConfirmation(Map< String, dynamic > data) async
Future< void > addPendingOperation({ required int collectionId, required CollectionStep step, required Map< String, dynamic > data, required int operationOrder, }) async
Future< bool > _processPendingOperation(PendingCollectionOperationIsarModel operation) async
Future< bool > _processRating(Map< String, dynamic > data) async
Future< bool > _processValidation(Map< String, dynamic > data) async
Future< bool > _processPayment(Map< String, dynamic > data) async
Future< bool > isOperationsSynced(int collectionId) async
Future< CollectionStep > getOperationCurrentStep(int collectionId) async
Future< bool > _processStatusUpdate(Map< String, dynamic > data) async
Future< bool > isAllOperationsSynced() async
Future< bool > _processInformation(Map< String, dynamic > data) async
class UpdateCollectionStatusEvent extends CollectionsEvent collectionId
PendingCollectionOperationIsarModel({ required this.collectionId, required this.step, required this.operationOrder, required this.payload, required this.timestamp, this.isSynced=false, })