solidus_core 2.4.2 → 2.5.0.beta1

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 (313) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -5
  3. data/Rakefile +23 -6
  4. data/app/helpers/spree/base_helper.rb +15 -10
  5. data/app/helpers/spree/checkout_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/mailers/spree/carton_mailer.rb +2 -2
  8. data/app/mailers/spree/order_mailer.rb +4 -4
  9. data/app/mailers/spree/reimbursement_mailer.rb +2 -2
  10. data/app/mailers/spree/test_mailer.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +17 -11
  12. data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
  13. data/app/models/spree/ability.rb +1 -1
  14. data/app/models/spree/address.rb +7 -0
  15. data/app/models/spree/adjustment.rb +6 -2
  16. data/app/models/spree/calculator.rb +1 -1
  17. data/app/models/spree/calculator/flexi_rate.rb +1 -0
  18. data/app/models/spree/calculator/free_shipping.rb +2 -0
  19. data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
  20. data/app/models/spree/calculator/percent_per_item.rb +2 -0
  21. data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
  22. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
  23. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
  24. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
  25. data/app/models/spree/calculator/shipping/per_item.rb +1 -0
  26. data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
  27. data/app/models/spree/classification.rb +1 -1
  28. data/app/models/spree/customer_return.rb +1 -1
  29. data/app/models/spree/inventory_unit.rb +8 -2
  30. data/app/models/spree/log_entry.rb +0 -11
  31. data/app/models/spree/order.rb +31 -16
  32. data/app/models/spree/order_contents.rb +0 -14
  33. data/app/models/spree/order_shipping.rb +0 -5
  34. data/app/models/spree/order_updater.rb +0 -4
  35. data/app/models/spree/payment.rb +6 -1
  36. data/app/models/spree/payment/processing.rb +4 -4
  37. data/app/models/spree/payment_method.rb +8 -3
  38. data/app/models/spree/payment_method/credit_card.rb +1 -1
  39. data/app/models/spree/payment_method/store_credit.rb +4 -4
  40. data/app/models/spree/price.rb +7 -1
  41. data/app/models/spree/product.rb +34 -6
  42. data/app/models/spree/product/scopes.rb +2 -2
  43. data/app/models/spree/promotion.rb +1 -2
  44. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
  45. data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
  46. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  47. data/app/models/spree/promotion/rules/taxon.rb +25 -24
  48. data/app/models/spree/promotion_action.rb +7 -1
  49. data/app/models/spree/promotion_chooser.rb +1 -1
  50. data/app/models/spree/promotion_code.rb +3 -3
  51. data/app/models/spree/promotion_handler/coupon.rb +8 -29
  52. data/app/models/spree/promotion_rule.rb +1 -1
  53. data/app/models/spree/refund.rb +3 -3
  54. data/app/models/spree/reimbursement.rb +1 -1
  55. data/app/models/spree/return_authorization.rb +2 -2
  56. data/app/models/spree/return_item.rb +3 -3
  57. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
  58. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
  59. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
  60. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
  61. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
  62. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  63. data/app/models/spree/shipment.rb +16 -6
  64. data/app/models/spree/shipping_method.rb +7 -0
  65. data/app/models/spree/shipping_rate.rb +6 -6
  66. data/app/models/spree/shipping_rate_tax.rb +2 -2
  67. data/app/models/spree/stock/availability_validator.rb +2 -2
  68. data/app/models/spree/stock/estimator.rb +9 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
  70. data/app/models/spree/stock/inventory_validator.rb +2 -2
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +2 -2
  73. data/app/models/spree/stock_item.rb +6 -0
  74. data/app/models/spree/stock_location.rb +2 -2
  75. data/app/models/spree/store_credit.rb +19 -12
  76. data/app/models/spree/store_credit_category.rb +1 -1
  77. data/app/models/spree/store_credit_event.rb +7 -1
  78. data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
  79. data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
  80. data/app/models/spree/tax_rate.rb +10 -3
  81. data/app/models/spree/taxon.rb +14 -4
  82. data/app/models/spree/taxonomy.rb +1 -1
  83. data/app/models/spree/unit_cancel.rb +1 -1
  84. data/app/models/spree/variant.rb +33 -1
  85. data/app/models/spree/variant/price_selector.rb +1 -1
  86. data/app/models/spree/variant/pricing_options.rb +1 -1
  87. data/app/models/spree/variant/scopes.rb +1 -1
  88. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  89. data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
  90. data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
  91. data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
  92. data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
  93. data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
  94. data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
  95. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
  96. data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
  97. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
  98. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
  99. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
  100. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
  101. data/app/views/spree/shared/_error_messages.html.erb +2 -2
  102. data/app/views/spree/test_mailer/test_email.html.erb +2 -2
  103. data/app/views/spree/test_mailer/test_email.text.erb +2 -2
  104. data/config/initializers/assets.rb +3 -1
  105. data/config/locales/en.yml +44 -48
  106. data/db/default/spree/store_credit.rb +1 -1
  107. data/db/default/spree/stores.rb +7 -8
  108. data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
  109. data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
  110. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
  111. data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
  112. data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
  113. data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
  114. data/lib/generators/spree/install/install_generator.rb +10 -5
  115. data/lib/spree/app_configuration.rb +103 -5
  116. data/lib/spree/core.rb +3 -2
  117. data/lib/spree/core/active_merchant_dependencies.rb +11 -0
  118. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  119. data/lib/spree/core/controller_helpers/common.rb +3 -7
  120. data/lib/spree/core/engine.rb +18 -100
  121. data/lib/spree/core/environment.rb +3 -3
  122. data/lib/spree/core/importer/order.rb +0 -1
  123. data/lib/spree/core/permalinks.rb +9 -15
  124. data/lib/spree/core/product_filters.rb +5 -3
  125. data/lib/spree/core/role_configuration.rb +23 -7
  126. data/lib/spree/core/search/base.rb +16 -13
  127. data/lib/spree/core/version.rb +1 -1
  128. data/lib/spree/paranoia_deprecations.rb +19 -0
  129. data/lib/spree/permission_sets.rb +0 -4
  130. data/lib/spree/permitted_attributes.rb +0 -3
  131. data/lib/spree/preferences/preferable.rb +70 -34
  132. data/lib/spree/preferences/preferable_class_methods.rb +22 -0
  133. data/lib/spree/testing_support/authorization_helpers.rb +2 -0
  134. data/lib/spree/testing_support/common_rake.rb +0 -1
  135. data/lib/spree/testing_support/dummy_app.rb +100 -0
  136. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
  137. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
  138. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
  139. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
  140. data/lib/spree/testing_support/dummy_app/database.yml +31 -0
  141. data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
  142. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
  143. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
  144. data/lib/spree/testing_support/factories.rb +1 -1
  145. data/lib/spree/testing_support/factories/address_factory.rb +2 -2
  146. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
  147. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  148. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
  149. data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/country_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  152. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  153. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
  155. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  156. data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
  157. data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
  158. data/lib/spree/testing_support/factories/order_factory.rb +5 -1
  159. data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
  160. data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
  161. data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
  162. data/lib/spree/testing_support/factories/price_factory.rb +1 -1
  163. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  164. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  165. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  166. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
  167. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  168. data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/property_factory.rb +1 -1
  170. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  171. data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
  172. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  173. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  174. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  175. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  176. data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
  177. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  178. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
  179. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  180. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
  181. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/state_factory.rb +1 -7
  183. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  185. data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
  186. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
  188. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
  189. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
  191. data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
  192. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  193. data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
  194. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
  196. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  197. data/lib/spree/testing_support/factories/user_factory.rb +4 -10
  198. data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
  200. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
  201. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
  202. data/lib/spree/testing_support/factories/zone_factory.rb +2 -4
  203. data/lib/spree/testing_support/flash.rb +2 -2
  204. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  205. data/lib/spree/testing_support/preferences.rb +4 -0
  206. data/lib/spree/testing_support/sequences.rb +3 -12
  207. data/solidus_core.gemspec +12 -8
  208. data/spec/helpers/base_helper_spec.rb +19 -3
  209. data/spec/helpers/products_helper_spec.rb +1 -1
  210. data/spec/lib/calculated_adjustments_spec.rb +20 -0
  211. data/spec/lib/i18n_spec.rb +4 -69
  212. data/spec/lib/search/base_spec.rb +1 -0
  213. data/spec/lib/search/variant_spec.rb +4 -4
  214. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
  215. data/spec/lib/spree/core/importer/order_spec.rb +2 -2
  216. data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
  217. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
  219. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
  220. data/spec/mailers/carton_mailer_spec.rb +3 -7
  221. data/spec/mailers/order_mailer_spec.rb +7 -11
  222. data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
  223. data/spec/mailers/test_mailer_spec.rb +0 -4
  224. data/spec/models/spree/ability_spec.rb +2 -1
  225. data/spec/models/spree/address_spec.rb +32 -19
  226. data/spec/models/spree/app_configuration_spec.rb +1 -1
  227. data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
  228. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
  229. data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
  230. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
  231. data/spec/models/spree/classification_spec.rb +19 -0
  232. data/spec/models/spree/credit_card_spec.rb +1 -1
  233. data/spec/models/spree/customer_return_spec.rb +17 -6
  234. data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
  235. data/spec/models/spree/exchange_spec.rb +1 -1
  236. data/spec/models/spree/inventory_unit_spec.rb +3 -7
  237. data/spec/models/spree/line_item_spec.rb +6 -6
  238. data/spec/models/spree/option_value_spec.rb +11 -6
  239. data/spec/models/spree/order/callbacks_spec.rb +2 -2
  240. data/spec/models/spree/order/checkout_spec.rb +31 -31
  241. data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
  242. data/spec/models/spree/order_contents_spec.rb +1 -9
  243. data/spec/models/spree/order_inventory_spec.rb +2 -2
  244. data/spec/models/spree/order_mutex_spec.rb +3 -1
  245. data/spec/models/spree/order_shipping_spec.rb +7 -4
  246. data/spec/models/spree/order_spec.rb +36 -13
  247. data/spec/models/spree/order_taxation_spec.rb +7 -7
  248. data/spec/models/spree/order_updater_spec.rb +6 -4
  249. data/spec/models/spree/payment/cancellation_spec.rb +1 -1
  250. data/spec/models/spree/payment_create_spec.rb +2 -2
  251. data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
  252. data/spec/models/spree/payment_spec.rb +23 -4
  253. data/spec/models/spree/preferences/preferable_spec.rb +44 -0
  254. data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
  255. data/spec/models/spree/price_spec.rb +6 -4
  256. data/spec/models/spree/product/scopes_spec.rb +1 -1
  257. data/spec/models/spree/product_spec.rb +49 -9
  258. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
  259. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
  260. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
  261. data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
  262. data/spec/models/spree/promotion_code_spec.rb +31 -19
  263. data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
  264. data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
  265. data/spec/models/spree/promotion_spec.rb +14 -14
  266. data/spec/models/spree/refund_spec.rb +1 -1
  267. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
  268. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
  269. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
  270. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  271. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
  272. data/spec/models/spree/return_item_spec.rb +6 -6
  273. data/spec/models/spree/shipment_spec.rb +14 -10
  274. data/spec/models/spree/shipping_manifest_spec.rb +22 -9
  275. data/spec/models/spree/shipping_method_spec.rb +9 -5
  276. data/spec/models/spree/stock/availability_spec.rb +16 -2
  277. data/spec/models/spree/stock/estimator_spec.rb +11 -12
  278. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
  279. data/spec/models/spree/stock/package_spec.rb +3 -2
  280. data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
  281. data/spec/models/spree/stock_item_spec.rb +6 -6
  282. data/spec/models/spree/stock_location_spec.rb +16 -3
  283. data/spec/models/spree/store_credit_spec.rb +12 -6
  284. data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
  285. data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
  286. data/spec/models/spree/taxon_spec.rb +42 -19
  287. data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
  288. data/spec/models/spree/variant_spec.rb +69 -11
  289. data/spec/rails_helper.rb +7 -13
  290. data/spec/spec_helper.rb +3 -12
  291. data/spec/support/concerns/default_price.rb +1 -1
  292. data/spec/support/dummy_ability.rb +2 -0
  293. metadata +144 -73
  294. data/Gemfile +0 -3
  295. data/app/models/spree/order_stock_location.rb +0 -15
  296. data/app/models/spree/stock_transfer.rb +0 -110
  297. data/app/models/spree/transfer_item.rb +0 -54
  298. data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
  299. data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
  300. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
  301. data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
  302. data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
  303. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
  304. data/lib/spree/testing_support/i18n.rb +0 -97
  305. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
  306. data/spec/models/spree/order_stock_location_spec.rb +0 -18
  307. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
  308. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
  309. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
  310. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
  311. data/spec/models/spree/stock_transfer_spec.rb +0 -308
  312. data/spec/models/spree/transfer_item_spec.rb +0 -275
  313. data/spec/support/test_gateway.rb +0 -2
