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,14 +10,14 @@ module Spree
10
10
  path: ':rails_root/public/spree/products/:id/:style/:basename.:extension',
11
11
  convert_options: { all: '-strip -auto-orient -colorspace sRGB' }
12
12
  validates_attachment :attachment,
13
- :presence => true,
14
- :content_type => { :content_type => %w(image/jpeg image/jpg image/png image/gif) }
13
+ presence: true,
14
+ content_type: { content_type: %w(image/jpeg image/jpg image/png image/gif) }
15
15
 
16
16
  # save the w,h of the original image (from which others can be calculated)
17
17
  # we need to look at the write-queue for images which have not been saved yet
18
18
  after_post_process :find_dimensions
19
19
 
20
- #used by admin products autocomplete
20
+ # used by admin products autocomplete
21
21
  def mini_url
22
22
  attachment.url(:mini, false)
23
23
  end
@@ -75,7 +75,7 @@ module Spree
75
75
  inventory_units.map do |iu|
76
76
  iu.update_columns(
77
77
  pending: false,
78
- updated_at: Time.current,
78
+ updated_at: Time.current
79
79
  )
80
80
  end
81
81
  end
@@ -113,35 +113,35 @@ module Spree
113
113
  return_items.not_expired.any?(&:exchange_requested?)
114
114
  end
115
115
 
116
+ def allow_ship?
117
+ on_hand?
118
+ end
119
+
116
120
  private
117
121
 
118
- def allow_ship?
119
- self.on_hand?
120
- end
122
+ def fulfill_order
123
+ reload
124
+ order.fulfill!
125
+ end
121
126
 
122
- def fulfill_order
123
- self.reload
124
- order.fulfill!
125
- end
127
+ def percentage_of_line_item
128
+ 1 / BigDecimal.new(line_item.quantity)
129
+ end
126
130
 
127
- def percentage_of_line_item
128
- 1 / BigDecimal.new(line_item.quantity)
129
- end
131
+ def current_return_item
132
+ return_items.not_cancelled.first
133
+ end
130
134
 
131
- def current_return_item
132
- return_items.not_cancelled.first
135
+ def ensure_can_destroy
136
+ if !backordered? && !on_hand?
137
+ errors.add(:state, :cannot_destroy, state: state)
138
+ return false
133
139
  end
134
140
 
135
- def ensure_can_destroy
136
- if !backordered? && !on_hand?
137
- errors.add(:state, :cannot_destroy, state: self.state)
138
- return false
139
- end
140
-
141
- unless shipment.pending?
142
- errors.add(:base, :cannot_destroy_shipment_state, state: shipment.state)
143
- return false
144
- end
141
+ unless shipment.pending?
142
+ errors.add(:base, :cannot_destroy_shipment_state, state: shipment.state)
143
+ return false
145
144
  end
145
+ end
146
146
  end
147
147
  end
@@ -49,7 +49,7 @@ module Spree
49
49
  #
50
50
  # We want to select the best promotion for the order, but the remainder
51
51
  # of the calculations here are done in the OrderUpdater instead.
52
- return if Spree::Order === item
52
+ return if item.is_a?(Spree::Order)
53
53
 
54
54
  @item.promo_total = promo_total
55
55
 
@@ -67,13 +67,14 @@ module Spree
67
67
  included_tax_total: @item.included_tax_total,
68
68
  additional_tax_total: @item.additional_tax_total,
69
69
  adjustment_total: @item.adjustment_total,
70
- updated_at: Time.current,
70
+ updated_at: Time.current
71
71
  ) if @item.changed?
72
72
 
73
73
  @item
74
74
  end
75
75
 
76
76
  private
77
+
77
78
  def adjustments
78
79
  # This is done intentionally to avoid loading the association. If the
79
80
  # association is loaded, the records may become stale due to code
@@ -8,11 +8,6 @@ module Spree
8
8
 
9
9
  self.table_name = 'spree_users'
10
10
 
11
- # for url generation
12
- def self.model_name
13
- ActiveModel::Name.new(self, nil, "User")
14
- end
15
-
16
11
  before_destroy :check_completed_orders
17
12
 
18
13
  def self.model_name
@@ -23,6 +18,7 @@ module Spree
23
18
  attr_accessor :password_confirmation
24
19
 
25
20
  private
21
+
26
22
  def check_completed_orders
27
23
  raise Spree::Core::DestroyWithOrdersError if orders.complete.present?
28
24
  end
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  class LineItem < Spree::Base
3
- before_validation :invalid_quantity_check
4
3
  belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true
5
4
  belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :line_items
6
5
  belongs_to :tax_category, class_name: "Spree::TaxCategory"
@@ -13,25 +12,24 @@ module Spree
13
12
  has_many :line_item_actions, dependent: :destroy
14
13
  has_many :actions, through: :line_item_actions
15
14
 
16
- before_validation :copy_price
17
- before_validation :copy_tax_category
15
+ before_validation :normalize_quantity
16
+ before_validation :set_required_attributes
18
17
 
19
18
  validates :variant, presence: true
20
19
  validates :quantity, numericality: {
21
20
  only_integer: true,
22
- greater_than: -1,
23
- message: Spree.t('validation.must_be_int')
21
+ greater_than: -1
24
22
  }
25
23
  validates :price, numericality: true
26
-
27
24
  validate :ensure_proper_currency
28
- before_destroy :update_inventory
29
- before_destroy :destroy_inventory_units
25
+
26
+ after_create :update_tax_charge
30
27
 
31
28
  after_save :update_inventory
32
29
  after_save :update_adjustments
33
30
 
34
- after_create :update_tax_charge
31
+ before_destroy :update_inventory
32
+ before_destroy :destroy_inventory_units
35
33
 
36
34
  delegate :name, :description, :sku, :should_track_inventory?, to: :variant
37
35
  # @note This will return the product even if it has been deleted.
@@ -39,30 +37,11 @@ module Spree
39
37
  # item, if there is one
40
38
  delegate :product, to: :variant
41
39
 
42
-
43
40
  attr_accessor :target_shipment
44
41
 
45
42
  self.whitelisted_ransackable_associations = ['variant']
46
43
  self.whitelisted_ransackable_attributes = ['variant_id']
47
44
 
48
- # Sets this line item's price, cost price, and currency from this line
49
- # item's variant if they are nil and a variant is present.
50
- def copy_price
51
- if variant
52
- self.price = variant.price if price.nil?
53
- self.cost_price = variant.cost_price if cost_price.nil?
54
- self.currency = variant.currency if currency.nil?
55
- end
56
- end
57
-
58
- # Sets this line item's tax category from this line item's variant if a
59
- # variant is present.
60
- def copy_tax_category
61
- if variant
62
- self.tax_category = variant.tax_category
63
- end
64
- end
65
-
66
45
  # @return [BigDecimal] the amount of this line item, which is the line
67
46
  # item's price multiplied by its quantity.
68
47
  def amount
@@ -76,12 +55,6 @@ module Spree
76
55
  amount + promo_total
77
56
  end
78
57
 
79
- # @return [Spree::Money] the amount of this line item, taking into
80
- # consideration line item promotions.
81
- def discounted_money
82
- Spree::Money.new(discounted_amount, { currency: currency })
83
- end
84
-
85
58
  # @return [BigDecimal] the amount of this line item, taking into
86
59
  # consideration all its adjustments.
87
60
  def final_amount
@@ -89,22 +62,32 @@ module Spree
89
62
  end
90
63
  alias total final_amount
91
64
 
92
- # @return [Spree::Money] the price of this line item
93
- def single_money
94
- Spree::Money.new(price, { currency: currency })
65
+ # @return [BigDecimal] the amount of this line item before included tax
66
+ # @note just like `amount`, this does not include any additional tax
67
+ def pre_tax_amount
68
+ discounted_amount - included_tax_total
95
69
  end
96
- alias single_display_amount single_money
97
70
 
98
- # @return [Spree::Moeny] the amount of this line item
99
- def money
100
- Spree::Money.new(amount, { currency: currency })
101
- end
102
- alias display_total money
103
- alias display_amount money
71
+ extend Spree::DisplayMoney
72
+ money_methods :amount, :discounted_amount, :final_amount, :pre_tax_amount, :price,
73
+ :included_tax_total, :additional_tax_total
74
+ alias discounted_money display_discounted_amount
104
75
 
105
- # Sets the quantity to zero if it is nil or less than zero.
106
- def invalid_quantity_check
107
- self.quantity = 0 if quantity.nil? || quantity < 0
76
+ # @return [Spree::Money] the price of this line item
77
+ alias money_price display_price
78
+ alias single_display_amount display_price
79
+ alias single_money display_price
80
+
81
+ # @return [Spree::Money] the amount of this line item
82
+ alias money display_amount
83
+ alias display_total display_amount
84
+
85
+ # Sets price and currency from a `Spree::Money` object
86
+ #
87
+ # @param [Spree::Money] money - the money object to obtain price and currency from
88
+ def money_price=(money)
89
+ self.price = money.to_d
90
+ self.currency = money.currency.iso_code
108
91
  end
109
92
 
110
93
  # @return [Boolean] true when it is possible to supply the required
@@ -119,59 +102,87 @@ module Spree
119
102
  !sufficient_stock?
120
103
  end
121
104
 
122
- # Sets the options on the line item according to the order's currency or
123
- # one passed in.
105
+ # Sets options on the line item.
106
+ #
107
+ # The options can be arbitrary attributes on the LineItem.
124
108
  #
125
109
  # @param options [Hash] options for this line item
126
- def options=(options={})
110
+ def options=(options = {})
127
111
  return unless options.present?
112
+ assign_attributes options
113
+ end
128
114
 
129
- opts = options.dup # we will be deleting from the hash, so leave the caller's copy intact
115
+ def pricing_options
116
+ Spree::Config.pricing_options_class.from_line_item(self)
117
+ end
130
118
 
131
- currency = opts.delete(:currency) || order.try(:currency)
119
+ private
132
120
 
133
- if currency
134
- self.currency = currency
135
- self.price = variant.price_in(currency).amount +
136
- variant.price_modifier_amount_in(currency, opts)
137
- else
138
- self.price = variant.price +
139
- variant.price_modifier_amount(opts)
140
- end
121
+ # Sets the quantity to zero if it is nil or less than zero.
122
+ def normalize_quantity
123
+ self.quantity = 0 if quantity.nil? || quantity < 0
124
+ end
141
125
 
142
- self.assign_attributes opts
126
+ # Sets tax category, price-related attributes from
127
+ # its variant if they are nil and a variant is present.
128
+ def set_required_attributes
129
+ return unless variant
130
+ self.tax_category ||= variant.tax_category
131
+ set_pricing_attributes
143
132
  end
144
133
 
145
- private
146
- def update_inventory
147
- if (changed? || target_shipment.present?) && self.order.has_checkout_step?("delivery")
148
- Spree::OrderInventory.new(self.order, self).verify(target_shipment)
149
- end
150
- end
134
+ # Set price, cost_price and currency. This method used to be called #copy_price, but actually
135
+ # did more than just setting the price, hence renamed to #set_pricing_attributes
136
+ def set_pricing_attributes
137
+ # If the legacy method #copy_price has been overridden, handle that gracefully
138
+ return handle_copy_price_override if respond_to?(:copy_price)
151
139
 
152
- def destroy_inventory_units
153
- inventory_units.destroy_all
154
- end
140
+ self.currency ||= order.currency
141
+ self.cost_price ||= variant.cost_price
142
+ self.money_price = variant.price_for(pricing_options) if price.nil?
143
+ true
144
+ end
155
145
 
156
- def update_adjustments
157
- if quantity_changed?
158
- update_tax_charge # Called to ensure pre_tax_amount is updated.
159
- recalculate_adjustments
160
- end
161
- end
146
+ def handle_copy_price_override
147
+ copy_price
148
+ ActiveSupport::Deprecation.warn 'You have overridden Spree::LineItem#copy_price. ' \
149
+ 'This method is now called Spree::LineItem#set_pricing_attributes. ' \
150
+ 'Please adjust your override.',
151
+ caller
152
+ end
162
153
 
163
- def recalculate_adjustments
164
- Spree::ItemAdjustments.new(self).update
154
+ def update_inventory
155
+ if (changed? || target_shipment.present?) && order.has_checkout_step?("delivery")
156
+ Spree::OrderInventory.new(order, self).verify(target_shipment)
165
157
  end
158
+ end
159
+
160
+ def destroy_inventory_units
161
+ inventory_units.destroy_all
162
+ end
166
163
 
167
- def update_tax_charge
168
- Spree::TaxRate.adjust(order.tax_zone, [self])
164
+ def update_adjustments
165
+ if quantity_changed?
166
+ update_tax_charge # Called to ensure pre_tax_amount is updated.
167
+ recalculate_adjustments
169
168
  end
169
+ end
170
+
171
+ def recalculate_adjustments
172
+ Spree::ItemAdjustments.new(self).update
173
+ end
170
174
 
171
- def ensure_proper_currency
172
- unless currency == order.currency
173
- errors.add(:currency, :must_match_order_currency)
174
- end
175
+ def update_tax_charge
176
+ Spree::Tax::ItemAdjuster.new(self).adjust!
177
+ end
178
+
179
+ def ensure_proper_currency
180
+ if currency != order.currency
181
+ Spree::Deprecation.warn "The line items currency is different from it's order currency. " \
182
+ "This behavior is not supported anymore and will be deleted soon.",
183
+ caller
184
+ errors.add(:currency, :must_match_order_currency)
175
185
  end
186
+ end
176
187
  end
177
188
  end
@@ -21,7 +21,7 @@ module Spree
21
21
 
22
22
  default_scope -> { order(:position) }
23
23
 
24
- accepts_nested_attributes_for :option_values, reject_if: lambda { |ov| ov[:name].blank? || ov[:presentation].blank? }, allow_destroy: true
24
+ accepts_nested_attributes_for :option_values, reject_if: lambda { |ov| ov[:name].blank? && ov[:presentation].blank? }, allow_destroy: true
25
25
 
26
26
  after_touch :touch_all_products
27
27
  after_save :touch_all_products
@@ -12,6 +12,8 @@ module Spree
12
12
  after_save :touch, if: :changed?
13
13
  after_touch :touch_all_variants
14
14
 
15
+ delegate :name, :presentation, to: :option_type, prefix: :option_type
16
+
15
17
  self.whitelisted_ransackable_attributes = ['presentation']
16
18
 
17
19
  # Updates the updated_at column on all the variants associated with this
@@ -23,7 +25,7 @@ module Spree
23
25
  # @return [String] a string representation of all option value and its
24
26
  # option type
25
27
  def presentation_with_option_type
26
- "#{self.option_type.presentation} - #{self.presentation}"
28
+ "#{option_type.presentation} - #{presentation}"
27
29
  end
28
30
  end
29
31
  end
@@ -110,7 +110,9 @@ module Spree
110
110
  # calls matter so that we do not process payments
111
111
  # until validations have passed
112
112
  before_transition to: :complete, do: :validate_line_item_availability, unless: :unreturned_exchange?
113
- before_transition to: :complete, do: :ensure_available_shipping_rates
113
+ if states[:delivery]
114
+ before_transition to: :complete, do: :ensure_available_shipping_rates
115
+ end
114
116
  before_transition to: :complete, do: :ensure_promotions_eligible
115
117
  before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
116
118
  before_transition to: :complete, do: :ensure_inventory_units, unless: :unreturned_exchange?
@@ -131,7 +133,6 @@ module Spree
131
133
  order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
132
134
  end
133
135
 
134
-
135
136
  after_failure do |order, transition|
136
137
  order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
137
138
  end
@@ -140,13 +141,13 @@ module Spree
140
141
  alias_method :save_state, :save
141
142
  end
142
143
 
143
- def self.go_to_state(name, options={})
144
- self.checkout_steps[name] = options
144
+ def self.go_to_state(name, options = {})
145
+ checkout_steps[name] = options
145
146
  previous_states.each do |state|
146
- add_transition({from: state, to: name}.merge(options))
147
+ add_transition({ from: state, to: name }.merge(options))
147
148
  end
148
149
  if options[:if]
149
- self.previous_states << name
150
+ previous_states << name
150
151
  else
151
152
  self.previous_states = [name]
152
153
  end
@@ -155,43 +156,43 @@ module Spree
155
156
  def self.insert_checkout_step(name, options = {})
156
157
  before = options.delete(:before)
157
158
  after = options.delete(:after) unless before
158
- after = self.checkout_steps.keys.last unless before || after
159
+ after = checkout_steps.keys.last unless before || after
159
160
 
160
- cloned_steps = self.checkout_steps.clone
161
- cloned_removed_transitions = self.removed_transitions.clone
162
- self.checkout_flow do
161
+ cloned_steps = checkout_steps.clone
162
+ cloned_removed_transitions = removed_transitions.clone
163
+ checkout_flow do
163
164
  cloned_steps.each_pair do |key, value|
164
- self.go_to_state(name, options) if key == before
165
- self.go_to_state(key, value)
166
- self.go_to_state(name, options) if key == after
165
+ go_to_state(name, options) if key == before
166
+ go_to_state(key, value)
167
+ go_to_state(name, options) if key == after
167
168
  end
168
169
  cloned_removed_transitions.each do |transition|
169
- self.remove_transition(transition)
170
+ remove_transition(transition)
170
171
  end
171
172
  end
172
173
  end
173
174
 
174
175
  def self.remove_checkout_step(name)
175
- cloned_steps = self.checkout_steps.clone
176
- cloned_removed_transitions = self.removed_transitions.clone
177
- self.checkout_flow do
176
+ cloned_steps = checkout_steps.clone
177
+ cloned_removed_transitions = removed_transitions.clone
178
+ checkout_flow do
178
179
  cloned_steps.each_pair do |key, value|
179
- self.go_to_state(key, value) unless key == name
180
+ go_to_state(key, value) unless key == name
180
181
  end
181
182
  cloned_removed_transitions.each do |transition|
182
- self.remove_transition(transition)
183
+ remove_transition(transition)
183
184
  end
184
185
  end
185
186
  end
186
187
 
187
- def self.remove_transition(options={})
188
- self.removed_transitions << options
189
- self.next_event_transitions.delete(find_transition(options))
188
+ def self.remove_transition(options = {})
189
+ removed_transitions << options
190
+ next_event_transitions.delete(find_transition(options))
190
191
  end
191
192
 
192
- def self.find_transition(options={})
193
+ def self.find_transition(options = {})
193
194
  return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
194
- self.next_event_transitions.detect do |transition|
195
+ next_event_transitions.detect do |transition|
195
196
  transition[options[:from].to_sym] == options[:to].to_sym
196
197
  end
197
198
  end
@@ -205,11 +206,11 @@ module Spree
205
206
  end
206
207
 
207
208
  def self.checkout_step_names
208
- self.checkout_steps.keys
209
+ checkout_steps.keys
209
210
  end
210
211
 
211
212
  def self.add_transition(options)
212
- self.next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
213
+ next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
213
214
  end
214
215
 
215
216
  def checkout_steps
@@ -223,15 +224,15 @@ module Spree
223
224
  end
224
225
 
225
226
  def has_checkout_step?(step)
226
- step.present? && self.checkout_steps.include?(step)
227
+ step.present? && checkout_steps.include?(step)
227
228
  end
228
229
 
229
230
  def passed_checkout_step?(step)
230
- has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(self.state)
231
+ has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
231
232
  end
232
233
 
233
234
  def checkout_step_index(step)
234
- self.checkout_steps.index(step).to_i
235
+ checkout_steps.index(step).to_i
235
236
  end
236
237
 
237
238
  def self.removed_transitions
@@ -243,7 +244,7 @@ module Spree
243
244
  checkout_step_index(state) > checkout_step_index(self.state)
244
245
  end
245
246
 
