item_builder_mwh 0.1.6 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/item_builder_mwh.rb +116 -14
  3. data/lib/item_builder_mwh/get_quantity_service.rb +132 -0
  4. data/lib/item_builder_mwh/modes.rb +47 -1
  5. data/lib/item_builder_mwh/modes/active_service.rb +1 -1
  6. data/lib/item_builder_mwh/modes/base_service.rb +1 -1
  7. data/lib/item_builder_mwh/modes/price/base.rb +26 -0
  8. data/lib/item_builder_mwh/modes/price/blibli_service.rb +27 -0
  9. data/lib/item_builder_mwh/modes/price/bukalapak_service.rb +61 -0
  10. data/lib/item_builder_mwh/modes/price/jd_service.rb +31 -0
  11. data/lib/item_builder_mwh/modes/price/sale_price_policy.rb +40 -0
  12. data/lib/item_builder_mwh/modes/price/shopify_service.rb +28 -0
  13. data/lib/item_builder_mwh/modes/price/zalora_service.rb +27 -0
  14. data/lib/item_builder_mwh/modes/price_service.rb +45 -5
  15. data/lib/item_builder_mwh/modes/quantity/base.rb +4 -58
  16. data/lib/item_builder_mwh/modes/quantity/lazada_service.rb +1 -1
  17. data/lib/item_builder_mwh/modes/quantity/zalora_service.rb +1 -1
  18. data/lib/item_builder_mwh/modes/quantity_service.rb +21 -11
  19. data/lib/item_builder_mwh/modes/simple/base.rb +74 -0
  20. data/lib/item_builder_mwh/modes/{quantity → simple}/blibli_service.rb +19 -4
  21. data/lib/item_builder_mwh/modes/simple/bukalapak_service.rb +69 -0
  22. data/lib/item_builder_mwh/modes/simple/jd_service.rb +35 -0
  23. data/lib/item_builder_mwh/modes/simple/lazada_service.rb +25 -0
  24. data/lib/item_builder_mwh/modes/simple/sale_price_policy.rb +39 -0
  25. data/lib/item_builder_mwh/modes/simple/shopee_service.rb +25 -0
  26. data/lib/item_builder_mwh/modes/simple/shopify_service.rb +31 -0
  27. data/lib/item_builder_mwh/modes/simple/zalora_service.rb +31 -0
  28. data/lib/item_builder_mwh/modes/simple_service.rb +93 -8
  29. data/lib/item_builder_mwh/version.rb +2 -2
  30. metadata +23 -8
  31. data/lib/item_builder_mwh/modes/quantity/shopee_service.rb +0 -14
@@ -1,12 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'item_builder_mwh/modes/quantity/base'
4
- module ItemBuilderMwh
3
+ require 'date'
4
+ require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/simple/base'
6
+ class ItemBuilderMwh
5
7
  module Modes
6
- module Quantity
8
+ module Simple
7
9
  class BlibliService < Base
8
10
  def perform
9
- local_variant
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
+ }
10
21
  end
11
22
 
12
23
  def local_variant
@@ -45,6 +56,10 @@ module ItemBuilderMwh
45
56
  url = ENV['API_GATEWAY_URL'] || 'apigateway.forstok.com'
46
57
  url + '/blibli/item'
47
58
  end
59
+
60
+ def sale_price
61
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
62
+ end
48
63
  end
49
64
  end
50
65
  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
+ class 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,
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,
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
+ class 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,
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
+ class 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
+ class 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
+ class 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,
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
+ class 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,
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
+ class 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,32 @@
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'
6
- module ItemBuilderMwh
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'
12
+ class 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[13] = :Zalora
20
+ end.freeze
21
+
22
+ PRICE_CHANNEL = {}.tap do |hash|
23
+ hash[2] = :Shopify
24
+ hash[9] = :Blibli
25
+ hash[11] = :Bukalapak
26
+ hash[13] = :Zalora
27
+ hash[16] = :Jd
28
+ end.freeze
29
+
11
30
  def perform