@@ -65,7 +65,7 @@ module Spree
65
65
 
66
66
  def return_items_belong_to_same_order
67
67
  if return_items.select{ |return_item| return_item.inventory_unit.order_id != order_id }.any?
68
- errors.add(:base, Spree.t(:return_items_cannot_be_associated_with_multiple_orders))
68
+ errors.add(:base, I18n.t('spree.return_items_cannot_be_associated_with_multiple_orders'))
69
69
  end
70
70
  end
71
71
 
@@ -7,7 +7,6 @@ module Spree
7
7
  CANCELABLE_STATES = ['on_hand', 'backordered', 'shipped']
8
8
 
9
9
  belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :inventory_units
10
- belongs_to :order, class_name: "Spree::Order", inverse_of: :inventory_units
11
10
  belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units
12
11
  belongs_to :return_authorization, class_name: "Spree::ReturnAuthorization", inverse_of: :inventory_units
13
12
  belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units
@@ -16,8 +15,15 @@ module Spree
16
15
  has_many :return_items, inverse_of: :inventory_unit, dependent: :destroy
17
16
  has_one :original_return_item, class_name: "Spree::ReturnItem", foreign_key: :exchange_inventory_unit_id, dependent: :destroy
18
17
  has_one :unit_cancel, class_name: "Spree::UnitCancel"
