import 'dart:async'; import 'dart:io'; import 'dart:math'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/domain/entities/pickup.dart'; import 'package:fcs/domain/entities/processing.dart'; import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/pages/main/model/base_model.dart'; import 'package:fcs/pagination/paginator_listener.dart'; import 'package:logging/logging.dart'; import 'package:path/path.dart' as Path; class PickupModel extends BaseModel { final log = Logger('PickupModel'); StreamSubscription? listener; PaginatorListener? pickups; int _menuSelectedIndex = 1; set menuSelectedIndex(int index) { _menuSelectedIndex = index; // _loadPackages(_menuSelectedIndex == 2); // _loadCustomerPackages(_menuSelectedIndex == 2); notifyListeners(); } int get menuSelectedIndex => _menuSelectedIndex; void initUser(user) { super.initUser(user); } void privilegeChanged() { if (user != null) { _initData(); } } Future _initData() async {} @override logout() async { if (listener != null) await listener!.cancel(); if (pickups != null) pickups!.close(); // pickups = []; } Future complete( Pickup pickup, List files, List deletedUrls) async { for (String? url in deletedUrls) { pickup.photoUrls.remove(url); } // check files count var count = (pickup.photoUrls.length) + files.length - (deletedUrls.length); if (count > uploadPhotoLimit) throw Exception("Exceed number of file upload"); List uploadedURLs = []; String path = Path.join(pickups_files_path, pickup.id); uploadedURLs = await uploadFiles(path, files); pickup.photoUrls.addAll(uploadedURLs); pickup.photoUrls.removeWhere((e) => deletedUrls.contains(e)); try { await Services.instance.pickupService.completePickup(pickup); } catch (e) { // delete newly uploaded photos if fails try { deleteStorageFromUrls(uploadedURLs); pickup.photoUrls.removeWhere((i) => uploadedURLs.contains(i)); } catch (e) {} throw e; } return deleteStorageFromUrls(deletedUrls); } }