import 'dart:io'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/domain/vo/delivery_address.dart'; import 'package:fcs/domain/vo/shipment_status.dart'; class Package { String id; String trackingID; String userID; String fcsID; String userName; String phoneNumber; DateTime currentStatusDate; List photoUrls; List shipmentHistory; String desc; String status; String shipmentNumber; String senderFCSID; String senderName; String senderPhoneNumber; String boxNumber; String cargoDesc; String market; bool isChecked; int rate; int weight; String packageType; String pickUpID; List photos; String remark; DateTime arrivedDate; DeliveryAddress deliveryAddress; //for packages in processing List photoFiles; int get amount => rate != null && weight != null ? rate * weight : 0; double get price => rate.toDouble() * weight; Package({ this.id, this.trackingID, this.userID, this.userName, this.fcsID, this.phoneNumber, this.shipmentNumber, this.senderFCSID, this.senderName, this.boxNumber, this.rate, this.weight, this.packageType, this.pickUpID, this.remark, this.status, this.arrivedDate, this.cargoDesc, this.market, this.shipmentHistory, this.currentStatusDate, this.photoUrls, this.desc, this.deliveryAddress, this.isChecked = false, this.photoFiles, this.senderPhoneNumber }); factory Package.fromMap(Map map, String docID) { var _currentStatusDate = (map['status_date'] as Timestamp); List _shipmentStatus = List.from(map['all_status']) .map((e) => ShipmentStatus.fromMap(Map.from(e))) .toList(); List _photoUrls = map['photo_urls'] == null ? [] : List.from(map['photo_urls']); var da = map['delivery_address']; var _da = da != null ? DeliveryAddress.fromMap(da, da["id"]) : null; return Package( id: docID, userID: map['user_id'], fcsID: map['fcs_id'], trackingID: map['tracking_id'], market: map['market'], userName: map['user_name'], phoneNumber: map['phone_number'], remark: map['remark'], desc: map['desc'], status: map['status'], senderFCSID: map['sender_fcs_id'], senderName: map['sender_name'], senderPhoneNumber: map['sender_phone_number'], deliveryAddress: _da, currentStatusDate: _currentStatusDate != null ? _currentStatusDate.toDate().toLocal() : null, photoUrls: _photoUrls, shipmentHistory: _shipmentStatus); } Map toJson() => { 'id': id, 'tracking_id': trackingID, 'market': market, 'fcs_id': fcsID, 'sender_fcs_id': senderFCSID, "desc": desc, "remark": remark, "photo_urls": photoUrls }; factory Package.fromJson(Map json) { return Package( id: json['id'], trackingID: json['tracking_id'], market: json['market'], userName: json['user_name'], phoneNumber: json['phone_number'], senderFCSID: json['sender_fcs_id'], senderName: json['sender_name'], senderPhoneNumber: json['sender_phone_number'], status: json['status'], currentStatusDate: DateTime.parse(json['status_date'])); } bool isChangedForEdit(Package package) { return package.trackingID != this.trackingID || package.remark != this.remark || package.fcsID != this.fcsID; } bool isChangedForEditProcessing(Package package) { return package.trackingID != this.trackingID || package.fcsID != this.fcsID || package.market != this.market || package.desc != this.desc || package.remark != this.remark; } @override bool operator ==(Object other) => other is Package && other.id == id; @override int get hashCode => id.hashCode; @override String toString() { return 'Package{id: $id, status: $status, market:$market, trackingID: $trackingID,}'; } }