...
LINKED SALES ORDERS: Determine all the Sales Order Bookings stored in the system (with Booking. Booking Reason = SALES ORDER) that are linked to this Transfer Order (via the “allocate goods from” link in domain model)
GOODS CHECK: Check that the Goods within the Transfer Order can fulfil all the linked Sales Orders. So calculate the total quantity by SKU across all the linked Sales Orders; each of those SKUs must exist within the Transfer Order’s Goods, and the total quantity by SKU across all the linked Sales Orders must be less than or equal to the quantity of the corresponding SKUs in the Transfer Order
IF GOODS CHECK FAILS: Set the following:
Booking. Is WMS Success = FALSE
Booking. WMS Error Message = “Not enough goods in Transfer Order to fulfil linked Sales Orders”
(NB this will need remediation outside the system, and requiring updates from ROOM to either the Transfer Order or the linked Sales Orders, or both, before ‘Send ASN’ can be re-attempted)
IF THE GOODS CHECK PASSES: proceed with below
STORAGE PREP OF SALES ORDER STATUS: For each linked Sales Order, check if an instance of “WMS ASN Split Status” against this Transfer Order booking already exists with ASN Split Ref = the linked Sales Order’s Booking Ref. If it exists, do nothing at this stage. If it does not exist, create a new instance of “WMS ASN Split Status” against this Transfer Order, with Is Success = null, and ASN Split Ref = the linked Sales Order’s Booking Ref. See below and Booking Domain Model /wiki/spaces/SMH/pages/3274768397 page.
STORAGE PREP OF TRANSFER ORDER STATUS: For the main Transfer Order, check if an instance of “WMS ASN Split Status” against this Transfer Order booking already exists with ASN Split Ref = this Transfer Order’s Booking Ref. If it exists, do nothing at this stage. If it does not exist, create a new instance of “WMS ASN Split Status” against this Transfer Order, with Is Success = null, and ASN Split Ref = this Transfer Order’s Booking Ref. See below and Booking Domain Model /wiki/spaces/SMH/pages/3274768397 page.
SEND CROSS DOCK ASNS: For each linked Sales Order:
if the corresponding instance of WMS ASN Split Status has Is Success = null or FALSE, call invoke WMS 'Load Receipts’ API call below for scenario NEW / CROSS DOCK
If the corresponding instance of WMS ASN Split Status has Is Success = TRUE, call invoke WMS 'Load Receipts’ API call below for scenario UPDATE / CROSS DOCK
SEND RESIDUAL ASN: For the main Transfer Order:
if the corresponding instance of WMS ASN Split Status has Is Success = null or FALSE, call invoke WMS 'Load Receipts’ API call below for scenario NEW / ASN
If the corresponding instance of WMS ASN Split Status has Is Success = TRUE, call invoke WMS 'Load Receipts’ API call below for scenario UPDATE / ASN
STORE ASN STATUS: Store the result of each WMS ‘Load Receipts’ API call above into the corresponding instance of WMS ASN Split Status:
If API call returns success, set WMS ASN Split Status. Is Success = TRUE and set WMS ASN Split Status. WMS Error Message to null
If API call returns failure, set WMS ASN Split Status. Is Success = FALSE and set WMS ASN Split Status. WMS Error Message to the returned error message from the API call
STORE OVERALL STATUS: Process the overall Transfer Order Booking as follows:
If ALL WMS ASN Split Status instances were successful:
Set Booking. Is WMS Success to TRUE
Clear the value of Booking. WMS Error Message to null
Set Booking. Status to ASN SENT
If one or more WMS ASN Split Status instances were unsuccessful:
Set Booking. Is WMS Success to FALSE
Set the value of Booking. WMS Error Message to “one or more ASNs could not be transmitted to the warehouse”
Do not transition the Booking. Status (it remains in status CREATED)
All this information, including the individual WMS ASN Split Status. WMS Error Message values, must be handed to the front-end API for display on the user’s UI.
...