item_builder 0.1.32 → 0.1.37

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: 85f8e8062ec5018662226331da7ff63bdc7f30ad96c0acd01583d367afc52f18
4
- data.tar.gz: 4ccbef79af924bfa8b997ec5a999853324e12711266861ecbd5f60f0f25b5364
3
+ metadata.gz: 713b8514bee88310317b13128dc4856369103557f569becd1cf0266c9439688a
4
+ data.tar.gz: 6514db213c825273db7f4da34013b89f96e83062eb081b742588dee98abb0ca6
5
5
  SHA512:
6
- metadata.gz: fc31355e9b290e792d52dda3b3ec445c648b49521279c931b6daf2e16d148cb3b2d7b2db1a17dbca0a906514e82b1831c0439fb776f6e2d8c474c93d595234a2
7
- data.tar.gz: 7d3e836f23c40b9ded8904933b90701aac8d9ea512c140b0e7b04c495c37a81d18d28491dafd5dcc729a01f0470eaa933dd7c7b228e8a89c364e97be04a58531
6
+ metadata.gz: b872e586f3c595d58af7b5bd75e4aa031adf98d104d8e2044c908b6ad280078de68814bbe810769e8f91d1ba7caff31360c146c8065264cce98da8a6b77ac1e6
7
+ data.tar.gz: e71427b5ad8ef4bbbc4d805e0eaa602f3e347e80cad2c245399cb3a621a655abe95c5cc2d17b1294b2080830e61a9d5a21c3a1a88a4c979176fb2320355ae3db
data/lib/item_builder.rb CHANGED
@@ -9,6 +9,7 @@ require 'item_builder/modes/simple_service'
9
9
  require 'item_builder/modes/active_service'
10
10
  require 'item_models'
11
11
  require 'item_builder/zilingo_quantity_service'
12
+ require 'item_builder/zalora_quantity_service'
12
13
 
13
14
  class ItemBuilder
14
15
  def self.build(listing_ids, mode)
@@ -41,6 +42,11 @@ class ItemBuilder
41
42
  new_param = qty_simple_params(listing)
42
43
  .merge({zilingo_delta_quantity: zilingo_delta_quantity})
43
44
 
45
+ modes[mode].new(new_param).perform
46
+ elsif listing.channel_id == 13
47
+ new_param = qty_simple_params(listing)
48
+ .merge({zalora_reserved_stock: zalora_reserved_stock})
49
+
44
50
  modes[mode].new(new_param).perform
45
51
  else
46
52
  modes[mode].new(qty_simple_params(listing)).perform
@@ -128,6 +134,12 @@ class ItemBuilder
128
134
  ).perform
129
135
  end
130
136
 
137
+ def zalora_reserved_stock
138
+ @zalora_reserved_stock ||= ItemBuilder::ZaloraQuantityService.new(
139
+ listings: listings, skus: skus
140
+ ).perform
141
+ end
142
+
131
143
  def modes
132
144
  {
133
145
  price: ItemBuilder::Modes::PriceService,
@@ -151,6 +163,6 @@ class ItemBuilder
151
163
  def reserved_stocks
152
164
  @reserved_stocks ||= JSON.parse(RestClient.get(
153
165
  "#{order_host}?#{reserved_params}"
154
- ).body) if [3,13].include?(listings[0].channel_id)
166
+ ).body) if [3].include?(listings[0].channel_id)
155
167
  end
156
168
  end
@@ -38,7 +38,7 @@ class ItemBuilder
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
 
@@ -18,6 +18,7 @@ class ItemBuilder
18
18
  attr_reader :variant_listings
19
19
  attr_reader :reserved_stocks
20
20
  attr_reader :zilingo_delta_quantity
21
+ attr_reader :zalora_reserved_stock
21
22
  def initialize(args)
22
23
  @listing = args.fetch(:listing)
23
24
  @wh_spaces = args.fetch(:wh_spaces, [])
@@ -29,6 +30,7 @@ class ItemBuilder
29
30
  @variant_listings = args.fetch(:variant_listings, [])
30
31
  @reserved_stocks = args.fetch(:reserved_stocks, [])
31
32
  @zilingo_delta_quantity = args.fetch(:zilingo_delta_quantity, [])
33
+ @zalora_reserved_stock = args.fetch(:zalora_reserved_stock, [])
32
34
  end
33
35
 
34
36
  def base
@@ -29,7 +29,8 @@ class ItemBuilder
29
29
  bundles: bundles, item_bundle_variants: item_bundle_variants,
30
30
  existing_alloc_stocks: existing_alloc_stocks,
31
31
  reserved_stocks: reserved_stocks,
32
- zilingo_delta_quantity: zilingo_delta_quantity
32
+ zilingo_delta_quantity: zilingo_delta_quantity,
33
+ zalora_reserved_stock: zalora_reserved_stock
33
34
  ).to_h
34
35
  end
35
36
 
@@ -24,7 +24,7 @@ class ItemBuilder
24
24
 
25
25
  def to_h
26
26
  {
27
- quantity: qty
27
+ quantity: [qty, 0].sort[1]
28
28
  }
29
29
  end
30
30
 
@@ -49,6 +49,9 @@ class ItemBuilder
49
49
  def reserved_stock
50
50
  if channel_name == 'Zilingo'
51
51
  zilingo_delta_quantity[listing.local_id].to_i
52
+ elsif channel_name == 'Zalora'
53
+ return 0 if zalora_reserved_stock.blank?
54
+ zalora_reserved_stock[listing.local_id].to_i
52
55
  else
53
56
  reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
54
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ItemBuilder
4
- VERSION = '0.1.32'
4
+ VERSION = '0.1.37'
5
5
  end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder/modes.rb'
4
+ class ItemBuilder
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
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.32
4
+ version: 0.1.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - okaaryanata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-01 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/modes/update/zalora_service.rb
145
145
  - lib/item_builder/modes/update_service.rb
146
146
  - lib/item_builder/version.rb
147
+ - lib/item_builder/zalora_quantity_service.rb
147
148
  - lib/item_builder/zilingo_quantity_service.rb
148
149
  homepage:
149
150
  licenses: []