18
+ has_one :order, through: :shipment
19
19
 
20
- validates_presence_of :order, :shipment, :line_item, :variant
20
+ delegate :order_id, to: :shipment
21
+
22
+ def order=(_)
23
+ raise "The order association has been removed from InventoryUnit. The order is now determined from the shipment."
24
+ end
25
+
26
+ validates_presence_of :shipment, :line_item, :variant
21
27
 
22
28
  before_destroy :ensure_can_destroy
23
29
 
@@ -2,17 +2,6 @@ module Spree
2
2
  class LogEntry < Spree::Base
3
3
  belongs_to :source, polymorphic: true
4
4
 
5
- # Fix for https://github.com/spree/spree/issues/1767
6
- # If a payment fails, we want to make sure we keep the record of it failing
7
- after_rollback :save_anyway
8
-
9
- def save_anyway
10
- log = Spree::LogEntry.new
11
- log.source = source
12
- log.details = details
13
- log.save!
14
- end
15
-
16
5
  def parsed_details
17
6
  @details ||= YAML.load(details)
18
7
  end
@@ -73,13 +73,14 @@ module Spree
73
73
  has_many :products, through: :variants
74
74
 
75
75
  # Shipping
76
- has_many :inventory_units, inverse_of: :order
77
- has_many :cartons, -> { distinct }, through: :inventory_units
78
76
  has_many :shipments, dependent: :destroy, inverse_of: :order do
