solidus_core 4.1.6 → 4.5.1

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.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus.svg +18 -1
  3. data/app/assets/images/logo/solidus_logo.png +0 -0
  4. data/app/helpers/spree/base_helper.rb +2 -2
  5. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  6. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  7. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  8. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  9. data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
  10. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  11. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  12. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  13. data/app/mailers/spree/base_mailer.rb +1 -1
  14. data/app/mailers/spree/carton_mailer.rb +1 -1
  15. data/app/mailers/spree/order_mailer.rb +3 -3
  16. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  17. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  18. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  19. data/app/models/concerns/spree/display_money.rb +1 -1
  20. data/app/models/concerns/spree/metadata.rb +64 -0
  21. data/app/models/concerns/spree/named_type.rb +2 -0
  22. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  23. data/app/models/concerns/spree/user_address_book.rb +8 -9
  24. data/app/models/concerns/spree/user_methods.rb +3 -3
  25. data/app/models/spree/address.rb +10 -8
  26. data/app/models/spree/adjustment.rb +15 -65
  27. data/app/models/spree/adjustment_reason.rb +2 -0
  28. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  29. data/app/models/spree/carton.rb +2 -2
  30. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  31. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  32. data/app/models/spree/core/state_machines/order.rb +42 -0
  33. data/app/models/spree/core/state_machines/payment.rb +61 -0
  34. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  35. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  36. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  37. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  38. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  39. data/app/models/spree/credit_card.rb +12 -9
  40. data/app/models/spree/customer_return.rb +2 -0
  41. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  42. data/app/models/spree/fulfilment_changer.rb +4 -4
  43. data/app/models/spree/inventory_unit.rb +2 -2
  44. data/app/models/spree/item_total.rb +28 -0
  45. data/app/models/spree/legacy_user.rb +1 -0
  46. data/app/models/spree/line_item.rb +22 -4
  47. data/app/models/spree/money.rb +120 -0
  48. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  49. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  50. data/app/models/spree/null_promotion_finder.rb +9 -0
  51. data/app/models/spree/null_promotion_handler.rb +44 -0
  52. data/app/models/spree/option_value.rb +1 -0
  53. data/app/models/spree/order.rb +54 -36
  54. data/app/models/spree/order_cancellations.rb +8 -8
  55. data/app/models/spree/order_inventory.rb +6 -4
  56. data/app/models/spree/order_merger.rb +1 -1
  57. data/app/models/spree/order_mutex.rb +2 -2
  58. data/app/models/spree/order_shipping.rb +9 -9
  59. data/app/models/spree/order_taxation.rb +1 -0
  60. data/app/models/spree/order_updater.rb +19 -40
  61. data/app/models/spree/payment/processing.rb +2 -2
  62. data/app/models/spree/payment.rb +3 -2
  63. data/app/models/spree/payment_create.rb +1 -1
  64. data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
  65. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
  66. data/app/models/spree/payment_method/store_credit.rb +1 -1
  67. data/app/models/spree/payment_method.rb +3 -1
  68. data/app/models/spree/payment_source.rb +5 -1
  69. data/app/models/spree/permission_set.rb +11 -0
  70. data/app/models/spree/permission_sets/base.rb +45 -0
  71. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  72. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  73. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  74. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  75. data/app/models/spree/permission_sets/order_display.rb +50 -0
  76. data/app/models/spree/permission_sets/order_management.rb +50 -0
  77. data/app/models/spree/permission_sets/product_display.rb +43 -0
  78. data/app/models/spree/permission_sets/product_management.rb +47 -0
  79. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  80. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  81. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  82. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  83. data/app/models/spree/permission_sets/super_user.rb +26 -0
  84. data/app/models/spree/permission_sets/user_display.rb +27 -0
  85. data/app/models/spree/permission_sets/user_management.rb +44 -0
  86. data/app/models/spree/preference.rb +1 -1
  87. data/app/models/spree/product.rb +13 -9
  88. data/app/models/spree/refund.rb +3 -1
  89. data/app/models/spree/refund_reason.rb +6 -1
  90. data/app/models/spree/reimbursement.rb +4 -4
  91. data/app/models/spree/reimbursement_performer.rb +3 -3
  92. data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
  93. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  94. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  95. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  96. data/app/models/spree/reimbursement_type.rb +6 -1
  97. data/app/models/spree/return_authorization.rb +2 -0
  98. data/app/models/spree/return_item.rb +10 -10
  99. data/app/models/spree/return_reason.rb +6 -1
  100. data/app/models/spree/role.rb +3 -1
  101. data/app/models/spree/role_permission.rb +8 -0
  102. data/app/models/spree/shipment.rb +9 -7
  103. data/app/models/spree/shipping_category.rb +2 -0
  104. data/app/models/spree/shipping_rate.rb +2 -3
  105. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
  106. data/app/models/spree/stock/estimator.rb +1 -1
  107. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  108. data/app/models/spree/stock/package.rb +2 -2
  109. data/app/models/spree/stock/simple_coordinator.rb +36 -22
  110. data/app/models/spree/stock_item.rb +1 -0
  111. data/app/models/spree/stock_location.rb +5 -5
  112. data/app/models/spree/store.rb +3 -1
  113. data/app/models/spree/store_credit.rb +17 -15
  114. data/app/models/spree/store_credit_event.rb +4 -3
  115. data/app/models/spree/store_credit_reason.rb +6 -1
  116. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  117. data/app/models/spree/tax/tax_helpers.rb +12 -1
  118. data/app/models/spree/tax_calculator/default.rb +3 -3
  119. data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
  120. data/app/models/spree/tax_category.rb +3 -1
  121. data/app/models/spree/tax_rate.rb +7 -3
  122. data/app/models/spree/taxon.rb +22 -2
  123. data/app/models/spree/taxon_brand_selector.rb +22 -0
  124. data/app/models/spree/taxonomy.rb +2 -2
  125. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  126. data/app/models/spree/unit_cancel.rb +1 -2
  127. data/app/models/spree/user_address.rb +9 -3
  128. data/app/models/spree/variant/scopes.rb +4 -0
  129. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  130. data/app/models/spree/variant.rb +21 -8
  131. data/app/models/spree/wallet.rb +2 -2
  132. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  133. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  134. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  135. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  136. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  137. data/config/locales/en.yml +33 -90
  138. data/db/default/spree/permission_sets.rb +10 -0
  139. data/db/default/spree/return_reasons.rb +3 -1
  140. data/db/default/spree/states.rb +1 -1
  141. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  142. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  143. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
  144. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  145. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  146. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  147. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  148. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  149. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  150. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  151. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  152. data/db/seeds.rb +1 -0
  153. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
  154. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
  155. data/lib/generators/solidus/install/install_generator.rb +64 -15
  156. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
  157. data/lib/generators/solidus/update/update_generator.rb +1 -1
  158. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  159. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
  160. data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
  161. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  162. data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
  163. data/lib/spree/app_configuration.rb +102 -67
  164. data/lib/spree/core/class_constantizer.rb +2 -2
  165. data/lib/spree/core/controller_helpers/auth.rb +5 -61
  166. data/lib/spree/core/controller_helpers/common.rb +5 -80
  167. data/lib/spree/core/controller_helpers/order.rb +5 -86
  168. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
  169. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  170. data/lib/spree/core/controller_helpers/search.rb +5 -14
  171. data/lib/spree/core/controller_helpers/store.rb +5 -17
  172. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  173. data/lib/spree/core/engine.rb +13 -5
  174. data/lib/spree/core/environment/calculators.rb +35 -3
  175. data/lib/spree/core/environment/promotions.rb +25 -4
  176. data/lib/spree/core/environment_extension.rb +16 -2
  177. data/lib/spree/core/importer/order.rb +5 -5
  178. data/lib/spree/core/importer/product.rb +3 -3
  179. data/lib/spree/core/nested_class_set.rb +28 -0
  180. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  181. data/lib/spree/core/product_filters.rb +1 -1
  182. data/lib/spree/core/search/variant.rb +2 -2
  183. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  184. data/lib/spree/core/state_machines/order.rb +5 -251
  185. data/lib/spree/core/state_machines/payment.rb +5 -59
  186. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  187. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  188. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  189. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  190. data/lib/spree/core/state_machines/shipment.rb +5 -56
  191. data/lib/spree/core/state_machines.rb +48 -81
  192. data/lib/spree/core/validators/email.rb +1 -1
  193. data/lib/spree/core/version.rb +2 -2
  194. data/lib/spree/core.rb +2 -14
  195. data/lib/spree/deprecator.rb +9 -0
  196. data/lib/spree/i18n.rb +1 -1
  197. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  198. data/lib/spree/money.rb +5 -118
  199. data/lib/spree/permission_sets/base.rb +5 -30
  200. data/lib/spree/permission_sets/configuration_display.rb +5 -41
  201. data/lib/spree/permission_sets/configuration_management.rb +5 -40
  202. data/lib/spree/permission_sets/dashboard_display.rb +5 -14
  203. data/lib/spree/permission_sets/default_customer.rb +5 -71
  204. data/lib/spree/permission_sets/order_display.rb +5 -38
  205. data/lib/spree/permission_sets/order_management.rb +5 -38
  206. data/lib/spree/permission_sets/product_display.rb +5 -31
  207. data/lib/spree/permission_sets/product_management.rb +5 -35
  208. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
  209. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
  210. data/lib/spree/permission_sets/stock_display.rb +5 -14
  211. data/lib/spree/permission_sets/stock_management.rb +5 -14
  212. data/lib/spree/permission_sets/super_user.rb +5 -14
  213. data/lib/spree/permission_sets/user_display.rb +5 -15
  214. data/lib/spree/permission_sets/user_management.rb +5 -32
  215. data/lib/spree/permission_sets.rb +5 -18
  216. data/lib/spree/permitted_attributes.rb +21 -9
  217. data/lib/spree/preferences/configuration.rb +4 -0
  218. data/lib/spree/preferences/persistable.rb +7 -1
  219. data/lib/spree/preferences/store.rb +2 -2
  220. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  221. data/lib/spree/testing_support/common_rake.rb +1 -0
  222. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  223. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  224. data/lib/spree/testing_support/dummy_app/database.yml +37 -46
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
  227. data/lib/spree/testing_support/dummy_app.rb +33 -19
  228. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
  229. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
  230. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  231. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  232. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
  233. data/lib/spree/testing_support/factories/order_factory.rb +13 -24
  234. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
  236. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
  237. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  238. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  239. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  240. data/lib/spree/testing_support/order_walkthrough.rb +3 -3
  241. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  242. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  243. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  244. data/lib/tasks/colorado_delivery_fee.rake +2 -2
  245. data/solidus_core.gemspec +7 -10
  246. metadata +107 -109
  247. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  248. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  249. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  250. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  251. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  252. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  253. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  254. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  255. data/app/models/spree/line_item_action.rb +0 -8
  256. data/app/models/spree/order_promotion.rb +0 -27
  257. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
  258. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
  259. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  260. data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
  261. data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
  262. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  263. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  264. data/app/models/spree/promotion/rules/item_total.rb +0 -86
  265. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  266. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  267. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  268. data/app/models/spree/promotion/rules/product.rb +0 -86
  269. data/app/models/spree/promotion/rules/store.rb +0 -26
  270. data/app/models/spree/promotion/rules/taxon.rb +0 -91
  271. data/app/models/spree/promotion/rules/user.rb +0 -34
  272. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  273. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  274. data/app/models/spree/promotion.rb +0 -271
  275. data/app/models/spree/promotion_action.rb +0 -47
  276. data/app/models/spree/promotion_category.rb +0 -8
  277. data/app/models/spree/promotion_chooser.rb +0 -34
  278. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  279. data/app/models/spree/promotion_code.rb +0 -54
  280. data/app/models/spree/promotion_code_batch.rb +0 -27
  281. data/app/models/spree/promotion_handler/cart.rb +0 -75
  282. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  283. data/app/models/spree/promotion_handler/page.rb +0 -26
  284. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  285. data/app/models/spree/promotion_rule.rb +0 -55
  286. data/app/models/spree/promotion_rule_role.rb +0 -8
  287. data/app/models/spree/promotion_rule_store.rb +0 -10
  288. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  289. data/app/models/spree/promotion_rule_user.rb +0 -10
  290. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  291. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  292. data/bin/rails +0 -13
  293. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  294. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  295. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  296. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  297. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
  298. data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
  299. data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
  300. data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
  301. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  302. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  303. data/lib/spree/permission_sets/promotion_display.rb +0 -25
  304. data/lib/spree/permission_sets/promotion_management.rb +0 -25
  305. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
  306. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
  307. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
  308. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -22,7 +22,7 @@ module Spree
