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 +4 -4
- data/lib/item_builder_mwh/modes/quantity/base.rb +75 -0
- data/lib/item_builder_mwh/modes/quantity/blibli_service.rb +51 -0
- data/lib/item_builder_mwh/modes/quantity/lazada_service.rb +14 -0
- data/lib/item_builder_mwh/modes/quantity/shopee_service.rb +14 -0
- data/lib/item_builder_mwh/modes/quantity/zalora_service.rb +14 -0
- data/lib/item_builder_mwh/modes/quantity_service.rb +31 -1
- data/lib/item_builder_mwh/version.rb +1 -1
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c514a7575658fabe86a470f41cbb2f35802235c1143ff6baacbba50084b6e31c
|
4
|
+
data.tar.gz: 913dc65e2b64637db18ca789f6d4929b22001fce2e01b2ecc79bbf3d0deff07d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
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-
|
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.
|
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.
|
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
|