79
77
  def states
80
78
  pluck(:state).uniq
81
79
  end
82
80
  end
81
+ has_many :inventory_units, through: :shipments
82
+ has_many :cartons, -> { distinct }, through: :inventory_units
83
+
83
84
  has_many :order_stock_locations, class_name: "Spree::OrderStockLocation"
84
85
  has_many :stock_locations, through: :order_stock_locations
85
86
 
@@ -131,7 +132,13 @@ module Spree
131
132
  validates :number, presence: true, uniqueness: { allow_blank: true }
132
133
  validates :store_id, presence: true
133
134
 
134
- make_permalink field: :number
135
+ def self.find_by_param(value)
136
+ find_by number: value
137
+ end
138
+
139
+ def self.find_by_param!(value)
140
+ find_by! number: value
141
+ end
135
142
 
136
143
  delegate :update_totals, :persist_totals, to: :updater
137
144
  delegate :firstname, :lastname, to: :bill_address, prefix: true, allow_nil: true
@@ -150,7 +157,7 @@ module Spree
150
157
  scope :by_store, ->(store) { where(store_id: store.id) }
151
158
 
152
159
  # shows completed orders first, by their completed_at date, then uncompleted orders by their created_at
153
- scope :reverse_chronological, -> { order('spree_orders.completed_at IS NULL', completed_at: :desc, created_at: :desc) }
160
+ scope :reverse_chronological, -> { order(Arel.sql('spree_orders.completed_at IS NULL'), completed_at: :desc, created_at: :desc) }
154
161
 
155
162
  def self.by_customer(customer)
156
163
  joins(:user).where("#{Spree.user_class.table_name}.email" => customer)
@@ -168,6 +175,14 @@ module Spree
168
175
  where(completed_at: nil)
169
176
  end
170
177
 
178
+ def self.canceled
179
+ where(state: 'canceled')
180
+ end
181
+
182
+ def self.not_canceled
183
+ where.not(state: 'canceled')
184
+ end
185
+
171
186
  # Use this method in other gems that wish to register their own custom logic