22
22
 
23
23
  def initialize(query_string, scope: Spree::Variant.all)
24
24
  @query_string = query_string
25
- @scope = scope
25
+ @scope = scope.non_template_variants
26
26
  end
27
27
 
28
28
  # Searches the variants table using the ransack 'search_terms' defined on the class.
@@ -39,7 +39,7 @@ module Spree
39
39
  @scope.ransack(search_term_params(word)).result.pluck(:id)
40
40
  end
41
41
 
42
- Spree::Variant.where(id: matches.inject(:&))
42
+ @scope.where(id: matches.inject(:&))
43
43
  end
44
44
 
45
45
  private
@@ -1,42 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- class StateMachines
6
- # Inventory Units' state machine
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,253 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- class StateMachines
6
- module Order
7
- def self.included(klass)
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
- before_transition from: :delivery, do: :apply_shipping_promotions
110
- end
111
-
112
- before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
113
- before_transition to: :resumed, do: :validate_line_item_availability
114
-
115
- # Sequence of before_transition to: :complete
116
- # calls matter so that we do not process payments
117
- # until validations have passed
118
- before_transition to: :complete, do: :validate_line_item_availability
119
- before_transition to: :complete, do: :ensure_promotions_eligible
120
- before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
121
- before_transition to: :complete, do: :ensure_inventory_units
122
- if states[:payment]
123
- before_transition to: :complete, do: :process_payments_before_complete
124
- end
125
-
126
- after_transition to: :complete, do: :finalize
127
- after_transition to: :resumed, do: :after_resume
128
- after_transition to: :canceled, do: :after_cancel
129
-
130
- after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
131
- order.recalculate
132
- end
133
-
134
- after_transition do |order, transition|
135
- order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
136
- end
137
-
138
- after_failure do |order, transition|
139
- order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
140
- end
141
- end
142
- end
143
-
144
- def go_to_state(name, options = {})
145
- checkout_steps[name] = options
146
- previous_states.each do |state|
147
- add_transition({ from: state, to: name }.merge(options))
148
- end
149
- if options[:if]
150
- previous_states << name
151
- else
152
- self.previous_states = [name]
153
- end
154
- end
155
-
156
- def insert_checkout_step(name, options = {})
157
- before = options.delete(:before)
158
- after = options.delete(:after) unless before
159
- after = checkout_steps.keys.last unless before || after
160
-
161
- cloned_steps = checkout_steps.clone
162
- cloned_removed_transitions = removed_transitions.clone
163
- checkout_flow do
164
- cloned_steps.each_pair do |key, value|
165
- go_to_state(name, options) if key == before
166
- go_to_state(key, value)
167
- go_to_state(name, options) if key == after
168
- end
169
- cloned_removed_transitions.each do |transition|
170
- remove_transition(transition)
171
- end
172
- end
173
- end
174
-
175
- def remove_checkout_step(name)
176
- cloned_steps = checkout_steps.clone
177
- cloned_removed_transitions = removed_transitions.clone
178
- checkout_flow do
179
- cloned_steps.each_pair do |key, value|
180
- go_to_state(key, value) unless key == name
181
- end
182
- cloned_removed_transitions.each do |transition|
183
- remove_transition(transition)
184
- end
185
- end
186
- end
187
-
188
- def remove_transition(options = {})
189
- removed_transitions << options
190
- next_event_transitions.delete(find_transition(options))
191
- end
192
-
193
- def find_transition(options = {})
194
- return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
195
-
196
- next_event_transitions.detect do |transition|
197
- transition[options[:from].to_sym] == options[:to].to_sym
198
- end
199
- end
200
-
201
- def next_event_transitions
202
- @next_event_transitions ||= []
203
- end
204
-
205
- def checkout_steps
206
- @checkout_steps ||= {}
207
- end
208
-
209
- def checkout_step_names
210
- checkout_steps.keys
211
- end
212
-
213
- def add_transition(options)
214
- next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
215
- end
216
-
217
- def removed_transitions
218
- @removed_transitions ||= []
219
- end
220
- end
221
-
222
- def checkout_steps
223
- steps = self.class.checkout_steps.each_with_object([]) { |(step, options), checkout_steps|
224
- next if options.include?(:if) && !options[:if].call(self)
225
-
226
- checkout_steps << step
227
- }.map(&:to_s)
228
- # Ensure there is always a complete step
229
- steps << "complete" unless steps.include?("complete")
230
- steps
231
- end
232
-
233
- def has_checkout_step?(step)
234
- step.present? && checkout_steps.include?(step)
235
- end
236
-
237
- def passed_checkout_step?(step)
238
- has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
239
- end
240
-
241
- def checkout_step_index(step)
242
- checkout_steps.index(step).to_i
243
- end
244
-
245
- def can_go_to_state?(state)
246
- return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
247
-
248
- checkout_step_index(state) > checkout_step_index(self.state)
249
- end
250
- end
251
- end
252
- end
253
- 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
- module Spree
4
- module Core
5
- class StateMachines
6
- # Payments' state machine
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
- module Spree
4
- module Core
5
- class StateMachines
6
- # Reimbursement' state machine
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
- module Spree
4
- module Core
5
- class StateMachines
6
- # Return Authorizations' state machine
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
- module Spree
4
- module Core
5
- class StateMachines
6
- module ReturnItem
7
- # Return Items' acceptance status state machine
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
- module Spree
4
- module Core
5
- class StateMachines
6
- module ReturnItem
7
- # Return Items' reception status state machine
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
- module Spree
4
- module Core
5
- class StateMachines
6
- # Shipments' state machine
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
+ )