item_builder_mwh 0.1.6 → 0.1.11
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.rb +116 -14
- data/lib/item_builder_mwh/get_quantity_service.rb +132 -0
- data/lib/item_builder_mwh/modes.rb +47 -1
- data/lib/item_builder_mwh/modes/active_service.rb +1 -1
- data/lib/item_builder_mwh/modes/base_service.rb +1 -1
- data/lib/item_builder_mwh/modes/price/base.rb +26 -0
- data/lib/item_builder_mwh/modes/price/blibli_service.rb +27 -0
- data/lib/item_builder_mwh/modes/price/bukalapak_service.rb +61 -0
- data/lib/item_builder_mwh/modes/price/jd_service.rb +31 -0
- data/lib/item_builder_mwh/modes/price/sale_price_policy.rb +40 -0
- data/lib/item_builder_mwh/modes/price/shopify_service.rb +28 -0
- data/lib/item_builder_mwh/modes/price/zalora_service.rb +27 -0
- data/lib/item_builder_mwh/modes/price_service.rb +45 -5
- data/lib/item_builder_mwh/modes/quantity/base.rb +4 -58
- data/lib/item_builder_mwh/modes/quantity/lazada_service.rb +1 -1
- data/lib/item_builder_mwh/modes/quantity/zalora_service.rb +1 -1
- data/lib/item_builder_mwh/modes/quantity_service.rb +21 -11
- data/lib/item_builder_mwh/modes/simple/base.rb +74 -0
- data/lib/item_builder_mwh/modes/{quantity → simple}/blibli_service.rb +19 -4
- data/lib/item_builder_mwh/modes/simple/bukalapak_service.rb +69 -0
- data/lib/item_builder_mwh/modes/simple/jd_service.rb +35 -0
- data/lib/item_builder_mwh/modes/simple/lazada_service.rb +25 -0
- data/lib/item_builder_mwh/modes/simple/sale_price_policy.rb +39 -0
- data/lib/item_builder_mwh/modes/simple/shopee_service.rb +25 -0
- data/lib/item_builder_mwh/modes/simple/shopify_service.rb +31 -0
- data/lib/item_builder_mwh/modes/simple/zalora_service.rb +31 -0
- data/lib/item_builder_mwh/modes/simple_service.rb +93 -8
- data/lib/item_builder_mwh/version.rb +2 -2
- metadata +23 -8
- data/lib/item_builder_mwh/modes/quantity/shopee_service.rb +0 -14
@@ -1,12 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
5
7
|
module Modes
|
6
|
-
module
|
8
|
+
module Simple
|
7
9
|
class BlibliService < Base
|
8
10
|
def perform
|
9
|
-
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: sale_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: local_variant,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
10
21
|
end
|
11
22
|
|
12
23
|
def local_variant
|
@@ -45,6 +56,10 @@ module ItemBuilderMwh
|
|
45
56
|
url = ENV['API_GATEWAY_URL'] || 'apigateway.forstok.com'
|
46
57
|
url + '/blibli/item'
|
47
58
|
end
|
59
|
+
|
60
|
+
def sale_price
|
61
|
+
sale_price_policy.on_sale? ? listing.sale_price : listing.price
|
62
|
+
end
|
48
63
|
end
|
49
64
|
end
|
50
65
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class BukalapakService < Base
|
10
|
+
def perform
|
11
|
+
if listing.sale_price.nil?
|
12
|
+
bukalapak_price
|
13
|
+
else
|
14
|
+
deal
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def bukalapak_price
|
19
|
+
{
|
20
|
+
price: listing.price,
|
21
|
+
sale_price: listing.sale_price,
|
22
|
+
sale_start_at: listing.sale_start_at,
|
23
|
+
sale_end_at: listing.sale_end_at,
|
24
|
+
quantity: available_quantity,
|
25
|
+
warehouse_id: wh_mapping(
|
26
|
+
warehouse_space.warehouse_id
|
27
|
+
)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def deal
|
32
|
+
{
|
33
|
+
percentage: deal_percentage,
|
34
|
+
sale_start_at: sale_start_at,
|
35
|
+
sale_end_at: sale_end_at,
|
36
|
+
price: listing.price,
|
37
|
+
sale_price: listing.sale_price,
|
38
|
+
quantity: available_quantity,
|
39
|
+
warehouse_id: wh_mapping(
|
40
|
+
warehouse_space.warehouse_id
|
41
|
+
)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def deal_percentage
|
46
|
+
price = listing.price.to_f
|
47
|
+
sale_price = listing.sale_price.to_f
|
48
|
+
100 - (sale_price / price * 100)
|
49
|
+
end
|
50
|
+
|
51
|
+
def sale_start_at
|
52
|
+
return DateTime.now if listing.sale_start_at.nil?
|
53
|
+
return DateTime.now if listing.sale_start_at < DateTime.now
|
54
|
+
|
55
|
+
listing.sale_start_at
|
56
|
+
end
|
57
|
+
|
58
|
+
def sale_end_at
|
59
|
+
month_later = DateTime.now + 1.month
|
60
|
+
return month_later if listing.sale_end_at.nil?
|
61
|
+
return month_later if listing.sale_end_at > month_later
|
62
|
+
return month_later if listing.sale_end_at < DateTime.now
|
63
|
+
|
64
|
+
listing.sale_end_at
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class JdService < Base
|
10
|
+
def perform
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: jd_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: available_quantity,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def jd_price
|
24
|
+
increment_price =
|
25
|
+
if (listing.price % 1000).positive?
|
26
|
+
1000
|
27
|
+
else
|
28
|
+
0
|
29
|
+
end
|
30
|
+
(listing.price.to_i / 1000) * 1000 + increment_price
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class LazadaService < Base
|
10
|
+
def perform
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: listing.sale_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: available_quantity + reserved_stock.to_i,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes/simple_service'
|
5
|
+
class ItemBuilderMwh
|
6
|
+
module Modes
|
7
|
+
module Simple
|
8
|
+
class SalePricePolicy
|
9
|
+
include Modes
|
10
|
+
def sale_price
|
11
|
+
# has sale price but no sale date defined
|
12
|
+
# then push sale price immediately
|
13
|
+
# assuming it starts today and no end date specified
|
14
|
+
return listing.sale_price if sale_price? && !sale_date?
|
15
|
+
|
16
|
+
# has sale price and today is on sale then push sale price immediately
|
17
|
+
listing.sale_price if sale_price? && on_sale?
|
18
|
+
# don't push / don't return anything if 2 rules above unfulfilled
|
19
|
+
end
|
20
|
+
|
21
|
+
def sale_price?
|
22
|
+
listing.sale_price
|
23
|
+
end
|
24
|
+
|
25
|
+
def sale_date?
|
26
|
+
listing.sale_start_at && listing.sale_end_at
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_sale?
|
30
|
+
return false unless sale_price?
|
31
|
+
|
32
|
+
sale_start_at = listing.sale_start_at || DateTime.now
|
33
|
+
sale_end_at = listing.sale_end_at || DateTime.now + 1_000_000.years
|
34
|
+
sale_start_at <= DateTime.now && sale_end_at >= DateTime.now
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class ShopeeService < Base
|
10
|
+
def perform
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: listing.sale_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: available_quantity,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class ShopifyService < Base
|
10
|
+
def perform
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: sale_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: available_quantity,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def sale_price
|
26
|
+
sale_price_policy.on_sale? ? listing.sale_price : listing.price
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'item_builder_mwh/modes.rb'
|
5
|
+
require 'item_builder_mwh/modes/simple/base'
|
6
|
+
class ItemBuilderMwh
|
7
|
+
module Modes
|
8
|
+
module Simple
|
9
|
+
class ZaloraService < Base
|
10
|
+
def perform
|
11
|
+
{
|
12
|
+
price: listing.price,
|
13
|
+
sale_price: sale_price,
|
14
|
+
sale_start_at: listing.sale_start_at,
|
15
|
+
sale_end_at: listing.sale_end_at,
|
16
|
+
quantity: available_quantity + reserved_stock.to_i,
|
17
|
+
warehouse_id: wh_mapping(
|
18
|
+
warehouse_space.warehouse_id
|
19
|
+
)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def sale_price
|
26
|
+
sale_price_policy.on_sale? ? listing.sale_price : listing.price
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,13 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'item_builder_mwh/modes/price_service.rb'
|
3
|
+
require 'warehouse_models'
|
5
4
|
require 'item_builder_mwh/modes.rb'
|
6
|
-
|
5
|
+
require 'item_builder_mwh/modes/simple/blibli_service'
|
6
|
+
require 'item_builder_mwh/modes/simple/bukalapak_service'
|
7
|
+
require 'item_builder_mwh/modes/simple/zalora_service'
|
8
|
+
require 'item_builder_mwh/modes/simple/shopify_service'
|
9
|
+
require 'item_builder_mwh/modes/simple/jd_service'
|
10
|
+
require 'item_builder_mwh/modes/simple/lazada_service'
|
11
|
+
require 'item_builder_mwh/modes/simple/shopee_service'
|
12
|
+
class ItemBuilderMwh
|
7
13
|
module Modes
|
8
14
|
class SimpleService
|
9
15
|
include Modes
|
10
16
|
|
17
|
+
QUANTITY_CHANNEL = {}.tap do |hash|
|
18
|
+
hash[3] = :Lazada
|
19
|
+
hash[13] = :Zalora
|
20
|
+
end.freeze
|
21
|
+
|
22
|
+
PRICE_CHANNEL = {}.tap do |hash|
|
23
|
+
hash[2] = :Shopify
|
24
|
+
hash[9] = :Blibli
|
25
|
+
hash[11] = :Bukalapak
|
26
|
+
hash[13] = :Zalora
|
27
|
+
hash[16] = :Jd
|
28
|
+
end.freeze
|
29
|
+
|
11
30
|
def perform
|
12
31
|
base.merge!(
|
13
32
|
warehouse: warehouses
|
@@ -15,17 +34,83 @@ module ItemBuilderMwh
|
|
15
34
|
end
|
16
35
|
|
17
36
|
def to_h(warehouse_space)
|
37
|
+
warehouse_ids(warehouse_space).merge(
|
38
|
+
simple(warehouse_space)
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def warehouse_ids(warehouse_space)
|
18
43
|
{
|
19
|
-
quantity: warehouse_space.quantity,
|
20
|
-
price: listing.price,
|
21
|
-
sale_price: listing.sale_price,
|
22
|
-
sale_start_at: listing.sale_start_at,
|
23
|
-
sale_end_at: listing.sale_end_at,
|
24
44
|
warehouse_id: wh_mapping(
|
25
45
|
warehouse_space.warehouse_id
|
26
46
|
)
|
27
47
|
}
|
28
48
|
end
|
49
|
+
|
50
|
+
def simple(warehouse_space)
|
51
|
+
qty = warehouse_space.quantity
|
52
|
+
qty(qty).merge(
|
53
|
+
price
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
def qty(qty)
|
58
|
+
if quantity_name.empty?
|
59
|
+
{
|
60
|
+
quantity: available_quantity(qty)
|
61
|
+
}
|
62
|
+
else
|
63
|
+
{
|
64
|
+
quantity: qty_channel(qty)
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def price
|
70
|
+
if price_name.empty?
|
71
|
+
{
|
72
|
+
price: listing.price,
|
73
|
+
sale_price: listing.sale_price,
|
74
|
+
sale_start_at: listing.sale_start_at,
|
75
|
+
sale_end_at: listing.sale_end_at
|
76
|
+
}
|
77
|
+
else
|
78
|
+
price_channel
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def price_channel
|
83
|
+
class_name = "ItemBuilderMwh::Modes::Price::#{price_name}Service"
|
84
|
+
simple_channel_service = class_name.constantize
|
85
|
+
simple_channel_service.new(listing).perform
|
86
|
+
end
|
87
|
+
|
88
|
+
def qty_channel(qty)
|
89
|
+
class_name = "ItemBuilderMwh::Modes::Quantity::#{quantity_name}Service"
|
90
|
+
qty_channel_service = class_name.constantize
|
91
|
+
qty_channel_service.new(listing, available_quantity(qty), reserved_stock).perform
|
92
|
+
end
|
93
|
+
|
94
|
+
def reserved_stock
|
95
|
+
reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
|
96
|
+
end
|
97
|
+
|
98
|
+
def available_quantity(qty)
|
99
|
+
ItemBuilderMwh::GetQuantityService.new(
|
100
|
+
listing: listing, stock_alloc: stock_alloc,
|
101
|
+
variant: variant, bundle_variants: bundle_variants,
|
102
|
+
existing_allocated_stock: existing_allocated_stock,
|
103
|
+
listing_wh_sp_quantity: qty
|
104
|
+
).perform
|
105
|
+
end
|
106
|
+
|
107
|
+
def price_name
|
108
|
+
PRICE_CHANNEL[listing.channel_id].to_s
|
109
|
+
end
|
110
|
+
|
111
|
+
def quantity_name
|
112
|
+
QUANTITY_CHANNEL[listing.channel_id].to_s
|
113
|
+
end
|
29
114
|
end
|
30
115
|
end
|
31
116
|
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.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Ivander
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,22 +116,37 @@ extensions: []
|
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
118
|
- lib/item_builder_mwh.rb
|
119
|
+
- lib/item_builder_mwh/get_quantity_service.rb
|
119
120
|
- lib/item_builder_mwh/modes.rb
|
120
121
|
- lib/item_builder_mwh/modes/active_service.rb
|
121
122
|
- lib/item_builder_mwh/modes/base_service.rb
|
123
|
+
- lib/item_builder_mwh/modes/price/base.rb
|
124
|
+
- lib/item_builder_mwh/modes/price/blibli_service.rb
|
125
|
+
- lib/item_builder_mwh/modes/price/bukalapak_service.rb
|
126
|
+
- lib/item_builder_mwh/modes/price/jd_service.rb
|
127
|
+
- lib/item_builder_mwh/modes/price/sale_price_policy.rb
|
128
|
+
- lib/item_builder_mwh/modes/price/shopify_service.rb
|
129
|
+
- lib/item_builder_mwh/modes/price/zalora_service.rb
|
122
130
|
- lib/item_builder_mwh/modes/price_service.rb
|
123
131
|
- lib/item_builder_mwh/modes/quantity/base.rb
|
124
|
-
- lib/item_builder_mwh/modes/quantity/blibli_service.rb
|
125
132
|
- lib/item_builder_mwh/modes/quantity/lazada_service.rb
|
126
|
-
- lib/item_builder_mwh/modes/quantity/shopee_service.rb
|
127
133
|
- lib/item_builder_mwh/modes/quantity/zalora_service.rb
|
128
134
|
- lib/item_builder_mwh/modes/quantity_service.rb
|
135
|
+
- lib/item_builder_mwh/modes/simple/base.rb
|
136
|
+
- lib/item_builder_mwh/modes/simple/blibli_service.rb
|
137
|
+
- lib/item_builder_mwh/modes/simple/bukalapak_service.rb
|
138
|
+
- lib/item_builder_mwh/modes/simple/jd_service.rb
|
139
|
+
- lib/item_builder_mwh/modes/simple/lazada_service.rb
|
140
|
+
- lib/item_builder_mwh/modes/simple/sale_price_policy.rb
|
141
|
+
- lib/item_builder_mwh/modes/simple/shopee_service.rb
|
142
|
+
- lib/item_builder_mwh/modes/simple/shopify_service.rb
|
143
|
+
- lib/item_builder_mwh/modes/simple/zalora_service.rb
|
129
144
|
- lib/item_builder_mwh/modes/simple_service.rb
|
130
145
|
- lib/item_builder_mwh/version.rb
|
131
|
-
homepage:
|
146
|
+
homepage:
|
132
147
|
licenses: []
|
133
148
|
metadata: {}
|
134
|
-
post_install_message:
|
149
|
+
post_install_message:
|
135
150
|
rdoc_options: []
|
136
151
|
require_paths:
|
137
152
|
- lib
|
@@ -147,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
162
|
version: '0'
|
148
163
|
requirements: []
|
149
164
|
rubygems_version: 3.0.6
|
150
|
-
signing_key:
|
165
|
+
signing_key:
|
151
166
|
specification_version: 4
|
152
167
|
summary: Item Builder Multiwarehouse
|
153
168
|
test_files: []
|