solidus_core 2.10.1 → 2.11.2

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 (496) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +60 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  109. data/lib/spree/core/engine.rb +39 -2
  110. data/lib/spree/core/importer/order.rb +26 -11
  111. data/lib/spree/core/permalinks.rb +1 -3
  112. data/lib/spree/core/product_filters.rb +6 -5
  113. data/lib/spree/core/state_machines.rb +20 -1
  114. data/lib/spree/core/state_machines/order.rb +249 -0
  115. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  116. data/lib/spree/core/version.rb +1 -1
  117. data/lib/spree/encryptor.rb +25 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  120. data/lib/spree/event/configuration.rb +11 -6
  121. data/lib/spree/event/subscriber.rb +38 -18
  122. data/lib/spree/event/subscriber_registry.rb +92 -0
  123. data/lib/spree/i18n.rb +1 -1
  124. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  125. data/lib/spree/paranoia_deprecations.rb +32 -12
  126. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  127. data/lib/spree/permission_sets/default_customer.rb +16 -16
  128. data/lib/spree/permission_sets/order_display.rb +11 -11
  129. data/lib/spree/permission_sets/order_management.rb +1 -1
  130. data/lib/spree/permission_sets/product_display.rb +9 -9
  131. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  132. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  133. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  134. data/lib/spree/permission_sets/stock_display.rb +2 -2
  135. data/lib/spree/permission_sets/stock_management.rb +1 -1
  136. data/lib/spree/permission_sets/user_display.rb +3 -3
  137. data/lib/spree/permission_sets/user_management.rb +4 -3
  138. data/lib/spree/permitted_attributes.rb +79 -9
  139. data/lib/spree/preferences/preferable.rb +4 -3
  140. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  141. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  142. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  143. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  144. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  145. data/lib/spree/testing_support/common_rake.rb +3 -3
  146. data/lib/spree/testing_support/dummy_app.rb +44 -23
  147. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  148. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  149. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  150. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  152. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  155. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  156. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  157. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  158. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  159. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  160. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  161. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  162. data/lib/spree/testing_support/job_helpers.rb +24 -0
  163. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  164. data/lib/spree/testing_support/preferences.rb +3 -1
  165. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  166. data/lib/spree/testing_support/translations.rb +25 -0
  167. data/solidus_core.gemspec +8 -5
  168. metadata +99 -376
  169. data/script/rails +0 -10
  170. data/spec/fixtures/thinking-cat.jpg +0 -0
  171. data/spec/helpers/base_helper_spec.rb +0 -168
  172. data/spec/helpers/products_helper_spec.rb +0 -202
  173. data/spec/helpers/taxons_helper_spec.rb +0 -43
  174. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  175. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  176. data/spec/lib/i18n_spec.rb +0 -97
  177. data/spec/lib/search/base_spec.rb +0 -91
  178. data/spec/lib/search/variant_spec.rb +0 -115
  179. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  180. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  181. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  182. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  183. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  184. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  185. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  186. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  187. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  188. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  189. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  190. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  191. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  192. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  193. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  194. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  195. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  197. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  201. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  207. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  209. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  217. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  226. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  229. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  231. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  233. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  240. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  246. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  249. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  250. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  251. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  252. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  253. data/spec/lib/spree/core/version_spec.rb +0 -19
  254. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  255. data/spec/lib/spree/event_spec.rb +0 -130
  256. data/spec/lib/spree/localized_number_spec.rb +0 -45
  257. data/spec/lib/spree/migrations_spec.rb +0 -32
  258. data/spec/lib/spree/money_spec.rb +0 -298
  259. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  260. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  261. data/spec/lib/tasks/dummy_task.rake +0 -12
  262. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  263. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  264. data/spec/mailers/carton_mailer_spec.rb +0 -44
  265. data/spec/mailers/order_mailer_spec.rb +0 -117
  266. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  267. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  268. data/spec/mailers/test_mailer_spec.rb +0 -13
  269. data/spec/models/spree/ability_spec.rb +0 -279
  270. data/spec/models/spree/address_spec.rb +0 -399
  271. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  272. data/spec/models/spree/adjustment_spec.rb +0 -339
  273. data/spec/models/spree/asset_spec.rb +0 -25
  274. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  275. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  276. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  277. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  278. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  279. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  280. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  281. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  282. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  283. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  284. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  285. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  286. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  287. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  288. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  289. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  290. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  291. data/spec/models/spree/calculator_spec.rb +0 -43
  292. data/spec/models/spree/carton_spec.rb +0 -145
  293. data/spec/models/spree/classification_spec.rb +0 -126
  294. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  295. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  296. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  297. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  298. data/spec/models/spree/country_spec.rb +0 -154
  299. data/spec/models/spree/credit_card_spec.rb +0 -373
  300. data/spec/models/spree/customer_return_spec.rb +0 -294
  301. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  302. data/spec/models/spree/exchange_spec.rb +0 -76
  303. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  304. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  306. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  307. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  308. data/spec/models/spree/gateway_spec.rb +0 -14
  309. data/spec/models/spree/image_spec.rb +0 -25
  310. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  311. data/spec/models/spree/line_item_spec.rb +0 -240
  312. data/spec/models/spree/option_type_spec.rb +0 -16
  313. data/spec/models/spree/option_value_spec.rb +0 -52
  314. data/spec/models/spree/order/address_spec.rb +0 -52
  315. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  316. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  317. data/spec/models/spree/order/checkout_spec.rb +0 -740
  318. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  319. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  320. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  321. data/spec/models/spree/order/payment_spec.rb +0 -280
  322. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  323. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  324. data/spec/models/spree/order/totals_spec.rb +0 -26
  325. data/spec/models/spree/order/validations_spec.rb +0 -17
  326. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  327. data/spec/models/spree/order_capturing_spec.rb +0 -16
  328. data/spec/models/spree/order_contents_spec.rb +0 -362
  329. data/spec/models/spree/order_inventory_spec.rb +0 -285
  330. data/spec/models/spree/order_merger_spec.rb +0 -162
  331. data/spec/models/spree/order_mutex_spec.rb +0 -89
  332. data/spec/models/spree/order_promotion_spec.rb +0 -33
  333. data/spec/models/spree/order_shipping_spec.rb +0 -247
  334. data/spec/models/spree/order_spec.rb +0 -1687
  335. data/spec/models/spree/order_taxation_spec.rb +0 -128
  336. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  337. data/spec/models/spree/order_updater_spec.rb +0 -556
  338. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  339. data/spec/models/spree/payment_create_spec.rb +0 -195
  340. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  341. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  342. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  343. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  344. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  345. data/spec/models/spree/payment_method_spec.rb +0 -408
  346. data/spec/models/spree/payment_spec.rb +0 -1270
  347. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  348. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  349. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  350. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  351. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  352. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  353. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  354. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  355. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  356. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  357. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  359. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  360. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  361. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  362. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  363. data/spec/models/spree/preference_spec.rb +0 -79
  364. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  365. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  366. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  367. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  368. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  369. data/spec/models/spree/preferences/store_spec.rb +0 -40
  370. data/spec/models/spree/price_spec.rb +0 -150
  371. data/spec/models/spree/product/scopes_spec.rb +0 -164
  372. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  373. data/spec/models/spree/product_filter_spec.rb +0 -28
  374. data/spec/models/spree/product_property_spec.rb +0 -20
  375. data/spec/models/spree/product_spec.rb +0 -584
  376. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  377. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  378. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  379. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  380. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  381. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  382. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  383. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  384. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  385. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  386. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  387. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  388. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  389. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  390. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  391. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  392. data/spec/models/spree/promotion_action_spec.rb +0 -44
  393. data/spec/models/spree/promotion_category_spec.rb +0 -19
  394. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  395. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  396. data/spec/models/spree/promotion_code_spec.rb +0 -206
  397. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  398. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  399. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  400. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  401. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  402. data/spec/models/spree/promotion_spec.rb +0 -945
  403. data/spec/models/spree/refund_spec.rb +0 -200
  404. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  405. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  406. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  407. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  408. data/spec/models/spree/reimbursement_spec.rb +0 -278
  409. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  410. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  411. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  412. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  413. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  414. data/spec/models/spree/return_authorization_spec.rb +0 -226
  415. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  416. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  417. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  418. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  419. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  420. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  422. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  423. data/spec/models/spree/return_item_spec.rb +0 -785
  424. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  425. data/spec/models/spree/shipment_spec.rb +0 -914
  426. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  427. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  428. data/spec/models/spree/shipping_method_spec.rb +0 -292
  429. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  430. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  431. data/spec/models/spree/state_spec.rb +0 -43
  432. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  433. data/spec/models/spree/stock/availability_spec.rb +0 -143
  434. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  435. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  436. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  437. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  438. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  439. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  440. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  442. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  443. data/spec/models/spree/stock/package_spec.rb +0 -182
  444. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  445. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  446. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  447. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  448. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  449. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  450. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  451. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  452. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  453. data/spec/models/spree/stock_item_spec.rb +0 -348
  454. data/spec/models/spree/stock_location_spec.rb +0 -288
  455. data/spec/models/spree/stock_movement_spec.rb +0 -58
  456. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  457. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  458. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  459. data/spec/models/spree/store_credit_spec.rb +0 -900
  460. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  461. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  462. data/spec/models/spree/store_spec.rb +0 -156
  463. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  464. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  465. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  466. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  467. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  468. data/spec/models/spree/tax_category_spec.rb +0 -50
  469. data/spec/models/spree/tax_rate_spec.rb +0 -317
  470. data/spec/models/spree/taxon_spec.rb +0 -197
  471. data/spec/models/spree/taxonomy_spec.rb +0 -15
  472. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  473. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  474. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  475. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  476. data/spec/models/spree/user_spec.rb +0 -247
  477. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  478. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  479. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  480. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  481. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  482. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  483. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  484. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  485. data/spec/models/spree/variant_spec.rb +0 -862
  486. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  487. data/spec/models/spree/wallet_spec.rb +0 -155
  488. data/spec/models/spree/zone_spec.rb +0 -248
  489. data/spec/rails_helper.rb +0 -46
  490. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  491. data/spec/spec_helper.rb +0 -36
  492. data/spec/support/big_decimal.rb +0 -7
  493. data/spec/support/concerns/default_price.rb +0 -44
  494. data/spec/support/concerns/payment_source.rb +0 -66
  495. data/spec/support/concerns/working_factories.rb +0 -15
  496. data/spec/support/dummy_ability.rb +0 -7