172
187
  # that should be called after Order#update
173
188
  def self.register_update_hook(hook)
@@ -460,8 +475,8 @@ module Spree
460
475
  # Check to see if any line item variants are soft, deleted.
461
476
  # If so add error and restart checkout.
462
477
  def ensure_line_item_variants_are_not_deleted
463
- if line_items.any? { |li| li.variant.paranoia_destroyed? }
464
- errors.add(:base, Spree.t(:deleted_variants_present))
478
+ if line_items.any? { |li| li.variant.discarded? }
479
+ errors.add(:base, I18n.t('spree.deleted_variants_present'))
465
480
  restart_checkout_flow
466
481
  false
467
482
  else
@@ -520,15 +535,15 @@ module Spree
520
535
 
521
536
  def ensure_shipping_address
522
537
  unless ship_address && ship_address.valid?
523
- errors.add(:base, Spree.t(:ship_address_required)) && (return false)
538
+ errors.add(:base, I18n.t('spree.ship_address_required')) && (return false)
524
539
  end
525
540
  end
526
541
 
527
542
  def create_proposed_shipments
528
543
  if completed?
529
- raise CannotRebuildShipments.new(Spree.t(:cannot_rebuild_shipments_order_completed))
544
+ raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed'))
530
545
  elsif shipments.any? { |s| !s.pending? }
531
- raise CannotRebuildShipments.new(Spree.t(:cannot_rebuild_shipments_shipments_not_pending))
546
+ raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_shipments_not_pending'))
532
547
  else
533
548
  shipments.destroy_all
534
549
  self.shipments = Spree::Config.stock.coordinator_class.new(self).shipments
@@ -660,7 +675,7 @@ module Spree
660
675
  payments.reset
661
676
 
662
677
  if payments.where(state: %w(checkout pending completed)).sum(:amount) != total
663
- errors.add(:base, Spree.t("store_credit.errors.unable_to_fund")) && (return false)
678
+ errors.add(:base, I18n.t('spree.store_credit.errors.unable_to_fund')) && (return false)
664
679
  end
665
680
  end
666
681
 
@@ -782,7 +797,7 @@ module Spree
782
797
  return if !payment_required?
783
798
 
784
799
  if payments.valid.empty?
785
- errors.add(:base, Spree.t(:no_payment_found))
800
+ errors.add(:base, I18n.t('spree.no_payment_found'))
786
801
  return false
787
802
  end
788
803
 
@@ -806,12 +821,12 @@ module Spree
806
821
  # }
807
822
  #
808
823
  def update_params_payment_source
824
+ Spree::Deprecation.warn('update_params_payment_source is deprecated. Please use set_payment_parameters_amount instead.', caller)
809
825
  if @updating_params[:order] && (@updating_params[:order][:payments_attributes] || @updating_params[:order][:existing_card])
810
826
  @updating_params[:order][:payments_attributes] ||= [{}]
811
827
  @updating_params[:order][:payments_attributes].first[:amount] = total
812
828
  end
813
829
  end
814
- deprecate update_params_payment_source: :set_payment_parameters_amount, deprecator: Spree::Deprecation
815
830
 
816
831
  def associate_store
817
832
  self.store ||= Spree::Store.default
@@ -842,7 +857,7 @@ module Spree
842
857
  if adjustment_changed
843
858
  restart_checkout_flow
844
859
  recalculate
845
- errors.add(:base, Spree.t(:promotion_total_changed_before_complete))
860
+ errors.add(:base, I18n.t('spree.promotion_total_changed_before_complete'))
846
861
  end
847
862
  errors.empty?
848
863
  end
@@ -854,7 +869,7 @@ module Spree
854
869
 
855
870
  def ensure_line_items_present
856
871
  unless line_items.present?
857
- errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) && (return false)
872
+ errors.add(:base, I18n.t('spree.there_are_no_items_for_this_order')) && (return false)
858
873
  end
859
874
  end
860
875
 
@@ -863,13 +878,13 @@ module Spree
863
878
  # After this point, order redirects back to 'address' state and asks user to pick a proper address
864
879
  # Therefore, shipments are not necessary at this point.
865
880
  shipments.destroy_all
866
- errors.add(:base, Spree.t(:items_cannot_be_shipped)) && (return false)
881
+ errors.add(:base, I18n.t('spree.items_cannot_be_shipped')) && (return false)
867
882
  end
868
883
  end
869
884
 
870
885
  def after_cancel
871
886
  shipments.each(&:cancel!)
