seshbot-packing 0.9.2 → 0.9.3
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/.gitignore +9 -0
- data/lib/seshbot/packing/package.rb +41 -12
- data/lib/seshbot/packing/version.rb +1 -1
- 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: 53640497418fe974662502d80ff742cee86798e16223b506cbc880af98297f60
|
|
4
|
+
data.tar.gz: a4242121d15f8229c6828a1040a02c06aac2c00ac82c58a71ac98a6ad5ef7e24
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 90a06fc6a5a757edaadaf5b0242e90daca9384fb8390f9ecb2cc0a43ca24e0ff0f893a459aaf89612e40d6ceeb4350e5e3f59931bbc46fc41713173388a1f65e
|
|
7
|
+
data.tar.gz: ee480ed3de2a785a7e40651543280ba805a2681a0863f9bef800e4f65e0195861adfe50d4cf3c5bd5ce740b03a6ac5c66d38e0a3a60346b962e9f86991cafd74
|
data/.gitignore
CHANGED
|
@@ -8,21 +8,25 @@ module Seshbot
|
|
|
8
8
|
@@logger = nil
|
|
9
9
|
def logger
|
|
10
10
|
if @@logger.nil?
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
if defined?(Rails)
|
|
12
|
+
@@logger = Rails.logger
|
|
13
|
+
else
|
|
14
|
+
@@logger = Logger.new(STDERR)
|
|
15
|
+
@@logger.level = 1
|
|
16
|
+
end
|
|
13
17
|
end
|
|
14
18
|
@@logger
|
|
15
19
|
end
|
|
16
20
|
|
|
17
21
|
def bundle_items(recipes, items, fulfilled_at: nil)
|
|
18
22
|
if !fulfilled_at.nil? && fulfilled_at < DateTime.parse('2020-01-14T08:00:00+09:00')
|
|
19
|
-
logger.debug "
|
|
23
|
+
logger.debug "bundling - Not Bundling (pre-2020 order) =="
|
|
20
24
|
return items
|
|
21
25
|
end
|
|
22
26
|
is_legacy = _is_legacy(fulfilled_at)
|
|
23
27
|
is_legacy_str = is_legacy ? " (LEGACY)" : ""
|
|
24
28
|
|
|
25
|
-
logger.debug "
|
|
29
|
+
logger.debug "bundling - Bundling Items: #{items.map(&:to_s)}. Fulfilled at: #{fulfilled_at || '(no fulfillment date)'}#{is_legacy_str}"
|
|
26
30
|
|
|
27
31
|
results = []
|
|
28
32
|
|
|
@@ -35,13 +39,38 @@ module Seshbot
|
|
|
35
39
|
phases.each do |phase|
|
|
36
40
|
phase_recipes = recipes.select { |name, recipe| (recipe['phase'] || 0) == phase }.to_h
|
|
37
41
|
|
|
38
|
-
logger.debug "
|
|
42
|
+
logger.debug "bundling - PHASE #{phase}"
|
|
39
43
|
|
|
40
44
|
results = _bundle_items_single_phase(phase_recipes, results)
|
|
41
45
|
end
|
|
42
46
|
end
|
|
43
47
|
|
|
44
|
-
logger.debug "Bundled result:"
|
|
48
|
+
logger.debug "bundling - Bundled result:"
|
|
49
|
+
logger.debug " - IN: #{items.map(&:to_s)}"
|
|
50
|
+
logger.debug " - OUT: #{results.map(&:to_s)}"
|
|
51
|
+
|
|
52
|
+
results
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def unbundle_items(recipes, items, fulfilled_at: nil)
|
|
56
|
+
logger.debug "bundling - Unbundling Items: #{items.map(&:to_s)}"
|
|
57
|
+
|
|
58
|
+
results = []
|
|
59
|
+
|
|
60
|
+
phases = recipes.values.map { |r| r['phase'] || 0 }.map(&:to_i).uniq.sort.reverse
|
|
61
|
+
|
|
62
|
+
results = items
|
|
63
|
+
phases.each do |phase|
|
|
64
|
+
phase_recipes = recipes.select { |name, recipe| (recipe['phase'] || 0) == phase }.to_h
|
|
65
|
+
|
|
66
|
+
logger.debug "bundling - PHASE #{phase}"
|
|
67
|
+
|
|
68
|
+
# get a list of items merged together by variant type (e.g., 10xBIGI-C301 + 5xBISS-C301 => 15xBUND-C301))
|
|
69
|
+
merged_items = LineItem.merge_line_items(results)
|
|
70
|
+
results = unpack(recipes, merged_items)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
logger.debug "bundling - Unbundle result:"
|
|
45
74
|
logger.debug " - IN: #{items.map(&:to_s)}"
|
|
46
75
|
logger.debug " - OUT: #{results.map(&:to_s)}"
|
|
47
76
|
|
|
@@ -58,7 +87,7 @@ module Seshbot
|
|
|
58
87
|
|
|
59
88
|
prev_result = new_result
|
|
60
89
|
end
|
|
61
|
-
error_message = "could not unpack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
|
|
90
|
+
error_message = "bundling - could not unpack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
|
|
62
91
|
logger.error error_message
|
|
63
92
|
raise error_message
|
|
64
93
|
end
|
|
@@ -75,7 +104,7 @@ module Seshbot
|
|
|
75
104
|
|
|
76
105
|
prev_result = new_result
|
|
77
106
|
end
|
|
78
|
-
error_message = "could not pack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
|
|
107
|
+
error_message = "bundling - could not pack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
|
|
79
108
|
logger.error error_message
|
|
80
109
|
raise error_message
|
|
81
110
|
end
|
|
@@ -86,7 +115,7 @@ module Seshbot
|
|
|
86
115
|
|
|
87
116
|
def _is_legacy(fulfilled_at)
|
|
88
117
|
effective_fulfilled_at = fulfilled_at.nil? ? DateTime.now : fulfilled_at
|
|
89
|
-
is_legacy = effective_fulfilled_at < DateTime.parse('2021-04-
|
|
118
|
+
is_legacy = effective_fulfilled_at < DateTime.parse('2021-04-01T09:00:00+09:00')
|
|
90
119
|
is_legacy
|
|
91
120
|
end
|
|
92
121
|
|
|
@@ -100,7 +129,7 @@ module Seshbot
|
|
|
100
129
|
new_can_items = pack(recipes, bundle_items_by_type)
|
|
101
130
|
# separate out all the C324s
|
|
102
131
|
separated_c324s = _filter_by_sku_fragment_prefix(new_can_items, 'C324')
|
|
103
|
-
logger.debug "Cans: #{cans.map(&:to_s)}"
|
|
132
|
+
logger.debug "bundling - Cans: #{cans.map(&:to_s)}"
|
|
104
133
|
logger.debug " - Removed C324s: #{separated_c324s.map(&:to_s)}"
|
|
105
134
|
|
|
106
135
|
remaining_cans = _filter_by_sku_fragment_prefix(new_can_items, 'C324', inverse: true)
|
|
@@ -110,7 +139,7 @@ module Seshbot
|
|
|
110
139
|
# merge the remaining with the original leftover
|
|
111
140
|
non_cans = _filter_by_sku_fragment_prefix(items, 'C', inverse: true)
|
|
112
141
|
remaining_items = non_cans + remaining_cans
|
|
113
|
-
logger.debug "Substituting:"
|
|
142
|
+
logger.debug "bundling - Substituting:"
|
|
114
143
|
logger.debug " - remaining items: #{remaining_items.map(&:to_s)}"
|
|
115
144
|
|
|
116
145
|
# substitute C's for B's
|
|
@@ -160,7 +189,7 @@ module Seshbot
|
|
|
160
189
|
before = LineItem::summarise(items)
|
|
161
190
|
items = Recipe::apply_recipe(recipe, items)
|
|
162
191
|
after = LineItem::summarise(items)
|
|
163
|
-
logger.debug "applying recipe (#{unpacking ? 'unpacking' : 'packing'}) #{Recipe::summarise(recipe)}: #{before} -> #{after}"
|
|
192
|
+
logger.debug "bundling - applying recipe (#{unpacking ? 'unpacking' : 'packing'}) #{Recipe::summarise(recipe)}: #{before} -> #{after}"
|
|
164
193
|
items
|
|
165
194
|
end
|
|
166
195
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: seshbot-packing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Shaun
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-04-
|
|
11
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description:
|
|
14
14
|
email:
|