@@ -28,26 +28,38 @@ module Spree
28
28
  validates_associated :rules
29
29
 
30
30
  validates :name, presence: true
31
- validates :path, uniqueness: { allow_blank: true }
31
+ validates :path, uniqueness: { allow_blank: true, case_sensitive: true }
32
32
  validates :usage_limit, numericality: { greater_than: 0, allow_nil: true }
33
33
  validates :per_code_usage_limit, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
34
34
  validates :description, length: { maximum: 255 }
35
- validate :apply_automatically_disallowed_with_codes_or_paths
35
+ validate :apply_automatically_disallowed_with_paths
36
36
 
37
37
  before_save :normalize_blank_values
38
38
 
39
39
  scope :coupons, -> { joins(:codes).distinct }
40
40
  scope :advertised, -> { where(advertise: true) }
41
41
  scope :active, -> do
42
+ return started_and_unexpired if Spree::Config.consider_actionless_promotion_active == true
43
+
44
+ has_actions.started_and_unexpired
45
+ end
46
+ scope :started_and_unexpired, -> do
42
47
  table = arel_table
43
48
  time = Time.current
49
+
44
50
  where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))).
45
51
  where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time)))
46
52
  end
53
+ scope :has_actions, -> do
54
+ joins(:promotion_actions)
55
+ end
47
56
  scope :applied, -> { joins(:order_promotions).distinct }
