6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'app/services/inventory/item_on_order.rb', line 6
def process(item_id:, store_id:)
sql = <<~SQL.squish
SELECT shipment_items.*
FROM shipment_items
INNER JOIN purchase_orders ON purchase_orders.id = shipment_items.purchase_order_id
INNER JOIN purchase_order_items ON purchase_order_items.id = shipment_items.purchase_order_item_id
INNER JOIN purchase_order_shipments ON purchase_order_shipments.id = shipment_items.purchase_order_shipment_id
WHERE purchase_order_items.item_id = ?
AND purchase_orders.store_id = ?
AND purchase_orders.state IN ('partially_receipted','pending_acknowledgement','pending_fulfillment','shipped')
AND purchase_order_shipments.state IN ('preparing','shipped','partially_receipted')
AND shipment_items.state IN ('not_receipted','partially_receipted')
AND purchase_order_shipments.promised_delivery_date IS NOT NULL
ORDER BY purchase_order_shipments.promised_delivery_date ASC
SQL
records = ShipmentItem.find_by_sql([sql, item_id, store_id])
on_order = records.map { |ship_it| format_shipment_item(ship_it) }
Result.new(on_order: on_order)
end
|