item_builder 0.1.14 → 0.1.19
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.rb +94 -52
- data/lib/item_builder/get_quantity_service.rb +30 -33
- data/lib/item_builder/modes.rb +11 -3
- data/lib/item_builder/modes/active_service.rb +1 -1
- data/lib/item_builder/modes/base_service.rb +1 -1
- data/lib/item_builder/modes/price/base.rb +1 -1
- data/lib/item_builder/modes/price/blibli_service.rb +1 -1
- data/lib/item_builder/modes/price/bukalapak_service.rb +1 -1
- data/lib/item_builder/modes/price/jd_service.rb +1 -1
- data/lib/item_builder/modes/price/sale_price_policy.rb +1 -1
- data/lib/item_builder/modes/price/shopify_service.rb +1 -1
- data/lib/item_builder/modes/price/zalora_service.rb +1 -1
- data/lib/item_builder/modes/price_service.rb +1 -1
- data/lib/item_builder/modes/quantity/base.rb +2 -12
- data/lib/item_builder/modes/quantity/blibli_service.rb +1 -1
- data/lib/item_builder/modes/quantity/lazada_service.rb +1 -1
- data/lib/item_builder/modes/quantity/zalora_service.rb +1 -1
- data/lib/item_builder/modes/quantity_service.rb +21 -4
- data/lib/item_builder/modes/simple_service.rb +1 -1
- data/lib/item_builder/modes/update/base.rb +1 -1
- data/lib/item_builder/modes/update/blibli_service.rb +1 -1
- data/lib/item_builder/modes/update/bukalapak_service.rb +1 -1
- data/lib/item_builder/modes/update/jd_service.rb +1 -1
- data/lib/item_builder/modes/update/lazada_service.rb +1 -1
- data/lib/item_builder/modes/update/shopify_service.rb +1 -1
- data/lib/item_builder/modes/update/tokopedia_service.rb +1 -1
- data/lib/item_builder/modes/update/zalora_service.rb +1 -1
- data/lib/item_builder/modes/update_service.rb +1 -1
- data/lib/item_builder/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dea667fd969ce159a690f79ab45f3dd0ebe0994bb88364d43ec37a9b2a18a40d
|
4
|
+
data.tar.gz: 13aa7b1c835273396ab747def854d80cba132133b6af0846204d076a8083a343
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 982f5e5de1f4183151b0d1daada4c9fc3cc905f98db69195853fe16f59d65740f146446eec243aba23a2035362ed49ab029218e5ed5d2b0539c212fa8b97a433
|
7
|
+
data.tar.gz: d4a60767cff226b0403d2c645b10cf1857bdf5d5e65b9b59e30a6379d3a6e3ea9f6f243095c7dcbf779a7c5fe68ffbf469f60e35362d2855818c04f71c5da31f
|
data/lib/item_builder.rb
CHANGED
@@ -8,68 +8,110 @@ require 'item_builder/modes/quantity_service'
|
|
8
8
|
require 'item_builder/modes/simple_service'
|
9
9
|
require 'item_models'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
attr_reader :mode
|
16
|
-
attr_reader :wh_spaces
|
17
|
-
attr_reader :variants
|
18
|
-
attr_reader :variant_ids
|
19
|
-
def build(listing_ids, mode)
|
20
|
-
@listing_ids = listing_ids
|
21
|
-
@mode = mode
|
22
|
-
mode_check
|
23
|
-
end
|
11
|
+
class ItemBuilder
|
12
|
+
def self.build(listing_ids, mode)
|
13
|
+
new(listing_ids, mode).mode_check
|
14
|
+
end
|
24
15
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
16
|
+
attr_reader :listing_ids
|
17
|
+
attr_reader :listings
|
18
|
+
attr_reader :mode
|
19
|
+
attr_reader :wh_spaces
|
20
|
+
attr_reader :variants
|
21
|
+
attr_reader :variant_ids
|
32
22
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
wh_spaces: wh_spaces,
|
38
|
-
variants: variants
|
39
|
-
).perform
|
40
|
-
end
|
41
|
-
end
|
23
|
+
def initialize(listing_ids, mode)
|
24
|
+
@listing_ids = listing_ids
|
25
|
+
@mode = mode
|
26
|
+
end
|
42
27
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
28
|
+
def mode_check
|
29
|
+
if mode == :quantity
|
30
|
+
quantity_mode
|
31
|
+
else
|
32
|
+
default
|
47
33
|
end
|
34
|
+
end
|
48
35
|
|
49
|
-
|
50
|
-
|
36
|
+
def quantity_mode
|
37
|
+
listings.map do |listing|
|
38
|
+
modes[mode].new(qty_params(listing)).perform
|
51
39
|
end
|
40
|
+
end
|
52
41
|
|
53
|
-
|
54
|
-
|
55
|
-
|
42
|
+
def qty_params(listing)
|
43
|
+
{
|
44
|
+
listing: listing, wh_spaces: wh_spaces,
|
45
|
+
variants: variants, stock_allocs: stock_allocs,
|
46
|
+
bundles: bundles, item_bundle_variants: item_bundle_variants,
|
47
|
+
existing_alloc_stocks: existing_alloc_stocks
|
48
|
+
}
|
49
|
+
end
|
56
50
|
|
57
|
-
|
58
|
-
|
51
|
+
def default
|
52
|
+
listings.map do |listing|
|
53
|
+
modes[mode].new(listing: listing).perform
|
59
54
|
end
|
55
|
+
end
|
60
56
|
|
61
|
-
|
62
|
-
|
63
|
-
|
57
|
+
def existing_alloc_stocks
|
58
|
+
@existing_alloc_stocks ||= VariantListingStockAllocation.where(
|
59
|
+
variant_association_id: vl_ids
|
60
|
+
).where('ADDTIME(end_at, "07:00") >= NOW()')
|
61
|
+
end
|
64
62
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
def vl_ids
|
64
|
+
@vl_ids ||= variant_listings.map(&:id).uniq
|
65
|
+
end
|
66
|
+
|
67
|
+
def variant_listings
|
68
|
+
@variant_listings ||= VariantListing.where(variant_id: variant_ids)
|
69
|
+
end
|
70
|
+
|
71
|
+
def item_bundle_variants
|
72
|
+
@item_bundle_variants ||= BundleVariant.where(
|
73
|
+
bundle_id: bundle_ids,
|
74
|
+
channel_id: listings[0].channel_id
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
def bundle_ids
|
79
|
+
@bundle_ids ||= bundles.map(&:id).uniq
|
80
|
+
end
|
81
|
+
|
82
|
+
def bundles
|
83
|
+
@bundles ||= Bundle.where(variant_id: variant_ids).group(:variant_id)
|
84
|
+
end
|
85
|
+
|
86
|
+
def stock_allocs
|
87
|
+
@stock_allocs ||= VariantListingStockAllocation.where(
|
88
|
+
variant_association_id: variant_ids
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
def wh_spaces
|
93
|
+
@wh_spaces ||= WarehouseSpace.where(item_variant_id: variant_ids)
|
94
|
+
end
|
95
|
+
|
96
|
+
def variants
|
97
|
+
@variants ||= Variant.where(id: variant_ids)
|
98
|
+
end
|
99
|
+
|
100
|
+
def variant_ids
|
101
|
+
@variant_ids ||= listings.map(&:variant_id).uniq
|
102
|
+
end
|
103
|
+
|
104
|
+
def listings
|
105
|
+
@listings ||= VariantListing.where(id: listing_ids)
|
106
|
+
end
|
107
|
+
|
108
|
+
def modes
|
109
|
+
{
|
110
|
+
price: ItemBuilder::Modes::PriceService,
|
111
|
+
quantity: ItemBuilder::Modes::QuantityService,
|
112
|
+
simple: ItemBuilder::Modes::SimpleService,
|
113
|
+
active: ItemBuilder::Modes::ActiveService,
|
114
|
+
update: ItemBuilder::Modes::UpdateService
|
115
|
+
}
|
74
116
|
end
|
75
117
|
end
|
@@ -2,13 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'warehouse_models'
|
4
4
|
require 'item_builder/modes.rb'
|
5
|
-
|
5
|
+
class ItemBuilder
|
6
6
|
class GetQuantityService
|
7
7
|
attr_reader :listing, :wh_sp, :variant
|
8
8
|
def initialize(args)
|
9
9
|
@listing = args.fetch(:listing)
|
10
10
|
@wh_sp = args.fetch(:wh_sp)
|
11
11
|
@variant = args.fetch(:variant)
|
12
|
+
@stock_alloc = args.fetch(:stock_alloc)
|
13
|
+
@bundle_variants = args.fetch(:bundle_variants)
|
14
|
+
@existing_allocated_stock = args.fetch(:existing_allocated_stock)
|
12
15
|
end
|
13
16
|
|
14
17
|
def perform
|
@@ -18,7 +21,7 @@ module ItemBuilder
|
|
18
21
|
# yang masuk di kondisi ini,
|
19
22
|
# artinya akun tersebut ada allocated stock yang aktif
|
20
23
|
allocated_stock
|
21
|
-
elsif existing_allocated_stock.present?
|
24
|
+
elsif @existing_allocated_stock.present?
|
22
25
|
# yang masuk di kondisi ini,
|
23
26
|
# artinya akun tersebut tidak ada allocated stock yang aktif,
|
24
27
|
# namun ada allocated stock yg aktif dari channel lain
|
@@ -35,25 +38,21 @@ module ItemBuilder
|
|
35
38
|
def check_consignment_variant?
|
36
39
|
listing.consignment? ||
|
37
40
|
(
|
38
|
-
!listing.active? && listing.channel_id
|
41
|
+
!listing.active? && [11, 12, 15].include?(listing.channel_id)
|
39
42
|
)
|
40
43
|
end
|
41
44
|
|
42
45
|
def allocated_stock_active?
|
43
|
-
listing.present? && stock_alloc.present? && allocated_start_end?
|
46
|
+
listing.present? && @stock_alloc.present? && allocated_start_end?
|
44
47
|
end
|
45
48
|
|
46
49
|
def allocated_start_end?
|
47
|
-
stock_alloc.start_at.beginning_of_day <= Time.now &&
|
48
|
-
stock_alloc.end_at.end_of_day >= Time.now
|
50
|
+
@stock_alloc.start_at.beginning_of_day <= Time.now &&
|
51
|
+
@stock_alloc.end_at.end_of_day >= Time.now
|
49
52
|
end
|
50
53
|
|
51
54
|
def allocated_stock
|
52
|
-
stock_alloc.quantity.to_i - one_alloc_rsvd_stock(stock_alloc).to_i
|
53
|
-
end
|
54
|
-
|
55
|
-
def stock_alloc
|
56
|
-
@stock_alloc ||= listing.variant_listing_stock_allocation
|
55
|
+
@stock_alloc.quantity.to_i - one_alloc_rsvd_stock(@stock_alloc).to_i
|
57
56
|
end
|
58
57
|
|
59
58
|
# warehouse_stock fungsi untuk mendapatkan available quantity
|
@@ -76,41 +75,41 @@ module ItemBuilder
|
|
76
75
|
|
77
76
|
def qty_bundle
|
78
77
|
# Quantity for bundle config
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
78
|
+
if @bundle_variants.present?
|
79
|
+
qty_list = []
|
80
|
+
@bundle_variants.each do |bvr|
|
81
|
+
qty = wh_sp.select {|ws| s.variant_id == bvr.variant_id }.first.quantity
|
82
|
+
qty ||= 0
|
83
|
+
qty = qty / bvr.unit
|
84
|
+
qty_list.push(qty)
|
85
|
+
end
|
86
|
+
[qty_list.min, 0].sort[1]
|
87
|
+
else
|
88
|
+
qty_default
|
85
89
|
end
|
86
|
-
[qty_list.min, 0].sort[1]
|
87
90
|
end
|
88
91
|
|
89
|
-
def
|
90
|
-
|
91
|
-
'variant_id = ?', variant.id
|
92
|
-
).first.bundle_variants.where(channel_id: listing.channel_id)
|
92
|
+
def wh_sp
|
93
|
+
@wh_sp ||= WarehouseSpace.where(item_variant_id: variant_ids)
|
93
94
|
end
|
94
95
|
|
95
|
-
def
|
96
|
-
@
|
96
|
+
def variant_ids
|
97
|
+
@variant_ids ||= @bundle_variants.map(&:variant_id).uniq
|
97
98
|
end
|
98
99
|
|
99
|
-
def
|
100
|
-
|
101
|
-
variant_association_id: variant.variant_listings.pluck(:id)
|
102
|
-
).where('ADDTIME(end_at, "07:00") >= NOW()')
|
100
|
+
def listing_wh_sp_quantity
|
101
|
+
@listing_wh_sp_quantity ||= wh_sp&.quantity || 0
|
103
102
|
end
|
104
103
|
|
105
104
|
def count_existing_alloc_stock
|
106
|
-
return 0 if existing_allocated_stock.blank?
|
105
|
+
return 0 if @existing_allocated_stock.blank?
|
107
106
|
|
108
|
-
existing_allocated_stock.sum(:quantity)
|
107
|
+
@existing_allocated_stock.sum(:quantity)
|
109
108
|
end
|
110
109
|
|
111
110
|
def count_alloc_rsvd_stock
|
112
111
|
stock = 0
|
113
|
-
existing_allocated_stock.each do |allocated_stock|
|
112
|
+
@existing_allocated_stock.each do |allocated_stock|
|
114
113
|
stock += one_alloc_rsvd_stock(allocated_stock).to_i
|
115
114
|
end
|
116
115
|
stock
|
@@ -131,8 +130,6 @@ module ItemBuilder
|
|
131
130
|
# allocated reserved stock
|
132
131
|
def one_alloc_rsvd_stock(allocated_stock)
|
133
132
|
RestClient.get("#{host}?#{params(allocated_stock)}")
|
134
|
-
rescue RestClient::ExceptionWithResponse => e
|
135
|
-
e.response
|
136
133
|
end
|
137
134
|
end
|
138
135
|
end
|
data/lib/item_builder/modes.rb
CHANGED
@@ -6,15 +6,23 @@ require 'item_builder/modes/quantity_service'
|
|
6
6
|
require 'item_builder/modes/simple_service'
|
7
7
|
require 'item_builder/modes/active_service'
|
8
8
|
require 'item_builder/modes/update_service'
|
9
|
-
|
9
|
+
class ItemBuilder
|
10
10
|
module Modes
|
11
11
|
attr_reader :listing
|
12
12
|
attr_reader :wh_spaces
|
13
13
|
attr_reader :variants
|
14
|
+
attr_reader :stock_allocs
|
15
|
+
attr_reader :bundles
|
16
|
+
attr_reader :item_bundle_variants
|
17
|
+
attr_reader :existing_alloc_stocks
|
14
18
|
def initialize(args)
|
15
19
|
@listing = args.fetch(:listing)
|
16
|
-
@wh_spaces = args.fetch(:wh_spaces
|
17
|
-
@variants = args.fetch(:variants
|
20
|
+
@wh_spaces = args.fetch(:wh_spaces, [])
|
21
|
+
@variants = args.fetch(:variants, [])
|
22
|
+
@stock_allocs = args.fetch(:stock_allocs, [])
|
23
|
+
@bundles = args.fetch(:bundles, [])
|
24
|
+
@item_bundle_variants = args.fetch(:item_bundle_variants, [])
|
25
|
+
@existing_alloc_stocks = args.fetch(:existing_alloc_stocks, [])
|
18
26
|
end
|
19
27
|
|
20
28
|
def base
|
@@ -6,7 +6,7 @@ require 'item_builder/modes/price/bukalapak_service'
|
|
6
6
|
require 'item_builder/modes/price/zalora_service'
|
7
7
|
require 'item_builder/modes/price/shopify_service'
|
8
8
|
require 'item_builder/modes/price/jd_service'
|
9
|
-
|
9
|
+
class ItemBuilder
|
10
10
|
module Modes
|
11
11
|
class PriceService
|
12
12
|
include Modes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
class ItemBuilder
|
4
4
|
module Modes
|
5
5
|
module Quantity
|
6
6
|
class Base
|
@@ -26,14 +26,10 @@ module ItemBuilder
|
|
26
26
|
|
27
27
|
def reserved_stock
|
28
28
|
RestClient.get("#{order_host}?#{reserved_params}")
|
29
|
-
rescue RestClient::ExceptionWithResponse => e
|
30
|
-
e.response
|
31
29
|
end
|
32
30
|
|
33
31
|
def apigateway_get
|
34
32
|
RestClient.get("#{host}?#{params}")
|
35
|
-
rescue RestClient::ExceptionWithResponse => e
|
36
|
-
e.response
|
37
33
|
end
|
38
34
|
|
39
35
|
def headers
|
@@ -46,11 +42,7 @@ module ItemBuilder
|
|
46
42
|
def credential
|
47
43
|
account_id = listing.profile_channel_association_id
|
48
44
|
host = ENV['CREDENTIAL_URL'] || 'user.forstok.com'
|
49
|
-
|
50
|
-
RestClient.get("#{host}/credential?account_id=#{account_id}")
|
51
|
-
rescue RestClient::ExceptionWithResponse => e
|
52
|
-
e.response
|
53
|
-
end
|
45
|
+
RestClient.get("#{host}/credential?account_id=#{account_id}")
|
54
46
|
end
|
55
47
|
|
56
48
|
def data
|
@@ -66,8 +58,6 @@ module ItemBuilder
|
|
66
58
|
|
67
59
|
def apigateway_post
|
68
60
|
RestClient.post(url, api_data, headers)
|
69
|
-
rescue RestClient::ExceptionWithResponse => e
|
70
|
-
e.response
|
71
61
|
end
|
72
62
|
end
|
73
63
|
end
|
@@ -7,7 +7,7 @@ require 'item_builder/modes/quantity/base'
|
|
7
7
|
require 'item_builder/modes/quantity/lazada_service'
|
8
8
|
require 'item_builder/modes/quantity/blibli_service'
|
9
9
|
require 'item_builder/modes/quantity/zalora_service'
|
10
|
-
|
10
|
+
class ItemBuilder
|
11
11
|
module Modes
|
12
12
|
class QuantityService
|
13
13
|
include Modes
|
@@ -48,12 +48,29 @@ module ItemBuilder
|
|
48
48
|
|
49
49
|
def available_quantity
|
50
50
|
ItemBuilder::GetQuantityService.new(
|
51
|
-
listing: listing,
|
52
|
-
|
53
|
-
|
51
|
+
listing: listing, variant: variant,
|
52
|
+
wh_sp: warehouse, stock_alloc: stock_alloc,
|
53
|
+
bundle_variants: bundle_variants,
|
54
|
+
existing_allocated_stock: existing_allocated_stock
|
54
55
|
).perform
|
55
56
|
end
|
56
57
|
|
58
|
+
def existing_allocated_stock
|
59
|
+
existing_alloc_stocks.select {|eas| eas.variant_association_id == listing.id }
|
60
|
+
end
|
61
|
+
|
62
|
+
def bundle_variants
|
63
|
+
item_bundle_variants.select {|ibv| ibv.bundle_id == bundle.id }
|
64
|
+
end
|
65
|
+
|
66
|
+
def bundle
|
67
|
+
bundles.select {|b| b.variant_id == listing.variant_id }.first
|
68
|
+
end
|
69
|
+
|
70
|
+
def stock_alloc
|
71
|
+
stock_allocs.select {|sa| sa.variant_association_id == listing.id }.first
|
72
|
+
end
|
73
|
+
|
57
74
|
def warehouse
|
58
75
|
wh_spaces.select {|ws| ws.item_variant_id == listing.variant_id }.first
|
59
76
|
end
|
@@ -8,7 +8,7 @@ require 'item_builder/modes/update/zalora_service'
|
|
8
8
|
require 'item_builder/modes/update/shopify_service'
|
9
9
|
require 'item_builder/modes/update/jd_service'
|
10
10
|
require 'item_builder/modes/update/tokopedia_service'
|
11
|
-
|
11
|
+
class ItemBuilder
|
12
12
|
module Modes
|
13
13
|
class UpdateService
|
14
14
|
include Modes
|
data/lib/item_builder/version.rb
CHANGED
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.
|
4
|
+
version: 0.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- okaaryanata
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|