48
57
 
49
58
  self.whitelisted_ransackable_associations = ['codes']
50
59
  self.whitelisted_ransackable_attributes = %w[name path promotion_category_id]
60
+ def self.ransackable_scopes(*)
61
+ %i(active)
62
+ end
51
63
 
52
64
  def self.order_activatable?(order)
53
65
  order && !UNACTIVATABLE_ORDER_STATES.include?(order.state)
@@ -81,7 +93,7 @@ module Spree
81
93
  end
82
94
 
83
95
  def active?
84
- started? && not_expired?
96
+ started? && not_expired? && (Spree::Config.consider_actionless_promotion_active || actions.present?)
85
97
  end
86
98
 
87
99
  def inactive?
@@ -164,10 +176,10 @@ module Spree
164
176
  end
165
177
 
166
178
  def products
167
- rules.where(type: "Spree::Promotion::Rules::Product").map(&:products).flatten.uniq
179
+ rules.where(type: "Spree::Promotion::Rules::Product").flat_map(&:products).uniq
168
180
  end
169
181
 
170
- # Whether the promotion has exceeded it's usage restrictions.
182
+ # Whether the promotion has exceeded its usage restrictions.
171
183
  #
172
184
  # @param excluded_orders [Array<Spree::Order>] Orders to exclude from usage limit
