solidus_core 1.2.3 → 1.3.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 (573) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/spree.js.coffee.erb +1 -1
  5. data/app/helpers/spree/base_helper.rb +21 -43
  6. data/app/helpers/spree/orders_helper.rb +0 -1
  7. data/app/helpers/spree/products_helper.rb +10 -12
  8. data/app/helpers/spree/taxons_helper.rb +4 -4
  9. data/app/mailers/spree/base_mailer.rb +1 -3
  10. data/app/mailers/spree/carton_mailer.rb +2 -2
  11. data/app/mailers/spree/order_mailer.rb +2 -2
  12. data/app/models/concerns/spree/adjustment_source.rb +12 -16
  13. data/app/models/concerns/spree/calculated_adjustments.rb +17 -14
  14. data/app/models/concerns/spree/default_price.rb +10 -26
  15. data/app/models/concerns/spree/display_money.rb +1 -1
  16. data/app/models/concerns/spree/ordered_property_value_list.rb +10 -12
  17. data/app/models/concerns/spree/ransackable_attributes.rb +6 -5
  18. data/app/models/concerns/spree/user_address_book.rb +87 -81
  19. data/app/models/concerns/spree/user_methods.rb +2 -2
  20. data/app/models/concerns/spree/user_payment_source.rb +12 -8
  21. data/app/models/spree/ability.rb +2 -2
  22. data/app/models/spree/address.rb +37 -38
  23. data/app/models/spree/adjustment.rb +2 -6
  24. data/app/models/spree/app_configuration.rb +60 -5
  25. data/app/models/spree/base.rb +1 -1
  26. data/app/models/spree/calculator/default_tax.rb +28 -24
  27. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
  28. data/app/models/spree/calculator/flat_rate.rb +2 -2
  29. data/app/models/spree/calculator/flexi_rate.rb +4 -4
  30. data/app/models/spree/calculator/percent_per_item.rb +8 -9
  31. data/app/models/spree/calculator/price_sack.rb +3 -3
  32. data/app/models/spree/calculator/returns/default_refund_amount.rb +11 -12
  33. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -2
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +3 -3
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  38. data/app/models/spree/calculator/tiered_flat_rate.rb +2 -1
  39. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  40. data/app/models/spree/calculator.rb +3 -3
  41. data/app/models/spree/carton.rb +2 -2
  42. data/app/models/spree/country.rb +7 -4
  43. data/app/models/spree/credit_card.rb +26 -22
  44. data/app/models/spree/customer_return.rb +8 -7
  45. data/app/models/spree/exchange.rb +1 -9
  46. data/app/models/spree/gateway/bogus.rb +31 -31
  47. data/app/models/spree/gateway/bogus_simple.rb +6 -8
  48. data/app/models/spree/gateway.rb +9 -15
  49. data/app/models/spree/image.rb +3 -3
  50. data/app/models/spree/inventory_unit.rb +23 -23
  51. data/app/models/spree/item_adjustments.rb +3 -2
  52. data/app/models/spree/legacy_user.rb +1 -5
  53. data/app/models/spree/line_item.rb +95 -84
  54. data/app/models/spree/option_type.rb +1 -1
  55. data/app/models/spree/option_value.rb +3 -1
  56. data/app/models/spree/order/checkout.rb +45 -44
  57. data/app/models/spree/order/payments.rb +42 -45
  58. data/app/models/spree/order.rb +70 -75
  59. data/app/models/spree/order_cancellations.rb +4 -4
  60. data/app/models/spree/order_capturing.rb +3 -2
  61. data/app/models/spree/order_contents.rb +61 -59
  62. data/app/models/spree/order_inventory.rb +59 -54
  63. data/app/models/spree/order_mutex.rb +0 -1
  64. data/app/models/spree/order_shipping.rb +8 -9
  65. data/app/models/spree/order_stock_location.rb +3 -3
  66. data/app/models/spree/order_update_attributes.rb +0 -2
  67. data/app/models/spree/order_updater.rb +11 -24
  68. data/app/models/spree/payment/processing.rb +26 -37
  69. data/app/models/spree/payment.rb +68 -71
  70. data/app/models/spree/payment_method/check.rb +2 -2
  71. data/app/models/spree/payment_method/store_credit.rb +6 -7
  72. data/app/models/spree/payment_method.rb +11 -8
  73. data/app/models/spree/preferences/configuration.rb +2 -2
  74. data/app/models/spree/preferences/preferable.rb +1 -1
  75. data/app/models/spree/preferences/preferable_class_methods.rb +1 -1
  76. data/app/models/spree/preferences/scoped_store.rb +6 -5
  77. data/app/models/spree/preferences/static_model_preferences.rb +1 -1
  78. data/app/models/spree/preferences/statically_configurable.rb +2 -2
  79. data/app/models/spree/preferences/store.rb +2 -6
  80. data/app/models/spree/price.rb +17 -19
  81. data/app/models/spree/product/scopes.rb +18 -17
  82. data/app/models/spree/product.rb +28 -11
  83. data/app/models/spree/product_property.rb +2 -0
  84. data/app/models/spree/product_scope/scopes.rb +22 -22
  85. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -4
  86. data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -8
  87. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +3 -3
  88. data/app/models/spree/promotion/actions/free_shipping.rb +4 -4
  89. data/app/models/spree/promotion/rules/first_order.rb +7 -6
  90. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +2 -3
  91. data/app/models/spree/promotion/rules/item_total.rb +5 -2
  92. data/app/models/spree/promotion/rules/nth_order.rb +3 -4
  93. data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
  94. data/app/models/spree/promotion/rules/option_value.rb +1 -2
  95. data/app/models/spree/promotion/rules/product.rb +4 -4
  96. data/app/models/spree/promotion/rules/taxon.rb +5 -5
  97. data/app/models/spree/promotion/rules/user.rb +1 -1
  98. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
  99. data/app/models/spree/promotion.rb +8 -8
  100. data/app/models/spree/promotion_action.rb +1 -1
  101. data/app/models/spree/promotion_builder.rb +2 -2
  102. data/app/models/spree/promotion_chooser.rb +1 -0
  103. data/app/models/spree/promotion_code/code_builder.rb +3 -3
  104. data/app/models/spree/promotion_handler/cart.rb +17 -16
  105. data/app/models/spree/promotion_handler/coupon.rb +10 -14
  106. data/app/models/spree/promotion_handler/page.rb +4 -4
  107. data/app/models/spree/promotion_rule.rb +4 -3
  108. data/app/models/spree/prototype.rb +0 -1
  109. data/app/models/spree/refund.rb +3 -3
  110. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
  111. data/app/models/spree/reimbursement.rb +3 -5
  112. data/app/models/spree/reimbursement_performer.rb +0 -5
  113. data/app/models/spree/reimbursement_tax_calculator.rb +2 -7
  114. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  115. data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
  116. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -3
  117. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  118. data/app/models/spree/reimbursement_type.rb +1 -1
  119. data/app/models/spree/return_authorization.rb +38 -37
  120. data/app/models/spree/return_item/eligibility_validator/default.rb +4 -4
  121. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -1
  122. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -1
  123. data/app/models/spree/return_item.rb +24 -23
  124. data/app/models/spree/returns_calculator.rb +1 -2
  125. data/app/models/spree/shipment.rb +80 -74
  126. data/app/models/spree/shipping_calculator.rb +4 -5
  127. data/app/models/spree/shipping_manifest.rb +3 -4
  128. data/app/models/spree/shipping_method.rb +54 -23
  129. data/app/models/spree/shipping_method_stock_location.rb +4 -0
  130. data/app/models/spree/shipping_rate.rb +24 -29
  131. data/app/models/spree/shipping_rate_tax.rb +41 -0
  132. data/app/models/spree/state.rb +1 -1
  133. data/app/models/spree/state_change.rb +1 -1
  134. data/app/models/spree/stock/availability_validator.rb +2 -2
  135. data/app/models/spree/stock/coordinator.rb +12 -13
  136. data/app/models/spree/stock/differentiator.rb +1 -0
  137. data/app/models/spree/stock/estimator.rb +18 -25
  138. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  139. data/app/models/spree/stock/package.rb +19 -9
  140. data/app/models/spree/stock/packer.rb +2 -3
  141. data/app/models/spree/stock/prioritizer.rb +3 -2
  142. data/app/models/spree/stock/quantifier.rb +2 -3
  143. data/app/models/spree/stock/shipping_rate_selector.rb +0 -1
  144. data/app/models/spree/stock/shipping_rate_sorter.rb +0 -1
  145. data/app/models/spree/stock/splitter/backordered.rb +0 -2
  146. data/app/models/spree/stock/splitter/base.rb +3 -2
  147. data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
  148. data/app/models/spree/stock/splitter/weight.rb +2 -2
  149. data/app/models/spree/stock_item.rb +36 -37
  150. data/app/models/spree/stock_location.rb +17 -13
  151. data/app/models/spree/stock_movement.rb +1 -3
  152. data/app/models/spree/stock_transfer.rb +8 -8
  153. data/app/models/spree/store.rb +6 -0
  154. data/app/models/spree/store_credit.rb +24 -24
  155. data/app/models/spree/store_credit_category.rb +1 -2
  156. data/app/models/spree/tax/item_adjuster.rb +37 -0
  157. data/app/models/spree/tax/order_adjuster.rb +38 -0
  158. data/app/models/spree/tax/shipping_rate_taxer.rb +31 -0
  159. data/app/models/spree/tax/tax_helpers.rb +49 -0
  160. data/app/models/spree/tax/tax_location.rb +33 -0
  161. data/app/models/spree/tax_category.rb +1 -1
  162. data/app/models/spree/tax_rate.rb +46 -111
  163. data/app/models/spree/taxon.rb +36 -12
  164. data/app/models/spree/taxonomy.rb +10 -10
  165. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -1
  166. data/app/models/spree/variant/pricer.rb +19 -0
  167. data/app/models/spree/variant/pricing_options.rb +31 -0
  168. data/app/models/spree/variant/scopes.rb +9 -9
  169. data/app/models/spree/variant.rb +95 -89
  170. data/app/models/spree/variant_property_rule.rb +1 -1
  171. data/app/models/spree/variant_property_rule_value.rb +2 -0
  172. data/app/models/spree/zone.rb +60 -24
  173. data/config/initializers/friendly_id.rb +1 -1
  174. data/config/locales/en.yml +337 -51
  175. data/config/routes.rb +1 -1
  176. data/db/default/spree/countries.rb +9 -15
  177. data/db/default/spree/roles.rb +1 -2
  178. data/db/default/spree/states.rb +7 -11
  179. data/db/default/spree/store_credit.rb +2 -2
  180. data/db/default/spree/stores.rb +2 -1
  181. data/db/migrate/20120831092320_spree_one_two.rb +100 -101
  182. data/db/migrate/20120831092359_spree_promo_one_two.rb +12 -12
  183. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +1 -1
  184. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +1 -1
  185. data/db/migrate/20121010142909_add_states_required_to_countries.rb +1 -1
  186. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +2 -2
  187. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +4 -4
  188. data/db/migrate/20121031162139_split_prices_from_variants.rb +8 -8
  189. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +2 -2
  190. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +1 -1
  191. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +1 -1
  192. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +1 -2
  193. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  194. data/db/migrate/20130213191427_create_default_stock.rb +12 -21
  195. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +1 -1
  196. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +2 -2
  197. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  198. data/db/migrate/20130301162924_create_shipping_method_categories.rb +2 -2
  199. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +4 -4
  200. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +2 -3
  201. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +1 -1
  202. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +1 -1
  203. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +1 -1
  204. data/db/migrate/20130319062004_change_orders_total_precision.rb +4 -4
  205. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +1 -3
  206. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -4
  207. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +1 -3
  208. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +2 -2
  209. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +2 -2
  210. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  211. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +3 -3
  212. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +1 -1
  213. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +3 -3
  214. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +1 -1
  215. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +2 -2
  216. data/db/migrate/20130807024301_upgrade_adjustments.rb +3 -3
  217. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +1 -1
  218. data/db/migrate/20130813140619_expand_order_number_size.rb +2 -2
  219. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +1 -1
  220. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +1 -1
  221. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  222. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +1 -1
  223. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  224. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +1 -0
  225. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +1 -1
  226. data/db/migrate/20131118043959_add_included_to_adjustments.rb +1 -1
  227. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -1
  228. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +1 -1
  229. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +1 -1
  230. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -0
  231. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +1 -1
  232. data/db/migrate/20140309023735_migrate_old_preferences.rb +4 -3
  233. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  234. data/db/migrate/20140410141842_add_many_missing_indexes.rb +13 -15
  235. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +38 -40
  236. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +4 -4
  237. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  238. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -1
  239. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +4 -4
  240. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +4 -6
  241. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -0
  242. data/db/migrate/20141217215630_update_product_slug_index.rb +2 -4
  243. data/db/migrate/20150112194216_add_position_to_stock_location.rb +2 -2
  244. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +0 -1
  245. data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +0 -1
  246. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +3 -3
  247. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -1
  248. data/db/migrate/20150612205731_remove_spree_configurations.rb +2 -2
  249. data/db/migrate/20150619160613_create_adjustment_reason.rb +1 -1
  250. data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +10 -2
  251. data/db/migrate/20150731201146_add_spree_user_addresses.rb +0 -1
  252. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +1 -1
  253. data/db/migrate/20151001121454_create_spree_shipping_method_stock_locations.rb +13 -0
  254. data/db/migrate/20151002023248_add_foreign_key_to_shipping_method_stock_location.rb +6 -0
  255. data/db/migrate/20151026093607_change_return_item_pre_tax_amount_to_amount.rb +29 -0
  256. data/db/migrate/20160111091912_add_column_available_to_all_on_spree_shipping_method.rb +5 -0
  257. data/db/migrate/20160116133604_add_position_to_spree_payment_methods.rb +5 -0
  258. data/db/migrate/20160122182105_add_carrier_and_service_level_to_spree_shipping_methods.rb +6 -0
  259. data/db/migrate/20160224201413_create_spree_shipping_rate_taxes.rb +11 -0
  260. data/db/migrate/20160229133259_add_cart_tax_country_iso_to_spree_store.rb +5 -0
  261. data/db/migrate/20160301103333_remove_pre_tax_amount_on_line_item_and_shipment.rb +6 -0
  262. data/db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb +19 -0
  263. data/db/migrate/20160318145302_add_timestamps_to_prices.rb +5 -0
  264. data/db/migrate/20160330204846_add_missing_timestamp_columns.rb +20 -0
  265. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  266. data/lib/generators/spree/dummy/dummy_generator.rb +17 -19
  267. data/lib/generators/spree/install/install_generator.rb +15 -15
  268. data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
  269. data/lib/spree/core/controller_helpers/auth.rb +2 -4
  270. data/lib/spree/core/controller_helpers/common.rb +42 -43
  271. data/lib/spree/core/controller_helpers/order.rb +5 -9
  272. data/lib/spree/core/controller_helpers/payment_parameters.rb +4 -5
  273. data/lib/spree/core/controller_helpers/pricing.rb +27 -0
  274. data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
  275. data/lib/spree/core/controller_helpers/search.rb +2 -2
  276. data/lib/spree/core/controller_helpers/store.rb +3 -3
  277. data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -4
  278. data/lib/spree/core/current_store.rb +1 -1
  279. data/lib/spree/core/delegate_belongs_to.rb +19 -21
  280. data/lib/spree/core/engine.rb +12 -8
  281. data/lib/spree/core/environment/calculators.rb +0 -1
  282. data/lib/spree/core/environment_extension.rb +4 -4
  283. data/lib/spree/core/importer/order.rb +17 -22
  284. data/lib/spree/core/importer/product.rb +10 -9
  285. data/lib/spree/core/permalinks.rb +16 -16
  286. data/lib/spree/core/product_duplicator.rb +2 -3
  287. data/lib/spree/core/product_filters.rb +15 -16
  288. data/lib/spree/core/role_configuration.rb +2 -2
  289. data/lib/spree/core/search/base.rb +71 -57
  290. data/lib/spree/core/search/variant.rb +2 -4
  291. data/lib/spree/core/unreturned_item_charger.rb +1 -2
  292. data/lib/spree/core/validators/email.rb +2 -2
  293. data/lib/spree/core/version.rb +1 -1
  294. data/lib/spree/core.rb +2 -4
  295. data/lib/spree/i18n.rb +1 -1
  296. data/lib/spree/localized_number.rb +3 -1
  297. data/lib/spree/migrations.rb +27 -26
  298. data/lib/spree/money.rb +19 -4
  299. data/lib/spree/permission_sets/base.rb +1 -1
  300. data/lib/spree/permitted_attributes.rb +7 -7
  301. data/lib/spree/responder.rb +4 -5
  302. data/lib/spree/testing_support/authorization_helpers.rb +1 -1
  303. data/lib/spree/testing_support/caching.rb +8 -8
  304. data/lib/spree/testing_support/capybara_ext.rb +11 -13
  305. data/lib/spree/testing_support/common_rake.rb +4 -4
  306. data/lib/spree/testing_support/controller_requests.rb +1 -1
  307. data/lib/spree/testing_support/extension_rake.rb +1 -2
  308. data/lib/spree/testing_support/factories/address_factory.rb +14 -3
  309. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  311. data/lib/spree/testing_support/factories/credit_card_factory.rb +4 -0
  312. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -6
  313. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  314. data/lib/spree/testing_support/factories/order_factory.rb +10 -11
  315. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  316. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -1
  317. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -1
  318. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  319. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  320. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  321. data/lib/spree/testing_support/factories/shipping_method_factory.rb +5 -2
  322. data/lib/spree/testing_support/factories/state_factory.rb +17 -7
  323. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -4
  324. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +1 -1
  325. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -1
  326. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -2
  327. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
  328. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  329. data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
  330. data/lib/spree/testing_support/factories/zone_factory.rb +2 -1
  331. data/lib/spree/testing_support/i18n.rb +4 -5
  332. data/lib/spree/testing_support/order_walkthrough.rb +8 -9
  333. data/lib/spree/testing_support/preferences.rb +1 -1
  334. data/lib/spree/testing_support/sequences.rb +5 -4
  335. data/lib/tasks/core.rake +15 -19
  336. data/lib/tasks/email.rake +3 -3
  337. data/lib/tasks/exchanges.rake +12 -14
  338. data/lib/tasks/migrations/assure_store_on_orders.rake +38 -0
  339. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +2 -2
  340. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +1 -11
  341. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +17 -0
  342. data/lib/tasks/migrations/migrate_user_addresses.rake +1 -1
  343. data/lib/tasks/order_capturing.rake +1 -1
  344. data/lib/tasks/upgrade.rake +11 -0
  345. data/script/rails +0 -1
  346. data/solidus_core.gemspec +6 -8
  347. data/spec/helpers/base_helper_spec.rb +15 -18
  348. data/spec/helpers/order_helper_spec.rb +2 -2
  349. data/spec/helpers/products_helper_spec.rb +43 -51
  350. data/spec/helpers/taxons_helper_spec.rb +1 -1
  351. data/spec/lib/i18n_spec.rb +11 -11
  352. data/spec/lib/search/base_spec.rb +12 -14
  353. data/spec/lib/search/variant_spec.rb +1 -0
  354. data/spec/lib/spree/core/controller_helpers/order_spec.rb +1 -7
  355. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +26 -28
  356. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +63 -0
  357. data/spec/lib/spree/core/controller_helpers/search_spec.rb +4 -2
  358. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +1 -1
  359. data/spec/lib/spree/core/importer/order_spec.rb +95 -90
  360. data/spec/lib/spree/core/role_configuration_spec.rb +16 -16
  361. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +35 -0
  362. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +10 -1
  363. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -1
  364. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +6 -1
  365. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +37 -1
  366. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +2 -2
  367. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +1 -1
  368. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +1 -2
  369. data/spec/lib/spree/core/testing_support/preferences_spec.rb +26 -0
  370. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +7 -9
  371. data/spec/lib/spree/core/validators/email_spec.rb +8 -6
  372. data/spec/lib/spree/localized_number_spec.rb +1 -3
  373. data/spec/lib/spree/migrations_spec.rb +2 -2
  374. data/spec/lib/spree/money_spec.rb +75 -6
  375. data/spec/lib/tasks/exchanges_spec.rb +2 -12
  376. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -1
  377. data/spec/lib/tasks/order_capturing_spec.rb +1 -1
  378. data/spec/mailers/carton_mailer_spec.rb +3 -3
  379. data/spec/mailers/order_mailer_spec.rb +9 -11
  380. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  381. data/spec/mailers/test_mailer_spec.rb +1 -1
  382. data/spec/models/spree/ability_spec.rb +4 -7
  383. data/spec/models/spree/address_spec.rb +32 -35
  384. data/spec/models/spree/adjustment_reason_spec.rb +0 -2
  385. data/spec/models/spree/adjustment_spec.rb +2 -2
  386. data/spec/models/spree/app_configuration_spec.rb +33 -3
  387. data/spec/models/spree/asset_spec.rb +1 -2
  388. data/spec/models/spree/calculator/default_tax_spec.rb +141 -52
  389. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  390. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  391. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  392. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  393. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +9 -11
  394. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  395. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  396. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -7
  397. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  398. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +2 -2
  399. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -2
  400. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  401. data/spec/models/spree/calculator_spec.rb +3 -8
  402. data/spec/models/spree/carton_spec.rb +1 -1
  403. data/spec/models/spree/classification_spec.rb +1 -1
  404. data/spec/models/spree/concerns/display_money_spec.rb +0 -1
  405. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +26 -1
  406. data/spec/models/spree/concerns/user_address_book_spec.rb +19 -12
  407. data/spec/models/spree/concerns/user_methods_spec.rb +1 -1
  408. data/spec/models/spree/country_spec.rb +52 -0
  409. data/spec/models/spree/credit_card_spec.rb +17 -12
  410. data/spec/models/spree/customer_return_spec.rb +27 -23
  411. data/spec/models/spree/exchange_spec.rb +2 -7
  412. data/spec/models/spree/gateway/bogus_simple.rb +2 -4
  413. data/spec/models/spree/gateway/bogus_spec.rb +4 -2
  414. data/spec/models/spree/gateway_spec.rb +8 -3
  415. data/spec/models/spree/inventory_unit_spec.rb +13 -14
  416. data/spec/models/spree/item_adjustments_spec.rb +36 -40
  417. data/spec/models/spree/line_item_spec.rb +92 -48
  418. data/spec/models/spree/option_type_spec.rb +1 -1
  419. data/spec/models/spree/option_value_spec.rb +1 -1
  420. data/spec/models/spree/order/address_spec.rb +1 -1
  421. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  422. data/spec/models/spree/order/checkout_spec.rb +55 -48
  423. data/spec/models/spree/order/finalizing_spec.rb +8 -9
  424. data/spec/models/spree/order/payment_spec.rb +20 -20
  425. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  426. data/spec/models/spree/order/state_machine_spec.rb +40 -131
  427. data/spec/models/spree/order/tax_spec.rb +11 -12
  428. data/spec/models/spree/order/totals_spec.rb +3 -3
  429. data/spec/models/spree/order/updating_spec.rb +2 -2
  430. data/spec/models/spree/order/validations_spec.rb +2 -2
  431. data/spec/models/spree/order_cancellations_spec.rb +1 -1
  432. data/spec/models/spree/order_capturing_spec.rb +1 -1
  433. data/spec/models/spree/order_contents_spec.rb +10 -11
  434. data/spec/models/spree/order_inventory_spec.rb +11 -11
  435. data/spec/models/spree/order_merger_spec.rb +1 -0
  436. data/spec/models/spree/order_shipping_spec.rb +8 -10
  437. data/spec/models/spree/order_spec.rb +137 -124
  438. data/spec/models/spree/order_stock_location_spec.rb +2 -2
  439. data/spec/models/spree/order_update_attributes_spec.rb +6 -10
  440. data/spec/models/spree/order_updater_spec.rb +4 -8
  441. data/spec/models/spree/payment_create_spec.rb +11 -12
  442. data/spec/models/spree/payment_method/store_credit_spec.rb +10 -6
  443. data/spec/models/spree/payment_method_spec.rb +4 -5
  444. data/spec/models/spree/payment_spec.rb +61 -69
  445. data/spec/models/spree/permission_sets/base_spec.rb +1 -1
  446. data/spec/models/spree/permission_sets/configuration_display.rb +0 -1
  447. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -1
  448. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -1
  449. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -1
  450. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -1
  451. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -1
  452. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -1
  453. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -1
  454. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -1
  455. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -1
  456. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -1
  457. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -1
  458. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -1
  459. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +6 -6
  460. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -1
  461. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -1
  462. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -1
  463. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -2
  464. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -1
  465. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -1
  466. data/spec/models/spree/preference_spec.rb +1 -4
  467. data/spec/models/spree/preferences/configuration_spec.rb +2 -7
  468. data/spec/models/spree/preferences/preferable_spec.rb +13 -24
  469. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  470. data/spec/models/spree/preferences/static_model_preferences_spec.rb +5 -6
  471. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -6
  472. data/spec/models/spree/preferences/store_spec.rb +2 -3
  473. data/spec/models/spree/price_spec.rb +6 -6
  474. data/spec/models/spree/product/scopes_spec.rb +20 -20
  475. data/spec/models/spree/product_duplicator_spec.rb +16 -29
  476. data/spec/models/spree/product_filter_spec.rb +2 -2
  477. data/spec/models/spree/product_spec.rb +53 -20
  478. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +10 -12
  479. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +4 -4
  480. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +9 -9
  481. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  482. data/spec/models/spree/promotion/rules/first_order_spec.rb +10 -10
  483. data/spec/models/spree/promotion/rules/item_total_spec.rb +63 -19
  484. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  485. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  486. data/spec/models/spree/promotion/rules/taxon_spec.rb +4 -4
  487. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -4
  488. data/spec/models/spree/promotion/rules/user_spec.rb +7 -7
  489. data/spec/models/spree/promotion_builder_spec.rb +10 -8
  490. data/spec/models/spree/promotion_category_spec.rb +1 -1
  491. data/spec/models/spree/promotion_code/code_builder_spec.rb +1 -3
  492. data/spec/models/spree/promotion_code_spec.rb +8 -7
  493. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  494. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  495. data/spec/models/spree/promotion_handler/page_spec.rb +6 -7
  496. data/spec/models/spree/promotion_rule_spec.rb +1 -2
  497. data/spec/models/spree/promotion_spec.rb +25 -21
  498. data/spec/models/spree/refund_spec.rb +8 -11
  499. data/spec/models/spree/reimbursement/credit_spec.rb +2 -2
  500. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +6 -4
  501. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  502. data/spec/models/spree/reimbursement_performer_spec.rb +2 -2
  503. data/spec/models/spree/reimbursement_spec.rb +9 -11
  504. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +4 -5
  505. data/spec/models/spree/reimbursement_type/credit_spec.rb +2 -2
  506. data/spec/models/spree/reimbursement_type/exchange_spec.rb +2 -3
  507. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +4 -4
  508. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +1 -1
  509. data/spec/models/spree/return_authorization_spec.rb +18 -21
  510. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +7 -7
  511. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -1
  512. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -1
  513. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  514. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  515. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -2
  516. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +3 -5
  517. data/spec/models/spree/return_item_spec.rb +29 -31
  518. data/spec/models/spree/returns_calculator_spec.rb +1 -1
  519. data/spec/models/spree/shipment_spec.rb +59 -43
  520. data/spec/models/spree/shipping_calculator_spec.rb +3 -3
  521. data/spec/models/spree/shipping_manifest_spec.rb +8 -7
  522. data/spec/models/spree/shipping_method_spec.rb +149 -24
  523. data/spec/models/spree/shipping_rate_spec.rb +116 -76
  524. data/spec/models/spree/shipping_rate_tax_spec.rb +83 -0
  525. data/spec/models/spree/state_spec.rb +2 -2
  526. data/spec/models/spree/stock/availability_validator_spec.rb +4 -4
  527. data/spec/models/spree/stock/coordinator_spec.rb +33 -49
  528. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  529. data/spec/models/spree/stock/estimator_spec.rb +83 -54
  530. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -3
  531. data/spec/models/spree/stock/package_spec.rb +27 -10
  532. data/spec/models/spree/stock/packer_spec.rb +4 -4
  533. data/spec/models/spree/stock/prioritizer_spec.rb +1 -1
  534. data/spec/models/spree/stock/quantifier_spec.rb +2 -6
  535. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  536. data/spec/models/spree/stock/splitter/base_spec.rb +1 -2
  537. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +1 -3
  538. data/spec/models/spree/stock/splitter/weight_spec.rb +3 -3
  539. data/spec/models/spree/stock_item_spec.rb +16 -16
  540. data/spec/models/spree/stock_location_spec.rb +6 -8
  541. data/spec/models/spree/stock_movement_spec.rb +1 -1
  542. data/spec/models/spree/stock_transfer_spec.rb +1 -3
  543. data/spec/models/spree/store_credit_category_spec.rb +1 -1
  544. data/spec/models/spree/store_credit_event_spec.rb +3 -5
  545. data/spec/models/spree/store_credit_spec.rb +24 -23
  546. data/spec/models/spree/store_spec.rb +21 -2
  547. data/spec/models/spree/tax/item_adjuster_spec.rb +74 -0
  548. data/spec/models/spree/tax/order_adjuster_spec.rb +49 -0
  549. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +50 -0
  550. data/spec/models/spree/tax/tax_location_spec.rb +68 -0
  551. data/spec/models/spree/tax/taxation_integration_spec.rb +787 -0
  552. data/spec/models/spree/tax_category_spec.rb +2 -2
  553. data/spec/models/spree/tax_rate_spec.rb +185 -536
  554. data/spec/models/spree/taxon_spec.rb +69 -5
  555. data/spec/models/spree/taxonomy_spec.rb +2 -3
  556. data/spec/models/spree/tracker_spec.rb +1 -1
  557. data/spec/models/spree/transfer_item_spec.rb +1 -1
  558. data/spec/models/spree/unit_cancel_spec.rb +9 -14
  559. data/spec/models/spree/user_spec.rb +19 -24
  560. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +1 -1
  561. data/spec/models/spree/variant/pricer_spec.rb +48 -0
  562. data/spec/models/spree/variant/pricing_options_spec.rb +106 -0
  563. data/spec/models/spree/variant/scopes_spec.rb +31 -8
  564. data/spec/models/spree/variant_property_rule_spec.rb +1 -1
  565. data/spec/models/spree/variant_spec.rb +166 -52
  566. data/spec/models/spree/zone_spec.rb +135 -10
  567. data/spec/support/big_decimal.rb +1 -1
  568. data/spec/support/concerns/working_factories.rb +2 -2
  569. data/spec/support/dummy_ability.rb +0 -1
  570. metadata +55 -44
  571. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  572. data/lib/spree/migration_helpers.rb +0 -19
  573. data/vendor/assets/stylesheets/skeleton.css +0 -242
