Class: Inventory::ItemOnOrder

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/inventory/item_on_order.rb

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Instance Method Details

#format_shipment_item(ship_it) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'app/services/inventory/item_on_order.rb', line 28

def format_shipment_item(ship_it)
  {
    promised_delivery_date: ship_it.promised_delivery_date,
    total_open: ship_it.total_open,
    po_number: ship_it.purchase_order.reference_number,
    po_id: ship_it.purchase_order_id,
    po_order_date: ship_it.purchase_order.order_date,
    po_state: ship_it.purchase_order.state
  }
end

#process(item_id:, store_id:) ⇒ Object



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