173
185
  # @return true or false
@@ -257,10 +269,9 @@ module Spree
257
269
  match_policy == "all"
258
270
  end
259
271
 
260
- def apply_automatically_disallowed_with_codes_or_paths
272
+ def apply_automatically_disallowed_with_paths
261
273
  return unless apply_automatically
262
274
 
263
- errors.add(:apply_automatically, :disallowed_with_code) if codes.any?
264
275
  errors.add(:apply_automatically, :disallowed_with_path) if path.present?
265
276
  end
266
277
 
@@ -8,8 +8,9 @@ module Spree
8
8
  order = payload[:order]
9
9
  promotion_code = payload[:promotion_code]
10
10
 
11
- results = order.shipments.map do |shipment|
12
- return false if promotion_credit_exists?(shipment)
11
+ created_adjustments = order.shipments.map do |shipment|
12
+ next if promotion_credit_exists?(shipment)
13
+
13
14
  shipment.adjustments.create!(
14
15
  order: shipment.order,
15
16
  amount: compute_amount(shipment),
@@ -17,11 +18,11 @@ module Spree
17
18
  promotion_code: promotion_code,
18
19
  label: label
19
20
  )
20
- true
21
21
  end
22
- # Did we actually end up applying any adjustments?
22
+
23
+ # Did we actually end up creating any adjustments?
23
24
  # If so, then this action should be classed as 'successful'
24
- results.any? { |result| result == true }
25
+ created_adjustments.any?
25
26
  end
26
27
 
27
28
  def label
@@ -1,18 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'discard'
4
-
5
3
  module Spree
6
4
  # Base class for all types of promotion action.
7
5
  #
8
6
  # PromotionActions perform the necessary tasks when a promotion is activated
9
7
  # by an event and determined to be eligible.
10
8
  class PromotionAction < Spree::Base
11
- acts_as_paranoid
12
- include Spree::ParanoiaDeprecations
13
-
14
- include Discard::Model
15
- self.discard_column = :deleted_at
9
+ include Spree::SoftDeletable
16
10
 
17
11
  belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_actions, optional: true
18
12
 
@@ -5,8 +5,9 @@ class Spree::PromotionCode < Spree::Base
5
5
  belongs_to :promotion_code_batch, class_name: "Spree::PromotionCodeBatch", optional: true
6
6
  has_many :adjustments
7
7
 
8
- validates :value, presence: true, uniqueness: { allow_blank: true }
8
+ validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
9
9
  validates :promotion, presence: true
10
+ validate :promotion_not_apply_automatically, on: :create
10
11
 
11
12
  before_save :normalize_code
12
13
 
@@ -37,6 +38,10 @@ class Spree::PromotionCode < Spree::Base
37
38
  promotion.per_code_usage_limit
38
39
  end
39
40
 
41
+ def promotion_not_apply_automatically
42
+ errors.add(:base, :disallowed_with_apply_automatically) if promotion.apply_automatically
43
+ end
44
+
40
45
  private
41
46
 
