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
@@ -6,7 +6,7 @@ module Spree
6
6
  if @return_item.inventory_unit.order.completed?
7
7
  return true
8
8
  else
9
- add_error(:order_not_completed, Spree.t('return_item_order_not_completed'))
9
+ add_error(:order_not_completed, I18n.t('spree.return_item_order_not_completed'))
10
10
  return false
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  if @return_item.return_authorization.present?
7
7
  return true
8
8
  else
9
- add_error(:rma_required, Spree.t('return_item_rma_ineligible'))
9
+ add_error(:rma_required, I18n.t('spree.return_item_rma_ineligible'))
10
10
  return false
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
7
7
  return true
8
8
  else
9
- add_error(:number_of_days, Spree.t('return_item_time_period_ineligible'))
9
+ add_error(:number_of_days, I18n.t('spree.return_item_time_period_ineligible'))
10
10
  return false
11
11
  end
12
12
  end
@@ -7,7 +7,7 @@ module Spree
7
7
 
8
8
  has_many :adjustments, as: :adjustable, inverse_of: :adjustable, dependent: :delete_all
9
9
  has_many :inventory_units, dependent: :destroy, inverse_of: :shipment
10
- has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy
10
+ has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy, inverse_of: :shipment
11
11
  has_many :shipping_methods, through: :shipping_rates
12
12
  has_many :state_changes, as: :stateful
13
13
  has_many :cartons, -> { uniq }, through: :inventory_units
@@ -219,6 +219,14 @@ module Spree
219
219
  shipping_rates
220
220
  end
221
221
 
222
+ def select_shipping_method(shipping_method)
223
+ estimator = Spree::Config.stock.estimator_class.new
224
+ rates = estimator.shipping_rates(to_package, false)
225
+ rate = rates.detect { |r| r.shipping_method_id == shipping_method.id }
226
+ rate.selected = true
227
+ self.shipping_rates = [rate]
228
+ end
229
+
222
230
  def selected_shipping_rate
223
231
  shipping_rates.detect(&:selected?)
224
232
  end
@@ -232,14 +240,17 @@ module Spree
232
240
  end
233
241
 
234
242
  def selected_shipping_rate_id=(id)
235
- selected_shipping_rate.update(selected: false) if selected_shipping_rate
243
+ return if selected_shipping_rate_id == id
236
244
  new_rate = shipping_rates.detect { |rate| rate.id == id.to_i }
237
245
  fail(
238
246
  ArgumentError,
239
247
  "Could not find shipping rate id #{id} for shipment #{number}"
240
248
  ) unless new_rate
241
- new_rate.update(selected: true)
242
- save!
249
+
250
+ transaction do
251
+ selected_shipping_rate.update!(selected: false) if selected_shipping_rate
252
+ new_rate.update!(selected: true)
253
+ end
243
254
  end
244
255
 
245
256
  # Determines the appropriate +state+ according to the following logic:
@@ -259,11 +270,10 @@ module Spree
259
270
  end
260
271
  end
261
272
 
262
- def set_up_inventory(state, variant, order, line_item)
273
+ def set_up_inventory(state, variant, _order, line_item)
263
274
  inventory_units.create(
264
275
  state: state,
265
276
  variant_id: variant.id,
266
- order_id: order.id,
267
277
  line_item_id: line_item.id
268
278
  )
269
279
  end
@@ -1,8 +1,15 @@
1
+ require 'discard'
2
+
1
3
  module Spree
2
4
  # Represents a means of having a shipment delivered, such as FedEx or UPS.
3
5
  #
4
6
  class ShippingMethod < Spree::Base
5
7
  acts_as_paranoid
8
+ include Spree::ParanoiaDeprecations
9
+
10
+ include Discard::Model
11
+ self.discard_column = :deleted_at
12
+
6
13
  include Spree::CalculatedAdjustments
7
14
  DISPLAY = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
8
15
  [:both, :front_end, :back_end],
@@ -9,6 +9,7 @@ module Spree
9
9
  has_many :taxes,
10
10
  class_name: "Spree::ShippingRateTax",
11
11
  foreign_key: "shipping_rate_id",
12
+ inverse_of: :shipping_rate,
12
13
  dependent: :destroy
13
14
 
14
15
  delegate :order, :currency, to: :shipment
@@ -26,21 +27,20 @@ module Spree
26
27
  def display_price
27
28
  price = display_amount.to_s
28
29
 
29
- return price if taxes.empty? || amount == 0
30
+ return price if taxes.to_a.empty? || amount == 0
30
31
 
31
32
  tax_explanations = taxes.map(&:label).join(tax_label_separator)
32
33
 
33
- Spree.t :display_price_with_explanations,
34
- scope: 'shipping_rate.display_price',
35
- price: price,
36
- explanations: tax_explanations
34
+ I18n.t 'spree.shipping_rate.display_price.display_price_with_explanations',
35
+ price: price,
36
+ explanations: tax_explanations
37
37
  end