@@ -10,15 +10,18 @@ module Spree
10
10
  end
11
11
 
12
12
  def shipments
13
- packages.map do |package|
14
- package.to_shipment.tap { |s| s.address = order.ship_address }
15
- end
13
+ packages.map(&:shipment)
16
14
  end
17
15
 
16
+ private
17
+
18
18
  def packages
19
19
  packages = build_location_configured_packages
20
20
  packages = build_packages(packages)
21
21
  packages = prioritize_packages(packages)
22
+ packages.each do |package|
23
+ package.shipment = package.to_shipment
24
+ end
22
25
  packages = estimate_packages(packages)
23
26
  validate_packages(packages)
24
27
  packages
@@ -35,7 +38,7 @@ module Spree
35
38
  # through the rest of the packing / prioritization, lets just put them
36
39
  # in packages we know they should be in and deal with other automatically-
37
40
  # handled inventory units otherwise.
38
- def build_location_configured_packages(packages = Array.new)
41
+ def build_location_configured_packages(packages = [])
39
42
  order.order_stock_locations.where(shipment_fulfilled: false).group_by(&:stock_location).each do |stock_location, stock_location_configurations|
40
43
  units = stock_location_configurations.flat_map do |stock_location_configuration|
41
44
  unallocated_inventory_units.select { |iu| iu.variant == stock_location_configuration.variant }.take(stock_location_configuration.quantity)
