Module: TinyBuilder::QuantityHelper

Included in:
BaseBuilder
Defined in:
lib/tiny_builder/quantity_helper.rb

Instance Method Summary collapse

Instance Method Details

#bundle_warehouse_spaces(variant) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/tiny_builder/quantity_helper.rb', line 52

def bundle_warehouse_spaces(variant)
  bundle = MasterProduct.find_by("bundle_variants.master_variant_id": variant.id)
  return [] unless bundle
  variant_id = bundle.bundle_variants.find { |bv| !bv[:main] }[:master_variant_id]
  WarehouseSpace.where(
    item_variant_id: variant_id
  ).where.not(
    warehouse_id: nil
  )
end

#counter_params(listing, wh_space = nil) ⇒ Object



31
32
33
34
35
# File 'lib/tiny_builder/quantity_helper.rb', line 31

def counter_params(listing, wh_space = nil)
  params = mapped_data[listing.icava_id].slice(:variant, :stock_alloc, :associated_stock_allocs)
  wh_space ||= single_warehouse_space(listing)
  params.merge(warehouse_space: wh_space)
end

#multi_warehouse_spaces(listing) ⇒ Object



46
47
48
49
50
# File 'lib/tiny_builder/quantity_helper.rb', line 46

def multi_warehouse_spaces(listing)
  wh_spaces(listing).select do |wh_space|
    warehouse_mappings.map(&:warehouse_id).include?(wh_space.warehouse_id)
  end
end

#quantity(listing, wh_space = nil) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/tiny_builder/quantity_helper.rb', line 23

def quantity(listing, wh_space = nil)
  qty = QuantityCounter.new(
    counter_params(listing, wh_space)
  ).perform
  qty += listing[:zalora_reserved_stock].to_i if channel_id == 13
  qty
end

#quantity_hash(listing) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/tiny_builder/quantity_helper.rb', line 5

def quantity_hash(listing)
  if mwh
    { warehouse: warehouse_quantities(listing) }
  else
    { quantity: quantity(listing) }
  end
end

#single_warehouse_space(listing) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/tiny_builder/quantity_helper.rb', line 37

def single_warehouse_space(listing)
  variant_wh_spaces = wh_spaces(listing)
  if warehouse_mapping
    variant_wh_spaces.find{ |wh_space| wh_space.warehouse_id == warehouse_mapping.warehouse_id }
  else
    variant_wh_spaces.last
  end
end

#warehouse_quantities(listing) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/tiny_builder/quantity_helper.rb', line 13

def warehouse_quantities(listing)
  multi_warehouse_spaces(listing).map do |wh_space|
    {
      id: wh_space&.warehouse_id,
      quantity: quantity(listing, wh_space),
      warehouse_id: mapped_wh_mappings[wh_space.warehouse_id]
    }
  end
end

#wh_spaces(listing) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/tiny_builder/quantity_helper.rb', line 63

def wh_spaces(listing)
  variant = mapped_data[listing.icava_id][:variant]
  wh_spaces = if variant.config == 'default'
      mapped_data[listing.icava_id][:warehouse_spaces]
    else
      bundle_warehouse_spaces(variant)
    end
end