fix issue

This commit is contained in:
Marshal
2026-07-27 05:59:49 +00:00
parent 773456c256
commit 15d78e1d67
10 changed files with 410 additions and 36 deletions

View File

@@ -72,12 +72,19 @@ export function computeGlShipmentTotal(
(i) => i.containerSize === line.containerSize && !i.isClearance,
);
if (rate) {
// A per-wagon rate bills the wagons this line occupies — two 20ft share
// one — not the box count. Mirrors the API's base-freight line so the
// quote matches the invoice.
const billedQty =
rate.unit === "per_wagon"
? Math.ceil(qty * (line.containerSize === "40ft" ? 1 : 0.5))
: qty;
lines.push({
label: rate.label,
unitPrice: rate.unitPrice,
unit: rate.unit,
quantity: qty,
amount: rate.unitPrice * qty,
quantity: billedQty,
amount: rate.unitPrice * billedQty,
});
}
hazardTotalQty += line.hazardousQuantity;

View File

@@ -391,6 +391,12 @@ const RuleEngineFormDialog = ({
// display order) is a non-negative magnitude — reject negatives outright
// rather than letting a typed "-" reach the API.
min={isNumber ? 0 : undefined}
// Without an explicit step the browser assumes 1 and refuses to submit
// anything fractional — which blocked decimal rates, tonnages and
// distances. The API is the one that decides which of these are whole
// numbers (@IsInt on points/sizes/order, @IsNumber on money, tons, km),
// so let the field carry decimals and let a 400 catch the rest.
step={isNumber ? "any" : undefined}
disabled={field.disabled || computed !== undefined}
value={String((computed !== undefined ? computed : values[field.name]) ?? "")}
onChange={(e) => {