The Shipments module drives outbound warehouse operations on the Dragon Guard handheld. Operators load the backend-managed list of shipment headers, select a document, confirm shipped quantities against each line, then post to commit the outbound movement. Like receipts, the app trusts the server’s document visibility entirely — no client-side status filtering is applied when loading the header list.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CodexaCP/DG_APK/llms.txt
Use this file to discover all available pages before exploring further.
Status Reference
Shipment headers expose three status fields. The computedVisibleStatus prefers ProcessingStatus over DocumentStatus, then StatusPalette maps the result to a short handheld label and badge color.
| Short Label | Raw Status Values | Badge Color |
|---|---|---|
Rel | RELEASED | #2563EB (blue) |
Open | OPEN | #2563EB (blue) |
Ship | SHIPPING | #F59E0B (amber) |
Pend | PENDING | #F59E0B (amber) |
Part | PARTIALLY SHIPPED, PARTIALLY POSTED | #F97316 / #F59E0B |
Done | POSTED, CLOSED | #16A34A (green) |
ShipmentHeaderDto that power the badge:
The legacy
ShipmentStatus field is retained for ERP compatibility. It is not used to compute badge labels — the handheld always renders from VisibleStatus. When the backend returns only ShipmentStatus and both DocumentStatus and ProcessingStatus are blank, the badge falls back to a neutral color (#475569).PARTIALLY SHIPPED and PARTIALLY POSTED both produce the short label Part but differ in badge color: PARTIALLY SHIPPED renders orange (#F97316) while PARTIALLY POSTED renders amber (#F59E0B).Shipment Header Fields
Internal record identifier used to load lines and post the shipment.
Company the shipment belongs to.
Company code. Searchable in the header list.
Human-readable shipment number displayed in list and detail views.
Customer or ERP sales order reference, searchable in the header list.
Classification of the outbound movement (e.g., sales, transfer). Searchable in the header list.
Legacy ERP status field. Kept for compatibility; not used for badge rendering.
Handheld-facing document lifecycle status. Badge source when
ProcessingStatus is blank.Fine-grained workflow status (e.g.,
SHIPPING). Takes priority over DocumentStatus for badge rendering.ERP customer code for the outbound order.
Customer display name shown on the header card.
Source warehouse code. Exposed as
LocationCode (defaulting to MAIN when blank).Number of lines in the shipment, shown on the header card.
Sum of all ordered quantities across lines.
true when the backend marks the document as fully closed.Target ship date, filterable in the client-side search.
Recorded actual dispatch date, set after posting. Searchable in the header list.
Timestamp when the shipment record was created.
Shipment Line Fields
Line identifier used in
PUT /api/shipmentlines/{id} update calls.Parent shipment identifier linking this line to its header document.
Company identifier at the line level.
Sequential line number within the shipment.
Status of the individual line (e.g., open, completed).
Internal item identifier. Not shown to the operator.
ERP item code for this line.
Item display name shown on the line card.
Unit of measure for all quantities on the line.
Internal warehouse identifier.
Internal bin identifier for the source bin.
Source bin code from which the item should be picked.
Full quantity ordered for this line.
ShippedQty is clamped to this value in the UI.Quantity confirmed picked prior to shipping.
Quantity the operator enters as actually shipped. Clamped to
[0, OrderedQty] by the model setter.Quantity expressed in the item’s base unit of measure.
Cumulative quantity already posted in previous posting events.
Cumulative quantity posted to the stock ledger.
Legacy remaining quantity field from older API responses.
Remaining quantity field from newer API responses. The effective balance used by the UI is
max(RemainingQuantity, RemainingQty) via the RemainingBalance computed property.Lot tracking reference when the item is lot-tracked.
Serial number when the item is serial-tracked.
Expiry date when the item is expiration-tracked.
Item unit weight, used for load calculations.
Item unit volume, used for capacity calculations.
Set to
true by the backend when the line is fully shipped.API Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET | /api/shipmentheaders?pageNumber={n}&pageSize={n} | Load the paginated header list |
GET | /api/shipmentlines?shipmentId={id}&pageNumber={n}&pageSize={n} | Load lines for a shipment |
GET | /api/shipmentheaders/{id} | Fallback: load header with embedded lines |
PUT | /api/shipmentlines/{id} | Persist shipped quantity for a line |
POST | /api/shipmentheaders/{id}/post | Post (commit) the shipment |
shipmentheaders and shipmentlines — unlike the receipt endpoints which use PascalCase.
The header list is fetched without any hard status filter — status and shipmentNo are passed only when the caller explicitly provides them:
End-to-End Shipment Flow
Open the Shipments module
From the home screen, tap Shipments.
ShipmentHeadersViewModel.InitializeAsync() loads headers once on first visit; returning to the list always calls LoadAsync() to pull fresh data from the server.Browse and search headers
Up to 20 headers are loaded per page from
GET /api/shipmentheaders. The search bar filters client-side across ShipmentNo, ExternalShipmentNo, ShipmentType, all three status fields, WarehouseCode, LocationCode, CustomerCode, CustomerName, CompanyCode, TotalLines, TotalQty, IsClosed, planned and actual ship dates, and CreatedAt.Select a shipment header
Tap a header card to open the lines screen.
ShipmentHeadersViewModel.SelectShipmentCommand navigates to ShipmentLinesPage and calls GET /api/shipmentlines?shipmentId={id}&pageNumber=1&pageSize=20 to load lines.Enter shipped quantities
Tap a line to open the detail screen. Enter the quantity shipped into
ShippedQty. The model enforces 0 ≤ ShippedQty ≤ OrderedQty automatically. Save the line via PUT /api/shipmentlines/{id}:Post the shipment
From the header detail action menu, tap Post. The app calls
POST /api/shipmentheaders/{id}/post with no request body:Verify updated status
After posting, the header list refreshes from the server. Partially-posted documents remain visible with the
Part badge until the backend fully closes them. A fully posted document either shows the Done badge or disappears from the list if the backend removes it from the visible set.Legacy Line Fallback
On older backend deployments the dedicated
/api/shipmentlines endpoint may return an error for certain shipment records. When this occurs, ShipmentLineService automatically retries by fetching the header record at /api/shipmentheaders/{id} and extracting the lines array embedded in the response body. Client-side pagination is then applied to the embedded array so the handheld continues operating normally without any operator intervention.