@@ -56,7 +59,7 @@ module Spree
56
59
  # for the given order
57
60
  #
58
61
  # Returns an array of Package instances
59
- def build_packages(packages = Array.new)
62
+ def build_packages(packages = [])
60
63
  stock_location_variant_ids.each do |stock_location, variant_ids|
61
64
  units_for_location = unallocated_inventory_units.select { |unit| variant_ids.include?(unit.variant_id) }
62
65
  packer = build_packer(stock_location, units_for_location)
@@ -65,8 +68,6 @@ module Spree
65
68
  packages
66
69
  end
67
70
 
68
- private
69
-
70
71
  # This finds the variants we're looking for in each active stock location.
71
72
  # It returns a hash like:
72
73
  # {
@@ -99,13 +100,11 @@ module Spree
99
100
  # build the final lookup hash of
100
101
  # {<stock location> => <set of variant ids>, ...}
101
102
  # using the previous results
102
- hash = location_variant_ids.each_with_object({}) do |(location_id, variant_id), hash|
103
+ location_variant_ids.each_with_object({}) do |(location_id, variant_id), hash|
103
104
  location = location_lookup[location_id]
104
105
  hash[location] ||= Set.new
105
106
  hash[location] << variant_id
106
107
  end
107
-
108
- hash
109
108
  end
