solidus_core 2.4.2 → 2.5.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

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?