item_builder_mwh 0.1.13 → 0.1.18
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.
- checksums.yaml +4 -4
- data/lib/item_builder_mwh.rb +12 -0
- data/lib/item_builder_mwh/get_quantity_service.rb +1 -1
- data/lib/item_builder_mwh/modes.rb +2 -0
- data/lib/item_builder_mwh/modes/quantity_service.rb +4 -1
- data/lib/item_builder_mwh/version.rb +1 -1
- data/lib/item_builder_mwh/zalora_quantity_service.rb +73 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9f37232cc5638f6027773c0eb43c054e2cebaf8391d3761a7bbf4042925d10e
|
4
|
+
data.tar.gz: b8e16766478bc199e8ed6670515c23cefa040def49bf0e0e00a44530f228eb58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2f17d7cc7c47352fc6cbbca5ccedc891a930c87e59598cafb807d5122e1d4eeac723ceffc8528d28ed94a4ce38eaf792f6c228478526c9376e89e90770dbebe
|
7
|
+
data.tar.gz: 670d7ddafddad88ab0b941a93e811e063e0abe76de56efafd53bc9dc0a2c34ca4df90e1bd2a5e56edacb880a2d138515560794d6aa567166f7bbdf86f14075e6
|
data/lib/item_builder_mwh.rb
CHANGED
@@ -8,6 +8,7 @@ require 'item_builder_mwh/modes/quantity_service'
|
|
8
8
|
require 'item_builder_mwh/modes/simple_service'
|
9
9
|
require 'item_models'
|
10
10
|
require 'item_builder_mwh/zilingo_quantity_service'
|
11
|
+
require 'item_builder_mwh/zalora_quantity_service'
|
11
12
|
|
12
13
|
class ItemBuilderMwh
|
13
14
|
attr_reader :listing_ids
|
@@ -39,6 +40,11 @@ class ItemBuilderMwh
|
|
39
40
|
new_param = qty_simple_params(listing)
|
40
41
|
.merge({zilingo_delta_quantity: zilingo_delta_quantity})
|
41
42
|
|
43
|
+
modes[mode].new(new_param).perform
|
44
|
+
elsif listing.channel_id == 13
|
45
|
+
new_param = qty_simple_params(listing)
|
46
|
+
.merge({zalora_reserved_stock: zalora_reserved_stock})
|
47
|
+
|
42
48
|
modes[mode].new(new_param).perform
|
43
49
|
else
|
44
50
|
modes[mode].new(qty_simple_params(listing)).perform
|
@@ -118,6 +124,12 @@ class ItemBuilderMwh
|
|
118
124
|
).perform
|
119
125
|
end
|
120
126
|
|
127
|
+
def zalora_reserved_stock
|
128
|
+
@zalora_reserved_stock ||= ItemBuilderMwh::ZaloraQuantityService.new(
|
129
|
+
listings: listings, skus: skus
|
130
|
+
).perform
|
131
|
+
end
|
132
|
+
|
121
133
|
def order_host
|
122
134
|
url = ENV['ORDERS_URL'] || 'orders.forstok.com'
|
123
135
|
url + '/api/v3/item_line/reserved_stock'
|
@@ -17,6 +17,7 @@ class ItemBuilderMwh
|
|
17
17
|
attr_reader :variant_listings
|
18
18
|
attr_reader :reserved_stocks
|
19
19
|
attr_reader :zilingo_delta_quantity
|
20
|
+
attr_reader :zalora_reserved_stock
|
20
21
|
def initialize(args)
|
21
22
|
@listing = args.fetch(:listing)
|
22
23
|
@wh_spaces = args.fetch(:wh_spaces, [])
|
@@ -28,6 +29,7 @@ class ItemBuilderMwh
|
|
28
29
|
@variant_listings = args.fetch(:variant_listings, [])
|
29
30
|
@reserved_stocks = args.fetch(:reserved_stocks, [])
|
30
31
|
@zilingo_delta_quantity = args.fetch(:zilingo_delta_quantity, [])
|
32
|
+
@zalora_reserved_stock = args.fetch(:zalora_reserved_stock, [])
|
31
33
|
warehouse
|
32
34
|
end
|
33
35
|
|
@@ -27,7 +27,7 @@ class ItemBuilderMwh
|
|
27
27
|
|
28
28
|
def to_h(warehouse_space)
|
29
29
|
{
|
30
|
-
quantity: qty(warehouse_space.quantity),
|
30
|
+
quantity: [qty(warehouse_space.quantity), 0].sort[1],
|
31
31
|
warehouse_id: wh_mapping(
|
32
32
|
warehouse_space.warehouse_id
|
33
33
|
)
|
@@ -55,6 +55,9 @@ class ItemBuilderMwh
|
|
55
55
|
def reserved_stock
|
56
56
|
if channel_name == 'Zilingo'
|
57
57
|
zilingo_delta_quantity[listing.local_id].to_i
|
58
|
+
elsif channel_name == 'Zalora'
|
59
|
+
return 0 if zalora_reserved_stock.blank?
|
60
|
+
zalora_reserved_stock[listing.local_id].to_i
|
58
61
|
else
|
59
62
|
reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
|
60
63
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'item_builder_mwh/modes.rb'
|
4
|
+
class ItemBuilderMwh
|
5
|
+
class ZaloraQuantityService
|
6
|
+
attr_reader :listings, :skus
|
7
|
+
def initialize(args)
|
8
|
+
@listings = args.fetch(:listings)
|
9
|
+
@skus = args.fetch(:skus)
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform
|
13
|
+
args = {
|
14
|
+
method: :post, url: url, payload: data, headers: headers
|
15
|
+
}
|
16
|
+
resp = JSON.parse(rest_client(args, [200, 500, 406]))
|
17
|
+
response_process(resp)
|
18
|
+
end
|
19
|
+
|
20
|
+
def headers
|
21
|
+
{ content_type: :json, accept: :json }
|
22
|
+
end
|
23
|
+
|
24
|
+
def data
|
25
|
+
{
|
26
|
+
"credential": JSON.parse(credential)['credential'],
|
27
|
+
"data": { "skus": skus }
|
28
|
+
}.to_json
|
29
|
+
end
|
30
|
+
|
31
|
+
def credential
|
32
|
+
return @credential if @credential
|
33
|
+
|
34
|
+
account_id = listings[0].profile_channel_association_id
|
35
|
+
host = ENV['CREDENTIAL_URL'] || raise('credential url is not set')
|
36
|
+
url = "#{host}/credential?account_id=#{account_id}"
|
37
|
+
@credential = rest_client(method: :get, url: url)
|
38
|
+
end
|
39
|
+
|
40
|
+
def url
|
41
|
+
url = ENV['API_GATEWAY_URL'] || raise('api gateway is not set')
|
42
|
+
url + "/zalora/product_stocks"
|
43
|
+
end
|
44
|
+
|
45
|
+
def response_process(resp)
|
46
|
+
if resp.dig("response_code") && resp.dig("response_code") != 200
|
47
|
+
raise "Response Code is #{resp.dig("response_code")}"
|
48
|
+
elsif resp.dig('ErrorResponse', 'Head', 'ErrorMessage') == 'E009: Access Denied'
|
49
|
+
return nil
|
50
|
+
end
|
51
|
+
success_handle(resp)
|
52
|
+
end
|
53
|
+
|
54
|
+
def success_handle(resp)
|
55
|
+
hash = Hash.new
|
56
|
+
resp.dig("SuccessResponse", "Body", "ProductStocks", "ProductStock").each do |sku|
|
57
|
+
hash[sku['SellerSku']] = sku['ReservedStock']
|
58
|
+
end
|
59
|
+
hash
|
60
|
+
end
|
61
|
+
|
62
|
+
def rest_client(params, rescued_codes = 200)
|
63
|
+
RestClient::Request.execute(params.merge(timeout: 3)) do |response|
|
64
|
+
code = response.code
|
65
|
+
unless Array.wrap(rescued_codes).include?(code)
|
66
|
+
raise "Response Code is #{code}"
|
67
|
+
end
|
68
|
+
|
69
|
+
response
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
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.
|
4
|
+
version: 0.1.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Ivander
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -144,6 +144,7 @@ files:
|
|
144
144
|
- lib/item_builder_mwh/modes/simple/zalora_service.rb
|
145
145
|
- lib/item_builder_mwh/modes/simple_service.rb
|
146
146
|
- lib/item_builder_mwh/version.rb
|
147
|
+
- lib/item_builder_mwh/zalora_quantity_service.rb
|
147
148
|
- lib/item_builder_mwh/zilingo_quantity_service.rb
|
148
149
|
homepage:
|
149
150
|
licenses: []
|
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
164
|
- !ruby/object:Gem::Version
|
164
165
|
version: '0'
|
165
166
|
requirements: []
|
166
|
-
rubygems_version: 3.0.
|
167
|
+
rubygems_version: 3.0.9
|
167
168
|
signing_key:
|
168
169
|
specification_version: 4
|
169
170
|
summary: Item Builder Multiwarehouse
|