1import 'package:dartz/dartz.dart';
2import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
4import '../../../../core/common/entities/collection_entity.dart';
5import '../../../../core/error/exceptipns/server_exception.dart';
6import '../../../../core/isar/isar_local_database.dart';
7import '../../../../core/isar/models/collections/completed_collection_isar_model.dart';
8import '../../../../core/isar/models/collections/todo_collection_isar_model.dart';
9import '../../../../core/services/offline_sync_service.dart';
10import '../../domain/entities/req/req_collection_confirmation_entity.dart';
11import '../../domain/entities/req/req_collection_information_entity.dart';
12import '../../domain/entities/req/req_collection_payment_entity.dart';
13import '../../domain/entities/req/req_collection_rating_entity.dart';
14import '../../domain/entities/req/req_collection_validation_entity.dart';
15import '../../domain/entities/res/res_collection_confirmation_entity.dart';
16import '../../domain/entities/res/res_collection_contact_entity.dart';
17import '../../domain/entities/res/res_collection_information_entity.dart';
18import '../../domain/entities/res/res_collection_rating_reason_entity.dart';
19import '../../domain/entities/res/res_partner_payment_entity.dart';
20import '../../domain/repositories/collection_repository.dart';
21import '../datasources/collection_local_datasource.dart';
22import '../datasources/collection_remote_datasource.dart';
23import '../models/req/req_collection_confirmation_model.dart';
24import '../models/req/req_collection_information_model.dart';
25import '../models/req/req_collection_payment_model.dart';
26import '../models/req/req_collection_rating_model.dart';
27import '../models/req/req_collection_validation_model.dart';
28import '../models/res/res_cancelation_reason_model.dart';
29import '../models/res/res_collection_confirmation_model.dart';
30import '../models/res/res_collection_information_model.dart';
31import '../models/res/res_collection_rating_reason_model.dart';
32import '../models/res/res_collection_status_model.dart';
33import '../../../../core/ui/theme/color_palette.dart';
34import '../../../../core/error/failures.dart';
35import '../models/res/res_partner_payment_model.dart';
44 required this.remoteDataSource,
45 required this.localDatasource,
56 List<CollectionEntity> result;
57 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
59 if (hasInternetConnection && isOfflineOperationsSynced) {
67 final todoIsarModelsList = result.map(
73 await isar.clear<CompletedCollectionIsarModel>();
74 final completedIsarModelsList = result.map(
75 (e) => CompletedCollectionIsarModel.fromModel(e.toModel())
77 await isar.putAll<CompletedCollectionIsarModel>(completedIsarModelsList);
83 } on ServerException
catch (e) {
94 required
String? cancellationReasonId,
99 ResCollectionStatusModel result;
100 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
101 if(hasInternetConnection) {
105 cancelationReasonId: cancellationReasonId,
112 cancelationReasonId: cancellationReasonId,
115 return right(result);
116 } on ServerException
catch (e) {
126 List<ResCancelationReasonModel> result;
127 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
128 if (hasInternetConnection) {
133 return right(result);
134 } on ServerException
catch (e) {
151 ResCollectionInformationModel result;
152 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
153 final model = ReqCollectionInformationModel.fromEntity(
information);
154 if (hasInternetConnection) {
156 reqInformationCollectionModel: model,
167 return right(result);
168 } on ServerException
catch (e) {
179 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
180 if (hasInternetConnection) {
182 reqValidationCollectionModel: ReqCollectionValidationModel.fromEntity(
validation)
205 ResCollectionConfirmationModel result;
206 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
207 if (hasInternetConnection) {
209 reqCollectionConfirmationModel: ReqCollectionConfirmationModel.fromEntity(
confirmation)
222 return right(result);
232 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
233 if (hasInternetConnection) {
235 reqCollectionPaymentModel: ReqCollectionPaymentModel.fromEntity(
payment),
239 reqCollectionPaymentModel: ReqCollectionPaymentModel.fromEntity(
payment),
252 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
253 if (hasInternetConnection) {
255 reqCollectionRatingModel: ReqCollectionRatingModel.fromEntity(
rating),
259 reqCollectionRatingModel: ReqCollectionRatingModel.fromEntity(
rating),
271 List<ResCollectionContactEntity> result;
272 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
273 if (hasInternetConnection) {
278 return right(result);
279 } on ServerException
catch (e) {
289 List<ResCollectionRatingReasonModel> result;
290 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
291 if (hasInternetConnection) {
296 return right(result);
297 } on ServerException
catch (e) {
309 List<ResPartnerPaymentModel> result;
310 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
311 if (hasInternetConnection) {
316 return right(result);
317 } on ServerException
catch (e) {
sealed class CheckInOutEvent extends Equatable userId
Future< void > sendCollectionRating({ required ReqCollectionRatingModel reqCollectionRatingModel, }) async
Future< List< ResCollectionContactModel > > getCollectionContactList({ required int restaurentId, }) async
Future< ResCollectionConfirmationModel > sendCollectionConfirmation({ required ReqCollectionConfirmationEntity confirmation, required String address, required String reference, required String restaurant, required int? restaurantId, required double volumeCollected, required double volumeDeclared }) async
Future< List< ResPartnerPaymentModel > > getCollectionPaymentModeList({ required int restaurentId, }) async
Future< void > sendCollectionPayment({ required ReqCollectionPaymentModel reqCollectionPaymentModel, }) async
Future< void > validateCollection({ required ReqCollectionValidationEntity validateCollection, }) async
Future< ResCollectionStatusModel > updateCollectionStatus({ required int collectionId, required String status, required String reference, String? cancelationReasonId }) async
Future< List< CollectionModel > > getCollections({ required bool notForToday, required String? type, }) async
Future< ResCollectionInformationModel > sendCollectionInformation({ required ReqCollectionInformationModel model, required String reference, required String address, required String restaurant, required int restaurantId, }) async
Future< List< ResPartnerPaymentModel > > getCollectionPaymentModeList({ required int restaurentId, }) async
Future< ResCollectionConfirmationModel > sendCollectionConfirmation({ required ReqCollectionConfirmationModel reqCollectionConfirmationModel, }) async
Future< ResCollectionStatusModel > updateCollectionStatus({ required int collectionId, required String status, required String? cancelationReasonId, }) async
Future< void > sendCollectionPayment({ required ReqCollectionPaymentModel reqCollectionPaymentModel, }) async
Future< void > sendCollectionRating({ required ReqCollectionRatingModel reqCollectionRatingModel, }) async
Future< void > validateCollection({ required ReqCollectionValidationModel reqValidationCollectionModel, }) async
Future< ResCollectionInformationModel > sendCollectionsInformation({ required ReqCollectionInformationModel reqInformationCollectionModel, }) async
Future< List< CollectionModel > > getCollections({ required int userId, required bool notForToday, required String? type, }) async
Future< List< ResCollectionContactModel > > getCollectionContactList({ required int restaurentId, }) async
override Future< Either< Failure, List< CollectionEntity > > > getCollections({ required int userId, required bool notForToday, required String? type, }) async
CollectionsRepositoryImpl({ required this.remoteDataSource, required this.localDatasource, })
override Future< Either< Failure, List< ResCancelationReasonModel > > > getCollectionCancellationReasons() async
final CollectionLocalDatasource localDatasource
override Future< Either< Failure, bool > > validateCollection({required ReqCollectionValidationEntity validation}) async
override Future< Either< Failure, List< ResCollectionContactEntity > > > getCollectionContactList({required int restaurantId}) async
final OfflineSyncService offlineSyncService
override Future< Either< Failure, ResCollectionConfirmationEntity > > sendCollectionConfirmation({ required ReqCollectionConfirmationEntity confirmation, required String address, required String reference, required String restaurant, required int? restaurantId, required double volumeCollected, required double volumeDeclared }) async
override Future< Either< Failure, ResCollectionInformationEntity > > sendCollectionsInformation({ required ReqCollectionInformationEntity information, required String reference, required String address, required String restaurant, required int restaurantId, }) async
override Future< Either< Failure, bool > > sendCollectionRating({required ReqCollectionRatingEntity rating}) async
override Future< Either< Failure, List< ResCollectionRatingReasonEntity > > > getCollectionRatingReasons() async
override Future< Either< Failure, bool > > sendCollectionPayment({required ReqCollectionPaymentEntity payment}) async
override Future< Either< Failure, ResCollectionStatusModel > > updateCollectionStatus({ required int collectionId, required String status, required String? cancellationReasonId, required String reference, }) async
override Future< Either< Failure, List< ResPartnerPaymentEntity > > > getCollectionPaymentModeList({ required int restaurentId, }) async
final CollectionsRemoteDataSource remoteDataSource
static IsarLocalDatabase get instance
Future< void > syncPendingOperations() async
Future< bool > isAllOperationsSynced() async
static TodoCollectionIsarModel fromModel(CollectionModel model)
class UpdateCollectionStatusEvent extends CollectionsEvent collectionId
abstract class Failure extends Equatable ServerFailure({ required super.message, required super.color, })