42
47
  def normalize_code
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- class PromotionCodeBatch < ActiveRecord::Base
4
+ class PromotionCodeBatch < Spree::Base
5
5
  class CantProcessStartedBatch < StandardError
6
6
  end
7
7
 
@@ -13,9 +13,9 @@ module Spree
13
13
 
14
14
  def apply
15
15
  if coupon_code.present?
16
- if promotion.present? && promotion.actions.exists?
16
+ if promotion.present? && promotion.active? && promotion.actions.exists?
17
17
  handle_present_promotion(promotion)
18
- elsif promotion_code && promotion_code.promotion.inactive?
18
+ elsif promotion_code&.promotion&.expired?
19
19
  set_error_code :coupon_code_expired
20
20
  else
21
21
  set_error_code :coupon_code_not_found
@@ -45,7 +45,7 @@ module Spree
45
45
  end
46
46
 
47
47
  def eligibility_error_message(key, options = {})
48
- I18n.t(key, { scope: [:spree, :eligibility_errors, :messages] }.merge(options))
48
+ I18n.t(key, **{ scope: [:spree, :eligibility_errors, :messages] }.merge(options))
49
49
  end
50
50
  end
51
51
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- class PromotionRuleRole < ActiveRecord::Base
4
+ class PromotionRuleRole < Spree::Base
5
5
  belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true
6
6
  belongs_to :role, class_name: 'Spree::Role', optional: true
7
7
  end
@@ -10,13 +10,16 @@ module Spree
10
10
 
11
11
  validates :payment, presence: true
12
12
  validates :reason, presence: true
13
- validates :transaction_id, presence: true, on: :update # can't require this on create because the before_create needs to run first
14
13
  validates :amount, presence: true, numericality: { greater_than: 0 }
15
14
 
16
15
  validate :amount_is_less_than_or_equal_to_allowed_amount, on: :create
17
16
 
17
+ attr_reader :perform_response
18
+ attr_accessor :perform_after_create
19
+
20
+ after_create :set_perform_after_create_default
18
21
  after_create :perform!
19
- after_create :create_log_entry
22
+ after_create :clear_perform_after_create
20
23
 
21
24
  scope :non_reimbursement, -> { where(reimbursement_id: nil) }
22
25
 
@@ -37,22 +40,71 @@ module Spree
37
40
  payment.payment_method.name
38
41
  end
39
42
 
40
- private
41
-
42
- # attempts to perform the refund.
43
+ # Must be called for the refund transaction to be processed.
44
+ #
45
+ # Attempts to perform the refund,
43
46
  # raises an error if the refund fails.
44
47
  def perform!
48
+ return true if perform_after_create == false
45
49
  return true if transaction_id.present?
46
50
 
47
51
  credit_cents = money.cents
48
52
 
49
- @response = process!(credit_cents)
53
+ @perform_response = process!(credit_cents)
54
+
55
+ @response = Spree::DeprecatedInstanceVariableProxy.new(
56
+ self,
57
+ :perform_response,
58
+ :@response,
59
+ Spree::Deprecation,
60
+ "Please, do not use Spree::Refund @response anymore, use Spree::Refund#perform_response"
61
+ )
62
+
63
+ log_entries.build(details: perform_response.to_yaml)
64
+
65
+ self.transaction_id = perform_response.authorization
66
+ # This is needed otherwise set_perform_after_create_default callback
67
+ # will print a deprecation warning when save! creates a record.
68
+ self.perform_after_create = false unless persisted?
69
+ save!
50
70
 
51
- self.transaction_id = @response.authorization
52
- update_columns(transaction_id: transaction_id)
53
71
  update_order
54
72
  end
55
73
 
