If there anyone out there with dev experience in this domain type..
I'm in a different domain but we face similar issues.
Cusotmers, orders, line items, and products would be the bare bones
I'd think to start bootstrapping an application.
At the bottom of the application, there would be a products table
with a record for each thing that you sell. Each of those products would
have a physical "on-hand" count of inventory, an allocated count, and
available (just on-hand - allocated). How you manage those numbers
depends on how much you "game" your supply chain.
When a customer places an order, the "allocated" number would
increase by the units requested, available is just inventory -
allocated. When the order is actually fulfilled (i.e., the item is
physically picked and put in a box, or on a truck, or whatever), the
allocated count drops by x units, and the inventory count drops by x
units as well. On products, you'll probably want to set a lower
threshold for on-hand inventory, to prompt an order from your supplier
(sounds like an after_update filter in Rails).
"Gaming" your supply chain involves scenarios like "We have 10
widgets on hand today. Customer A, at 9:00am, ordered 7 for delivery
next Wednesday. Physical inventory is still 10, available is only 3.
Customer B, at noon, requests 5 for delivery tomorrow.
If you don't game your supply chain, you tell Customer B "Sorry, I
only have 3 available, but I can get you 5 in (today + time to receive
widgets from supplier)."
If you're sure (here's the gaming part) your supplier can get at
least 2 more widgets to you before next Wednesday if you order today, go
ahead and sell and ship the 5 to Customer B today, and place your order
for widgets today.
Walk-in purchases are just another form of Customer B.
The nice thing about Rails is that you can easily extend an application.
Start small... take note of how your current physical processes work,
model your physical artifacts (product information, an order form, a
customers file) in the database, then hook up the behaviors in the
Run the app in parallel with your current process to see if your
application accurately reflects reality, tweak and tune and when your
app does everything your need (or can make do with), drop the paper.