Our current client implementation relies on product delivery on a specific date such as birthday. The product can only be delivered on that specific day, not a day before and not a day after. In order to achieve that OMS is relying on an external service to compute the best SCAC (FedEx, UPS, USPS etc.) and Carrier Service (Ground, 2 Day, Standard Overnight etc.). OMS is supposed to tell that service the earliest it can ship the product (ETS) and the delivery date (ETD) and some other information such as ShipNode, ship to address etc. so that it can optimize and come up with the best SCAC and Carrier Service. This service will be invoked later during shipment creation after the order is released to the warehouse.
The ETS should include the item min notification time, cut off time for ship node. Our current solution strategy is to add a default carrier service (say 18F_STANDARD). We want to consider a ship node cut off time which is the last time on a day a product can be shipped (carrier pick up schedule Monday to Saturday 16:00 hrs).
We are planning to return 7 days of default delivery lead days in the delivery lead time ue.
For future orders, this will give enough time for the warehouse to process the shipments while meeting the delivery date on the order line (OrderLine/@ReqDeliveryDate). OMS out of the box will subtract 7 days and include the min notification time and then calculate the ETS for the order line. This will ensure that ETD is the same as RDD and the product can be delivered on the b'day.
For ASAP orders, the ETS will be calculate based on the item min notification time ship node cut off time. Then 7 days will be added on ETS to calculate the ETD. However, there is a high possibility that ETD will exceed the RDD. To handle those scenarios, we have put a custom logic to override the ETD with RDD on success of scheduleOrder by calling changeOrderSchedule. This way scheduleOrder has the correct ETS and ETD after the updated.
However, when releaseOrder is called, it agains calls the getdeliveryleadtimeue and return 7 days. Since the ETD was preponed earlier during scheduling, releaseOrder backorders the order line as the solver is not able to find a solution.
To address this scenario, if we have a hook to order line and order header data, inside the UE logic, we could calculate the transit days between the earlier calculated ETS and ETD and return those days. This will make sure releaseOrder doesn't backorders the order line. Then later when shipment is created, on the shipment the ETS will factor in the item min notification time and the ship node cut off time and ETD will be the same as RDD. On success of shipment creation, the ETS and ETD can be sent to the carrier service determination service and the returned output can be applied on the shipment. The WMS system can then process the shipment according to the ship date and the carrier service code to deliver the product on the b'day.