74
+ private
75
+
76
+ # This callback takes care of setting the behavior that determines if it is needed
77
+ # to execute the perform! callback after_create.
78
+ # Existing code that creates refund without explicitely passing
79
+ #
80
+ # perform_after_create: false
81
+ #
82
+ # as attribute will still call perform! but a deprecation warning is emitted in order
83
+ # to ask users to change their code with the new supported behavior.
84
+ def set_perform_after_create_default
85
+ return true if perform_after_create == false
86
+
87
+ Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
88
+ From Solidus v3.0 onwards, #perform! will need to be explicitly called when creating new
89
+ refunds. Please, change your code from:
90
+
91
+ Spree::Refund.create(your: attributes)
92
+
93
+ to:
94
+
95
+ Spree::Refund.create(your: attributes, perform_after_create: false).perform!
96
+ WARN
97
+
98
+ self.perform_after_create = true
99
+ end
100
+
101
+ # This is needed to avoid that when you create a refund with perform_after_create = false,
102
+ # it's not possibile to call perform! on that instance, since the value of this attribute
103
+ # will remain false until a reload of the instance.
104
+ def clear_perform_after_create
105
+ @perform_after_create = nil
106
+ end
107
+
56
108
  # return an activemerchant response object if successful or else raise an error
57
109
  def process!(credit_cents)
58
110
  response = if payment.payment_method.payment_profiles_supported?
@@ -73,10 +125,6 @@ module Spree
73
125
  raise Core::GatewayError.new(I18n.t('spree.unable_to_connect_to_gateway'))
74
126
  end
75
127
 
76
- def create_log_entry
77
- log_entries.create!(details: @response.to_yaml)
78
- end
79
-
80
128
  def amount_is_less_than_or_equal_to_allowed_amount
81
129
  if payment && amount > payment.credit_allowed
82
130
  errors.add(:amount, :greater_than_allowed)
@@ -104,10 +104,20 @@ module Spree
104
104
  if unpaid_amount_within_tolerance?
105
105
  reimbursed!
106
106
  Spree::Event.fire 'reimbursement_reimbursed', reimbursement: self
107
+ if reimbursement_success_hooks.any?
108
+ Spree::Deprecation.warn \
109
+ "reimbursement_success_hooks are deprecated. Please remove them " \
110
+ "and subscribe to `reimbursement_reimbursed` event instead", caller(1)
111
+ end
107
112
  reimbursement_success_hooks.each { |hook| hook.call self }
108
113
  else
109
114
  errored!
110
115
  Spree::Event.fire 'reimbursement_errored', reimbursement: self
116
+ if reimbursement_failure_hooks.any?
117
+ Spree::Deprecation.warn \
118
+ "reimbursement_failure_hooks are deprecated. Please remove them " \
119
+ "and subscribe to `reimbursement_errored` event instead", caller(1)
120
+ end
111
121
  reimbursement_failure_hooks.each { |hook| hook.call self }
112
122
  end
113
123
 
@@ -153,6 +163,23 @@ module Spree
153
163
  perform!(created_by: created_by)
154
164
  end
155
165
 
166
+ # The returned category is used as the category
167
+ # for Spree::Reimbursement::Credit.default_creditable_class.
168
+ #
169
+ # @return [Spree::StoreCreditCategory]
170
+ def store_credit_category
171
+ if Spree::Config.use_legacy_store_credit_reimbursement_category_name
172
+ Spree::Deprecation.warn("Using the legacy reimbursement_category_name is deprecated. "\
173
+ "Set Spree::Config.use_legacy_store_credit_reimbursement_category_name to false to use "\
174
+ "the new version instead.", caller)
175
+
176
+ name = Spree::StoreCreditCategory.reimbursement_category_name
177
+ return Spree::StoreCreditCategory.find_by(name: name) || Spree::StoreCreditCategory.first
178
+ end
179
+
180
+ Spree::StoreCreditCategory.find_by(name: Spree::StoreCreditCategory::REIMBURSEMENT)
181
+ end
182
+
156
183
  private
157
184
 
158
185
  def calculate_total
@@ -34,10 +34,17 @@ module Spree
34
34
  refund = reimbursement.refunds.build({
35
35
  payment: payment,
36
36
  amount: amount,
37
- reason: Spree::RefundReason.return_processing_reason
37
+ reason: Spree::RefundReason.return_processing_reason,
38
+ perform_after_create: false
38
39
  })
39
40
 
40
- simulate ? refund.readonly! : refund.save!
41
+ if simulate
42
+ refund.readonly!
43
+ else
44
+ refund.save!
45
+ refund.perform!
46
+ end
47
+
41
48
  refund
