item_builder_mwh 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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