110
109
 
111
110
  def unallocated_inventory_units
@@ -122,9 +121,9 @@ module Spree
122
121
  end
123
122
 
124
123
  def estimate_packages(packages)
125
- estimator = Spree::Config.stock.estimator_class.new(order)
124
+ estimator = Spree::Config.stock.estimator_class.new
126
125
  packages.each do |package|
127
- package.shipping_rates = estimator.shipping_rates(package)
126
+ package.shipment.shipping_rates = estimator.shipping_rates(package)
128
127
  end
129
128
  packages
130
129
  end
@@ -142,7 +141,7 @@ module Spree
142
141
  Packer.new(stock_location, inventory_units, splitters(stock_location))
143
142
  end
144
143
 
145
- def splitters(stock_location)
144
+ def splitters(_stock_location)
146
145
  # extension point to return custom splitters for a location
147
146
  Rails.application.config.spree.stock_splitters
148
147
  end
@@ -16,6 +16,7 @@ module Spree
16
16
  end
17
17
 
18
18
  private
19
+
19
20
  def build_missing
20
21
  @missing = Hash.new(0)
21
22
  required.keys.each do |variant|
@@ -1,13 +1,8 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class Estimator
4
- attr_reader :order, :currency
5
-
6
- # @param order [Spree::Order] the order whose shipping rates to estimate
7
- def initialize(order)
8
- @order = order
9
- @currency = order.currency
10
- end
4
+ class ShipmentRequired < StandardError; end
5
+ class OrderRequired < StandardError; end
11
6
 