42
49
  end
43
50
 
@@ -54,7 +61,7 @@ module Spree
54
61
  Spree::Reimbursement::Credit.default_creditable_class.new(
55
62
  user: reimbursement.order.user,
56
63
  amount: unpaid_amount,
57
- category: Spree::StoreCreditCategory.reimbursement_category(reimbursement),
64
+ category: reimbursement.store_credit_category,
58
65
  created_by: created_by,
59
66
  memo: "Refund for uncreditable payments on order #{reimbursement.order.number}",
60
67
  currency: reimbursement.order.currency
@@ -31,7 +31,7 @@ module Spree
31
31
  self.whitelisted_ransackable_attributes = ['memo']
32
32
 
33
33
  def total_excluding_vat
34
- return_items.map(&:total_excluding_vat).sum
34
+ return_items.sum(&:total_excluding_vat)
35
35
  end
36
36
  alias pre_tax_total total_excluding_vat
37
37
  deprecate pre_tax_total: :total_excluding_vat, deprecator: Spree::Deprecation
@@ -90,8 +90,13 @@ module Spree
90
90
  COMPLETED_RECEPTION_STATUSES.map(&:to_s).include?(reception_status.to_s)
91
91
  end
92
92
 
93
-
94
- attr_accessor :skip_customer_return_processing
93
+ def skip_customer_return_processing=(value)
94
+ @skip_customer_return_processing = value
95
+ Deprecation.warn \
96
+ 'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
97
+ 'nothing, and #process_inventory_unit! will restore calling ' \
98
+ 'customer_return#process_return!', caller(1)
99
+ end
95
100
 
96
101
  # @param inventory_unit [Spree::InventoryUnit] the inventory for which we
97
102
  # want a return item
@@ -196,13 +201,19 @@ module Spree
196
201
 
197
202
  def process_inventory_unit!
198
203
  inventory_unit.return!
199
- if customer_return
200
- customer_return.stock_location.restock(inventory_unit.variant, 1, customer_return) if should_restock?
201
- unless skip_customer_return_processing
202
- Deprecation.warn 'From Solidus v2.9 onwards, #process_inventory_unit! will not call customer_return#process_return!'
203
- customer_return.process_return!
204
- end
204
+
205
+ if should_restock?
206
+ customer_return.stock_location.restock(inventory_unit.variant, 1, customer_return)
205
207
  end
208
+
209
+ unless @skip_customer_return_processing.nil?
210
+ Deprecation.warn \
211
+ 'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
212
+ 'nothing, and #process_inventory_unit! will restore calling ' \
213
+ 'customer_return#process_return!'
214
+ end
215
+
216
+ customer_return&.process_return!
206
217
  end
207
218
 
208
219
  def sibling_intended_for_exchange(status)
@@ -276,9 +287,9 @@ module Spree
276
287
  end
277
288
 
278
289
  def should_restock?
279
- resellable? &&
290
+ customer_return &&
291
+ resellable? &&
280
292
  variant.should_track_inventory? &&
281
- customer_return &&
282
293
  customer_return.stock_location.restock_inventory?
283
294
  end
284
295
  end
@@ -23,7 +23,7 @@ module Spree
23
23
  # blue pants with 34 waist and 32 inseam
24
24
 
25
25
  def self.eligible_variants(variant, options = {})
26
- product_variants = SameProduct.eligible_variants(variant, options).includes(option_values: :option_type)
26
+ product_variants = SameProduct.eligible_variants(variant, **options).includes(option_values: :option_type)
27
27
  relevant_option_values = variant.option_values.select { |ov| option_type_restrictions.include? ov.option_type.name }
28
28
 
29
29
  if relevant_option_values.present?
@@ -5,7 +5,7 @@ module Spree
5
5
  has_many :role_users, class_name: "Spree::RoleUser", dependent: :destroy
6
6
  has_many :users, through: :role_users
7
7
 
8
- validates_uniqueness_of :name
8
+ validates_uniqueness_of :name, case_sensitive: true
9
9
 
10
10
  def admin?
11
11
  name == "admin"