item_builder_mwh 0.1.5 → 0.1.6

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: 7469164bbd0731fce94af0d4f02476b6a49f00bce8e3222e46a103329f6c8941
4
- data.tar.gz: 25caf9664626e962c78c092105ae47ffe976b30e30ae98a0879c36475b34a5d4
3
+ metadata.gz: c514a7575658fabe86a470f41cbb2f35802235c1143ff6baacbba50084b6e31c
4
+ data.tar.gz: 913dc65e2b64637db18ca789f6d4929b22001fce2e01b2ecc79bbf3d0deff07d
5
5
  SHA512:
6
- metadata.gz: b40b11cbd070e1c4ee60e5198df088e487fe4eb9f9ec9fd721ee71b3da032e2e6e05aedd492250b25ed95cb4ab98971a71f2aca6447d08f0ec14212fd23050a1
7
- data.tar.gz: 1fd1eb8f448914ce29019193b814835b97857f30a75fc2da0a213851bd6e841766893d2ca67dfbae8942d54e5945f6e9471a41ba7119f5814b743c791d18eed2
6
+ metadata.gz: 51810b83e87bf09c38f234eaa2071ac23023215d3a232c6a796d8984871edf80395a33f322c830601990d44ee524456ebcf5dd15309695142b0344de5f80f832
7
+ data.tar.gz: 7a6c1f71bd00d768f314ed895ec7770323152bc7ac1567aea9ee022e6948cf565c93adfe95e7ef84d244af5719552f665361727c4baf9fb8960addf3c96a2c70
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ItemBuilderMwh
4
+ module Modes
5
+ module Quantity
6
+ class Base
7
+ attr_reader :listing
8
+ attr_reader :available_quantity
9
+
10
+ def initialize(listing, available_quantity)
11
+ raise 'listing is not set' if listing.nil?
12
+
13
+ @listing = listing
14
+ @available_quantity = available_quantity
15
+ end
16
+
17
+ def order_host
18
+ url = ENV['ORDERS_URL'] || 'orders.forstok.com'
19
+ url + '/api/v2/item_line/reserved_stock'
20
+ end
21
+
22
+ def reserved_params
23
+ "account_id=#{listing.profile_channel_association_id}
24
+ &item_variant_id=#{listing.variant_id}"
25
+ end
26
+
27
+ def reserved_stock
28
+ RestClient.get("#{order_host}?#{reserved_params}")
29
+ rescue RestClient::ExceptionWithResponse => e
30
+ e.response
31
+ end
32
+
33
+ def apigateway_get
34
+ RestClient.get("#{host}?#{params}")
35
+ rescue RestClient::ExceptionWithResponse => e
36
+ e.response
37
+ end
38
+
39
+ def headers
40
+ {
41
+ content_type: :json,
42
+ accept: :json
43
+ }
44
+ end
45
+
46
+ def credential
47
+ account_id = listing.profile_channel_association_id
48
+ host = ENV['CREDENTIAL_URL'] || 'user.forstok.com'
49
+ begin
50
+ RestClient.get("#{host}/credential?account_id=#{account_id}")
51
+ rescue RestClient::ExceptionWithResponse => e
52
+ e.response
53
+ end
54
+ end
55
+
56
+ def data
57
+ {
58
+ "credential": JSON.parse(credential)['credential'],
59
+ "data": request
60
+ }
61
+ end
62
+
63
+ def api_data
64
+ data.to_json
65
+ end
66
+
67
+ def apigateway_post
68
+ RestClient.post(url, api_data, headers)
69
+ rescue RestClient::ExceptionWithResponse => e
70
+ e.response
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder_mwh/modes/quantity/base'
4
+ module ItemBuilderMwh
5
+ module Modes
6
+ module Quantity
7
+ class BlibliService < Base
8
+ def perform
9
+ local_variant
10
+ end
11
+
12
+ def local_variant
13
+ qty = 0
14
+ local_product['value']['items'].each do |item|
15
+ qty = total_quantity(item) if item['itemSku'] == listing.local_id
16
+ end
17
+ qty
18
+ end
19
+
20
+ def total_quantity(item)
21
+ # Make stock 0
22
+ # if local reserved quantity is bigger than available quantity
23
+ if item['reservedStockLevel2'] > available_quantity
24
+ 0
25
+ else
26
+ item['availableStockLevel2'] + item['reservedStockLevel2']
27
+ end
28
+ end
29
+
30
+ # Find local product based on id
31
+ # @return [Hash] Local Blibli product
32
+ def local_product
33
+ @local_product ||= JSON.parse(apigateway_post)
34
+ end
35
+
36
+ private
37
+
38
+ def request
39
+ {
40
+ "gdnSku": listing.local_id
41
+ }
42
+ end
43
+
44
+ def url
45
+ url = ENV['API_GATEWAY_URL'] || 'apigateway.forstok.com'
46
+ url + '/blibli/item'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder_mwh/modes/quantity/base'
4
+ module ItemBuilderMwh
5
+ module Modes
6
+ module Quantity
7
+ class LazadaService < Base
8
+ def perform
9
+ available_quantity + reserved_stock.to_i
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder_mwh/modes/quantity/base'
4
+ module ItemBuilderMwh
5
+ module Modes
6
+ module Quantity
7
+ class ShopeeService < Base
8
+ def perform
9
+ available_quantity + reserved_stock.to_i
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder_mwh/modes/quantity/base'
4
+ module ItemBuilderMwh
5
+ module Modes
6
+ module Quantity
7
+ class ZaloraService < Base
8
+ def perform
9
+ available_quantity + reserved_stock.to_i
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,11 +2,23 @@
2
2
 
