item_builder 0.1.31 → 0.1.36

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: 74e5b0e4f3ee0a2d87e595f5659d70650b00abb1480fe943e1fbb5ccf54237a6
4
- data.tar.gz: 77ddf3ca953ba1628f5e01a0687d0d2609658dcc44d5c829f31ba70a36ce7380
3
+ metadata.gz: 950910a70e41e602df25095660a238c5ee33d9c8b21169686e45e60a4fa20c4e
4
+ data.tar.gz: 57ae5913a690907f317a01a8d37d740165687249d53e4ded6eb0cd19e1665c58
5
5
  SHA512:
6
- metadata.gz: b3fd6fcb694762e46917de1fa61e0104c40d092595886037f171ef91701af2130eb005130f3315915105de049d95d67c4bb16df5c62927a1dc3d63cefa353d0f
7
- data.tar.gz: 41c7495ab40026e6fbcd9a7f8f40c63619de96b78c660fb374e9be4c630edb60a0fc7e6f11429d7fb4997f6b4f2c16ca9946a8b60239dbb1c21f981c2e84e4b3
6
+ metadata.gz: 88c6c7f55bd6a10aeec1c21073883b6f9afbaf94c9992d0be75af4a23d53bf5deff63c60afdc60b73e7a991f1c69768a7753252f9374a4e59450ab7c1755d426
7
+ data.tar.gz: cc0ff00ce0cb0e56c04c1f3ec489ebcb53fd50de7ca726343747dd265425fd388f4eb420bdf9419323cd98f5e42f2dddaf61b098338ab9459a468ef861e47fd5
data/lib/item_builder.rb CHANGED
@@ -6,8 +6,10 @@ require 'item_builder/modes/base_service'
6
6
  require 'item_builder/modes/price_service'
7
7
  require 'item_builder/modes/quantity_service'
8
8
  require 'item_builder/modes/simple_service'
9
+ require 'item_builder/modes/active_service'
9
10
  require 'item_models'
10
11
  require 'item_builder/zilingo_quantity_service'
12
+ require 'item_builder/zalora_quantity_service'
11
13
 
12
14
  class ItemBuilder
13
15
  def self.build(listing_ids, mode)
@@ -27,7 +29,7 @@ class ItemBuilder
27
29
  end
28
30
 
29
31
  def mode_check
30
- if mode == :quantity || mode == :simple
32
+ if mode == :quantity || mode == :simple
31
33
  quantity_simple_mode
32
34
  else
33
35
  default
@@ -40,6 +42,11 @@ class ItemBuilder
40
42
  new_param = qty_simple_params(listing)
41
43
  .merge({zilingo_delta_quantity: zilingo_delta_quantity})
42
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
+
43
50
  modes[mode].new(new_param).perform
44
51
  else
45
52
  modes[mode].new(qty_simple_params(listing)).perform
@@ -59,7 +66,11 @@ class ItemBuilder
59
66
 
60
67
  def default
61
68
  listings.map do |listing|
62
- modes[mode].new(listing: listing).perform
69
+ if listing.channel_id == 2 && mode == :active
70
+ modes[mode].new(qty_simple_params(listing)).perform
71
+ else
72
+ modes[mode].new(listing: listing).perform
73
+ end
63
74
  end
64
75
  end
65
76
 
@@ -123,6 +134,12 @@ class ItemBuilder
123
134
  ).perform
124
135
  end
125
136
 
137
+ def zalora_reserved_stock
138
+ @zalora_reserved_stock ||= ItemBuilder::ZaloraQuantityService.new(
139
+ listings: listings, skus: skus
140
+ ).perform
141
+ end
142
+
126
143
  def modes
127
144
  {
128
145
  price: ItemBuilder::Modes::PriceService,
@@ -146,6 +163,6 @@ class ItemBuilder
146
163
  def reserved_stocks
147
164
  @reserved_stocks ||= JSON.parse(RestClient.get(
148
165
  "#{order_host}?#{reserved_params}"
149
- ).body) if [3,13].include?(listings[0].channel_id)
166
+ ).body) if [3].include?(listings[0].channel_id)
150
167
  end
151
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].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
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'item_builder/modes/quantity_service.rb'
3
4
  require 'item_builder/modes.rb'
4
5
  class ItemBuilder
5
6
  module Modes
@@ -7,7 +8,11 @@ class ItemBuilder
7
8
  include Modes
8
9
 
9
10
  def perform
10
- to_h.merge(base)
11
+ if listing.channel_id == 2
12
+ to_h.merge(base).merge(quantity)
13
+ else
14
+ to_h.merge(base)
15
+ end
11
16
  end
12
17
 
13
18
  def to_h
@@ -17,6 +22,18 @@ class ItemBuilder
17
22
  }
18
23
  end
19
24
 
25
+ def quantity
26
+ QuantityService.new(
27
+ listing: listing, wh_spaces: wh_spaces, variants: variants,
28
+ stock_allocs: stock_allocs, variant_listings: variant_listings,
29
+ bundles: bundles, item_bundle_variants: item_bundle_variants,
30
+ existing_alloc_stocks: existing_alloc_stocks,
31
+ reserved_stocks: reserved_stocks,
32
+ zilingo_delta_quantity: zilingo_delta_quantity,
33
+ zalora_reserved_stock: zalora_reserved_stock
34
+ ).to_h
35
+ end
36
+
20
37
  def active_variant
21
38
  VariantListing
22
39
  .where(local_item_id: listing.local_item_id,
@@ -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.31'
4
+ VERSION = '0.1.36'
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.31
4
+ version: 0.1.36
5
5
  platform: ruby
6
6
  authors:
7
7
  - okaaryanata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-17 00:00:00.000000000 Z
11
+ date: 2021-04-30 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: []
@@ -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