fix rates
This commit is contained in:
@@ -62,7 +62,7 @@ class Carton {
|
||||
double get actualWeight =>
|
||||
cargoTypes == null ? 0 : cargoTypes.fold(0, (p, e) => e.weight + p);
|
||||
|
||||
double getShipmentWeight(double volumetricRatio) {
|
||||
int getShipmentWeight(double volumetricRatio) {
|
||||
if (length == null ||
|
||||
length <= 0 ||
|
||||
width == null ||
|
||||
@@ -71,8 +71,8 @@ class Carton {
|
||||
height <= 0 ||
|
||||
volumetricRatio == null ||
|
||||
volumetricRatio <= 0) return 0;
|
||||
|
||||
return (length * width * height) / volumetricRatio;
|
||||
|
||||
return ((length * width * height) / volumetricRatio).round();
|
||||
}
|
||||
|
||||
/// getCargoTypeForCalWeight returns carton with shipment weight
|
||||
@@ -95,25 +95,26 @@ class Carton {
|
||||
/// calAmount returns total amount
|
||||
double calAmount(Rate rate) {
|
||||
// get shipment weight
|
||||
double volume = (length ?? 0) * (width ?? 0) * (height ?? 0);
|
||||
double sw = volume / rate.volumetricRatio ?? 0;
|
||||
int sw = getShipmentWeight(rate.volumetricRatio);
|
||||
|
||||
// get actual weight
|
||||
double aw = cargoTypes.fold(0.0, (p, c) => p + c.weight);
|
||||
if (aw == 0 || sw == 0) return 0;
|
||||
|
||||
DiscountByWeight discountByWeight =
|
||||
rate.getDiscountByWeight(sw > aw ? sw : aw);
|
||||
double wd = sw - aw;
|
||||
wd = wd - rate.diffDiscountWeight;
|
||||
double wdAmount = wd > 0 ? wd * rate.diffWeightRate : 0;
|
||||
|
||||
DiscountByWeight discountByWeight = rate.getDiscountByWeight(aw);
|
||||
|
||||
double total = 0;
|
||||
cargoTypes.forEach((e) {
|
||||
double cargoWeight = aw > sw ? e.weight : e.weight / aw * sw;
|
||||
double r =
|
||||
e.rate - (discountByWeight != null ? discountByWeight.discount : 0);
|
||||
double amount = cargoWeight * r;
|
||||
double amount = e.weight * r;
|
||||
total += amount;
|
||||
});
|
||||
return total;
|
||||
return total + wdAmount;
|
||||
}
|
||||
|
||||
List<ShipmentStatus> shipmentHistory;
|
||||
|
||||
@@ -8,6 +8,9 @@ class Rate {
|
||||
double freeDeliveryWeight;
|
||||
double volumetricRatio;
|
||||
|
||||
double diffDiscountWeight;
|
||||
double diffWeightRate;
|
||||
|
||||
List<CargoType> cargoTypes;
|
||||
List<CustomDuty> customDuties;
|
||||
List<DiscountByWeight> discountByWeights;
|
||||
@@ -22,17 +25,20 @@ class Rate {
|
||||
? null
|
||||
: cargoTypes.firstWhere((e) => e.name == "General");
|
||||
|
||||
Rate({
|
||||
this.deliveryFee,
|
||||
this.freeDeliveryWeight,
|
||||
this.volumetricRatio,
|
||||
});
|
||||
Rate(
|
||||
{this.deliveryFee,
|
||||
this.freeDeliveryWeight,
|
||||
this.volumetricRatio,
|
||||
this.diffDiscountWeight,
|
||||
this.diffWeightRate});
|
||||
|
||||
factory Rate.fromMap(Map<String, dynamic> map) {
|
||||
return Rate(
|
||||
deliveryFee: (map['delivery_fee'] ?? 0).toDouble(),
|
||||
freeDeliveryWeight: (map['free_delivery_weight'] ?? 0).toDouble(),
|
||||
volumetricRatio: (map['volumetric_ratio'] ?? 0).toDouble(),
|
||||
diffDiscountWeight: (map['diff_discount_weight'] ?? 0).toDouble(),
|
||||
diffWeightRate: (map['diff_weight_rate'] ?? 0).toDouble(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -41,17 +47,21 @@ class Rate {
|
||||
"delivery_fee": deliveryFee,
|
||||
'free_delivery_weight': freeDeliveryWeight,
|
||||
'volumetric_ratio': volumetricRatio,
|
||||
'diff_discount_weight': diffDiscountWeight,
|
||||
'diff_weight_rate': diffWeightRate,
|
||||
};
|
||||
}
|
||||
|
||||
bool isChangedForEdit(Rate rate) {
|
||||
return rate.freeDeliveryWeight != this.freeDeliveryWeight ||
|
||||
rate.deliveryFee != this.deliveryFee ||
|
||||
rate.volumetricRatio != this.volumetricRatio;
|
||||
rate.volumetricRatio != this.volumetricRatio ||
|
||||
rate.diffDiscountWeight != this.diffDiscountWeight ||
|
||||
rate.diffWeightRate != this.diffWeightRate;
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Rate{deliveryFee:$deliveryFee,freeDeliveryWeight:$freeDeliveryWeight,volumetricRatio:$volumetricRatio}';
|
||||
return 'Rate{deliveryFee:$deliveryFee,freeDeliveryWeight:$freeDeliveryWeight,volumetricRatio:$volumetricRatio,diffDiscountWeight:$diffDiscountWeight,diffWeightRate:$diffWeightRate}';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user