updateDeliveryQuantity method
Implementation
Future<void> updateDeliveryQuantity({
required Delivery delivery,
required double newQuantity,
required String huManagementCSRFToken,
required String material,
required String? batch,
Json? updatePickUpQuantityExtra,
Json? updateDeliveryQuantityExtra,
Options? getDeliveriesOptions,
}) async {
ToItem? item = delivery.toItemList.firstWhereOrNull((item) {
return item.materialAndBatchOk(material: material, batch: batch);
});
if (item == null) {
throw Exception('Item not found');
}
double itemPickupQuantity =
double.tryParse(item.toPickQuantity?.pickQuantity ?? '0') ?? 0;
double epsilon = 1e-10;
double newPickupQuantity =
((newQuantity - itemPickupQuantity) //To prevent very close to zero problems
.clamp(0, double.infinity))
.abs() <
epsilon
? 0
: (newQuantity - itemPickupQuantity).clamp(0, double.infinity);
// We decrease a big pickup qty, because 0 resets it
if (itemPickupQuantity > newQuantity) {
await _deliveryApiProvider.pickUpQuantityUpdate(
deliveryNumber: delivery.deliveryNumber,
csrfToken: huManagementCSRFToken,
data: item.toPickupQuantityUpdateJson(quantity: 0),
updatePickUpQuantityExtra: updatePickUpQuantityExtra,
);
Delivery? updatedDelivery = await getDelivery(
deliveryNumber: delivery.deliveryNumber,
getDeliveriesOptions: getDeliveriesOptions,
);
ToItem? updatedItem = updatedDelivery?.toItemList.firstWhereOrNull((
item,
) {
return item.materialAndBatchOk(material: material, batch: batch);
});
double itemPickupQuantity =
double.tryParse(updatedItem?.toPickQuantity?.pickQuantity ?? '0') ??
0;
double newPickupQuantity = (newQuantity - itemPickupQuantity).clamp(
0,
double.infinity,
);
if (newPickupQuantity > 0) {
// We update pickup to a proper quantity (same as delivery qty)
await _deliveryApiProvider.pickUpQuantityUpdate(
deliveryNumber: delivery.deliveryNumber,
csrfToken: huManagementCSRFToken,
data: item.toPickupQuantityUpdateJson(quantity: newPickupQuantity),
updatePickUpQuantityExtra: updatePickUpQuantityExtra,
);
}
} else if (newPickupQuantity > 0) {
// We update pickup qty if needed without resetting
await _deliveryApiProvider.pickUpQuantityUpdate(
deliveryNumber: delivery.deliveryNumber,
csrfToken: huManagementCSRFToken,
data: item.toPickupQuantityUpdateJson(quantity: newPickupQuantity),
updatePickUpQuantityExtra: updatePickUpQuantityExtra,
);
}
// We update delivery qty
await _deliveryApiProvider.deliveryQuantityUpdate(
deliveryNumber: delivery.deliveryNumber,
csrfToken: huManagementCSRFToken,
data: item.toDeliveryQuantityUpdateJson(quantity: newQuantity),
updateDeliveryQuantityExtra: updateDeliveryQuantityExtra,
);
}