Responding to my own post to respond to one of OP's questions:
> Alternative solutions we should explore.
When I am working with a vendor's app with critical gaps and I know the vendor will not solve the problem (because they don't have the talent or it's functionality that doesn't apply broadly to their market), then I try to work with them to just add a hook (on our dime) to link to our external custom functionality.
The easier you can make it on the vendor the more likely they will incorporate it. Typically I will design the interface of info in a way to make their lives as easy as possible to incorporate the results in to their systems.
Some examples where I used this very successfully:
1-Cubing/Cartonization for outbound orders - we have many unique requirements from our customers as well as from our internal business channels. Vendor calls our system, passes relevant info, we produce the result and return it, they do all of their normal app updates as if they were the ones that produced the result.
2-Picking/batching optimization - same issue, nobody has any out of the box optimization that supports all of our requirements and dependencies - same flow, we perform our own prioritization+optimization and return the results, they update their app/db.
3-Generalized Rules engine - most workflows are controlled with normal ERP style configurations in the app, but some require much more flexible logic, for those we had the vendor insert a call to our rules engine, they pass in key relevant data, we crunch it, we return the result, they update their app/db.
An example usage of this one is in our order routing across different DC's. The business can target all kinds of special conditions to support their business requirements (e.g. product X should ship from DC Y for special customers A, B and C due to some special processing in that facility).
4-Generalized external function - in one system we had the vendor add the capability to call an external function at any point in the workflow (they have configurable processes where multiple steps can be linked together). This one one is not designed to return anything to the calling system other than success or failure, it's more about inserting external actions within the workflow (e.g. external action might be a function in a separate system that is fully self-contained).
These are just a few examples but we've made use of it extensively. I think it's a really effective compromise when trying to work around vendors app limitations.