12
31
  base.merge!(
13
32
  warehouse: warehouses
@@ -15,17 +34,83 @@ module ItemBuilderMwh
15
34
  end
16
35
 
17
36
  def to_h(warehouse_space)
37
+ warehouse_ids(warehouse_space).merge(
38
+ simple(warehouse_space)
39
+ )
40
+ end
41
+
42
+ def warehouse_ids(warehouse_space)
18
43
  {
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
44
  warehouse_id: wh_mapping(
25
45
  warehouse_space.warehouse_id
26
46
  )
27
47
  }
28
48
  end
49
+
50
+ def simple(warehouse_space)
51
+ qty = warehouse_space.quantity
52
+ qty(qty).merge(
53
+ price
54
+ )
55
+ end
56
+
57
+ def qty(qty)
58
+ if quantity_name.empty?
59
+ {
60
+ quantity: available_quantity(qty)
61
+ }
62
+ else
63
+ {
64
+ quantity: qty_channel(qty)
65
+ }
66
+ end
67
+ end
68
+
69
+ def price
70
+ if price_name.empty?
71
+ {
72
+ price: listing.price,
73
+ sale_price: listing.sale_price,
74
+ sale_start_at: listing.sale_start_at,
75
+ sale_end_at: listing.sale_end_at
76
+ }
77
+ else
78
+ price_channel
79
+ end
80
+ end
81
+
82
+ def price_channel
83
+ class_name = "ItemBuilderMwh::Modes::Price::#{price_name}Service"
84
+ simple_channel_service = class_name.constantize
85
+ simple_channel_service.new(listing).perform
86
+ end
87
+
88
+ def qty_channel(qty)
89
+ class_name = "ItemBuilderMwh::Modes::Quantity::#{quantity_name}Service"
90
+ qty_channel_service = class_name.constantize
91
+ qty_channel_service.new(listing, available_quantity(qty), reserved_stock).perform
92
+ end
93
+
94
+ def reserved_stock
95
+ reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
96
+ end
97
+
98
+ def available_quantity(qty)
99
+ ItemBuilderMwh::GetQuantityService.new(
100
+ listing: listing, stock_alloc: stock_alloc,
101
+ variant: variant, bundle_variants: bundle_variants,
102
+ existing_allocated_stock: existing_allocated_stock,
103
+ listing_wh_sp_quantity: qty
104
+ ).perform
105
+ end
106
+
107
+ def price_name
108
+ PRICE_CHANNEL[listing.channel_id].to_s
109
+ end
110
+
111
+ def quantity_name
112
+ QUANTITY_CHANNEL[listing.channel_id].to_s
113
+ end
29
114
  end
30
115
  end
31
116
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ItemBuilderMwh
4
- VERSION = '0.1.6'
3
+ class ItemBuilderMwh
4
+ VERSION = '0.1.11'
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.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Ivander
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -116,22 +116,37 @@ extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
118
  - lib/item_builder_mwh.rb
119
+ - lib/item_builder_mwh/get_quantity_service.rb
119
120
  - lib/item_builder_mwh/modes.rb
120
121
  - lib/item_builder_mwh/modes/active_service.rb
121
122
  - lib/item_builder_mwh/modes/base_service.rb
123
+ - lib/item_builder_mwh/modes/price/base.rb
124
+ - lib/item_builder_mwh/modes/price/blibli_service.rb
125
+ - lib/item_builder_mwh/modes/price/bukalapak_service.rb
126
+ - lib/item_builder_mwh/modes/price/jd_service.rb
127
+ - lib/item_builder_mwh/modes/price/sale_price_policy.rb
128
+ - lib/item_builder_mwh/modes/price/shopify_service.rb
129
+ - lib/item_builder_mwh/modes/price/zalora_service.rb
122
130
  - lib/item_builder_mwh/modes/price_service.rb
123
131
  - lib/item_builder_mwh/modes/quantity/base.rb
124
- - lib/item_builder_mwh/modes/quantity/blibli_service.rb
125
132
  - lib/item_builder_mwh/modes/quantity/lazada_service.rb
126
- - lib/item_builder_mwh/modes/quantity/shopee_service.rb
127
133
  - lib/item_builder_mwh/modes/quantity/zalora_service.rb
128
134
  - lib/item_builder_mwh/modes/quantity_service.rb
135
+ - lib/item_builder_mwh/modes/simple/base.rb
136
+ - lib/item_builder_mwh/modes/simple/blibli_service.rb
137
+ - lib/item_builder_mwh/modes/simple/bukalapak_service.rb
138
+ - lib/item_builder_mwh/modes/simple/jd_service.rb
139
+ - lib/item_builder_mwh/modes/simple/lazada_service.rb
140
+ - lib/item_builder_mwh/modes/simple/sale_price_policy.rb
141
+ - lib/item_builder_mwh/modes/simple/shopee_service.rb
142
+ - lib/item_builder_mwh/modes/simple/shopify_service.rb
143
+ - lib/item_builder_mwh/modes/simple/zalora_service.rb
129
144
  - lib/item_builder_mwh/modes/simple_service.rb
130
145
  - lib/item_builder_mwh/version.rb
131
- homepage:
146
+ homepage:
132
147
  licenses: []
133
148
  metadata: {}
134
- post_install_message:
149
+ post_install_message:
135
150
  rdoc_options: []
136
151
  require_paths:
137
152
  - lib
@@ -147,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
162
  version: '0'
148
163
  requirements: []
149
164
  rubygems_version: 3.0.6
150
- signing_key:
165
+ signing_key:
151
166
  specification_version: 4
152
167
  summary: Item Builder Multiwarehouse
153
168
  test_files: []