38
38
  alias_method :display_cost, :display_price
39
39
 
40
40
  private
41
41
 
42
42
  def tax_label_separator
43
- Spree.t :tax_label_separator, scope: 'shipping_rate.display_price'
43
+ I18n.t 'spree.shipping_rate.display_price.tax_label_separator'
44
44
  end
45
45
  end
46
46
  end
@@ -14,8 +14,8 @@ module Spree
14
14
  delegate :currency, to: :shipping_rate, allow_nil: true
15
15
 
16
16
  def label
17
- Spree.t translation_key,
18
- scope: 'shipping_rate_tax.label',
17
+ I18n.t translation_key,
18
+ scope: 'spree.shipping_rate_tax.label',
19
19
  amount: display_absolute_amount,
20
20
  tax_rate_name: tax_rate.name
21
21
  end
@@ -9,8 +9,8 @@ module Spree
9
9
  display_name = variant.name.to_s
10
10
  display_name += %{ (#{variant.options_text})} unless variant.options_text.blank?
11
11
 
12
- line_item.errors[:quantity] << Spree.t(
13
- :selected_quantity_not_available,
12
+ line_item.errors[:quantity] << I18n.t(
13
+ 'spree.selected_quantity_not_available',
14
14
  item: display_name.inspect
15
15
  )
16
16
  false
@@ -31,6 +31,8 @@ module Spree
31
31
  end
32
32
 
33
33
  def calculate_shipping_rates(package)
34
+ tax_calculator_class = Spree::Config.shipping_rate_tax_calculator_class
35
+ tax_calculator = tax_calculator_class.new(package.shipment.order)
34
36
  shipping_methods(package).map do |shipping_method|
35
37
  cost = shipping_method.calculator.compute(package)
36
38
  if cost
@@ -38,7 +40,13 @@ module Spree
38
40
  cost: cost,
39
41
  shipment: package.shipment
40
42
  )
41
- Spree::Config.shipping_rate_taxer_class.new.tax(rate)
43
+ tax_calculator.calculate(rate).each do |tax|
44
+ rate.taxes.new(
45
+ amount: tax.amount,
46
+ tax_rate: tax.tax_rate
47
+ )
48
+ end
49
+ rate
42
50
  end
43
51
  end.compact
44
52
  end
@@ -11,8 +11,7 @@ module Spree
11
11
  Spree::InventoryUnit.new(
12
12
  pending: true,
13
13
  variant: line_item.variant,
14
- line_item: line_item,
15
- order: @order
14
+ line_item: line_item
16
15
  )
17
16
  end
18
17
  end
@@ -3,8 +3,8 @@ module Spree
3
3
  class InventoryValidator < ActiveModel::Validator
4
4
  def validate(line_item)
5
5
  if line_item.inventory_units.count != line_item.quantity
6
- line_item.errors[:inventory] << Spree.t(
7
- :inventory_not_available,
6
+ line_item.errors[:inventory] << I18n.t(
7
+ 'spree.inventory_not_available',
8
8
  item: line_item.variant.name
9
9
  )
10
10
  end
@@ -44,7 +44,7 @@ module Spree
44
44
  def order
45
45
  # Fix regression that removed package.order.
46
46
  # Find it dynamically through an inventory_unit.
47
- contents.detect { |item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
47
+ contents.detect { |item| !!item.try(:line_item).try(:order) }.try(:line_item).try(:order)
48
48
  end
49
49
 
50
50
  # @return [Float] the summed weight of the contents of this package
@@ -10,7 +10,7 @@ module Spree
10
10
  # * Combine allocated and on hand inventory into a single shipment per-location
11
11
  #
12
12
  # After allocation, splitters are run on each Package (as configured in
13
- # Rails.application.config.spree.stock_splitters)
13
+ # Spree::Config.environment.stock_splitters)
14
14
  #
15
15
  # Finally, shipping rates are calculated using the class configured as
16
16
  # Spree::Config.stock.estimator_class.
@@ -20,7 +20,7 @@ module Spree
20
20
  def initialize(order, inventory_units = nil)
21
21
  @order = order
22
22
  @inventory_units = inventory_units || InventoryUnitBuilder.new(order).units
23
- @splitters = Rails.application.config.spree.stock_splitters
23
+ @splitters = Spree::Config.environment.stock_splitters
24
24
  @stock_locations = Spree::StockLocation.active
25
25
 
26
26
  @inventory_units_by_variant = @inventory_units.group_by(&:variant)
@@ -1,6 +1,12 @@
1
+ require 'discard'
2
+
1
3
  module Spree
2
4
  class StockItem < 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
  belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :stock_items
6
12
  belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', inverse_of: :stock_items
@@ -24,7 +24,7 @@ module Spree
24
24
  scope :active, -> { where(active: true) }
25
25
  scope :order_default, -> { order(default: :desc, name: :asc) }
26
26
 
27
- after_create :create_stock_items, if: "self.propagate_all_variants?"
27
+ after_create :create_stock_items, if: :propagate_all_variants?
28
28
  after_save :ensure_one_default
29
29
 
30
30
  def state_text
@@ -93,7 +93,7 @@ module Spree
93
93
 
94
94
  def move(variant, quantity, originator = nil)
95
95
  if quantity < 1 && !stock_item(variant)
96
- raise InvalidMovementError.new(Spree.t(:negative_movement_absent_item))
96
+ raise InvalidMovementError.new(I18n.t('spree.negative_movement_absent_item'))
97
97
  end
98
98
  stock_item_or_create(variant).stock_movements.create!(quantity: quantity,
99
99
  originator: originator)
@@ -1,5 +1,11 @@
1
+ require 'discard'
2
+
1
3
  class Spree::StoreCredit < Spree::PaymentSource
2
4
  acts_as_paranoid
5
+ include Spree::ParanoiaDeprecations
6
+
7
+ include Discard::Model
8
+ self.discard_column = :deleted_at
3
9
 
4
10
  VOID_ACTION = 'void'
5
11
  CREDIT_ACTION = 'credit'
@@ -33,6 +39,7 @@ class Spree::StoreCredit < Spree::PaymentSource
33
39
  before_validation :associate_credit_type
34
40
  before_validation :validate_category_unchanged, on: :update
35
41
  before_destroy :validate_no_amount_used
42
+ validate :validate_no_amount_used, if: :discarded?
36
43
 
37
44
  attr_accessor :action, :action_amount, :action_originator, :action_authorization_code, :update_reason
38
45
 
@@ -72,9 +79,9 @@ class Spree::StoreCredit < Spree::PaymentSource
72
79
 
73
80
  def validate_authorization(amount, order_currency)
74
81
  if amount_remaining.to_d < amount.to_d
75
- errors.add(:base, Spree.t('store_credit.insufficient_funds'))
82
+ errors.add(:base, I18n.t('spree.store_credit.insufficient_funds'))
76
83
  elsif currency != order_currency
77
- errors.add(:base, Spree.t('store_credit.currency_mismatch'))
84
+ errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
78
85
  end
79
86
  errors.blank?
80
87
  end
@@ -85,7 +92,7 @@ class Spree::StoreCredit < Spree::PaymentSource
85
92
 
86
93
  if amount <= auth_event.amount
87
94
  if currency != order_currency
88
- errors.add(:base, Spree.t('store_credit.currency_mismatch'))
95
+ errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
89
96
  false
90
97
  else
91
98
  update_attributes!({
@@ -100,7 +107,7 @@ class Spree::StoreCredit < Spree::PaymentSource
100
107
  authorization_code
101
108
  end
102
109
  else
103
- errors.add(:base, Spree.t('store_credit.insufficient_authorized_amount'))
110
+ errors.add(:base, I18n.t('spree.store_credit.insufficient_authorized_amount'))
104
111
  false
105
112
  end
106
113
  end
@@ -117,7 +124,7 @@ class Spree::StoreCredit < Spree::PaymentSource
117
124
  })
118
125
  true
119
126
  else
120
- errors.add(:base, Spree.t('store_credit.unable_to_void', auth_code: authorization_code))
127
+ errors.add(:base, I18n.t('spree.store_credit.unable_to_void', auth_code: authorization_code))
121
128
  false
122
129
  end
123
130
  end
@@ -127,7 +134,7 @@ class Spree::StoreCredit < Spree::PaymentSource
127
134
  capture_event = store_credit_events.find_by(action: CAPTURE_ACTION, authorization_code: authorization_code)
128
135
 
129
136
  if currency != order_currency # sanity check to make sure the order currency hasn't changed since the auth
130
- errors.add(:base, Spree.t('store_credit.currency_mismatch'))
137
+ errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
131
138
  false
132
139
  elsif capture_event && amount <= capture_event.amount
133
140
  action_attributes = {
@@ -139,7 +146,7 @@ class Spree::StoreCredit < Spree::PaymentSource
139
146
  create_credit_record(amount, action_attributes)
140
147
  true
141
148
  else
142
- errors.add(:base, Spree.t('store_credit.unable_to_credit', auth_code: authorization_code))
149
+ errors.add(:base, I18n.t('spree.store_credit.unable_to_credit', auth_code: authorization_code))
143
150
  false
144
151
  end
145
152
  end
@@ -182,7 +189,7 @@ class Spree::StoreCredit < Spree::PaymentSource
182
189
  self.invalidated_at = Time.current
183
190
  save
184
191
  else
185
- errors.add(:invalidated_at, Spree.t("store_credit.errors.cannot_invalidate_uncaptured_authorization"))
192
+ errors.add(:invalidated_at, I18n.t('spree.store_credit.errors.cannot_invalidate_uncaptured_authorization'))
186
193
  return false
187
194
  end
188
195
  end
@@ -222,7 +229,7 @@ class Spree::StoreCredit < Spree::PaymentSource
222
229
  end
223
230
 
224
231
  def credit_allocation_memo
225
- Spree.t("store_credit.credit_allocation_memo", id: id)
232
+ I18n.t("spree.store_credit.credit_allocation_memo", id: id)
226
233
  end
227
234
 
228
235
  def store_event
@@ -247,19 +254,19 @@ class Spree::StoreCredit < Spree::PaymentSource
247
254
  return true if amount_used.nil?
248
255
 
249
256
  if amount_used > amount
250
- errors.add(:amount_used, Spree.t('admin.store_credits.errors.amount_used_cannot_be_greater'))
257
+ errors.add(:amount_used, I18n.t('spree.admin.store_credits.errors.amount_used_cannot_be_greater'))
251
258
  end
252
259
  end
253
260
 
254
261
  def amount_authorized_less_than_or_equal_to_amount
255
262
  if (amount_used + amount_authorized) > amount
256
- errors.add(:amount_authorized, Spree.t('admin.store_credits.errors.amount_authorized_exceeds_total_credit'))
263
+ errors.add(:amount_authorized, I18n.t('spree.admin.store_credits.errors.amount_authorized_exceeds_total_credit'))
257
264
  end
258
265
  end
259
266
 
260
267
  def validate_category_unchanged
261
268
  if category_id_changed?
262
- errors.add(:category, Spree.t('admin.store_credits.errors.cannot_be_modified'))
269
+ errors.add(:category, I18n.t('spree.admin.store_credits.errors.cannot_be_modified'))
263
270
  end
264
271
  end
265
272
 
@@ -3,7 +3,7 @@ class Spree::StoreCreditCategory < Spree::Base
3
3
  self.non_expiring_credit_types = [Spree::StoreCreditType::NON_EXPIRING]
4
4
 
5
5
  class_attribute :reimbursement_category_name
6
- self.reimbursement_category_name = Spree.t("store_credit_category.default")
6
+ self.reimbursement_category_name = I18n.t('spree.store_credit_category.default')
7
7
 
8
8
  def self.reimbursement_category(_reimbursement)
9
9
  Spree::StoreCreditCategory.find_by(name: reimbursement_category_name) ||
@@ -1,6 +1,12 @@
1
+ require 'discard'
2
+
1
3
  module Spree
2
4
  class StoreCreditEvent < 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
  belongs_to :store_credit
6
12
  belongs_to :originator, polymorphic: true
@@ -44,7 +50,7 @@ module Spree
44
50
 
45
51
  def display_action
46
52
  return if NON_EXPOSED_ACTIONS.include?(action)
47
- Spree.t("store_credit.display_action.#{action}")
53
+ I18n.t("spree.store_credit.display_action.#{action}")
48
54
  end
49
55
 
50
56
  def order
@@ -8,7 +8,7 @@ module Spree
8
8
  # This parameter will be modified.
9
9
  # @return [Spree::ShippingRate] The shipping rate with associated tax objects
10
10
  def tax(shipping_rate)
11
- taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate).calculate
11
+ taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate.order).calculate(shipping_rate)
12
12
  taxes.each do |tax|
13
13
  shipping_rate.taxes.build(
14
14
  amount: tax.amount,
@@ -21,15 +21,24 @@ module Spree
21
21
  # @param [Spree::ShippingRate] shipping_rate the shipping rate to
22
22
  # calculate taxes on
23
23
  # @return [Spree::TaxCalculator::ShippingRate]
24
- def initialize(shipping_rate)
25
- @shipping_rate = shipping_rate
24
+ def initialize(order)
25
+ if order.is_a?(::Spree::ShippingRate)
26
+ Spree::Deprecation.warn "passing a single shipping rate to Spree::TaxCalculator::ShippingRate is DEPRECATED. It now expects an order"
27
+ shipping_rate = order
28
+ @order = shipping_rate.order
29
+ @shipping_rate = shipping_rate
30
+ else
31
+ @order = order
32
+ @shipping_rate = nil
33
+ end
26
34
  end
27
35
 
28
36
  # Calculate taxes for a shipping rate.
29
37
  #
30
38
  # @return [Array<Spree::Tax::ItemTax>] the calculated taxes for the
31
39
  # shipping rate
32
- def calculate
40
+ def calculate(shipping_rate)
41
+ shipping_rate ||= @shipping_rate
33
42
  rates_for_item(shipping_rate).map do |rate|
34
43
  amount = rate.compute_amount(shipping_rate)
35
44