solidus_core 4.4.2 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/user_address_book.rb +4 -5
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +21 -0
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/order.rb +20 -9
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/order_taxation.rb +1 -0
- data/app/models/spree/order_updater.rb +13 -30
- data/app/models/spree/payment.rb +1 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/product.rb +7 -0
- data/app/models/spree/refund.rb +2 -0
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/shipment.rb +2 -0
- data/app/models/spree/simple_order_contents.rb +4 -1
- data/app/models/spree/store_credit_event.rb +1 -0
- data/app/models/spree/tax/tax_helpers.rb +12 -1
- data/app/models/spree/tax_calculator/default.rb +1 -1
- data/app/models/spree/taxon.rb +22 -2
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/variant.rb +14 -1
- data/config/locales/en.yml +14 -0
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +29 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/spree/app_configuration.rb +49 -0
- data/lib/spree/core/controller_helpers/auth.rb +5 -61
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +5 -0
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -250
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +0 -10
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -42
- data/lib/spree/permission_sets/configuration_display.rb +5 -51
- data/lib/spree/permission_sets/configuration_management.rb +5 -50
- data/lib/spree/permission_sets/dashboard_display.rb +5 -26
- data/lib/spree/permission_sets/default_customer.rb +5 -81
- data/lib/spree/permission_sets/order_display.rb +5 -48
- data/lib/spree/permission_sets/order_management.rb +5 -48
- data/lib/spree/permission_sets/product_display.rb +5 -41
- data/lib/spree/permission_sets/product_management.rb +5 -45
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -31
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -31
- data/lib/spree/permission_sets/stock_display.rb +5 -24
- data/lib/spree/permission_sets/stock_management.rb +5 -24
- data/lib/spree/permission_sets/super_user.rb +5 -24
- data/lib/spree/permission_sets/user_display.rb +5 -25
- data/lib/spree/permission_sets/user_management.rb +5 -42
- data/lib/spree/permission_sets.rb +5 -16
- data/lib/spree/permitted_attributes.rb +18 -7
- data/lib/spree/preferences/configuration.rb +4 -0
- data/lib/spree/preferences/persistable.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +10 -0
- data/lib/spree/testing_support/dummy_app.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +9 -1
- data/solidus_core.gemspec +1 -1
- metadata +64 -24
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
data/lib/spree/core/engine.rb
CHANGED
@@ -21,6 +21,11 @@ module Spree
|
|
21
21
|
[Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
|
22
22
|
end
|
23
23
|
|
24
|
+
initializer "spree.zeitwerk_ignores" do
|
25
|
+
old_helpers = Engine.root.join("lib", "spree", "core", "controller_helpers", "*", "*.rb")
|
26
|
+
Rails.application.autoloaders.main.ignore(old_helpers)
|
27
|
+
end
|
28
|
+
|
24
29
|
initializer "spree.environment", before: :load_config_initializers do |app|
|
25
30
|
app.config.spree = Spree::Config.environment
|
26
31
|
end
|
@@ -1,42 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module InventoryUnit
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :on_hand do
|
21
|
-
event :fill_backorder do
|
22
|
-
transition to: :on_hand, from: :backordered
|
23
|
-
end
|
24
|
-
after_transition on: :fill_backorder, do: :fulfill_order
|
25
|
-
|
26
|
-
event :ship do
|
27
|
-
transition to: :shipped, if: :allow_ship?
|
28
|
-
end
|
29
|
-
|
30
|
-
event :return do
|
31
|
-
transition to: :returned, from: :shipped
|
32
|
-
end
|
33
|
-
|
34
|
-
event :cancel do
|
35
|
-
transition to: :canceled, from: ::Spree::InventoryUnit::CANCELABLE_STATES.map(&:to_sym)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,252 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
klass.extend ClassMethods
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
attr_accessor :previous_states
|
13
|
-
attr_writer :next_event_transitions
|
14
|
-
attr_writer :checkout_steps
|
15
|
-
attr_writer :removed_transitions
|
16
|
-
|
17
|
-
def checkout_flow(&block)
|
18
|
-
if block_given?
|
19
|
-
@checkout_flow = block
|
20
|
-
define_state_machine!
|
21
|
-
else
|
22
|
-
@checkout_flow
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def define_state_machine!
|
27
|
-
self.checkout_steps = {}
|
28
|
-
self.next_event_transitions = []
|
29
|
-
self.previous_states = [:cart]
|
30
|
-
self.removed_transitions = []
|
31
|
-
|
32
|
-
# Build the checkout flow using the checkout_flow defined either
|
33
|
-
# within the Order class, or a decorator for that class.
|
34
|
-
#
|
35
|
-
# This method may be called multiple times depending on if the
|
36
|
-
# checkout_flow is re-defined in a decorator or not.
|
37
|
-
instance_eval(&checkout_flow)
|
38
|
-
|
39
|
-
klass = self
|
40
|
-
|
41
|
-
# To avoid multiple occurrences of the same transition being defined
|
42
|
-
# On first definition, state_machines will not be defined
|
43
|
-
state_machines.clear if respond_to?(:state_machines)
|
44
|
-
state_machine :state, initial: :cart, use_transactions: false do
|
45
|
-
klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
|
46
|
-
|
47
|
-
# Persist the state on the order
|
48
|
-
after_transition do |order, transition|
|
49
|
-
# Hard to say if this is really necessary, it was introduced in this commit:
|
50
|
-
# https://github.com/mamhoff/solidus/commit/fa1d66c42e4c04ee7cd1c20d87e4cdb74a226d3d
|
51
|
-
# But it seems to be harmless, so we'll keep it for now.
|
52
|
-
order.state = order.state # rubocop:disable Lint/SelfAssignment
|
53
|
-
|
54
|
-
order.state_changes.create(
|
55
|
-
previous_state: transition.from,
|
56
|
-
next_state: transition.to,
|
57
|
-
name: 'order',
|
58
|
-
user_id: order.user_id
|
59
|
-
)
|
60
|
-
order.save
|
61
|
-
end
|
62
|
-
|
63
|
-
event :cancel do
|
64
|
-
transition to: :canceled, if: :allow_cancel?, from: :complete
|
65
|
-
end
|
66
|
-
|
67
|
-
event :return do
|
68
|
-
transition to: :returned, from: [:complete, :awaiting_return], if: :all_inventory_units_returned?
|
69
|
-
end
|
70
|
-
|
71
|
-
event :resume do
|
72
|
-
transition to: :resumed, from: :canceled, if: :canceled?
|
73
|
-
end
|
74
|
-
|
75
|
-
event :authorize_return do
|
76
|
-
transition to: :awaiting_return, from: :complete
|
77
|
-
end
|
78
|
-
|
79
|
-
event :complete do
|
80
|
-
transition to: :complete, from: klass.checkout_steps.keys.last
|
81
|
-
end
|
82
|
-
|
83
|
-
if states[:payment]
|
84
|
-
event :payment_failed do
|
85
|
-
transition to: :payment, from: :confirm
|
86
|
-
end
|
87
|
-
|
88
|
-
after_transition to: :complete, do: :add_payment_sources_to_wallet
|
89
|
-
before_transition to: :payment, do: :add_default_payment_from_wallet
|
90
|
-
before_transition to: :payment, do: :ensure_billing_address
|
91
|
-
|
92
|
-
before_transition to: :confirm, do: :add_store_credit_payments
|
93
|
-
|
94
|
-
# see also process_payments_before_complete below which needs to
|
95
|
-
# be added in the correct sequence.
|
96
|
-
end
|
97
|
-
|
98
|
-
before_transition from: :cart, do: :ensure_line_items_present
|
99
|
-
|
100
|
-
if states[:address]
|
101
|
-
before_transition to: :address, do: :assign_default_user_addresses
|
102
|
-
before_transition from: :address, do: :persist_user_address!
|
103
|
-
end
|
104
|
-
|
105
|
-
if states[:delivery]
|
106
|
-
before_transition to: :delivery, do: :ensure_shipping_address
|
107
|
-
before_transition to: :delivery, do: :create_proposed_shipments
|
108
|
-
before_transition to: :delivery, do: :ensure_available_shipping_rates
|
109
|
-
end
|
110
|
-
|
111
|
-
before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
|
112
|
-
before_transition to: :resumed, do: :validate_line_item_availability
|
113
|
-
|
114
|
-
# Sequence of before_transition to: :complete
|
115
|
-
# calls matter so that we do not process payments
|
116
|
-
# until validations have passed
|
117
|
-
before_transition to: :complete, do: :validate_line_item_availability
|
118
|
-
before_transition to: :complete, do: :ensure_promotions_eligible
|
119
|
-
before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
|
120
|
-
before_transition to: :complete, do: :ensure_inventory_units
|
121
|
-
if states[:payment]
|
122
|
-
before_transition to: :complete, do: :process_payments_before_complete
|
123
|
-
end
|
124
|
-
|
125
|
-
after_transition to: :complete, do: :finalize
|
126
|
-
after_transition to: :resumed, do: :after_resume
|
127
|
-
after_transition to: :canceled, do: :after_cancel
|
128
|
-
|
129
|
-
after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
|
130
|
-
order.recalculate
|
131
|
-
end
|
132
|
-
|
133
|
-
after_transition do |order, transition|
|
134
|
-
order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
|
135
|
-
end
|
136
|
-
|
137
|
-
after_failure do |order, transition|
|
138
|
-
order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def go_to_state(name, options = {})
|
144
|
-
checkout_steps[name] = options
|
145
|
-
previous_states.each do |state|
|
146
|
-
add_transition({ from: state, to: name }.merge(options))
|
147
|
-
end
|
148
|
-
if options[:if]
|
149
|
-
previous_states << name
|
150
|
-
else
|
151
|
-
self.previous_states = [name]
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def insert_checkout_step(name, options = {})
|
156
|
-
before = options.delete(:before)
|
157
|
-
after = options.delete(:after) unless before
|
158
|
-
after = checkout_steps.keys.last unless before || after
|
159
|
-
|
160
|
-
cloned_steps = checkout_steps.clone
|
161
|
-
cloned_removed_transitions = removed_transitions.clone
|
162
|
-
checkout_flow do
|
163
|
-
cloned_steps.each_pair do |key, value|
|
164
|
-
go_to_state(name, options) if key == before
|
165
|
-
go_to_state(key, value)
|
166
|
-
go_to_state(name, options) if key == after
|
167
|
-
end
|
168
|
-
cloned_removed_transitions.each do |transition|
|
169
|
-
remove_transition(transition)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
def remove_checkout_step(name)
|
175
|
-
cloned_steps = checkout_steps.clone
|
176
|
-
cloned_removed_transitions = removed_transitions.clone
|
177
|
-
checkout_flow do
|
178
|
-
cloned_steps.each_pair do |key, value|
|
179
|
-
go_to_state(key, value) unless key == name
|
180
|
-
end
|
181
|
-
cloned_removed_transitions.each do |transition|
|
182
|
-
remove_transition(transition)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
def remove_transition(options = {})
|
188
|
-
removed_transitions << options
|
189
|
-
next_event_transitions.delete(find_transition(options))
|
190
|
-
end
|
191
|
-
|
192
|
-
def find_transition(options = {})
|
193
|
-
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
|
194
|
-
|
195
|
-
next_event_transitions.detect do |transition|
|
196
|
-
transition[options[:from].to_sym] == options[:to].to_sym
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
def next_event_transitions
|
201
|
-
@next_event_transitions ||= []
|
202
|
-
end
|
203
|
-
|
204
|
-
def checkout_steps
|
205
|
-
@checkout_steps ||= {}
|
206
|
-
end
|
207
|
-
|
208
|
-
def checkout_step_names
|
209
|
-
checkout_steps.keys
|
210
|
-
end
|
211
|
-
|
212
|
-
def add_transition(options)
|
213
|
-
next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
|
214
|
-
end
|
215
|
-
|
216
|
-
def removed_transitions
|
217
|
-
@removed_transitions ||= []
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
def checkout_steps
|
222
|
-
steps = self.class.checkout_steps.each_with_object([]) { |(step, options), checkout_steps|
|
223
|
-
next if options.include?(:if) && !options[:if].call(self)
|
224
|
-
|
225
|
-
checkout_steps << step
|
226
|
-
}.map(&:to_s)
|
227
|
-
# Ensure there is always a complete step
|
228
|
-
steps << "complete" unless steps.include?("complete")
|
229
|
-
steps
|
230
|
-
end
|
231
|
-
|
232
|
-
def has_checkout_step?(step)
|
233
|
-
step.present? && checkout_steps.include?(step)
|
234
|
-
end
|
235
|
-
|
236
|
-
def passed_checkout_step?(step)
|
237
|
-
has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
|
238
|
-
end
|
239
|
-
|
240
|
-
def checkout_step_index(step)
|
241
|
-
checkout_steps.index(step).to_i
|
242
|
-
end
|
243
|
-
|
244
|
-
def can_go_to_state?(state)
|
245
|
-
return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
|
246
|
-
|
247
|
-
checkout_step_index(state) > checkout_step_index(self.state)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,61 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module Payment
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :checkout do
|
21
|
-
# With card payments, happens before purchase or authorization happens
|
22
|
-
#
|
23
|
-
# Setting it after creating a profile and authorizing a full amount will
|
24
|
-
# prevent the payment from being authorized again once Order transitions
|
25
|
-
# to complete
|
26
|
-
event :started_processing do
|
27
|
-
transition from: [:checkout, :pending, :completed, :processing], to: :processing
|
28
|
-
end
|
29
|
-
# When processing during checkout fails
|
30
|
-
event :failure do
|
31
|
-
transition from: [:pending, :processing], to: :failed
|
32
|
-
end
|
33
|
-
# With card payments this represents authorizing the payment
|
34
|
-
event :pend do
|
35
|
-
transition from: [:checkout, :processing], to: :pending
|
36
|
-
end
|
37
|
-
# With card payments this represents completing a purchase or capture transaction
|
38
|
-
event :complete do
|
39
|
-
transition from: [:processing, :pending, :checkout], to: :completed
|
40
|
-
end
|
41
|
-
event :void do
|
42
|
-
transition from: [:pending, :processing, :completed, :checkout], to: :void
|
43
|
-
end
|
44
|
-
# when the card brand isnt supported
|
45
|
-
event :invalidate do
|
46
|
-
transition from: [:checkout], to: :invalid
|
47
|
-
end
|
48
|
-
|
49
|
-
after_transition do |payment, transition|
|
50
|
-
payment.state_changes.create!(
|
51
|
-
previous_state: transition.from,
|
52
|
-
next_state: transition.to,
|
53
|
-
name: 'payment'
|
54
|
-
)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,33 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module Reimbursement
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine :reimbursement_status, initial: :pending do
|
21
|
-
event :errored do
|
22
|
-
transition to: :errored, from: [:pending, :errored]
|
23
|
-
end
|
24
|
-
|
25
|
-
event :reimbursed do
|
26
|
-
transition to: :reimbursed, from: [:pending, :errored]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,32 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module ReturnAuthorization
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :authorized do
|
21
|
-
before_transition to: :canceled, do: :cancel_return_items
|
22
|
-
|
23
|
-
event :cancel do
|
24
|
-
transition to: :canceled, from: :authorized,
|
25
|
-
if: lambda { |return_authorization| return_authorization.can_cancel_return_items? }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,51 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
#
|
9
|
-
# for each event the following instance methods are dynamically implemented:
|
10
|
-
# #<event_name>
|
11
|
-
# #<event_name>!
|
12
|
-
# #can_<event_name>?
|
13
|
-
#
|
14
|
-
# for each state the following instance methods are implemented:
|
15
|
-
# #<state_name>?
|
16
|
-
#
|
17
|
-
module AcceptanceStatus
|
18
|
-
extend ActiveSupport::Concern
|
19
|
-
|
20
|
-
included do
|
21
|
-
state_machine :acceptance_status, initial: :pending do
|
22
|
-
event :attempt_accept do
|
23
|
-
transition to: :accepted, from: :accepted
|
24
|
-
transition to: :accepted, from: :pending, if: ->(return_item) { return_item.eligible_for_return? }
|
25
|
-
transition to: :manual_intervention_required, from: :pending, if: ->(return_item) { return_item.requires_manual_intervention? }
|
26
|
-
transition to: :rejected, from: :pending
|
27
|
-
end
|
28
|
-
|
29
|
-
# bypasses eligibility checks
|
30
|
-
event :accept do
|
31
|
-
transition to: :accepted, from: [:accepted, :pending, :manual_intervention_required]
|
32
|
-
end
|
33
|
-
|
34
|
-
# bypasses eligibility checks
|
35
|
-
event :reject do
|
36
|
-
transition to: :rejected, from: [:accepted, :pending, :manual_intervention_required]
|
37
|
-
end
|
38
|
-
|
39
|
-
# bypasses eligibility checks
|
40
|
-
event :require_manual_intervention do
|
41
|
-
transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required]
|
42
|
-
end
|
43
|
-
|
44
|
-
after_transition any => any, do: :persist_acceptance_status_errors
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,42 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
#
|
9
|
-
# for each event the following instance methods are dynamically implemented:
|
10
|
-
# #<event_name>
|
11
|
-
# #<event_name>!
|
12
|
-
# #can_<event_name>?
|
13
|
-
#
|
14
|
-
# for each state the following instance methods are implemented:
|
15
|
-
# #<state_name>?
|
16
|
-
#
|
17
|
-
module ReceptionStatus
|
18
|
-
extend ActiveSupport::Concern
|
19
|
-
|
20
|
-
included do
|
21
|
-
state_machine :reception_status, initial: :awaiting do
|
22
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :attempt_accept, if: :can_attempt_accept?
|
23
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :check_unexchange
|
24
|
-
after_transition to: :received, do: :process_inventory_unit!
|
25
|
-
|
26
|
-
event(:cancel) { transition to: :cancelled, from: :awaiting }
|
27
|
-
|
28
|
-
event(:receive) { transition to: :received, from: ::Spree::ReturnItem::INTERMEDIATE_RECEPTION_STATUSES + [:awaiting] }
|
29
|
-
event(:unexchange) { transition to: :unexchanged, from: [:awaiting] }
|
30
|
-
event(:give) { transition to: :given_to_customer, from: :awaiting }
|
31
|
-
event(:lost) { transition to: :lost_in_transit, from: :awaiting }
|
32
|
-
event(:wrong_item_shipped) { transition to: :shipped_wrong_item, from: :awaiting }
|
33
|
-
event(:short_shipped) { transition to: :short_shipped, from: :awaiting }
|
34
|
-
event(:in_transit) { transition to: :in_transit, from: :awaiting }
|
35
|
-
event(:expired) { transition to: :expired, from: :awaiting }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,58 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module Shipment
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :pending, use_transactions: false do
|
21
|
-
event :ready do
|
22
|
-
transition from: :pending, to: :shipped, if: :can_transition_from_pending_to_shipped?
|
23
|
-
transition from: :pending, to: :ready, if: :can_transition_from_pending_to_ready?
|
24
|
-
end
|
25
|
-
|
26
|
-
event :pend do
|
27
|
-
transition from: :ready, to: :pending
|
28
|
-
end
|
29
|
-
|
30
|
-
event :ship do
|
31
|
-
transition from: [:ready, :canceled], to: :shipped
|
32
|
-
end
|
33
|
-
after_transition to: :shipped, do: :after_ship
|
34
|
-
|
35
|
-
event :cancel do
|
36
|
-
transition to: :canceled, from: [:pending, :ready]
|
37
|
-
end
|
38
|
-
after_transition to: :canceled, do: :after_cancel
|
39
|
-
|
40
|
-
event :resume do
|
41
|
-
transition from: :canceled, to: :ready, if: :can_transition_from_canceled_to_ready?
|
42
|
-
transition from: :canceled, to: :pending
|
43
|
-
end
|
44
|
-
after_transition from: :canceled, to: [:pending, :ready, :shipped], do: :after_resume
|
45
|
-
|
46
|
-
after_transition do |shipment, transition|
|
47
|
-
shipment.state_changes.create!(
|
48
|
-
previous_state: transition.from,
|
49
|
-
next_state: transition.to,
|
50
|
-
name: 'shipment'
|
51
|
-
)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|