872
- payments.completed.each(&:cancel!)
887
+ payments.completed.each { |payment| payment.cancel! unless payment.fully_refunded? }
873
888
  payments.store_credits.pending.each(&:void_transaction!)
874
889
 
875
890
  send_cancel_email
@@ -15,8 +15,6 @@ module Spree
15
15
  # @param [Hash] :options Options for the adding proccess
16
16
  # Valid options:
17
17
  # shipment: [Spree::Shipment] LineItem target shipment
18
- # stock_location_quantities:
19
- # stock_location_id: The stock location to source from
20
18
  #
21
19
  # @return [Spree::LineItem]
22
20
  def add(variant, quantity = 1, options = {})
@@ -98,10 +96,6 @@ module Spree
98
96
  line_item.quantity += quantity.to_i
99
97
  line_item.options = ActionController::Parameters.new(options).permit(PermittedAttributes.line_item_attributes).to_h
100
98
 
101
- if line_item.new_record?
102
- create_order_stock_locations(line_item, options[:stock_location_quantities])
103
- end
104
-
105
99
  line_item.target_shipment = options[:shipment]
106
100
  line_item.save!
107
101
  line_item
@@ -130,13 +124,5 @@ module Spree
130
124
 
131
125
  line_item
132
126
  end
133
-
134
- def create_order_stock_locations(line_item, stock_location_quantities)
135
- return unless stock_location_quantities.present?
136
- order = line_item.order
137
- stock_location_quantities.each do |stock_location_id, quantity|
138
- order.order_stock_locations.create!(stock_location_id: stock_location_id, quantity: quantity, variant_id: line_item.variant_id) unless quantity.to_i.zero?
139
- end
140
- end
141
127
  end
142
128
  end
@@ -72,7 +72,6 @@ class Spree::OrderShipping
72
72
  end
73
73
 
74
74
  send_shipment_emails(carton) if stock_location.fulfillable? && !suppress_mailer # e.g. digital gift cards that aren't actually shipped
75
- fulfill_order_stock_locations(stock_location)
76
75
  @order.recalculate
77
76
 
78
77
  carton
@@ -80,10 +79,6 @@ class Spree::OrderShipping
80
79
 
81
80
  private
82
81
 
83
- def fulfill_order_stock_locations(stock_location)
84
- Spree::OrderStockLocation.fulfill_for_order_with_stock_location(@order, stock_location)
85
- end
86
-
87
82
  def send_shipment_emails(carton)
88
83
  carton.orders.each do |order|
89
84
  Spree::Config.carton_shipped_email_class.shipped_email(order: order, carton: carton).deliver_later
@@ -200,10 +200,6 @@ module Spree
200
200
  end
201
201
  end
202
202
 
203
- def round_money(n)
204
- (n * 100).round / 100.0
205
- end
206
-
207
203
  def update_item_promotions
208
204
  [*line_items, *shipments].each do |item|
209
205
  promotion_adjustments = item.adjustments.select(&:promotion?)
@@ -147,6 +147,11 @@ module Spree
147
147
  credit_allowed > 0
148
148
  end
149
149
 
150
+ # @return [Boolean] true when this payment has been fully refunded
151
+ def fully_refunded?
152
+ refunds.map(&:amount).sum == amount
153
+ end
154
+
150
155
  # @return [Array<String>] the actions available on this payment
151
156
  def actions
152
157
  sa = source_actions
@@ -200,7 +205,7 @@ module Spree
200
205
  if source && !source.valid?
201
206
  source.errors.each do |field, error|
202
207
  field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
203
- errors.add(Spree.t(source.class.to_s.demodulize.underscore), "#{field_name} #{error}")
208
+ errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error}")
204
209
  end
205
210
  end
206
211
  if errors.any?
@@ -143,11 +143,11 @@ module Spree
143
143
  yield
144
144
  else
145
145
  invalidate!
146
- raise Core::GatewayError.new(Spree.t(:payment_method_not_supported))
146
+ raise Core::GatewayError.new(I18n.t('spree.payment_method_not_supported'))
147
147
  end
148
148
  end
149
149
  else
150
- raise Core::GatewayError.new(Spree.t(:payment_processing_failed))
150
+ raise Core::GatewayError.new(I18n.t('spree.payment_processing_failed'))
151
151
  end
152
152
  end
153
153
 
@@ -205,11 +205,11 @@ module Spree
205
205
  if error.is_a? ActiveMerchant::Billing::Response
