2020-09-15 07:13:41 +06:30
|
|
|
import 'dart:async';
|
2020-09-17 06:02:48 +06:30
|
|
|
import 'dart:io';
|
2020-09-15 07:13:41 +06:30
|
|
|
|
|
|
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
2020-10-15 19:40:03 +06:30
|
|
|
import 'package:fcs/data/services/services.dart';
|
2020-10-07 02:33:06 +06:30
|
|
|
import 'package:fcs/domain/constants.dart';
|
|
|
|
|
import 'package:fcs/domain/entities/package.dart';
|
|
|
|
|
import 'package:fcs/domain/entities/user.dart';
|
2020-10-15 19:40:03 +06:30
|
|
|
import 'package:fcs/domain/vo/delivery_address.dart';
|
2020-10-07 02:33:06 +06:30
|
|
|
import 'package:fcs/helpers/firebase_helper.dart';
|
|
|
|
|
import 'package:fcs/pages/main/model/base_model.dart';
|
2020-11-13 02:38:16 +06:30
|
|
|
import 'package:fcs/pagination/paginator_listener.dart';
|
2020-09-15 07:13:41 +06:30
|
|
|
import 'package:logging/logging.dart';
|
2020-10-15 19:40:03 +06:30
|
|
|
import 'package:path/path.dart' as Path;
|
2020-09-15 07:13:41 +06:30
|
|
|
|
|
|
|
|
class PackageModel extends BaseModel {
|
|
|
|
|
final log = Logger('PackageModel');
|
|
|
|
|
|
2021-09-11 16:56:20 +06:30
|
|
|
PaginatorListener<Package>? packages;
|
|
|
|
|
PaginatorListener<Package>? customerPackages;
|
|
|
|
|
PaginatorListener<Package>? activePackages;
|
2020-10-12 03:34:05 +06:30
|
|
|
|
|
|
|
|
bool isLoading = false;
|
2020-10-16 10:58:31 +06:30
|
|
|
int _menuSelectedIndex = 1;
|
|
|
|
|
|
|
|
|
|
set menuSelectedIndex(int index) {
|
|
|
|
|
_menuSelectedIndex = index;
|
2020-11-13 02:38:16 +06:30
|
|
|
|
|
|
|
|
_loadPackages(_menuSelectedIndex == 2);
|
|
|
|
|
_loadCustomerPackages(_menuSelectedIndex == 2);
|
|
|
|
|
|
2020-10-15 19:40:03 +06:30
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
int get menuSelectedIndex => _menuSelectedIndex;
|
2020-10-15 19:40:03 +06:30
|
|
|
|
2020-11-13 02:38:16 +06:30
|
|
|
void privilegeChanged() {
|
|
|
|
|
if (user != null) {
|
|
|
|
|
_initData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> _initData() async {
|
2020-10-16 10:58:31 +06:30
|
|
|
logout();
|
|
|
|
|
_menuSelectedIndex = 1;
|
2020-11-13 02:38:16 +06:30
|
|
|
packages = PaginatorListener<Package>(
|
|
|
|
|
(data, id) => Package.fromMap(data, id), onChange: () {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}, rowPerLoad: 30, insertNewByListener: true);
|
|
|
|
|
customerPackages = PaginatorListener<Package>(
|
|
|
|
|
(data, id) => Package.fromMap(data, id), onChange: () {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}, rowPerLoad: 30, insertNewByListener: true);
|
|
|
|
|
activePackages = PaginatorListener<Package>(
|
|
|
|
|
(data, id) => Package.fromMap(data, id), onChange: () {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}, rowPerLoad: 30, insertNewByListener: true);
|
|
|
|
|
|
|
|
|
|
_loadPackages(_menuSelectedIndex == 2);
|
|
|
|
|
_loadCustomerPackages(_menuSelectedIndex == 2);
|
|
|
|
|
_loadActivePackages();
|
2020-09-15 07:13:41 +06:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
logout() async {
|
2021-09-11 16:56:20 +06:30
|
|
|
if (customerPackages != null) customerPackages!.close();
|
|
|
|
|
if (packages != null) packages!.close();
|
|
|
|
|
if (activePackages != null) activePackages!.close();
|
2020-10-15 19:40:03 +06:30
|
|
|
}
|
|
|
|
|
|
2020-11-13 02:38:16 +06:30
|
|
|
Future<void> _loadPackages(bool isDelivered) async {
|
|
|
|
|
if (user == null) return;
|
2021-09-10 16:48:21 +06:30
|
|
|
if (!((user!.hasPackages() ||
|
|
|
|
|
user!.hasReceiving() ||
|
|
|
|
|
user!.hasProcessing()))) return;
|
2020-11-13 02:38:16 +06:30
|
|
|
String path = "/$packages_collection";
|
2020-10-15 19:40:03 +06:30
|
|
|
|
2020-11-13 02:38:16 +06:30
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
Query listenerQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: isDelivered);
|
2021-09-10 15:22:11 +06:30
|
|
|
Query pageQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: isDelivered);
|
|
|
|
|
|
|
|
|
|
pageQuery = pageQuery.orderBy("update_time", descending: true);
|
2021-09-11 16:56:20 +06:30
|
|
|
packages!.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
|
2020-11-13 02:38:16 +06:30
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
2020-09-15 07:13:41 +06:30
|
|
|
}
|
|
|
|
|
|
2020-11-13 02:38:16 +06:30
|
|
|
Future<void> _loadCustomerPackages(bool isDelivered) async {
|
|
|
|
|
if (user == null) return;
|
|
|
|
|
String path = "/$packages_collection";
|
|
|
|
|
|
|
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
Query listenerQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: isDelivered)
|
2021-09-10 15:24:31 +06:30
|
|
|
.where("user_id", isEqualTo: user!.id);
|
2021-09-10 15:22:11 +06:30
|
|
|
Query pageQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: isDelivered)
|
2021-09-10 15:24:31 +06:30
|
|
|
.where("user_id", isEqualTo: user!.id)
|
2020-11-13 02:38:16 +06:30
|
|
|
.orderBy("update_time", descending: true);
|
|
|
|
|
|
2021-09-11 16:56:20 +06:30
|
|
|
customerPackages!
|
|
|
|
|
.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
|
2020-11-13 02:38:16 +06:30
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
2020-09-16 02:29:50 +06:30
|
|
|
}
|
2020-10-12 03:34:05 +06:30
|
|
|
}
|
|
|
|
|
|
2020-11-13 02:38:16 +06:30
|
|
|
Future<void> _loadActivePackages() async {
|
2020-10-16 10:58:31 +06:30
|
|
|
if (user == null) return;
|
2021-09-10 16:48:21 +06:30
|
|
|
if (!((user!.hasPackages() ||
|
|
|
|
|
user!.hasReceiving() ||
|
|
|
|
|
user!.hasProcessing()))) return;
|
2020-10-12 03:34:05 +06:30
|
|
|
String path = "/$packages_collection";
|
2020-09-17 06:02:48 +06:30
|
|
|
|
2020-09-16 02:29:50 +06:30
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
Query listenerQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: false);
|
2021-09-10 15:22:11 +06:30
|
|
|
Query pageQuery = FirebaseFirestore.instance
|
2020-11-13 02:38:16 +06:30
|
|
|
.collection(path)
|
|
|
|
|
.where("is_delivered", isEqualTo: false);
|
|
|
|
|
|
|
|
|
|
pageQuery = pageQuery.orderBy("update_time", descending: true);
|
2021-09-11 16:56:20 +06:30
|
|
|
activePackages!
|
|
|
|
|
.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
|
2020-09-16 02:29:50 +06:30
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
Future<Package?> getPackage(String id) async {
|
2020-09-18 21:33:41 +06:30
|
|
|
if (user == null) return null;
|
2020-10-12 03:34:05 +06:30
|
|
|
String path = "/$packages_collection";
|
2020-09-18 21:33:41 +06:30
|
|
|
try {
|
|
|
|
|
DocumentSnapshot snap =
|
2021-09-10 15:22:11 +06:30
|
|
|
await FirebaseFirestore.instance.collection("$path").doc(id).get();
|
2020-09-18 21:33:41 +06:30
|
|
|
if (snap.exists) {
|
2021-09-10 15:22:11 +06:30
|
|
|
var package =
|
2021-09-13 10:14:35 +06:30
|
|
|
Package.fromMap(snap.data() as Map<String, dynamic>, snap.id);
|
2020-09-18 21:33:41 +06:30
|
|
|
return package;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
Future<Package?> getPackageByTrackingID(String trackingID) async {
|
2020-11-09 05:53:25 +06:30
|
|
|
if (user == null) return null;
|
|
|
|
|
String path = "/$packages_collection";
|
|
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
var snaps = await FirebaseFirestore.instance
|
2020-11-09 05:53:25 +06:30
|
|
|
.collection("$path")
|
|
|
|
|
.where("tracking_id", isEqualTo: trackingID)
|
2020-11-30 04:53:56 +06:30
|
|
|
.where("is_deleted", isEqualTo: false)
|
2021-09-10 15:22:11 +06:30
|
|
|
.get(const GetOptions(source: Source.server));
|
|
|
|
|
if (snaps.docs.length == 1) {
|
|
|
|
|
var snap = snaps.docs[0];
|
2021-09-11 16:56:20 +06:30
|
|
|
var package = Package.fromMap(snap.data(), snap.id);
|
2020-11-09 05:53:25 +06:30
|
|
|
return package;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
Future<Package?> lookupPackage(String trackingID) async {
|
2020-10-12 03:34:05 +06:30
|
|
|
if (user == null) return null;
|
|
|
|
|
String path = "/$packages_collection";
|
|
|
|
|
|
|
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
var qsnap = await FirebaseFirestore.instance
|
2020-10-12 03:34:05 +06:30
|
|
|
.collection("$path")
|
|
|
|
|
.where("tracking_id", isEqualTo: trackingID)
|
|
|
|
|
.where("has_user_id", isEqualTo: false)
|
2020-10-12 08:26:27 +06:30
|
|
|
.where("is_deleted", isEqualTo: false)
|
2021-09-10 15:22:11 +06:30
|
|
|
.get(const GetOptions(source: Source.server));
|
|
|
|
|
if (qsnap.docs.length > 0) {
|
|
|
|
|
var snap = qsnap.docs[0];
|
2020-10-12 03:34:05 +06:30
|
|
|
if (snap.exists) {
|
2021-09-10 16:48:21 +06:30
|
|
|
var package =
|
|
|
|
|
Package.fromMap(snap.data as Map<String, dynamic>, snap.id);
|
2020-10-12 03:34:05 +06:30
|
|
|
return package;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
qsnap = await FirebaseFirestore.instance
|
2020-10-12 03:34:05 +06:30
|
|
|
.collection("$path")
|
|
|
|
|
.where("tracking_id", isEqualTo: trackingID)
|
2021-09-10 15:24:31 +06:30
|
|
|
.where("user_id", isEqualTo: user!.id)
|
2020-10-12 08:26:27 +06:30
|
|
|
.where("is_deleted", isEqualTo: false)
|
2021-09-10 15:22:11 +06:30
|
|
|
.get(const GetOptions(source: Source.server));
|
|
|
|
|
if (qsnap.docs.length > 0) {
|
|
|
|
|
var snap = qsnap.docs[0];
|
2020-10-12 03:34:05 +06:30
|
|
|
if (snap.exists) {
|
2021-09-10 16:48:21 +06:30
|
|
|
var package =
|
|
|
|
|
Package.fromMap(snap.data as Map<String, dynamic>, snap.id);
|
2020-10-12 03:34:05 +06:30
|
|
|
return package;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-21 02:59:10 +06:30
|
|
|
Future<List<Package>> getPackages(String userID, List<String> status) async {
|
2020-10-19 05:13:49 +06:30
|
|
|
List<Package> packages = [];
|
|
|
|
|
try {
|
2021-09-10 15:22:11 +06:30
|
|
|
var snaps = await FirebaseFirestore.instance
|
2020-10-19 05:13:49 +06:30
|
|
|
.collection("/$packages_collection")
|
2020-10-21 02:59:10 +06:30
|
|
|
.where("status", whereIn: status)
|
2020-10-19 05:13:49 +06:30
|
|
|
.where("user_id", isEqualTo: userID)
|
|
|
|
|
.where("is_deleted", isEqualTo: false)
|
2021-09-10 15:22:11 +06:30
|
|
|
.get(const GetOptions(source: Source.server));
|
|
|
|
|
packages = snaps.docs.map((documentSnapshot) {
|
2021-09-10 16:48:21 +06:30
|
|
|
var p = Package.fromMap(
|
|
|
|
|
documentSnapshot.data as Map<String, dynamic>, documentSnapshot.id);
|
2020-10-19 05:13:49 +06:30
|
|
|
return p;
|
|
|
|
|
}).toList();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warning("Error!! $e");
|
|
|
|
|
}
|
|
|
|
|
return packages;
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-15 07:13:41 +06:30
|
|
|
Future<List<User>> searchUser(String term) {
|
|
|
|
|
return Services.instance.userService.searchUser(term);
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-09 05:53:25 +06:30
|
|
|
Future<List<Package>> searchPackage(String term) async {
|
2021-01-24 22:51:00 +06:30
|
|
|
Future<List<Package>> packages =
|
|
|
|
|
Services.instance.packageService.searchPackage(term);
|
|
|
|
|
|
2021-09-10 15:22:11 +06:30
|
|
|
Future<List<Package>?> packagesFTS =
|
2021-01-24 22:51:00 +06:30
|
|
|
Services.instance.packageService.ftsSearchPackage(term);
|
|
|
|
|
// Package pkg = await getPackageByTrackingID(term);
|
|
|
|
|
// if (pkg != null && !packages.contains(pkg)) {
|
|
|
|
|
// packages.insert(0, pkg);
|
|
|
|
|
// }
|
|
|
|
|
List<Package> pkgs = await packages;
|
2021-09-10 15:22:11 +06:30
|
|
|
List<Package>? ftsPkgs = await packagesFTS;
|
|
|
|
|
pkgs.addAll(ftsPkgs!);
|
2021-01-24 22:51:00 +06:30
|
|
|
final seen = Set<Package>();
|
|
|
|
|
return pkgs.where((e) => seen.add(e)).toList();
|
2020-09-18 04:04:21 +06:30
|
|
|
}
|
|
|
|
|
|
2020-09-16 02:29:50 +06:30
|
|
|
Future<void> createPackages(User user, List<Package> packages) {
|
|
|
|
|
return Services.instance.packageService
|
2021-09-10 15:22:11 +06:30
|
|
|
.createPackages(packages, user.fcsID!);
|
2020-09-16 02:29:50 +06:30
|
|
|
}
|
2020-09-17 06:02:48 +06:30
|
|
|
|
2020-10-12 03:34:05 +06:30
|
|
|
Future<void> createReceiving(
|
2021-09-10 17:14:59 +06:30
|
|
|
User user, Package package, List<File?> files) async {
|
2020-10-12 03:34:05 +06:30
|
|
|
if (user != null) {
|
|
|
|
|
package.fcsID = user.fcsID;
|
|
|
|
|
}
|
|
|
|
|
if (files != null) {
|
2021-01-23 17:29:06 +06:30
|
|
|
if (files.length > uploadPhotoLimit) {
|
2020-11-09 05:53:25 +06:30
|
|
|
throw Exception("Exceed number of file upload");
|
2021-01-23 17:29:06 +06:30
|
|
|
}
|
|
|
|
|
|
2020-10-12 03:34:05 +06:30
|
|
|
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
2020-11-13 03:09:53 +06:30
|
|
|
String path = Path.join(pkg_files_path);
|
|
|
|
|
List<String> urls = await uploadFiles(path, files);
|
2021-10-09 17:08:28 +06:30
|
|
|
package.photoUrls =urls;
|
2020-10-12 03:34:05 +06:30
|
|
|
}
|
2021-01-23 17:29:06 +06:30
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
return Services.instance.packageService.createReceiving(package);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
try {
|
|
|
|
|
// delete uploaded photos if create fails
|
|
|
|
|
deleteStorageFromUrls(package.photoUrls);
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
2020-10-12 03:34:05 +06:30
|
|
|
}
|
|
|
|
|
|
2021-09-10 17:14:59 +06:30
|
|
|
Future<void> updateReceiving(User user, Package package, List<File?> files,
|
|
|
|
|
List<String?> deletedUrls) async {
|
2020-10-11 02:17:23 +06:30
|
|
|
if (user != null) {
|
|
|
|
|
package.fcsID = user.fcsID;
|
|
|
|
|
}
|
2020-10-12 03:34:05 +06:30
|
|
|
if (deletedUrls != null) {
|
2021-09-10 17:14:59 +06:30
|
|
|
for (String? url in deletedUrls) {
|
2020-10-12 03:34:05 +06:30
|
|
|
package.photoUrls.remove(url);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-23 17:29:06 +06:30
|
|
|
List<String> uploadedURL = [];
|
2020-10-11 02:17:23 +06:30
|
|
|
if (files != null) {
|
2021-09-10 17:14:59 +06:30
|
|
|
var count =
|
|
|
|
|
(package.photoUrls.length) + files.length - (deletedUrls.length);
|
2020-11-09 05:53:25 +06:30
|
|
|
|
|
|
|
|
if (count > uploadPhotoLimit)
|
|
|
|
|
throw Exception("Exceed number of file upload");
|
2021-01-23 17:29:06 +06:30
|
|
|
|
2020-10-11 02:17:23 +06:30
|
|
|
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
2020-11-13 03:09:53 +06:30
|
|
|
String path = Path.join(pkg_files_path);
|
2021-01-23 17:29:06 +06:30
|
|
|
uploadedURL = await uploadFiles(path, files);
|
|
|
|
|
uploadedURL.forEach((url) {
|
2020-10-11 02:17:23 +06:30
|
|
|
package.photoUrls.add(url);
|
2020-11-13 03:09:53 +06:30
|
|
|
});
|
2020-10-11 02:17:23 +06:30
|
|
|
}
|
2021-01-23 17:29:06 +06:30
|
|
|
try {
|
|
|
|
|
await Services.instance.packageService.updateReceiving(package);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
// delete newly uploaded photos if fails
|
|
|
|
|
try {
|
|
|
|
|
deleteStorageFromUrls(uploadedURL);
|
|
|
|
|
package.photoUrls.removeWhere((i) => uploadedURL.contains(i));
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
return deleteStorageFromUrls(deletedUrls);
|
2020-10-12 03:34:05 +06:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> deleteReceiving(Package package) {
|
|
|
|
|
return Services.instance.packageService.deleteReceiving(package);
|
2020-10-11 02:17:23 +06:30
|
|
|
}
|
|
|
|
|
|
2020-10-12 03:34:05 +06:30
|
|
|
Future<void> updateProcessing(
|
2021-09-10 17:14:59 +06:30
|
|
|
Package package, List<File?> files, List<String?> deletedUrls) async {
|
2020-10-12 03:34:05 +06:30
|
|
|
if (deletedUrls != null) {
|
2021-09-10 17:14:59 +06:30
|
|
|
for (String? url in deletedUrls) {
|
2020-10-12 03:34:05 +06:30
|
|
|
package.photoUrls.remove(url);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-23 17:29:06 +06:30
|
|
|
List<String> uploadedURL = [];
|
2020-09-17 06:02:48 +06:30
|
|
|
if (files != null) {
|
2021-09-10 17:14:59 +06:30
|
|
|
var count =
|
|
|
|
|
(package.photoUrls.length) + files.length - (deletedUrls.length);
|
2020-11-09 05:53:25 +06:30
|
|
|
|
|
|
|
|
if (count > uploadPhotoLimit)
|
|
|
|
|
throw Exception("Exceed number of file upload");
|
2020-09-17 06:02:48 +06:30
|
|
|
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
2020-11-13 03:09:53 +06:30
|
|
|
String path = Path.join(pkg_files_path);
|
2021-01-23 17:29:06 +06:30
|
|
|
uploadedURL = await uploadFiles(path, files);
|
|
|
|
|
uploadedURL.forEach((url) {
|
2020-09-17 06:02:48 +06:30
|
|
|
package.photoUrls.add(url);
|
2020-11-13 03:09:53 +06:30
|
|
|
});
|
2020-09-17 06:02:48 +06:30
|
|
|
package.photoUrls.removeWhere((e) => deletedUrls.contains(e));
|
|
|
|
|
}
|
2021-01-23 17:29:06 +06:30
|
|
|
try {
|
|
|
|
|
await Services.instance.packageService.updateProcessing(package);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
// delete newly uploaded photos if fails
|
|
|
|
|
try {
|
|
|
|
|
deleteStorageFromUrls(uploadedURL);
|
|
|
|
|
package.photoUrls.removeWhere((i) => uploadedURL.contains(i));
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
return deleteStorageFromUrls(deletedUrls);
|
2020-09-17 06:02:48 +06:30
|
|
|
}
|
2020-09-18 21:33:41 +06:30
|
|
|
|
2020-10-12 03:34:05 +06:30
|
|
|
Future<void> deleteProcessing(Package package) {
|
|
|
|
|
return Services.instance.packageService.deleteProcessing(package);
|
2020-09-18 21:33:41 +06:30
|
|
|
}
|
2020-10-13 07:50:25 +06:30
|
|
|
|
|
|
|
|
Future<void> changeDeliveryAddress(
|
|
|
|
|
Package package, DeliveryAddress deliveryAddress) {
|
|
|
|
|
return Services.instance.packageService
|
2021-09-10 15:22:11 +06:30
|
|
|
.changeDeliveryAddress(package.id!, deliveryAddress.id!);
|
2020-10-13 07:50:25 +06:30
|
|
|
}
|
2020-10-20 08:02:29 +06:30
|
|
|
|
|
|
|
|
Future<void> packageReturn(Package package) {
|
2021-09-10 15:22:11 +06:30
|
|
|
return Services.instance.packageService.packageReturn(package.id!);
|
2020-10-20 08:02:29 +06:30
|
|
|
}
|
2020-09-15 07:13:41 +06:30
|
|
|
}
|