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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/tiny_builder/quantity_helper.rb', line 56

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]

  if inventory_v2
    get_warehouse_spaces_v2(variant_id)
  else
    WarehouseSpace.where(
      item_variant_id: variant_id
    ).where.not(
      warehouse_id: nil
    )
  end
end

#counter_params(listing, wh_space = nil) ⇒ Object



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

def counter_params(listing, wh_space = nil)
  wh_space ||= single_warehouse_space(listing)
  {
    warehouse_space: wh_space,
    listing: listing,
    variant: mapped_data[listing.icava_id][:variant],
    inventory_v2: inventory_v2
  }
end

#get_warehouse_spaces_v2(variant_id) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/tiny_builder/quantity_helper.rb', line 81

def get_warehouse_spaces_v2(variant_id)
  spaces = []
  MongoWarehouseSpace.where(item_variant_id: variant_id).where(:warehouse_id.exists => true).each do |ws|
    spaces << ws
  end
  spaces
end

#multi_warehouse_spaces(listing) ⇒ Object



50
51
52
53
54
# File 'lib/tiny_builder/quantity_helper.rb', line 50

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



41
42
43
44
45
46
47
48
# File 'lib/tiny_builder/quantity_helper.rb', line 41

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



72
73
74
75
76
77
78
79
# File 'lib/tiny_builder/quantity_helper.rb', line 72

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