12
7
  # Estimate the shipping rates for a package.
13
8
  #
@@ -17,6 +12,9 @@ module Spree
17
12
  # @return [Array<Spree::ShippingRate>] the shipping rates sorted by
18
13
  # descending cost, with the least costly marked "selected"
19
14
  def shipping_rates(package, frontend_only = true)
15
+ raise ShipmentRequired if package.shipment.nil?
16
+ raise OrderRequired if package.shipment.order.nil?
17
+
20
18
  rates = calculate_shipping_rates(package)
21
19
  rates.select! { |rate| rate.shipping_method.frontend? } if frontend_only
22
20
  choose_default_shipping_rate(rates)
@@ -24,6 +22,7 @@ module Spree
24
22
  end
25
23
 
26
24
  private
25
+
27
26
  def choose_default_shipping_rate(shipping_rates)
28
27
  unless shipping_rates.empty?
29
28
  default_shipping_rate = Spree::Config.shipping_rate_selector_class.new(shipping_rates).find_default
@@ -34,32 +33,26 @@ module Spree
34
33
  def calculate_shipping_rates(package)
35
34
  shipping_methods(package).map do |shipping_method|
36
35
  cost = shipping_method.calculator.compute(package)
37
- tax_category = shipping_method.tax_category
38
- if tax_category
39
- tax_rate = tax_category.tax_rates.detect do |rate|
40
- # If the rate's zone matches the order's zone, a positive adjustment will be applied.
41
- # If the rate is from the default tax zone, then a negative adjustment will be applied.
42
- # See the tests in shipping_rate_spec.rb for an example of this.d
43
- rate.zone == order.tax_zone || rate.zone.default_tax?
44
- end
45
- end
46
-
47
36
  if cost
