Hi, I’m pretty much a Rails newbie here…
I put together a very simple pharmaceutical inventory system for a
field hospital in Haiti. When we first started, there was nothing but
a list of medicines that were known to be on site. Now, a group
started a robust inventory and I need to present the results
differently.
I have the following tables and fields:
Model: Medicine
Table: medicines
Fields, id, name
has_many :stocks
Model: Stock
Table: stocks
Fields: id, medicine_id, route_id, strength, amount_received,
amount_dispensed
belongs_to :medicine
belongs_to :route
Model: Route
Table: routes
Fields: id, name
has_many :stocks
The “stocks” table is used as a pharmacy log – people check out
medicines that they take for patients and check in medicines that
arrive as donations. I currently have a method in the Medicine model
that looks like this:
def amount_on_hand
stocks.to_a.sum { |rec| (rec.amount_received -
rec.amount_dispensed)}
end
On the page that lists all of the medicines, I call
medicine.amount_on_hand to display a generic number of how many units
of that type of medicine are on hand.
…
Ibuprofen – 500
Morphine – 1000
etc…
There now are over 700 types of medicine on hand and many of them come
in a variety of routes and strengths. Routes are: oral tablet, oral
suspension, IV, intramuscular, etc… Strengths are: 50mg, 20mg/dL,
etc… The strength field in the stocks table is a text field. There
are so many different strengths that it wasn’t feasible to standardize
that at the outset.
Now, I need to group the stocks that relate to each medicine by Route
and then try to perform aggregate sums based on the strength. In other
words, it might look like:
Ibuprofen
– Oral Tablet – 200 mg – 1000
– Oral Tablet – 500 mg – 200
– Oral Suspension – 50 mg/dL – 45
Morphine
– Inject – 2mg/dL – 450
– Inject – 4mg/dL – 800
etc…
I’ve been reading on the group_by() method for enumeration, but I
don’t know how to take the results returned (ordered hash, right?) and
perform the summary methods on them. My guess is that I need to write
another method in the Medicine model that iterates through the
‘stocks’ table to generate the results for each different medicine
type – but I’m having trouble with this.
Any help with this method or suggestions for alternative approaches
would be appreciated! I’d like to get the system updated as soon as I
can. Thanks!