Shipment Item Costs: See Them, Refresh Them, In Bulk
Every shipment now carries a stored unit-cost valuation on each line, resolved from your product’s cost data the first time the shipment line is reported and held stable through normal shipment updates. The valuation walks the fulfillment item’s supplier cost first (including an explicit zero, so a free item stays free), then the product’s landed cost, then its unit cost, and is left null when none of those is available — a missing cost is called missing, rather than filled in with a zero that would look like real data.
A new Shipments tab on a sales order gathers every shipment across every fulfillment on the order, grouped by fulfillment order and linked back to it. Each shipment card shows shipped date and tracking on a summary bar, with Items, Details, and Metadata tabs underneath. The Items tab lists the shipped products, unit costs, extended line costs, shipping cost, and the shipment’s total cost. When any line is missing a compatible cost, or currencies do not match, the totals stay marked Incomplete rather than showing a number that would not stand up. A Refresh costs action on each shipment recalculates the current values behind a short confirmation, so a shipment recorded before its cost data was ready can be re-valued as soon as the data is. Externally reported shipments show up with a note explaining line-level costs are not available for them, and the same lines and costs render on the fulfillment order page.
A Refresh Shipment Costs bulk action on the Sales Orders list runs the same refresh across the orders you have selected. It confirms that historical costs may change before it starts, queues in the background so you can leave the page, and sends a notification when the run finishes with counts for fully costed, still-incomplete, skipped, and failed orders. Orders with no active shipments are skipped, and lines with no available cost data are left incomplete.