item_builder_mwh 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c514a7575658fabe86a470f41cbb2f35802235c1143ff6baacbba50084b6e31c
4
- data.tar.gz: 913dc65e2b64637db18ca789f6d4929b22001fce2e01b2ecc79bbf3d0deff07d
3
+ metadata.gz: 5a39d996fe505e2fd15b46f95671f349384ae92da5366e88008b81f82619fe75
4
+ data.tar.gz: d511eb1becb767fef12750734edf75a3d00c6c8118b6edcb2562f3526af3de86
5
5
  SHA512:
6
- metadata.gz: 51810b83e87bf09c38f234eaa2071ac23023215d3a232c6a796d8984871edf80395a33f322c830601990d44ee524456ebcf5dd15309695142b0344de5f80f832
7
- data.tar.gz: 7a6c1f71bd00d768f314ed895ec7770323152bc7ac1567aea9ee022e6948cf565c93adfe95e7ef84d244af5719552f665361727c4baf9fb8960addf3c96a2c70
6
+ metadata.gz: 224bb9928a797411817583da70b34681a4435ad1bd6be095649504480c41cee258d419605f4bfc2adf4e0a8ca1c65705f9a13ee37b4ffa8ac6a7a4e580e085be
7
+ data.tar.gz: 8ca72e701203575d82f9f60ca308d782c65ee74f30ded4b5161f5136af7cbfa9f148e9e621895a3be0b72102085b27c34408942fdbe9081c733fb7acc1307685
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price_service'
6
+ require 'item_builder_mwh/modes/price/sale_price_policy'
7
+ module ItemBuilderMwh
8
+ module Modes
9
+ module Price
10
+ class Base
11
+ attr_reader :listing
12
+
13
+ def initialize(listing)
14
+ raise 'listing is not set' if listing.nil?
15
+
16
+ @listing = listing
17
+ end
18
+
19
+ def sale_price_policy
20
+ @sale_price_policy ||=
21
+ ItemBuilderMwh::Modes::Price::SalePricePolicy.new(listing: listing)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Price
9
+ class BlibliService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at
16
+ }
17
+ end
18
+
19
+ private
20
+
21
+ def sale_price
22
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Price
9
+ class BukalapakService < Base
10
+ def perform
11
+ if listing.sale_price.nil?
12
+ bukalapak_price
13
+ else
14
+ deal
15
+ end
16
+ end
17
+
18
+ def bukalapak_price
19
+ {
20
+ price: listing.price,
21
+ sale_price: listing.sale_price,
22
+ sale_start_at: listing.sale_start_at,
23
+ sale_end_at: listing.sale_end_at
24
+ }
25
+ end
26
+
27
+ def deal
28
+ {
29
+ percentage: deal_percentage,
30
+ sale_start_at: sale_start_at,
31
+ sale_end_at: sale_end_at,
32
+ price: listing.price,
33
+ sale_price: listing.sale_price
34
+ }
35
+ end
36
+
37
+ def deal_percentage
38
+ price = listing.price.to_f
39
+ sale_price = listing.sale_price.to_f
40
+ 100 - (sale_price / price * 100)
41
+ end
42
+
43
+ def sale_start_at
44
+ return DateTime.now if listing.sale_start_at.nil?
45
+ return DateTime.now if listing.sale_start_at < DateTime.now
46
+
47
+ listing.sale_start_at
48
+ end
49
+
50
+ def sale_end_at
51
+ month_later = DateTime.now + 1.month
52
+ return month_later if listing.sale_end_at.nil?
53
+ return month_later if listing.sale_end_at > month_later
54
+ return month_later if listing.sale_end_at < DateTime.now
55
+
56
+ listing.sale_end_at
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Price
9
+ class JdService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: jd_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at
16
+ }
17
+ end
18
+
19
+ def jd_price
20
+ increment_price =
21
+ if (listing.price % 1000).positive?
22
+ 1000
23
+ else
24
+ 0
25
+ end
26
+ (listing.price.to_i / 1000) * 1000 + increment_price
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price_service'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Price
9
+ class SalePricePolicy
10
+ include Modes
11
+ def sale_price
12
+ # has sale price but no sale date defined
13
+ # then push sale price immediately
14
+ # assuming it starts today and no end date specified
15
+ return listing.sale_price if sale_price? && !sale_date?
16
+
17
+ # has sale price and today is on sale then push sale price immediately
18
+ listing.sale_price if sale_price? && on_sale?
19
+ # don't push / don't return anything if 2 rules above unfulfilled
20
+ end
21
+
22
+ def sale_price?
23
+ listing.sale_price
24
+ end
25
+
26
+ def sale_date?
27
+ listing.sale_start_at && listing.sale_end_at
28
+ end
29
+
30
+ def on_sale?
31
+ return false unless sale_price?
32
+
33
+ sale_start_at = listing.sale_start_at || DateTime.now
34
+ sale_end_at = listing.sale_end_at || DateTime.now + 1_000_000.years
35
+ sale_start_at <= DateTime.now && sale_end_at >= DateTime.now
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price/base'
6
+ require 'item_builder_mwh/modes/price/sale_price_policy'
7
+ module ItemBuilderMwh
8
+ module Modes
9
+ module Price
10
+ class ShopifyService < Base
11
+ def perform
12
+ {
13
+ price: listing.price,
14
+ sale_price: sale_price,
15
+ sale_start_at: listing.sale_start_at,
16
+ sale_end_at: listing.sale_end_at
17
+ }
18
+ end
19
+
20
+ private
21
+
22
+ def sale_price
23
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/price/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Price
9
+ class ZaloraService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at
16
+ }
17
+ end
18
+
19
+ private
20
+
21
+ def sale_price
22
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,11 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'item_builder_mwh/modes.rb'
4
+ require 'item_builder_mwh/modes/price/base'
5
+ require 'item_builder_mwh/modes/price/blibli_service'
6
+ require 'item_builder_mwh/modes/price/bukalapak_service'
7
+ require 'item_builder_mwh/modes/price/zalora_service'
8
+ require 'item_builder_mwh/modes/price/shopify_service'
9
+ require 'item_builder_mwh/modes/price/sale_price_policy'
10
+ require 'item_builder_mwh/modes/price/jd_service'
4
11
  module ItemBuilderMwh
