fix
This commit is contained in:
@@ -69,6 +69,7 @@ const privilege_delivery = "deli";
|
|||||||
const privilege_invoice = "inv";
|
const privilege_invoice = "inv";
|
||||||
const privilege_processing = "pr";
|
const privilege_processing = "pr";
|
||||||
const privilege_receiving = "rc";
|
const privilege_receiving = "rc";
|
||||||
|
const privilege_pickup = "pku";
|
||||||
|
|
||||||
// Pickup types
|
// Pickup types
|
||||||
const shipment_local_pickup = "Local pickup";
|
const shipment_local_pickup = "Local pickup";
|
||||||
|
|||||||
@@ -64,9 +64,8 @@ class Carton {
|
|||||||
// String get packageNumber =>
|
// String get packageNumber =>
|
||||||
// shipmentNumber + "-" + receiverNumber + " #" + boxNumber;
|
// shipmentNumber + "-" + receiverNumber + " #" + boxNumber;
|
||||||
|
|
||||||
double get actualWeight => cargoTypes == null
|
double get actualWeight =>
|
||||||
? 0
|
cargoTypes == null ? 0 : cargoTypes.fold(0, (p, e) => e.weight + p);
|
||||||
: cargoTypes.fold(0, (p, e) => e.weight + p);
|
|
||||||
|
|
||||||
int getShipmentWeight(double volumetricRatio) {
|
int getShipmentWeight(double volumetricRatio) {
|
||||||
if (length == null ||
|
if (length == null ||
|
||||||
@@ -110,13 +109,12 @@ class Carton {
|
|||||||
double wd = sw - aw;
|
double wd = sw - aw;
|
||||||
wd = wd - rate.diffDiscountWeight;
|
wd = wd - rate.diffDiscountWeight;
|
||||||
double wdAmount = wd > 0 ? wd * rate.diffWeightRate : 0;
|
double wdAmount = wd > 0 ? wd * rate.diffWeightRate : 0;
|
||||||
|
|
||||||
DiscountByWeight discountByWeight = rate.getDiscountByWeight(aw);
|
DiscountByWeight discountByWeight = rate.getDiscountByWeight(aw);
|
||||||
|
|
||||||
double total = 0;
|
double total = 0;
|
||||||
cargoTypes.forEach((e) {
|
cargoTypes.forEach((e) {
|
||||||
double r = e.rate -
|
double r =
|
||||||
(discountByWeight != null ? (discountByWeight.discount) : 0);
|
e.rate - (discountByWeight != null ? (discountByWeight.discount) : 0);
|
||||||
double amount = e.weight * r;
|
double amount = e.weight * r;
|
||||||
total += amount;
|
total += amount;
|
||||||
});
|
});
|
||||||
@@ -194,7 +192,8 @@ class Carton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
factory Carton.fromMap(Map<String, dynamic> map, String docID) {
|
factory Carton.fromMap(Map<String, dynamic> map, String docID) {
|
||||||
var _arrivedDate = (map['arrived_date'] as Timestamp);
|
var _arrivedDate =
|
||||||
|
map['arrived_date'] == null ? null : (map['arrived_date'] as Timestamp);
|
||||||
var da = map['delivery_address'];
|
var da = map['delivery_address'];
|
||||||
var _da = da != null ? DeliveryAddress.fromMap(da, da["id"]) : null;
|
var _da = da != null ? DeliveryAddress.fromMap(da, da["id"]) : null;
|
||||||
var cargoTypesMaps =
|
var cargoTypesMaps =
|
||||||
|
|||||||
@@ -16,10 +16,12 @@ class Rate {
|
|||||||
|
|
||||||
DiscountByWeight getDiscountByWeight(double weight) {
|
DiscountByWeight getDiscountByWeight(double weight) {
|
||||||
discountByWeights.sort((d1, d2) => d2.weight.compareTo(d1.weight));
|
discountByWeights.sort((d1, d2) => d2.weight.compareTo(d1.weight));
|
||||||
return discountByWeights.firstWhere((e) => e.weight < weight);
|
return discountByWeights.firstWhere((e) => e.weight < weight,
|
||||||
|
orElse: () => DiscountByWeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
CargoType get defaultCargoType => cargoTypes.firstWhere((e) => e.name == "General");
|
CargoType get defaultCargoType =>
|
||||||
|
cargoTypes.firstWhere((e) => e.name == "General");
|
||||||
|
|
||||||
Rate(
|
Rate(
|
||||||
{this.deliveryFee = 0,
|
{this.deliveryFee = 0,
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ class Privilege {
|
|||||||
iconData = FontAwesome.dropbox;
|
iconData = FontAwesome.dropbox;
|
||||||
} else if (this.id == privilege_receiving) {
|
} else if (this.id == privilege_receiving) {
|
||||||
iconData = MaterialCommunityIcons.inbox_arrow_down;
|
iconData = MaterialCommunityIcons.inbox_arrow_down;
|
||||||
|
} else if (this.id == privilege_pickup) {
|
||||||
|
iconData = FontAwesome.dropbox;
|
||||||
} else {
|
} else {
|
||||||
iconData = MaterialCommunityIcons.account_question;
|
iconData = MaterialCommunityIcons.account_question;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,17 +4,17 @@ import 'package:cloud_firestore/cloud_firestore.dart';
|
|||||||
import 'package:fcs/data/services/services.dart';
|
import 'package:fcs/data/services/services.dart';
|
||||||
import 'package:fcs/domain/constants.dart';
|
import 'package:fcs/domain/constants.dart';
|
||||||
import 'package:fcs/domain/entities/carton.dart';
|
import 'package:fcs/domain/entities/carton.dart';
|
||||||
import 'package:fcs/domain/vo/message.dart';
|
|
||||||
import 'package:fcs/helpers/paginator.dart';
|
import 'package:fcs/helpers/paginator.dart';
|
||||||
import 'package:fcs/pages/main/model/base_model.dart';
|
import 'package:fcs/pages/main/model/base_model.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
class DeliveryModel extends BaseModel {
|
class DeliveryModel extends BaseModel {
|
||||||
final log = Logger('DeliveryModel');
|
final log = Logger('DeliveryModel');
|
||||||
List<Carton> get cartons =>
|
List<Carton> get cartons => _selectedIndex == 1
|
||||||
_selectedIndex == 1 ? _cartons : List<Carton>.from(_delivered.values);
|
? _cartons
|
||||||
|
: List<Carton>.from(_delivered?.values ?? []);
|
||||||
|
|
||||||
late Paginator _delivered;
|
Paginator? _delivered;
|
||||||
int _selectedIndex = 1;
|
int _selectedIndex = 1;
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
List<Carton> _cartons = [];
|
List<Carton> _cartons = [];
|
||||||
@@ -31,9 +31,9 @@ class DeliveryModel extends BaseModel {
|
|||||||
_selectedIndex = 1;
|
_selectedIndex = 1;
|
||||||
_loadCartons();
|
_loadCartons();
|
||||||
|
|
||||||
if (_delivered != null) _delivered.close();
|
if (_delivered != null) _delivered!.close();
|
||||||
_delivered = _getDelivered();
|
_delivered = _getDelivered();
|
||||||
_delivered.load();
|
_delivered!.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _loadCartons() async {
|
Future<void> _loadCartons() async {
|
||||||
@@ -57,7 +57,8 @@ class DeliveryModel extends BaseModel {
|
|||||||
_cartons.clear();
|
_cartons.clear();
|
||||||
_cartons = snapshot.docs.map((documentSnapshot) {
|
_cartons = snapshot.docs.map((documentSnapshot) {
|
||||||
var s = Carton.fromMap(
|
var s = Carton.fromMap(
|
||||||
documentSnapshot.data as Map<String, dynamic>, documentSnapshot.id);
|
documentSnapshot.data as Map<String, dynamic>,
|
||||||
|
documentSnapshot.id);
|
||||||
return s;
|
return s;
|
||||||
}).toList();
|
}).toList();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@@ -82,10 +83,10 @@ class DeliveryModel extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMore() async {
|
Future<void> loadMore() async {
|
||||||
if (_delivered.ended || _selectedIndex == 1) return;
|
if (_delivered!.ended || _selectedIndex == 1) return;
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
await _delivered.load(onFinished: () {
|
await _delivered!.load(onFinished: () {
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
@@ -94,7 +95,7 @@ class DeliveryModel extends BaseModel {
|
|||||||
Future<void> refresh() async {
|
Future<void> refresh() async {
|
||||||
if (_selectedIndex == 1) return;
|
if (_selectedIndex == 1) return;
|
||||||
|
|
||||||
await _delivered.refresh(onFinished: () {
|
await _delivered!.refresh(onFinished: () {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -106,7 +107,7 @@ class DeliveryModel extends BaseModel {
|
|||||||
@override
|
@override
|
||||||
logout() async {
|
logout() async {
|
||||||
if (listener != null) await listener!.cancel();
|
if (listener != null) await listener!.cancel();
|
||||||
if (_delivered != null) _delivered.close();
|
if (_delivered != null) _delivered!.close();
|
||||||
_cartons = [];
|
_cartons = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
|
|||||||
initPackage(widget.package!);
|
initPackage(widget.package!);
|
||||||
}
|
}
|
||||||
|
|
||||||
initPackage(Package package) {
|
initPackage(Package? package) {
|
||||||
|
if (package == null) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
_package = package;
|
_package = package;
|
||||||
multiImgController.setImageUrls = package.photoUrls;
|
multiImgController.setImageUrls = package.photoUrls;
|
||||||
@@ -69,37 +70,37 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
|
|||||||
iconData: Icons.phone,
|
iconData: Icons.phone,
|
||||||
);
|
);
|
||||||
final customerNameBox = DisplayText(
|
final customerNameBox = DisplayText(
|
||||||
text:_package!=null? _package!.userName:"",
|
text: _package != null ? _package!.userName : "",
|
||||||
labelTextKey: "processing.consignee.name",
|
labelTextKey: "processing.consignee.name",
|
||||||
iconData: Icons.perm_identity,
|
iconData: Icons.perm_identity,
|
||||||
);
|
);
|
||||||
var senderFcsIDBox = DisplayText(
|
var senderFcsIDBox = DisplayText(
|
||||||
text:_package!=null? _package!.senderFCSID:"",
|
text: _package != null ? _package!.senderFCSID : "",
|
||||||
labelTextKey: "processing.fcs.id",
|
labelTextKey: "processing.fcs.id",
|
||||||
icon: FcsIDIcon(),
|
icon: FcsIDIcon(),
|
||||||
);
|
);
|
||||||
final senderPhoneNumberBox = DisplayText(
|
final senderPhoneNumberBox = DisplayText(
|
||||||
text: _package!=null?_package!.senderPhoneNumber:"",
|
text: _package != null ? _package!.senderPhoneNumber : "",
|
||||||
labelTextKey: "processing.phone",
|
labelTextKey: "processing.phone",
|
||||||
iconData: Icons.phone,
|
iconData: Icons.phone,
|
||||||
);
|
);
|
||||||
final senderNameBox = DisplayText(
|
final senderNameBox = DisplayText(
|
||||||
text:_package!=null? _package!.senderName:"",
|
text: _package != null ? _package!.senderName : "",
|
||||||
labelTextKey: "processing.shipper.name",
|
labelTextKey: "processing.shipper.name",
|
||||||
iconData: Icons.perm_identity,
|
iconData: Icons.perm_identity,
|
||||||
);
|
);
|
||||||
final marketBox = DisplayText(
|
final marketBox = DisplayText(
|
||||||
text:_package!=null? _package!.market : "-",
|
text: _package != null ? _package!.market : "-",
|
||||||
labelTextKey: "processing.market",
|
labelTextKey: "processing.market",
|
||||||
iconData: Icons.store,
|
iconData: Icons.store,
|
||||||
);
|
);
|
||||||
final descBox = DisplayText(
|
final descBox = DisplayText(
|
||||||
text:_package!=null? _package!.desc : "-",
|
text: _package != null ? _package!.desc : "-",
|
||||||
labelTextKey: "processing.desc",
|
labelTextKey: "processing.desc",
|
||||||
iconData: MaterialCommunityIcons.message_text_outline,
|
iconData: MaterialCommunityIcons.message_text_outline,
|
||||||
);
|
);
|
||||||
final remarkBox = DisplayText(
|
final remarkBox = DisplayText(
|
||||||
text:_package!=null? _package!.remark : "-",
|
text: _package != null ? _package!.remark : "-",
|
||||||
labelTextKey: "processing.remark",
|
labelTextKey: "processing.remark",
|
||||||
iconData: Entypo.new_message,
|
iconData: Entypo.new_message,
|
||||||
);
|
);
|
||||||
@@ -175,7 +176,7 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
|
|||||||
_package!.photoUrls.length == 0 ? Container() : img,
|
_package!.photoUrls.length == 0 ? Container() : img,
|
||||||
StatusTree(
|
StatusTree(
|
||||||
shipmentHistory: _package!.shipmentHistory,
|
shipmentHistory: _package!.shipmentHistory,
|
||||||
currentStatus: _package!.status??""),
|
currentStatus: _package!.status ?? ""),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 20,
|
height: 20,
|
||||||
)
|
)
|
||||||
@@ -223,7 +224,7 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
|
|||||||
PackageModel packageModel =
|
PackageModel packageModel =
|
||||||
Provider.of<PackageModel>(context, listen: false);
|
Provider.of<PackageModel>(context, listen: false);
|
||||||
Package? p = await packageModel.getPackage(_package!.id!);
|
Package? p = await packageModel.getPackage(_package!.id!);
|
||||||
initPackage(p!);
|
initPackage(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ class _ReceivingInfoState extends State<ReceivingInfo> {
|
|||||||
initPackage(widget.package!);
|
initPackage(widget.package!);
|
||||||
}
|
}
|
||||||
|
|
||||||
initPackage(Package package) {
|
initPackage(Package? package) {
|
||||||
|
if (package == null) return;
|
||||||
multiImgController.setImageUrls = package.photoUrls;
|
multiImgController.setImageUrls = package.photoUrls;
|
||||||
setState(() {
|
setState(() {
|
||||||
_package = package;
|
_package = package;
|
||||||
@@ -150,7 +151,7 @@ class _ReceivingInfoState extends State<ReceivingInfo> {
|
|||||||
PackageModel packageModel =
|
PackageModel packageModel =
|
||||||
Provider.of<PackageModel>(context, listen: false);
|
Provider.of<PackageModel>(context, listen: false);
|
||||||
var pkg = await packageModel.getPackage(widget.package!.id!);
|
var pkg = await packageModel.getPackage(widget.package!.id!);
|
||||||
initPackage(pkg!);
|
initPackage(pkg);
|
||||||
}
|
}
|
||||||
|
|
||||||
_delete() {
|
_delete() {
|
||||||
|
|||||||
@@ -622,7 +622,6 @@ class MyDataTable extends StatelessWidget {
|
|||||||
|
|
||||||
final List<TableColumnWidth> tableColumns = (columns.length +
|
final List<TableColumnWidth> tableColumns = (columns.length +
|
||||||
(showCheckboxColumn ? 1 : 0)) as List<TableColumnWidth>;
|
(showCheckboxColumn ? 1 : 0)) as List<TableColumnWidth>;
|
||||||
|
|
||||||
final List<TableRow> tableRows = List<TableRow>.generate(
|
final List<TableRow> tableRows = List<TableRow>.generate(
|
||||||
rows.length + 1, // the +1 is for the header row
|
rows.length + 1, // the +1 is for the header row
|
||||||
(int index) {
|
(int index) {
|
||||||
|
|||||||
Reference in New Issue
Block a user