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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e0e327d2d75048169959add8240680ad93b2e945ad143bd50ceebde691fe1e6
4
- data.tar.gz: d4989a73567a5a977a704bc96d746271cd7aaf84d3112fe867381f42a3ed1b23
3
+ metadata.gz: e9f37232cc5638f6027773c0eb43c054e2cebaf8391d3761a7bbf4042925d10e
4
+ data.tar.gz: b8e16766478bc199e8ed6670515c23cefa040def49bf0e0e00a44530f228eb58
5
5
  SHA512:
6
- metadata.gz: 8e1dcdd50c6cc91c051bab7a6722dc11b70b1a0db58f99538f37ed651cc4522f6f807c03798f4d142ef7f8fc6de62c6edad6354eb68d2bd16ba35ec5f996c2d3
7
- data.tar.gz: d52b17a20acec7efde7d482261c9782cb9548f3fc2b3489f7e440e719b2c4b01ab0e3f472f49a1df0545af277c98567e6903932a08592d191c1a2479c5130f74
6
+ metadata.gz: f2f17d7cc7c47352fc6cbbca5ccedc891a930c87e59598cafb807d5122e1d4eeac723ceffc8528d28ed94a4ce38eaf792f6c228478526c9376e89e90770dbebe
7
+ data.tar.gz: 670d7ddafddad88ab0b941a93e811e063e0abe76de56efafd53bc9dc0a2c34ca4df90e1bd2a5e56edacb880a2d138515560794d6aa567166f7bbdf86f14075e6
@@ -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'
@@ -38,7 +38,7 @@ class ItemBuilderMwh
38
38
  def check_consignment_variant?
39
39
  listing.consignment? ||
40
40
  (
41
- !listing.active? && [11, 12, 15].include?(listing.channel_id)
41
+ !listing.active? && [11, 12, 15, 19, 2].include?(listing.channel_id)
42
42
  )
43
43
  end
44
44
 
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ItemBuilderMwh
4
- VERSION = '0.1.13'
4
+ VERSION = '0.1.18'
5
5
  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.13
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-02-19 00:00:00.000000000 Z
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.6
167
+ rubygems_version: 3.0.9
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: Item Builder Multiwarehouse