5
12
  module Modes
6
13
  class PriceService
7
14
  include Modes
8
15
 
16
+ PRICE_CHANNEL = {}.tap do |hash|
17
+ hash[2] = :Shopify
18
+ hash[9] = :Blibli
19
+ hash[11] = :Bukalapak
20
+ hash[13] = :Zalora
21
+ hash[16] = :Jd
22
+ end.freeze
23
+
9
24
  def perform
10
25
  base.merge!(
11
26
  warehouse: warehouses
@@ -13,16 +28,41 @@ module ItemBuilderMwh
13
28
  end
14
29
 
15
30
  def to_h(warehouse_space)
31
+ warehouse_ids(warehouse_space).merge(
32
+ price
33
+ )
34
+ end
35
+
36
+ def warehouse_ids(warehouse_space)
16
37
  {
17
- price: listing.price,
18
- sale_price: listing.sale_price,
19
- sale_start_at: listing.sale_start_at,
20
- sale_end_at: listing.sale_end_at,
21
38
  warehouse_id: wh_mapping(
22
39
  warehouse_space.warehouse_id
23
40
  )
24
41
  }
25
42
  end
43
+
44
+ def price
45
+ if channel_name.empty?
46
+ {
47
+ price: listing.price,
48
+ sale_price: listing.sale_price,
49
+ sale_start_at: listing.sale_start_at,
50
+ sale_end_at: listing.sale_end_at
51
+ }
52
+ else
53
+ price_channel
54
+ end
55
+ end
56
+
57
+ def price_channel
58
+ class_name = "ItemBuilderMwh::Modes::Price::#{channel_name}Service"
59
+ price_channel_service = class_name.constantize
60
+ price_channel_service.new(listing).perform
61
+ end
62
+
63
+ def channel_name
64
+ PRICE_CHANNEL[listing.channel_id].to_s
65
+ end
26
66
  end
27
67
  end
28
68
  end
@@ -23,7 +23,7 @@ module ItemBuilderMwh
23
23
  if item['reservedStockLevel2'] > available_quantity
24
24
  0
25
25
  else
26
- item['availableStockLevel2'] + item['reservedStockLevel2']
26
+ available_quantity
27
27
  end
28
28
  end
29
29
 
@@ -43,7 +43,7 @@ module ItemBuilderMwh
43
43
  end
44
44
 
45
45
  def qty_channel(available_qty)
46
- class_name = "ItemBuilder::Modes::Quantity::#{channel_name}Service"
46
+ class_name = "ItemBuilderMwh::Modes::Quantity::#{channel_name}Service"
47
47
  qty_channel_service = class_name.constantize
48
48
  qty_channel_service.new(listing, available_qty).perform
49
49
  end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple_service'
6
+ require 'item_builder_mwh/modes/simple/sale_price_policy'
7
+ module ItemBuilderMwh
8
+ module Modes
9
+ module Simple
10
+ class Base
11
+ attr_reader :listing
12
+ attr_reader :available_quantity
13
+
14
+ def initialize(listing, available_quantity)
15
+ raise 'listing is not set' if listing.nil?
16
+
17
+ @listing = listing
18
+ @available_quantity = available_quantity
19
+ end
20
+
21
+ def order_host
22
+ url = ENV['ORDERS_URL'] || 'orders.forstok.com'
23
+ url + '/api/v2/item_line/reserved_stock'
24
+ end
25
+
26
+ def reserved_params
27
+ "account_id=#{listing.profile_channel_association_id}
28
+ &item_variant_id=#{listing.variant_id}"
29
+ end
30
+
31
+ def reserved_stock
32
+ RestClient.get("#{order_host}?#{reserved_params}")
33
+ rescue RestClient::ExceptionWithResponse => e
34
+ e.response
35
+ end
36
+
37
+ def apigateway_get
38
+ RestClient.get("#{host}?#{params}")
39
+ rescue RestClient::ExceptionWithResponse => e
40
+ e.response
41
+ end
42
+
43
+ def headers
44
+ {
45
+ content_type: :json,
46
+ accept: :json
47
+ }
48
+ end
49
+
50
+ def credential
51
+ account_id = listing.profile_channel_association_id
52
+ host = ENV['CREDENTIAL_URL'] || 'user.forstok.com'
53
+ begin
54
+ RestClient.get("#{host}/credential?account_id=#{account_id}")
55
+ rescue RestClient::ExceptionWithResponse => e
56
+ e.response
57
+ end
58
+ end
59
+
60
+ def data
61
+ {
62
+ "credential": JSON.parse(credential)['credential'],
63
+ "data": request
64
+ }
65
+ end
66
+
67
+ def api_data
68
+ data.to_json
69
+ end
70
+
71
+ def sale_price_policy
72
+ @sale_price_policy ||=
73
+ ItemBuilderMwh::Modes::Simple::SalePricePolicy.new(listing: listing)
74
+ end
75
+
76
+ def apigateway_post
77
+ RestClient.post(url, api_data, headers)
78
+ rescue RestClient::ExceptionWithResponse => e
79
+ e.response
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class BlibliService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: local_variant,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+
23
+ def local_variant
24
+ qty = 0
25
+ local_product['value']['items'].each do |item|
26
+ qty = total_quantity(item) if item['itemSku'] == listing.local_id
27
+ end
28
+ qty
29
+ end
30
+
31
+ def total_quantity(item)
32
+ # Make stock 0
33
+ # if local reserved quantity is bigger than available quantity
34
+ if item['reservedStockLevel2'] > available_quantity
35
+ 0
36
+ else
37
+ item['availableStockLevel2'] + item['reservedStockLevel2']
38
+ end
39
+ end
40
+
41
+ # Find local product based on id
42
+ # @return [Hash] Local Blibli product
43
+ def local_product
44
+ @local_product ||= JSON.parse(apigateway_post)
45
+ end
46
+
47
+ private
48
+
49
+ def request
50
+ {
51
+ "gdnSku": listing.local_id
52
+ }
53
+ end
54
+
55
+ def url
56
+ url = ENV['API_GATEWAY_URL'] || 'apigateway.forstok.com'
57
+ url + '/blibli/item'
58
+ end
59
+
60
+ def sale_price
61
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class BukalapakService < Base
10
+ def perform
11
+ if listing.sale_price.nil?
12
+ bukalapak_price
13
+ else
14
+ deal
15
+ end
16
+ end
17
+
18
+ def bukalapak_price
19
+ {
20
+ price: listing.price,
21
+ sale_price: listing.sale_price,
22
+ sale_start_at: listing.sale_start_at,
23
+ sale_end_at: listing.sale_end_at,
24
+ quantity: available_quantity + reserved_stock.to_i,
25
+ warehouse_id: wh_mapping(
26
+ warehouse_space.warehouse_id
27
+ )
28
+ }
29
+ end
30
+
31
+ def deal
32
+ {
33
+ percentage: deal_percentage,
34
+ sale_start_at: sale_start_at,
35
+ sale_end_at: sale_end_at,
36
+ price: listing.price,
37
+ sale_price: listing.sale_price,
38
+ quantity: available_quantity + reserved_stock.to_i,
39
+ warehouse_id: wh_mapping(
40
+ warehouse_space.warehouse_id
41
+ )
42
+ }
43
+ end
44
+
45
+ def deal_percentage
46
+ price = listing.price.to_f
47
+ sale_price = listing.sale_price.to_f
48
+ 100 - (sale_price / price * 100)
49
+ end
50
+
51
+ def sale_start_at
52
+ return DateTime.now if listing.sale_start_at.nil?
53
+ return DateTime.now if listing.sale_start_at < DateTime.now
54
+
55
+ listing.sale_start_at
56
+ end
57
+
58
+ def sale_end_at
59
+ month_later = DateTime.now + 1.month
60
+ return month_later if listing.sale_end_at.nil?
61
+ return month_later if listing.sale_end_at > month_later
62
+ return month_later if listing.sale_end_at < DateTime.now
63
+
64
+ listing.sale_end_at
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class JdService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: jd_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: available_quantity + reserved_stock.to_i,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+
23
+ def jd_price
24
+ increment_price =
25
+ if (listing.price % 1000).positive?
26
+ 1000
27
+ else
28
+ 0
29
+ end
30
+ (listing.price.to_i / 1000) * 1000 + increment_price
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class LazadaService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: listing.sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: available_quantity + reserved_stock.to_i,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes/simple_service'
5
+ module ItemBuilderMwh
6
+ module Modes
7
+ module Simple
8
+ class SalePricePolicy
9
+ include Modes
10
+ def sale_price
11
+ # has sale price but no sale date defined
12
+ # then push sale price immediately
13
+ # assuming it starts today and no end date specified
14
+ return listing.sale_price if sale_price? && !sale_date?
15
+
16
+ # has sale price and today is on sale then push sale price immediately
17
+ listing.sale_price if sale_price? && on_sale?
18
+ # don't push / don't return anything if 2 rules above unfulfilled
19
+ end
20
+
21
+ def sale_price?
22
+ listing.sale_price
23
+ end
24
+
25
+ def sale_date?
26
+ listing.sale_start_at && listing.sale_end_at
27
+ end
28
+
29
+ def on_sale?
30
+ return false unless sale_price?
31
+
32
+ sale_start_at = listing.sale_start_at || DateTime.now
33
+ sale_end_at = listing.sale_end_at || DateTime.now + 1_000_000.years
34
+ sale_start_at <= DateTime.now && sale_end_at >= DateTime.now
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class ShopeeService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: listing.sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: available_quantity + reserved_stock.to_i,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class ShopifyService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: available_quantity + reserved_stock.to_i,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+
23
+ private
24
+
25
+ def sale_price
26
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ module ItemBuilderMwh
7
+ module Modes
8
+ module Simple
9
+ class ZaloraService < Base
10
+ def perform
11
+ {
12
+ price: listing.price,
13
+ sale_price: sale_price,
14
+ sale_start_at: listing.sale_start_at,
15
+ sale_end_at: listing.sale_end_at,
16
+ quantity: available_quantity + reserved_stock.to_i,
17
+ warehouse_id: wh_mapping(
18
+ warehouse_space.warehouse_id
19
+ )
20
+ }
21
+ end
22
+
23
+ private
24
+
25
+ def sale_price
26
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,13 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'item_builder_mwh/modes/quantity_service.rb'
4
- require 'item_builder_mwh/modes/price_service.rb'
3
+ require 'warehouse_models'
5
4
  require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/blibli_service'
6
+ require 'item_builder_mwh/modes/simple/bukalapak_service'
7
+ require 'item_builder_mwh/modes/simple/zalora_service'
8
+ require 'item_builder_mwh/modes/simple/shopify_service'
9
+ require 'item_builder_mwh/modes/simple/jd_service'
10
+ require 'item_builder_mwh/modes/simple/lazada_service'
11
+ require 'item_builder_mwh/modes/simple/shopee_service'
6
12
  module ItemBuilderMwh
7
13
  module Modes
8
14
  class SimpleService
9
15
  include Modes
10
16
 
17
+ QUANTITY_CHANNEL = {}.tap do |hash|
18
+ hash[3] = :Lazada
19
+ hash[9] = :Blibli
20
+ hash[12] = :Shopee
21
+ hash[13] = :Zalora
22
+ end.freeze
23
+
24
+ PRICE_CHANNEL = {}.tap do |hash|
25
+ hash[2] = :Shopify
26
+ hash[9] = :Blibli
27
+ hash[11] = :Bukalapak
28
+ hash[13] = :Zalora
29
+ hash[16] = :Jd
30
+ end.freeze
31
+
11
32
  def perform
12
33
  base.merge!(
13
34
  warehouse: warehouses
@@ -15,17 +36,70 @@ module ItemBuilderMwh
15
36
  end
16
37
 
17
38
  def to_h(warehouse_space)
39
+ warehouse_ids(warehouse_space).merge(
40
+ simple(warehouse_space)
41
+ )
42
+ end
43
+
44
+ def warehouse_ids(warehouse_space)
18
45
  {
19
- quantity: warehouse_space.quantity,
20
- price: listing.price,
21
- sale_price: listing.sale_price,
22
- sale_start_at: listing.sale_start_at,
23
- sale_end_at: listing.sale_end_at,
24
46
  warehouse_id: wh_mapping(
25
47
  warehouse_space.warehouse_id
26
48
  )
27
49
  }
28
50
  end
51
+
52
+ def simple(warehouse_space)
53
+ available_qty = warehouse_space.quantity
54
+ qty(available_qty).merge(
55
+ price
56
+ )
57
+ end
58
+
59
+ def qty(available_qty)
60
+ if quantity_name.empty?
61
+ {
62
+ quantity: available_qty
63
+ }
64
+ else
65
+ {
66
+ quantity: qty_channel(available_qty)
67
+ }
68
+ end
69
+ end
70
+
71
+ def price
72
+ if price_name.empty?
73
+ {
74
+ price: listing.price,
75
+ sale_price: listing.sale_price,
76
+ sale_start_at: listing.sale_start_at,
77
+ sale_end_at: listing.sale_end_at
78
+ }
79
+ else
80
+ price_channel
81
+ end
82
+ end
83
+
84
+ def price_channel
85
+ class_name = "ItemBuilderMwh::Modes::Price::#{price_name}Service"
86
+ simple_channel_service = class_name.constantize
87
+ simple_channel_service.new(listing, available_qty).perform
88
+ end
89
+
90
+ def qty_channel(available_qty)
91
+ class_name = "ItemBuilderMwh::Modes::Quantity::#{quantity_name}Service"
92
+ qty_channel_service = class_name.constantize
93
+ qty_channel_service.new(listing, available_qty).perform
94
+ end
95
+
96
+ def price_name
97
+ PRICE_CHANNEL[listing.channel_id].to_s
98
+ end
99
+
100
+ def quantity_name
101
+ QUANTITY_CHANNEL[listing.channel_id].to_s
102
+ end
29
103
  end
30
104
  end
31
105
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ItemBuilderMwh
4
- VERSION = '0.1.6'
4
+ VERSION = '0.1.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: item_builder_mwh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Ivander
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2020-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -119,6 +119,13 @@ files:
119
119
  - lib/item_builder_mwh/modes.rb
120
120
  - lib/item_builder_mwh/modes/active_service.rb
121
121
  - lib/item_builder_mwh/modes/base_service.rb
122
+ - lib/item_builder_mwh/modes/price/base.rb
123
+ - lib/item_builder_mwh/modes/price/blibli_service.rb
124
+ - lib/item_builder_mwh/modes/price/bukalapak_service.rb
125
+ - lib/item_builder_mwh/modes/price/jd_service.rb
126
+ - lib/item_builder_mwh/modes/price/sale_price_policy.rb
127
+ - lib/item_builder_mwh/modes/price/shopify_service.rb
128
+ - lib/item_builder_mwh/modes/price/zalora_service.rb
122
129
  - lib/item_builder_mwh/modes/price_service.rb
123
130
  - lib/item_builder_mwh/modes/quantity/base.rb
124
131
  - lib/item_builder_mwh/modes/quantity/blibli_service.rb
@@ -126,6 +133,15 @@ files:
126
133
  - lib/item_builder_mwh/modes/quantity/shopee_service.rb
127
134
  - lib/item_builder_mwh/modes/quantity/zalora_service.rb
128
135
  - lib/item_builder_mwh/modes/quantity_service.rb
136
+ - lib/item_builder_mwh/modes/simple/base.rb
137
+ - lib/item_builder_mwh/modes/simple/blibli_service.rb
138
+ - lib/item_builder_mwh/modes/simple/bukalapak_service.rb
139
+ - lib/item_builder_mwh/modes/simple/jd_service.rb
140
+ - lib/item_builder_mwh/modes/simple/lazada_service.rb
141
+ - lib/item_builder_mwh/modes/simple/sale_price_policy.rb
142
+ - lib/item_builder_mwh/modes/simple/shopee_service.rb
143
+ - lib/item_builder_mwh/modes/simple/shopify_service.rb
144
+ - lib/item_builder_mwh/modes/simple/zalora_service.rb
129
145
  - lib/item_builder_mwh/modes/simple_service.rb
130
146
  - lib/item_builder_mwh/version.rb
131
147
  homepage: