solidus_core 1.2.3 → 1.3.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 (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