48
- rate = shipping_method.shipping_rates.new(cost: cost)
49
- rate.tax_rate = tax_rate if tax_rate
37
+ rate = shipping_method.shipping_rates.new(
38
+ cost: cost,
39
+ shipment: package.shipment
40
+ )
41
+ Spree::Config.shipping_rate_taxer_class.new.tax(rate)
50
42
  end
51
-
52
- rate
53
43
  end.compact
54
44
  end
55
45
 
56
46
  def shipping_methods(package)
57
- package.shipping_methods.select do |ship_method|
47
+ package.shipping_methods
48
+ .available_for_address(package.shipment.address)
49
+ .includes(:calculator, tax_category: :tax_rates)
50
+ .to_a
51
+ .select do |ship_method|
58
52
  calculator = ship_method.calculator
59
- ship_method.include?(order.ship_address) &&
60
53
  calculator.available?(package) &&
61
- (calculator.preferences[:currency].blank? ||
62
- calculator.preferences[:currency] == currency)
54
+ (calculator.preferences[:currency].blank? ||
55
+ calculator.preferences[:currency] == package.shipment.order.currency)
63
56
  end
64
57
  end
65
58
  end
@@ -7,7 +7,7 @@ module Spree
7
7
 
8
8
  def units
9
9
  @order.line_items.flat_map do |line_item|
