Aidra Driver 1.3.5+68
Aidra Driver - Your path to green energy
Loading...
Searching...
No Matches
collection_repository_impl.dart
Go to the documentation of this file.
1import 'package:dartz/dartz.dart';
2import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
3
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';
36
42
44 required this.remoteDataSource,
45 required this.localDatasource,
46 });
47
48 @override
49 Future<Either<Failure, List<CollectionEntity>>> getCollections({
50 required int userId,
51 required bool notForToday,
52 required String? type,
53 }) async {
54 try {
55 await offlineSyncService.syncPendingOperations();
56 List<CollectionEntity> result;
57 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
58 bool isOfflineOperationsSynced = await offlineSyncService.isAllOperationsSynced();
59 if (hasInternetConnection && isOfflineOperationsSynced) {
60 result = await remoteDataSource.getCollections(
63 type: type,
64 );
65 if (notForToday == false && type =='todo'){
66 await isar.clear<TodoCollectionIsarModel>();
67 final todoIsarModelsList = result.map(
68 (e) => TodoCollectionIsarModel.fromModel(e.toModel())
69 ).toList();
70 await isar.putAll<TodoCollectionIsarModel>(todoIsarModelsList);
71 }
72 if (notForToday == false && type == null) {
73 await isar.clear<CompletedCollectionIsarModel>();
74 final completedIsarModelsList = result.map(
75 (e) => CompletedCollectionIsarModel.fromModel(e.toModel())
76 ).toList();
77 await isar.putAll<CompletedCollectionIsarModel>(completedIsarModelsList);
78 }
79 } else {
80 result = await localDatasource.getCollections(notForToday: notForToday, type: type);
81 }
82 return right(result);
83 } on ServerException catch (e) {
84 return left(ServerFailure(message: e.message, color: ColorPalette.red));
85 } catch (e) {
86 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
87 }
88 }
89
90 @override
91 Future<Either<Failure, ResCollectionStatusModel>> updateCollectionStatus({
92 required int collectionId,
93 required String status,
94 required String? cancellationReasonId,
95 required String reference,
96 }) async {
97 try {
98 await offlineSyncService.syncPendingOperations();
99 ResCollectionStatusModel result;
100 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
101 if(hasInternetConnection) {
102 result = await remoteDataSource.updateCollectionStatus(
104 status: status,
105 cancelationReasonId: cancellationReasonId,
106 );
107 } else {
108 result = await localDatasource.updateCollectionStatus(
110 status: status,
112 cancelationReasonId: cancellationReasonId,
113 );
114 }
115 return right(result);
116 } on ServerException catch (e) {
117 return left(ServerFailure(message: e.message, color: ColorPalette.red));
118 } catch (e) {
119 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
120 }
121 }
122
123 @override
124 Future<Either<Failure, List<ResCancelationReasonModel>>> getCollectionCancellationReasons() async {
125 try {
126 List<ResCancelationReasonModel> result;
127 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
128 if (hasInternetConnection) {
129 result = await remoteDataSource.getCollectionCancelationReasons();
130 } else {
131 result = await localDatasource.getCollectionCancelationReasons();
132 }
133 return right(result);
134 } on ServerException catch (e) {
135 return left(ServerFailure(message: e.message, color: ColorPalette.red));
136 } catch (e) {
137 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
138 }
139 }
140
141 @override
142 Future<Either<Failure, ResCollectionInformationEntity>> sendCollectionsInformation({
144 required String reference,
145 required String address,
146 required String restaurant,
147 required int restaurantId,
148 }) async {
149 try {
150 await offlineSyncService.syncPendingOperations();
151 ResCollectionInformationModel result;
152 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
153 final model = ReqCollectionInformationModel.fromEntity(information);
154 if (hasInternetConnection) {
155 result = await remoteDataSource.sendCollectionsInformation(
156 reqInformationCollectionModel: model,
157 );
158 } else {
159 result = await localDatasource.sendCollectionInformation(
160 model: model,
165 );
166 }
167 return right(result);
168 } on ServerException catch (e) {
169 return left(ServerFailure(message: e.message, color: ColorPalette.red));
170 } catch (e) {
171 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
172 }
173 }
174
175 @override
176 Future<Either<Failure, bool>> validateCollection({required ReqCollectionValidationEntity validation}) async {
177 try {
178 await offlineSyncService.syncPendingOperations();
179 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
180 if (hasInternetConnection) {
181 await remoteDataSource.validateCollection(
182 reqValidationCollectionModel: ReqCollectionValidationModel.fromEntity(validation)
183 );
184 } else {
185 await localDatasource.validateCollection(validateCollection: validation);
186 }
187 return right(true);
188 } catch (e) {
189 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
190 }
191 }
192
193 @override
194 Future<Either<Failure, ResCollectionConfirmationEntity>> sendCollectionConfirmation({
196 required String address,
197 required String reference,
198 required String restaurant,
199 required int? restaurantId,
200 required double volumeCollected,
201 required double volumeDeclared
202 }) async {
203 try {
204 await offlineSyncService.syncPendingOperations();
205 ResCollectionConfirmationModel result;
206 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
207 if (hasInternetConnection) {
208 result = await remoteDataSource.sendCollectionConfirmation(
209 reqCollectionConfirmationModel: ReqCollectionConfirmationModel.fromEntity(confirmation)
210 );
211 } else {
212 result = await localDatasource.sendCollectionConfirmation(
220 );
221 }
222 return right(result);
223 } catch (e) {
224 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
225 }
226 }
227
228 @override
229 Future<Either<Failure, bool>> sendCollectionPayment({required ReqCollectionPaymentEntity payment}) async {
230 try {
231 await offlineSyncService.syncPendingOperations();
232 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
233 if (hasInternetConnection) {
234 await remoteDataSource.sendCollectionPayment(
235 reqCollectionPaymentModel: ReqCollectionPaymentModel.fromEntity(payment),
236 );
237 } else {
238 await localDatasource.sendCollectionPayment(
239 reqCollectionPaymentModel: ReqCollectionPaymentModel.fromEntity(payment),
240 );
241 }
242 return right(true);
243 } catch (e) {
244 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
245 }
246 }
247
248 @override
249 Future<Either<Failure, bool>> sendCollectionRating({required ReqCollectionRatingEntity rating}) async {
250 try {
251 await offlineSyncService.syncPendingOperations();
252 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
253 if (hasInternetConnection) {
254 await remoteDataSource.sendCollectionRating(
255 reqCollectionRatingModel: ReqCollectionRatingModel.fromEntity(rating),
256 );
257 } else {
258 await localDatasource.sendCollectionRating(
259 reqCollectionRatingModel: ReqCollectionRatingModel.fromEntity(rating),
260 );
261 }
262 return right(true);
263 } catch (e) {
264 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
265 }
266 }
267
268 @override
269 Future<Either<Failure, List<ResCollectionContactEntity>>> getCollectionContactList({required int restaurantId}) async {
270 try {
271 List<ResCollectionContactEntity> result;
272 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
273 if (hasInternetConnection) {
274 result = await remoteDataSource.getCollectionContactList(restaurentId: restaurantId);
275 } else {
276 result = await localDatasource.getCollectionContactList(restaurentId: restaurantId);
277 }
278 return right(result);
279 } on ServerException catch (e) {
280 return left(ServerFailure(message: e.message, color: ColorPalette.red));
281 } catch (e) {
282 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
283 }
284 }
285
286 @override
287 Future<Either<Failure, List<ResCollectionRatingReasonEntity>>> getCollectionRatingReasons() async {
288 try {
289 List<ResCollectionRatingReasonModel> result;
290 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
291 if (hasInternetConnection) {
292 result = await remoteDataSource.getRatingReasons();
293 } else {
294 result = await localDatasource.getRatingReasons();
295 }
296 return right(result);
297 } on ServerException catch (e) {
298 return left(ServerFailure(message: e.message, color: ColorPalette.red));
299 } catch (e) {
300 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
301 }
302 }
303
304 @override
305 Future<Either<Failure, List<ResPartnerPaymentEntity>>> getCollectionPaymentModeList({
306 required int restaurentId,
307 }) async {
308 try {
309 List<ResPartnerPaymentModel> result;
310 bool hasInternetConnection = await InternetConnection().hasInternetAccess;
311 if (hasInternetConnection) {
312 result = await remoteDataSource.getCollectionPaymentModeList(restaurentId: restaurentId);
313 } else {
314 result = await localDatasource.getCollectionPaymentModeList(restaurentId: restaurentId);
315 }
316 return right(result);
317 } on ServerException catch (e) {
318 return left(ServerFailure(message: e.message, color: ColorPalette.red));
319 } catch (e) {
320 return left(ServerFailure(message: e.toString(), color: ColorPalette.red));
321 }
322 }
323}
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 const red
static IsarLocalDatabase get instance
Future< void > syncPendingOperations() async
Future< bool > isAllOperationsSynced() async
static TodoCollectionIsarModel fromModel(CollectionModel model)
class UpdateCollectionStatusEvent extends CollectionsEvent collectionId
final String type
final bool notForToday
final String volumeDeclared
final int restaurantId
class GetCollectionContactListEvent extends CollectionsInformationEvent restaurentId
final String volumeCollected
final String restaurant
class Partner String
final String address
final Color color
Definition failures.dart:1
abstract class Failure extends Equatable ServerFailure({ required super.message, required super.color, })
final String message
Definition failures.dart:0