3
3
  require 'warehouse_models'
4
4
  require 'item_builder_mwh/modes.rb'
5
+ require 'item_builder_mwh/modes/quantity/base'
6
+ require 'item_builder_mwh/modes/quantity/lazada_service'
7
+ require 'item_builder_mwh/modes/quantity/blibli_service'
8
+ require 'item_builder_mwh/modes/quantity/shopee_service'
9
+ require 'item_builder_mwh/modes/quantity/zalora_service'
5
10
  module ItemBuilderMwh
6
11
  module Modes
7
12
  class QuantityService
8
13
  include Modes
9
14
 
15
+ QUANTITY_CHANNEL = {}.tap do |hash|
16
+ hash[3] = :Lazada
17
+ hash[9] = :Blibli
18
+ hash[12] = :Shopee
19
+ hash[13] = :Zalora
20
+ end.freeze
21
+
10
22
  def perform
11
23
  base.merge!(
12
24
  warehouse: warehouses
@@ -15,12 +27,30 @@ module ItemBuilderMwh
15
27
 
16
28
  def to_h(warehouse_space)
17
29
  {
18
- quantity: warehouse_space.quantity,
30
+ quantity: qty(warehouse_space.quantity),
19
31
  warehouse_id: wh_mapping(
20
32
  warehouse_space.warehouse_id
21
33
  )
22
34
  }
23
35
  end
36
+
37
+ def qty(available_qty)
38
+ if channel_name.empty?
39
+ available_qty
40
+ else
41
+ qty_channel(available_qty)
42
+ end
43
+ end
44
+
45
+ def qty_channel(available_qty)
46
+ class_name = "ItemBuilder::Modes::Quantity::#{channel_name}Service"
47
+ qty_channel_service = class_name.constantize
48
+ qty_channel_service.new(listing, available_qty).perform
49
+ end
50
+
51
+ def channel_name
52
+ QUANTITY_CHANNEL[listing.channel_id].to_s
53
+ end
24
54
  end
25
55
  end
26
56
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ItemBuilderMwh
4
- VERSION = '0.1.5'
4
+ VERSION = '0.1.6'
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.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Ivander
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-16 00:00:00.000000000 Z
11
+ date: 2020-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.0.7
89
+ version: 0.0.11
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.0.7
96
+ version: 0.0.11
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: warehouse_models
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +120,11 @@ files:
120
120
  - lib/item_builder_mwh/modes/active_service.rb
121
121
  - lib/item_builder_mwh/modes/base_service.rb
122
122
  - lib/item_builder_mwh/modes/price_service.rb
123
+ - lib/item_builder_mwh/modes/quantity/base.rb
124
+ - lib/item_builder_mwh/modes/quantity/blibli_service.rb
125
+ - lib/item_builder_mwh/modes/quantity/lazada_service.rb
126
+ - lib/item_builder_mwh/modes/quantity/shopee_service.rb
127
+ - lib/item_builder_mwh/modes/quantity/zalora_service.rb
123
128
  - lib/item_builder_mwh/modes/quantity_service.rb
124
129
  - lib/item_builder_mwh/modes/simple_service.rb
125
130
  - lib/item_builder_mwh/version.rb