10
- line_item.quantity.times.map do |i|
10
+ Array.new(line_item.quantity) do |_i|
11
11
  @order.inventory_units.build(
12
12
  pending: true,
13
13
  variant: line_item.variant,
@@ -2,14 +2,13 @@ module Spree
2
2
  module Stock
3
3
  class Package
4
4
  attr_reader :stock_location, :contents
5
- attr_accessor :shipping_rates
5
+ attr_accessor :shipment
6
6
 
7
7
  # @param stock_location [Spree::StockLocation] the stock location this package originates from
8
8
  # @param contents [Array<Spree::Stock::ContentItem>] the contents of this package
9
- def initialize(stock_location, contents=[])
9
+ def initialize(stock_location, contents = [])
10
10
  @stock_location = stock_location
11
11
  @contents = contents
12
- @shipping_rates = Array.new
13
12
  end
14
13
 
15
14
  # Adds an inventory unit to this package.
@@ -45,7 +44,7 @@ module Spree
45
44
  def order
46
45
  # Fix regression that removed package.order.
47
46
  # Find it dynamically through an inventory_unit.
48
- contents.detect {|item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
47
+ contents.detect { |item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
49
48
  end
50
49
 
51
50
  # @return [Float] the summed weight of the contents of this package
@@ -102,13 +101,15 @@ module Spree
102
101
  # @return [Array<Spree::ShippingCategory>] the shipping categories of the
103
102
  # variants in this package
104
103
  def shipping_categories
105
- contents.map { |item| item.variant.shipping_category }.compact.uniq
104
+ ShippingCategory.where(id: shipping_category_ids)
106
105
  end
107
106
 
108
- # @return [Array<Spree::ShippingMethod>] the shipping methods available
109
- # for this pacakges shipping categories
107
+ # @return [ActiveRecord::Relation] the [Spree::ShippingMethod]s available
108
+ # for this pacakge based on the stock location and shipping categories.
110
109
  def shipping_methods
111
- shipping_categories.map(&:shipping_methods).reduce(:&).to_a
110
+ Spree::ShippingMethod.
111
+ with_all_shipping_category_ids(shipping_category_ids).
112
+ available_in_stock_location(stock_location)
112
113
  end
113
114
 
114
115
  # @return [Spree::Shipment] a new shipment containing this package's
@@ -121,11 +122,20 @@ module Spree
121
122
  contents.each { |content_item| content_item.inventory_unit.state = content_item.state.to_s }
122
123
 
123
124
  Spree::Shipment.new(
125
+ order: order,
126
+ address: order.ship_address,
124
127
  stock_location: stock_location,
125
- shipping_rates: shipping_rates,
126
128
  inventory_units: contents.map(&:inventory_unit)
127
129
  )
128
130
  end
131
+
132
+ private
133
+
134
+ # @return [Array<Fixnum>] the unique ids of all shipping categories of
135
+ # variants in this package
136
+ def shipping_category_ids
137
+ contents.map { |item| item.variant.shipping_category_id }.compact.uniq
138
+ end
129
139
  end
130
140
  end
131
141
  end
@@ -3,7 +3,7 @@ module Spree
3
3
  class Packer
4
4
  attr_reader :stock_location, :inventory_units, :splitters
5
5
 
6
- def initialize(stock_location, inventory_units, splitters=[Splitter::Base])
6
+ def initialize(stock_location, inventory_units, splitters = [Splitter::Base])
7
7
  @stock_location = stock_location
8
8
  @inventory_units = inventory_units
9
9
  @splitters = splitters
@@ -31,7 +31,6 @@ module Spree
31
31
  else
32
32
  package.add_multiple units
33
33
  end
34
-
35
34
  end
36
35
  package
37
36
  end
@@ -54,7 +53,7 @@ module Spree
54
53
 
55
54
  def build_splitter
56
55
  splitter = nil
57
- splitters.reverse.each do |klass|
56
+ splitters.reverse_each do |klass|
58
57
  splitter = klass.new(self, splitter)
59
58
  end
60
59
  splitter
@@ -3,7 +3,7 @@ module Spree
3
3
  class Prioritizer
4
4
  attr_reader :packages, :inventory_units
5
5
 
6
- def initialize(inventory_units, packages, adjuster_class=Adjuster)
6
+ def initialize(inventory_units, packages, adjuster_class = Adjuster)
7
7
  @inventory_units = inventory_units
8
8
  @packages = packages
9
9
  @adjuster_class = adjuster_class
@@ -17,6 +17,7 @@ module Spree
17
17
  end
18
18
 
19
19
  private
20
+
20
21
  def adjust_packages
21
22
  inventory_units.each do |inventory_unit|
22
23
  adjuster = @adjuster_class.new(inventory_unit, :on_hand)
@@ -40,7 +41,7 @@ module Spree
40
41
  end
41
42
 
42
43
  def prune_packages
43
- packages.reject! { |pkg| pkg.empty? }
44
+ packages.reject!(&:empty?)
44
45
  end
45
46
  end
46
47
  end
@@ -7,9 +7,9 @@ module Spree
7
7
  @variant = variant
8
8
  where_args = { variant_id: @variant }
9
9
  if stock_location
10
- where_args.merge!(stock_location: stock_location)
10
+ where_args[:stock_location] = stock_location
11
11
  else
12
- where_args.merge!(Spree::StockLocation.table_name => { active: true })
12
+ where_args[Spree::StockLocation.table_name] = { active: true }
13
13
  end
14
14
  @stock_items = Spree::StockItem.joins(:stock_location).where(where_args)
15
15
  end
@@ -41,7 +41,6 @@ module Spree
41
41
  def can_supply?(required)
42
42
  total_on_hand >= required || backorderable?
43
43
  end
44
-
45
44
  end
46
45
  end
47
46
  end
@@ -1,7 +1,6 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class ShippingRateSelector
4
-
5
4
  attr_reader :shipping_rates
6
5
 
7
6
  def initialize(shipping_rates)
@@ -1,7 +1,6 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class ShippingRateSorter
4
-
5
4
  attr_reader :shipping_rates
6
5
 
7
6
  def initialize(shipping_rates)
@@ -2,7 +2,6 @@ module Spree
2
2
  module Stock
3
3
  module Splitter
4
4
  class Backordered < Spree::Stock::Splitter::Base
5
-
6
5
  def split(packages)
7
6
  split_packages = []
8
7
  packages.each do |package|
@@ -16,7 +15,6 @@ module Spree
16
15
  end
17
16
  return_next split_packages
18
17
  end
19
-
20
18
  end
21
19
  end
22
20
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  class Base
5
5
  attr_reader :packer, :next_splitter
6
6
 
7
- def initialize(packer, next_splitter=nil)
7
+ def initialize(packer, next_splitter = nil)
8
8
  @packer = packer
9
9
  @next_splitter = next_splitter
10
10
  end
@@ -15,11 +15,12 @@ module Spree
15
15
  end
16
16
 
17
17
  private
18
+
18
19
  def return_next(packages)
19
20
  next_splitter ? next_splitter.split(packages) : packages
20
21
  end
21
22
 
22
- def build_package(contents=[])
23
+ def build_package(contents = [])
23
24
  Spree::Stock::Package.new(stock_location, contents)
24
25
  end
25
26
  end
@@ -11,6 +11,7 @@ module Spree
11
11
  end
12
12
 
13
13
  private
14
+
14
15
  def split_by_category(package)
15
16
  categories = Hash.new { |hash, key| hash[key] = [] }
16
17
  package.contents.each do |item|
@@ -21,7 +22,7 @@ module Spree
21
22
 
22
23
  def hash_to_packages(categories)
23
24
  packages = []
24
- categories.each do |id, contents|
25
+ categories.each do |_id, contents|
25
26
  packages << build_package(contents)
26
27
  end
27
28
  packages
@@ -17,9 +17,10 @@ module Spree
17
17
  end
18
18
 
19
19
  private
20
+
20
21
  def reduce(package)
21
22
  removed = []
22
- while package.weight > self.threshold
23
+ while package.weight > threshold
23
24
  break if package.contents.size == 1
24
25
  removed << package.contents.shift
25
26
  end
@@ -29,4 +30,3 @@ module Spree
29
30
  end
30
31
  end
31
32
  end
32
-
@@ -32,11 +32,11 @@ module Spree
32
32
  # @param value [Fixnum] the amount to change the count on hand by, positive
33
33
  # or negative values are valid
34
34
  def adjust_count_on_hand(value)
35
- self.with_lock do
36
- self.count_on_hand = self.count_on_hand + value
35
+ with_lock do
36
+ self.count_on_hand = count_on_hand + value
37
37
  process_backorders(count_on_hand - count_on_hand_was)
38
38
 
39
- self.save!
39
+ save!
40
40
  end
41
41
  end
42
42
 
@@ -48,24 +48,24 @@ module Spree
48
48
  self.count_on_hand = value
49
49
  process_backorders(count_on_hand - count_on_hand_was)
50
50
 
51
- self.save!
51
+ save!
52
52
  end
53
53
 
54
54
  # @return [Boolean] true if this stock item's count on hand is not zero
55
55
  def in_stock?
56
- self.count_on_hand > 0
56
+ count_on_hand > 0
57
57
  end
58
58
 
59
59
  # @return [Boolean] true if this stock item can be included in a shipment
60
60
  def available?
61
- self.in_stock? || self.backorderable?
61
+ in_stock? || backorderable?
62
62
  end
63
63
 
64
64
  # Sets the count on hand to zero if it not already zero.
65
65
  #
66
66
  # @note This processes backorders if the count on hand is not zero.
67
67
  def reduce_count_on_hand_to_zero
68
- self.set_count_on_hand(0) if count_on_hand > 0
68
+ set_count_on_hand(0) if count_on_hand > 0
69
69
  end
70
70
 
71
71
  def fill_status(quantity)
@@ -82,44 +82,43 @@ module Spree
82
82
  end
83
83
 
84
84
  private
85
- def verify_count_on_hand?
86
- count_on_hand_changed? && !backorderable? && (count_on_hand < count_on_hand_was) && (count_on_hand < 0)
87
- end
88
85
 
89
- def count_on_hand=(value)
90
- write_attribute(:count_on_hand, value)
91
- end
86
+ def verify_count_on_hand?
87
+ count_on_hand_changed? && !backorderable? && (count_on_hand < count_on_hand_was) && (count_on_hand < 0)
88
+ end
92
89
 
93
- # Process backorders based on amount of stock received
94
- # If stock was -20 and is now -15 (increase of 5 units), then we should process 5 inventory orders.
95
- # If stock was -20 but then was -25 (decrease of 5 units), do nothing.
96
- def process_backorders(number)
97
- if number > 0
98
- backordered_inventory_units.first(number).each do |unit|
99
- unit.fill_backorder
100
- end
101
- end
102
- end
90
+ def count_on_hand=(value)
91
+ write_attribute(:count_on_hand, value)
92
+ end
103
93
 
104
- def conditional_variant_touch
105
- variant.touch if inventory_cache_threshold.nil? || should_touch_variant?
94
+ # Process backorders based on amount of stock received
95
+ # If stock was -20 and is now -15 (increase of 5 units), then we should process 5 inventory orders.
96
+ # If stock was -20 but then was -25 (decrease of 5 units), do nothing.
97
+ def process_backorders(number)
98
+ if number > 0
99
+ backordered_inventory_units.first(number).each(&:fill_backorder)
106
100
  end
101
+ end
107
102
 
108
- def should_touch_variant?
109
- # the variant_id changes from nil when a new stock location is added
110
- inventory_cache_threshold &&
103
+ def conditional_variant_touch
104
+ variant.touch if inventory_cache_threshold.nil? || should_touch_variant?
105
+ end
106
+
107
+ def should_touch_variant?
108
+ # the variant_id changes from nil when a new stock location is added
109
+ inventory_cache_threshold &&
111
110
  (count_on_hand_changed? && count_on_hand_change.any? { |c| c < inventory_cache_threshold }) ||
112
111
  variant_id_changed?
113
- end
112
+ end
114
113
 
115
- def inventory_cache_threshold
116
- # only warn if store is setting binary_inventory_cache (default = false)
117
- @cache_threshold ||= if Spree::Config.binary_inventory_cache
118
- ActiveSupport::Deprecation.warn "Spree::Config.binary_inventory_cache=true is DEPRECATED. Instead use Spree::Config.inventory_cache_threshold=1"
119
- 1
120
- else
121
- Spree::Config.inventory_cache_threshold
122
- end
114
+ def inventory_cache_threshold
115
+ # only warn if store is setting binary_inventory_cache (default = false)
116
+ @cache_threshold ||= if Spree::Config.binary_inventory_cache
117
+ ActiveSupport::Deprecation.warn "Spree::Config.binary_inventory_cache=true is DEPRECATED. Instead use Spree::Config.inventory_cache_threshold=1"
118
+ 1
119
+ else
120
+ Spree::Config.inventory_cache_threshold
123
121
  end
122
+ end
124
123
  end
125
124
  end
@@ -12,13 +12,16 @@ module Spree
12
12
  belongs_to :state, class_name: 'Spree::State'
13
13
  belongs_to :country, class_name: 'Spree::Country'
14
14
 
15
+ has_many :shipping_method_stock_locations, dependent: :destroy
16
+ has_many :shipping_methods, through: :shipping_method_stock_locations
17
+
15
18
  validates_presence_of :name
16
19
  validates_uniqueness_of :code, allow_blank: true, case_sensitive: false
17
20
 
18
21
  scope :active, -> { where(active: true) }
19
22
  scope :order_default, -> { order(default: :desc, name: :asc) }
20
23
 
21
- after_create :create_stock_items, :if => "self.propagate_all_variants?"
24
+ after_create :create_stock_items, if: "self.propagate_all_variants?"
22
25
  after_save :ensure_one_default
23
26
 
24
27
  def state_text
@@ -27,14 +30,14 @@ module Spree
27
30
 
28
31
  # Wrapper for creating a new stock item respecting the backorderable config
29
32
  def propagate_variant(variant)
30
- self.stock_items.create!(variant: variant, backorderable: self.backorderable_default)
33
+ stock_items.create!(variant: variant, backorderable: backorderable_default)
31
34
  end
32
35
 
33
36
  # Return either an existing stock item or create a new one. Useful in
34
37
  # scenarios where the user might not know whether there is already a stock
35
38
  # item for a given variant
36
39
  def set_up_stock_item(variant)
37
- self.stock_item(variant) || propagate_variant(variant)
40
+ stock_item(variant) || propagate_variant(variant)
38
41
  end
39
42
 
40
43
  # Returns an instance of StockItem for the variant id.
@@ -73,7 +76,7 @@ module Spree
73
76
  move(variant, quantity, originator)
74
77
  end
75
78
 
76
- def restock_backordered(variant, quantity, originator = nil)
79
+ def restock_backordered(variant, quantity, _originator = nil)
77
80
  item = stock_item_or_create(variant)
78
81
  item.update_columns(
79
82
  count_on_hand: item.count_on_hand + quantity,
@@ -102,17 +105,18 @@ module Spree
102
105
  end
103
106
 
104
107
  private
105
- def create_stock_items
106
- Variant.find_each { |variant| self.propagate_variant(variant) }
107
- end
108
108
 
109
- def ensure_one_default
110
- if self.default
111
- StockLocation.where(default: true).where.not(id: self.id).each do |stock_location|
112
- stock_location.default = false
113
- stock_location.save!
114
- end
109
+ def create_stock_items
110
+ Variant.find_each { |variant| propagate_variant(variant) }
111
+ end
112
+
113
+ def ensure_one_default
114
+ if default
115
+ StockLocation.where(default: true).where.not(id: id).each do |stock_location|
116
+ stock_location.default = false
117
+ stock_location.save!
115
118
  end
116
119
  end
120
+ end
117
121
  end
118
122
  end
@@ -19,10 +19,8 @@ module Spree
19
19
  private
20
20
 
21
21
  def update_stock_item_quantity
22
- return unless self.stock_item.should_track_inventory?
22
+ return unless stock_item.should_track_inventory?
23
23
  stock_item.adjust_count_on_hand quantity
24
24
  end
25
-
26
25
  end
27
26
  end
28
-
@@ -4,14 +4,14 @@ module Spree
4
4
 
5
5
  acts_as_paranoid
6
6
 
7
- has_many :stock_movements, :as => :originator
7
+ has_many :stock_movements, as: :originator
8
8
  has_many :transfer_items, inverse_of: :stock_transfer
9
9
 
10
- belongs_to :created_by, :class_name => Spree::UserClassHandle.new
11
- belongs_to :finalized_by, :class_name => Spree::UserClassHandle.new
12
- belongs_to :closed_by, :class_name => Spree::UserClassHandle.new
13
- belongs_to :source_location, :class_name => 'Spree::StockLocation'
14
- belongs_to :destination_location, :class_name => 'Spree::StockLocation'
10
+ belongs_to :created_by, class_name: Spree::UserClassHandle.new
11
+ belongs_to :finalized_by, class_name: Spree::UserClassHandle.new
12
+ belongs_to :closed_by, class_name: Spree::UserClassHandle.new
13
+ belongs_to :source_location, class_name: 'Spree::StockLocation'
14
+ belongs_to :destination_location, class_name: 'Spree::StockLocation'
15
15
 
16
16
  validates_presence_of :source_location
17
17
  validates_presence_of :destination_location, if: :finalized?
@@ -70,7 +70,7 @@ module Spree
70
70
 
71
71
  def finalize(finalized_by)
72
72
  if finalizable?
73
- self.update_attributes({ finalized_at: Time.current, finalized_by: finalized_by })
73
+ update_attributes({ finalized_at: Time.current, finalized_by: finalized_by })
74
74
  else
75
75
  errors.add(:base, Spree.t(:stock_transfer_cannot_be_finalized))
76
76
  false
@@ -91,7 +91,7 @@ module Spree
91
91
 
92
92
  def close(closed_by)
93
93
  if receivable?
94
- self.update_attributes({ closed_at: Time.current, closed_by: closed_by })
94
+ update_attributes({ closed_at: Time.current, closed_by: closed_by })
95
95
  else
96
96
  errors.add(:base, Spree.t(:stock_transfer_must_be_receivable))
97
97
  false
@@ -2,6 +2,7 @@ module Spree
2
2
  class Store < Spree::Base
3
3
  has_many :store_payment_methods, inverse_of: :store
4
4
  has_many :payment_methods, through: :store_payment_methods
5
+ has_many :orders, class_name: "Spree::Order"
5
6
 
6
7
  validates :code, presence: true, uniqueness: { allow_blank: true }
7
8
  validates :name, presence: true
@@ -22,6 +23,11 @@ module Spree
22
23
  where(default: true).first || new
23
24
  end
24
25
 
26
+ def default_cart_tax_location
27
+ @default_cart_tax_location ||=
28
+ Spree::Tax::TaxLocation.new(country: Spree::Country.find_by(iso: cart_tax_country_iso))
29
+ end
30
+
25
31
  private
26
32
 
27
33
  def ensure_default_exists_and_is_unique