206
206
  text = error.params['message'] || error.params['response_reason_text'] || error.message
207
207
  elsif error.is_a? ActiveMerchant::ConnectionError
208
- text = Spree.t(:unable_to_connect_to_gateway)
208
+ text = I18n.t('spree.unable_to_connect_to_gateway')
209
209
  else
210
210
  text = error.to_s
211
211
  end
212
- logger.error(Spree.t(:gateway_error))
212
+ logger.error(I18n.t('spree.gateway_error'))
213
213
  logger.error(" #{error.to_yaml}")
214
214
  raise Core::GatewayError.new(text)
215
215
  end
@@ -1,3 +1,4 @@
1
+ require 'discard'
1
2
  require 'spree/preferences/statically_configurable'
2
3
 
3
4
  module Spree
@@ -16,6 +17,11 @@ module Spree
16
17
  preference :test_mode, :boolean, default: true
17
18
 
18
19
  acts_as_paranoid
20
+ include Spree::ParanoiaDeprecations
21
+
22
+ include Discard::Model
23
+ self.discard_column = :deleted_at
24
+
19
25
  acts_as_list
20
26
  DISPLAY = [:both, :front_end, :back_end]
21
27
 
@@ -58,7 +64,7 @@ module Spree
58
64
  def providers
59
65
  Spree::Deprecation.warn 'Spree::PaymentMethod.providers is deprecated and will be deleted in Solidus 3.0. ' \
60
66
  'Please use Rails.application.config.spree.payment_methods instead'
61
- Rails.application.config.spree.payment_methods
67
+ Spree::Config.environment.payment_methods
62
68
  end
63
69
 
64
70
  def available(display_on = nil, store: nil)
@@ -184,7 +190,7 @@ module Spree
184
190
  # If method_type has been overridden, call it and return the value, otherwise return nil
185
191
  def deprecated_method_type_override
186
192
  if method(:method_type).owner != Spree::PaymentMethod
187
- Spree::Deprecation.warn "overriding PaymentMethod#method_type is deprecated and will be removed from Solidus 3.0 (override partial_name instead)", caller
193
+ Spree::Deprecation.warn "#{method(:method_type).owner} is overriding PaymentMethod#method_type. This is deprecated and will be removed from Solidus 3.0 (override partial_name instead).", caller[1..-1]
188
194
  method_type
189
195
  end
190
196
  end
@@ -258,6 +264,5 @@ module Spree
258
264
  raise ::NotImplementedError, "You must implement gateway_class method for #{self.class}."
259
265
  end
260
266
  end
261
- deprecate provider_class: :gateway_class, deprecator: Spree::Deprecation
262
267
  end
263
268
  end
@@ -8,7 +8,7 @@ module Spree
8
8
  #
9
9
  class PaymentMethod::CreditCard < PaymentMethod
10
10
  def payment_source_class
11
- CreditCard
11
+ Spree::CreditCard
12
12
  end
13
13
 
14
14
  def partial_name
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  def authorize(amount_in_cents, provided_store_credit, gateway_options = {})
8
8
  if provided_store_credit.nil?
9
- ActiveMerchant::Billing::Response.new(false, Spree.t('store_credit.unable_to_find'), {}, {})
9
+ ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {})
10
10
  else
