item_builder_mwh 0.1.6 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
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: []