246
- define_callbacks :updating_from_params, terminator: ->(target, result) { result == false }
247
+ define_callbacks :updating_from_params, terminator: ->(_target, result) { result == false }
247
248
 
248
249
  set_callback :updating_from_params, :before, :update_params_payment_source
249
250
 
@@ -253,7 +254,7 @@ module Spree
253
254
  success = false
254
255
  @updating_params = params
255
256
  run_callbacks :updating_from_params do
256
- attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |k,v| v.nil? } : {}
257
+ attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |_k, v| v.nil? } : {}
257
258
 
258
259
  # Set existing card after setting permitted parameters because
259
260
  # rails would slice parameters containg ruby objects, apparently
@@ -261,7 +262,7 @@ module Spree
261
262
 
262
263
  if existing_card_id.present?
263
264
  credit_card = CreditCard.find existing_card_id
264
- if credit_card.user_id != self.user_id || credit_card.user_id.blank?
265
+ if credit_card.user_id != user_id || credit_card.user_id.blank?
265
266
  raise Core::GatewayError.new Spree.t(:invalid_credit_card)
266
267
  end
267
268
 
@@ -293,35 +294,35 @@ module Spree
293
294
  end
294
295
 
295
296
  def assign_default_addresses!
296
- if self.user
297
+ if user
297
298
  # this is one of 2 places still using User#bill_address
298
299
  self.bill_address ||= user.bill_address if user.bill_address.try!(:valid?)
299
300
  # Skip setting ship address if order doesn't have a delivery checkout step
300
301
  # to avoid triggering validations on shipping address
301
- self.ship_address ||= user.ship_address if user.ship_address.try!(:valid?) && self.checkout_steps.include?("delivery")
302
+ self.ship_address ||= user.ship_address if user.ship_address.try!(:valid?) && checkout_steps.include?("delivery")
302
303
  end
303
304
  end
304
305
 
305
306
  def persist_user_address!
306
- if !self.temporary_address && self.user && self.user.respond_to?(:persist_order_address) && self.bill_address_id
307
- self.user.persist_order_address(self)
307
+ if !temporary_address && user && user.respond_to?(:persist_order_address) && bill_address_id
308
+ user.persist_order_address(self)
308
309
  end
309
310
  end
310
311
 
311
312
  def persist_user_credit_card
312
- if !self.temporary_credit_card && self.user_id && self.valid_credit_cards.present?
313
- default_cc = self.valid_credit_cards.first
314
- # TODO target for refactoring -- why is order checkout responsible for the user -> credit_card relationship?
315
- default_cc.user_id = self.user_id
313
+ if !temporary_credit_card && user_id && valid_credit_cards.present?
314
+ default_cc = valid_credit_cards.first
315
+ # TODO: target for refactoring -- why is order checkout responsible for the user -> credit_card relationship?
316
+ default_cc.user_id = user_id
316
317
  default_cc.default = true
317
318
  default_cc.save
318
319
  end
319
320
  end
320
321
 
321
322
  def assign_default_credit_card
322
- if self.payments.from_credit_card.count == 0 && self.user && self.user.default_credit_card.try(:valid?)
323
- cc = self.user.default_credit_card
324
- self.payments.create!(payment_method_id: cc.payment_method_id, source: cc)
323
+ if payments.from_credit_card.count == 0 && user && user.default_credit_card.try(:valid?)
324
+ cc = user.default_credit_card
325
+ payments.create!(payment_method_id: cc.payment_method_id, source: cc)
325
326
  # this is one of 2 places still using User#bill_address
326
327
  self.bill_address ||= user.default_credit_card.address || user.bill_address
327
328
  end
@@ -359,7 +360,7 @@ module Spree
359
360
  def update_params_payment_source
360
361
  if @updating_params[:order] && (@updating_params[:order][:payments_attributes] || @updating_params[:order][:existing_card])
361
362
  @updating_params[:order][:payments_attributes] ||= [{}]
362
- @updating_params[:order][:payments_attributes].first[:amount] = self.total
363
+ @updating_params[:order][:payments_attributes].first[:amount] = total
363
364
  end
364
365
  end
365
366
  end