11
11
  action = ->(store_credit) {
12
12
  store_credit.authorize(
@@ -40,7 +40,7 @@ module Spree
40
40
  end
41
41
 
42
42
  if event.blank?
43
- ActiveMerchant::Billing::Response.new(false, Spree.t('store_credit.unable_to_find'), {}, {})
43
+ ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {})
44
44
  else
45
45
  capture(amount_in_cents, event.authorization_code, gateway_options)
46
46
  end
@@ -92,7 +92,7 @@ module Spree
92
92
  if response = action.call(store_credit)
93
93
  # note that we only need to return the auth code on an 'auth', but it's innocuous to always return
94
94
  ActiveMerchant::Billing::Response.new(true,
95
- Spree.t('store_credit.successful_action', action: action_name),
95
+ I18n.t('spree.store_credit.successful_action', action: action_name),
96
96
  {}, { authorization: auth_code || response })
97
97
  else
98
98
  ActiveMerchant::Billing::Response.new(false, store_credit.errors.full_messages.join, {}, {})
@@ -105,7 +105,7 @@ module Spree
105
105
  store_credit = Spree::StoreCreditEvent.find_by(authorization_code: auth_code).try(:store_credit)
106
106
 
107
107
  if store_credit.nil?
108
- ActiveMerchant::Billing::Response.new(false, Spree.t('store_credit.unable_to_find_for_action', auth_code: auth_code, action: action_name), {}, {})
108
+ ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find_for_action', auth_code: auth_code, action: action_name), {}, {})
109
109
  else
110
110
  handle_action_call(store_credit, action, action_name, auth_code)
111
111
  end
@@ -1,6 +1,12 @@
1
+ require 'discard'
2
+
1
3
  module Spree
2
4
  class Price < Spree::Base
3
5
  acts_as_paranoid
6
+ include Spree::ParanoiaDeprecations
7
+
8
+ include Discard::Model
9
+ self.discard_column = :deleted_at
4
10
 
5
11
  MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
6
12
 
@@ -18,7 +24,7 @@ module Spree
18
24
  validates :currency, inclusion: { in: ::Money::Currency.all.map(&:iso_code), message: :invalid_code }
19
25
  validates :country, presence: true, unless: -> { for_any_country? }
20
26
 
21
- scope :currently_valid, -> { order("country_iso IS NULL, updated_at DESC, id DESC") }
27
+ scope :currently_valid, -> { order(Arel.sql("country_iso IS NULL, updated_at DESC, id DESC")) }
22
28
  scope :for_master, -> { joins(:variant).where(spree_variants: { is_master: true }) }
23
29
  scope :for_variant, -> { joins(:variant).where(spree_variants: { is_master: false }) }
24
30
  scope :for_any_country, -> { where(country: nil) }
@@ -1,3 +1,5 @@
1
+ require 'discard'
2
+
1
3
  module Spree
2
4
  # Products represent an entity for sale in a store. Products can have
3
5
  # variations, called variants. Product properties include description,
@@ -12,6 +14,18 @@ module Spree
12
14
  friendly_id :slug_candidates, use: :history
13
15
 
14
16
  acts_as_paranoid
17
+ include Spree::ParanoiaDeprecations
18
+
19
+ include Discard::Model
20
+ self.discard_column = :deleted_at
21
+
22
+ after_discard do
23
+ variants_including_master.discard_all
24
+ self.product_option_types = []
25
+ self.product_properties = []
26
+ self.classifications = []
27
+ self.product_promotion_rules = []
28
+ end
15
29
 
16
30
  has_many :product_option_types, dependent: :destroy, inverse_of: :product
17
31
  has_many :option_types, through: :product_option_types
@@ -60,23 +74,37 @@ module Spree
60
74
  end
61
75
 
62
76
  MASTER_ATTRIBUTES = [
63
- :rebuild_vat_prices, :sku, :price, :currency, :display_amount, :display_price, :weight,
64
- :height, :width, :depth, :cost_currency, :price_in, :price_for, :amount_in, :cost_price
77
+ :cost_currency,
78
+ :cost_price,
79
+ :depth,
80
+ :height,
81
+ :price,
82
+ :sku,
83
+ :weight,
84
+ :width,
65
85
  ]
66
86
  MASTER_ATTRIBUTES.each do |attr|
67
87
  delegate :"#{attr}", :"#{attr}=", to: :find_or_build_master
68
88
  end
69
89
 
70
- delegate :display_amount, :display_price, :has_default_price?, to: :find_or_build_master
90
+ delegate :amount_in,
91
+ :display_amount,
92
+ :display_price,
93
+ :has_default_price?,
94
+ :images,
95
+ :price_for,
96
+ :price_in,
97
+ :rebuild_vat_prices=,
98
+ to: :find_or_build_master
71
99
 
72
- delegate :images, to: :master, prefix: true
73
- alias_method :images, :master_images
100
+ alias_method :master_images, :images
74
101
 
75
102
  has_many :variant_images, -> { order(:position) }, source: :images, through: :variants_including_master
76
103
 
77
104
  after_create :build_variants_from_option_values_hash, if: :option_values_hash
78
105
 
79
106
  after_destroy :punch_slug
107
+ after_discard :punch_slug
80
108
 
81
109
  after_initialize :ensure_master
82
110
 
@@ -340,7 +368,7 @@ module Spree
340
368
  run_callbacks(:touch)
341
369
  end
342
370
 
343
- # Iterate through this products taxons and taxonomies and touch their timestamps in a batch
371
+ # Iterate through this product's taxons and taxonomies and touch their timestamps in a batch
344
372
  def touch_taxons
345
373
  taxons_to_touch = taxons.map(&:self_and_ancestors).flatten.uniq
346
374
  unless taxons_to_touch.empty?