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
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class OrderContents
3
- attr_accessor :order, :currency
3
+ attr_accessor :order
4
4
 
5
5
  def initialize(order)
6
6
  @order = order
@@ -24,7 +24,7 @@ module Spree
24
24
  def update_cart(params)
25
25
  if order.update_attributes(params)
26
26
  unless order.completed?
27
- order.line_items = order.line_items.select {|li| li.quantity > 0 }
27
+ order.line_items = order.line_items.select { |li| li.quantity > 0 }
28
28
  # Update totals, then check if the order is eligible for any cart promotions.
29
29
  # If we do not update first, then the item total will be wrong and ItemTotal
30
30
  # promotion rules would not be triggered.
@@ -51,80 +51,82 @@ module Spree
51
51
  order.update_attributes!(
52
52
  approver: user,
53
53
  approver_name: name,
54
- approved_at: Time.current,
54
+ approved_at: Time.current
55
55
  )
56
56
  end
57
57
 
58
-
59
58
  private
60
- def after_add_or_remove(line_item, options = {})
61
- reload_totals
62
- shipment = options[:shipment]
63
- shipment.present? ? shipment.update_amounts : order.ensure_updated_shipments
64
- PromotionHandler::Cart.new(order, line_item).activate
65
- ItemAdjustments.new(line_item).update
66
- reload_totals
67
- line_item
68
- end
69
59
 
70
- def order_updater
71
- @updater ||= OrderUpdater.new(order)
72
- end
60
+ def after_add_or_remove(line_item, options = {})
61
+ reload_totals
62
+ shipment = options[:shipment]
63
+ shipment.present? ? shipment.update_amounts : order.ensure_updated_shipments
64
+ PromotionHandler::Cart.new(order, line_item).activate
65
+ ItemAdjustments.new(line_item).update
66
+ reload_totals
67
+ line_item
68
+ end
73
69
 
74
- def reload_totals
75
- order_updater.update
76
- order.reload
77
- end
70
+ def order_updater
71
+ @updater ||= OrderUpdater.new(order)
72
+ end
78
73
 
79
- def add_to_line_item(variant, quantity, options = {})
80
- line_item = grab_line_item_by_variant(variant, false, options)
81
-
82
- if line_item
83
- line_item.quantity += quantity.to_i
84
- line_item.currency = currency unless currency.nil?
85
- else
86
- opts = { currency: order.currency }.merge ActionController::Parameters.new(options).
87
- permit(PermittedAttributes.line_item_attributes)
88
- line_item = order.line_items.new(quantity: quantity,
89
- variant: variant,
90
- options: opts)
91
- create_order_stock_locations(line_item, options[:stock_location_quantities])
92
- end
93
- line_item.target_shipment = options[:shipment] if options.has_key? :shipment
94
- line_item.save!
95
- line_item
74
+ def reload_totals
75
+ order_updater.update
76
+ order.reload
77
+ end
78
+
79
+ def add_to_line_item(variant, quantity, options = {})
80
+ line_item = grab_line_item_by_variant(variant, false, options)
81
+
82
+ line_item ||= order.line_items.new(
83
+ quantity: 0,
84
+ variant: variant,
85
+ currency: order.currency
86
+ )
87
+
88
+ line_item.quantity += quantity.to_i
89
+ line_item.options = ActionController::Parameters.new(options).permit(PermittedAttributes.line_item_attributes)
90
+
91
+ if line_item.new_record?
92
+ create_order_stock_locations(line_item, options[:stock_location_quantities])
96
93
  end
97
94
 
98
- def remove_from_line_item(variant, quantity, options = {})
99
- line_item = grab_line_item_by_variant(variant, true, options)
100
- line_item.quantity -= quantity
101
- line_item.target_shipment= options[:shipment]
95
+ line_item.target_shipment = options[:shipment]
96
+ line_item.save!
97
+ line_item
98
+ end
102
99
 
103
- if line_item.quantity == 0
104
- line_item.destroy
105
- else
106
- line_item.save!
107
- end
100
+ def remove_from_line_item(variant, quantity, options = {})
101
+ line_item = grab_line_item_by_variant(variant, true, options)
102
+ line_item.quantity -= quantity
103
+ line_item.target_shipment = options[:shipment]
108
104
 
109
- line_item
105
+ if line_item.quantity == 0
106
+ line_item.destroy
107
+ else
108
+ line_item.save!
110
109
  end
111
110
 
112
- def grab_line_item_by_variant(variant, raise_error = false, options = {})
113
- line_item = order.find_line_item_by_variant(variant, options)
111
+ line_item
112
+ end
114
113
 
115
- if !line_item.present? && raise_error
116
- raise ActiveRecord::RecordNotFound, "Line item not found for variant #{variant.sku}"
117
- end
114
+ def grab_line_item_by_variant(variant, raise_error = false, options = {})
115
+ line_item = order.find_line_item_by_variant(variant, options)
118
116
 
119
- line_item
117
+ if !line_item.present? && raise_error
118
+ raise ActiveRecord::RecordNotFound, "Line item not found for variant #{variant.sku}"
120
119
  end
121
120
 
122
- def create_order_stock_locations(line_item, stock_location_quantities)
123
- return unless stock_location_quantities.present?
124
- order = line_item.order
125
- stock_location_quantities.each do |stock_location_id, quantity|
126
- order.order_stock_locations.create!(stock_location_id: stock_location_id, quantity: quantity, variant_id: line_item.variant_id) unless quantity.to_i.zero?
127
- end
121
+ line_item
122
+ end
123
+
124
+ def create_order_stock_locations(line_item, stock_location_quantities)
125
+ return unless stock_location_quantities.present?
126
+ order = line_item.order
127
+ stock_location_quantities.each do |stock_location_id, quantity|
128
+ order.order_stock_locations.create!(stock_location_id: stock_location_id, quantity: quantity, variant_id: line_item.variant_id) unless quantity.to_i.zero?
128
129
  end
130
+ end
129
131
  end
130
132
  end
@@ -34,75 +34,80 @@ module Spree
34
34
  end
35
35
 
36
36
  private
37
- def remove(item_units, shipment = nil)
38
- quantity = item_units.size - line_item.quantity
39
-
40
- if shipment.present?
41
- remove_from_shipment(shipment, quantity)
42
- else
43
- order.shipments.each do |shipment|
44
- break if quantity == 0
45
- quantity -= remove_from_shipment(shipment, quantity)
46
- end
47
- end
48
- end
49
37
 
50
- # Returns either one of the shipment:
51
- #
52
- # first unshipped that already includes this variant
53
- # first unshipped that's leaving from a stock_location that stocks this variant
54
- def determine_target_shipment
55
- shipment = order.shipments.detect do |shipment|
56
- shipment.ready_or_pending? && shipment.include?(variant)
57
- end
38
+ def remove(item_units, shipment = nil)
39
+ quantity = item_units.size - line_item.quantity
58
40
 
59
- shipment ||= order.shipments.detect do |shipment|
60
- shipment.ready_or_pending? && variant.stock_location_ids.include?(shipment.stock_location_id)
61
- end
41
+ if shipment.present?
42
+ remove_from_shipment(shipment, quantity)
43
+ else
44
+ remove_from_any_shipment(quantity)
62
45
  end
46
+ end
63
47
 
64
- def add_to_shipment(shipment, quantity)
65
- if variant.should_track_inventory?
66
- on_hand, back_order = shipment.stock_location.fill_status(variant, quantity)
48
+ # Returns either one of the shipment:
49
+ #
50
+ # first unshipped that already includes this variant
51
+ # first unshipped that's leaving from a stock_location that stocks this variant
52
+ def determine_target_shipment
53
+ potential_shipments = order.shipments.select(&:ready_or_pending?)
54
+
55
+ potential_shipments.detect do |shipment|
56
+ shipment.include?(variant)
57
+ end || potential_shipments.detect do |shipment|
58
+ variant.stock_location_ids.include?(shipment.stock_location_id)
59
+ end
60
+ end
67
61
 
68
- on_hand.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
69
- back_order.times { shipment.set_up_inventory('backordered', variant, order, line_item) }
70
- else
71
- quantity.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
72
- end
62
+ def add_to_shipment(shipment, quantity)
63
+ if variant.should_track_inventory?
64
+ on_hand, back_order = shipment.stock_location.fill_status(variant, quantity)
73
65
 
74
- # adding to this shipment, and removing from stock_location
75
- if order.completed?
76
- shipment.stock_location.unstock(variant, quantity, shipment)
77
- end
66
+ on_hand.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
67
+ back_order.times { shipment.set_up_inventory('backordered', variant, order, line_item) }
68
+ else
69
+ quantity.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
70
+ end
78
71
 
79
- quantity
72
+ # adding to this shipment, and removing from stock_location
73
+ if order.completed?
74
+ shipment.stock_location.unstock(variant, quantity, shipment)
80
75
  end
81
76
 
82
- def remove_from_shipment(shipment, quantity)
83
- return 0 if quantity == 0 || shipment.shipped?
77
+ quantity
78
+ end
84
79
 
85
- shipment_units = shipment.inventory_units_for_item(line_item, variant).reject do |variant_unit|
86
- # TODO: exclude all 'shipped' states
87
- variant_unit.state == 'shipped'
88
- end.sort_by(&:state)
80
+ def remove_from_any_shipment(quantity)
81
+ order.shipments.each do |shipment|
82
+ break if quantity == 0
83
+ quantity -= remove_from_shipment(shipment, quantity)
84
+ end
85
+ end
89
86
 
90
- removed_quantity = 0
87
+ def remove_from_shipment(shipment, quantity)
88
+ return 0 if quantity == 0 || shipment.shipped?
91
89
 
92
- shipment_units.each do |inventory_unit|
93
- break if removed_quantity == quantity
94
- inventory_unit.destroy
95
- removed_quantity += 1
96
- end
90
+ shipment_units = shipment.inventory_units_for_item(line_item, variant).reject do |variant_unit|
91
+ # TODO: exclude all 'shipped' states
92
+ variant_unit.state == 'shipped'
93
+ end.sort_by(&:state)
97
94
 
98
- shipment.destroy if shipment.inventory_units.count == 0
95
+ removed_quantity = 0
99
96
 
100
- # removing this from shipment, and adding to stock_location
101
- if order.completed?
102
- shipment.stock_location.restock variant, removed_quantity, shipment
103
- end
97
+ shipment_units.each do |inventory_unit|
98
+ break if removed_quantity == quantity
99
+ inventory_unit.destroy
100
+ removed_quantity += 1
101
+ end
102
+
103
+ shipment.destroy if shipment.inventory_units.count == 0
104
104
 
105
- removed_quantity
105
+ # removing this from shipment, and adding to stock_location
106
+ if order.completed?
107
+ shipment.stock_location.restock variant, removed_quantity, shipment
106
108
  end
109
+
110
+ removed_quantity
111
+ end
107
112
  end
108
113
  end
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  class OrderMutex < Spree::Base
3
-
4
3
  class LockFailed < StandardError; end
5
4
 
6
5
  belongs_to :order, class_name: "Spree::Order"
@@ -24,7 +24,7 @@ class Spree::OrderShipping
24
24
  # TODO: Remove the `|| shipment.tracking` once Shipment#ship! is called by
25
25
  # OrderShipping#ship rather than vice versa
26
26
  tracking_number: tracking_number || shipment.tracking,
27
- suppress_mailer: suppress_mailer,
27
+ suppress_mailer: suppress_mailer
28
28
  )
29
29
  end
30
30
 
@@ -46,7 +46,7 @@ class Spree::OrderShipping
46
46
  carton = nil
47
47
 
48
48
  Spree::InventoryUnit.transaction do
49
- inventory_units.each &:ship!
49
+ inventory_units.each(&:ship!)
50
50
 
51
51
  carton = Spree::Carton.create!(
52
52
  stock_location: stock_location,
@@ -55,7 +55,7 @@ class Spree::OrderShipping
55
55
  inventory_units: inventory_units,
56
56
  shipped_at: shipped_at,
57
57
  external_number: external_number,
58
- tracking: tracking_number,
58
+ tracking: tracking_number
59
59
  )
60
60
  end
61
61
 
@@ -64,12 +64,11 @@ class Spree::OrderShipping
64
64
  # TODO: Remove tracking numbers from shipments.
65
65
  shipment.update_attributes!(tracking: tracking_number)
66
66
 
67
- if shipment.inventory_units(true).all? {|iu| iu.shipped? || iu.canceled? }
68
- # TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
69
- # having Shipment#ship! call OrderShipping#ship_shipment. We only really
70
- # need this `update_columns` for the specs, until we make that change.
71
- shipment.update_columns(state: 'shipped', shipped_at: Time.current)
72
- end
67
+ next unless shipment.inventory_units.reload.all? { |iu| iu.shipped? || iu.canceled? }
68
+ # TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
69
+ # having Shipment#ship! call OrderShipping#ship_shipment. We only really
70
+ # need this `update_columns` for the specs, until we make that change.
71
+ shipment.update_columns(state: 'shipped', shipped_at: Time.current)
73
72
  end
74
73
 
75
74
  send_shipment_emails(carton) if stock_location.fulfillable? && !suppress_mailer # e.g. digital gift cards that aren't actually shipped
@@ -5,11 +5,11 @@ module Spree
5
5
  belongs_to :order, class_name: "Spree::Order"
6
6
 
7
7
  def self.fulfill_for_order_with_stock_location(order, stock_location)
8
- self.where(order_id: order.id, stock_location_id: stock_location.id).each(&:fulfill_shipment!)
8
+ where(order_id: order.id, stock_location_id: stock_location.id).each(&:fulfill_shipment!)
9
9
  end
10
10
 
11
11
  def fulfill_shipment!
12
- self.update_attributes!(shipment_fulfilled: true)
12
+ update_attributes!(shipment_fulfilled: true)
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -14,8 +14,6 @@ module Spree
14
14
  # Assign the attributes to the order and save the order
15
15
  # @return true if saved, otherwise false and errors will be set on the order
16
16
  def apply
17
- order.validate_payments_attributes(@payments_attributes)
18
-
19
17
  assign_order_attributes
20
18
  assign_payments_attributes
21
19
 
@@ -48,7 +48,6 @@ module Spree
48
48
  update_adjustment_total
49
49
  end
50
50
 
51
-
52
51
  # give each of the shipments a chance to update themselves
53
52
  def update_shipments
54
53
  shipments.each do |shipment|
@@ -60,7 +59,7 @@ module Spree
60
59
  end
61
60
 
62
61
  def update_payment_total
63
- order.payment_total = payments.completed.includes(:refunds).inject(0) { |sum, payment| sum + payment.amount - payment.refunds.sum(:amount) }
62
+ order.payment_total = payments.completed.includes(:refunds).map { |payment| payment.amount - payment.refunds.sum(:amount) }.sum
64
63
  end
65
64
 
66
65
  def update_shipment_total
@@ -75,14 +74,14 @@ module Spree
75
74
  def update_adjustment_total
76
75
  recalculate_adjustments
77
76
  order.adjustment_total = line_items.sum(:adjustment_total) +
78
- shipments.sum(:adjustment_total) +
79
- adjustments.eligible.sum(:amount)
77
+ shipments.sum(:adjustment_total) +
78
+ adjustments.eligible.sum(:amount)
80
79
  order.included_tax_total = line_items.sum(:included_tax_total) + shipments.sum(:included_tax_total)
81
80
  order.additional_tax_total = line_items.sum(:additional_tax_total) + shipments.sum(:additional_tax_total)
82
81
 
83
82
  order.promo_total = line_items.sum(:promo_total) +
84
- shipments.sum(:promo_total) +
85
- adjustments.promotion.eligible.sum(:amount)
83
+ shipments.sum(:promo_total) +
84
+ adjustments.promotion.eligible.sum(:amount)
86
85
 
87
86
  update_order_total
88
87
  end
@@ -97,20 +96,7 @@ module Spree
97
96
  end
98
97
 
99
98
  def persist_totals
100
- order.update_columns(
101
- payment_state: order.payment_state,
102
- shipment_state: order.shipment_state,
103
- item_total: order.item_total,
104
- item_count: order.item_count,
105
- adjustment_total: order.adjustment_total,
106
- included_tax_total: order.included_tax_total,
107
- additional_tax_total: order.additional_tax_total,
108
- payment_total: order.payment_total,
109
- shipment_total: order.shipment_total,
110
- promo_total: order.promo_total,
111
- total: order.total,
112
- updated_at: Time.current,
113
- )
99
+ order.save!(validate: false)
114
100
  end
115
101
 
116
102
  # Updates the +shipment_state+ attribute according to the following logic:
@@ -135,7 +121,7 @@ module Spree
135
121
  else
136
122
  # will return nil if no shipments are found
137
123
  order.shipment_state = shipment_states.first
138
- # TODO inventory unit states?
124
+ # TODO: inventory unit states?
139
125
  # if order.shipment_state && order.inventory_units.where(:shipment_id => nil).exists?
140
126
  # shipments exist but there are unassigned inventory units
141
127
  # order.shipment_state = 'partial'
@@ -171,8 +157,9 @@ module Spree
171
157
  end
172
158
 
173
159
  private
174
- def round_money(n)
175
- (n * 100).round / 100.0
176
- end
160
+
161
+ def round_money(n)
162
+ (n * 100).round / 100.0
163
+ end
177
164
  end
178
165
  end
@@ -25,12 +25,10 @@ module Spree
25
25
 
26
26
  if payment_method.auto_capture?
27
27
  purchase!
28
+ elsif pending?
29
+ # do nothing. already authorized.
28
30
  else
29
- if pending?
30
- # do nothing. already authorized.
31
- else
32
- authorize!
33
- end
31
+ authorize!
34
32
  end
35
33
  end
36
34
 
@@ -67,14 +65,13 @@ module Spree
67
65
  def void_transaction!
68
66
  return true if void?
69
67
  protect_from_connection_error do
70
-
71
68
  if payment_method.payment_profiles_supported?
72
69
  # Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information
73
70
  # so supply the authorization itself as well as the credit card, rather than just the authorization code
74
- response = payment_method.void(self.response_code, source, gateway_options)
71
+ response = payment_method.void(response_code, source, gateway_options)
75
72
  else
76
73
  # Standard ActiveMerchant void usage
77
- response = payment_method.void(self.response_code, gateway_options)
74
+ response = payment_method.void(response_code, gateway_options)
78
75
  end
79
76
 
80
77
  handle_void_response(response)
@@ -88,29 +85,27 @@ module Spree
88
85
 
89
86
  def gateway_options
90
87
  order.reload
91
- options = { :email => order.email,
92
- :customer => order.email,
93
- :customer_id => order.user_id,
94
- :ip => order.last_ip_address,
88
+ options = { email: order.email,
89
+ customer: order.email,
90
+ customer_id: order.user_id,
91
+ ip: order.last_ip_address,
95
92
  # Need to pass in a unique identifier here to make some
96
93
  # payment gateways happy.
97
94
  #
98
95
  # For more information, please see Spree::Payment#set_unique_identifier
99
- :order_id => gateway_order_id }
96
+ order_id: gateway_order_id }
100
97
 
101
- options.merge!({ :shipping => order.ship_total * 100,
102
- :tax => order.additional_tax_total * 100,
103
- :subtotal => order.item_total * 100,
104
- :discount => order.promo_total * 100,
105
- :currency => currency })
98
+ options[:shipping] = order.ship_total * 100
99
+ options[:tax] = order.additional_tax_total * 100
100
+ options[:subtotal] = order.item_total * 100
101
+ options[:discount] = order.promo_total * 100
102
+ options[:currency] = currency
106
103
 
107
104
  bill_address = source.try(:address)
108
105
  bill_address ||= order.bill_address
109
106
 
110
- options.merge!(
111
- billing_address: bill_address.try!(:active_merchant_hash),
112
- shipping_address: order.ship_address.try!(:active_merchant_hash),
113
- )
107
+ options[:billing_address] = bill_address.try!(:active_merchant_hash)
108
+ options[:shipping_address] = order.ship_address.try!(:active_merchant_hash)
114
109
 
115
110
  options
116
111
  end
@@ -124,12 +119,12 @@ module Spree
124
119
 
125
120
  def process_purchase
126
121
  started_processing!
127
- result = gateway_action(source, :purchase, :complete)
122
+ gateway_action(source, :purchase, :complete)
128
123
  # This won't be called if gateway_action raises a GatewayError
129
124
  capture_events.create!(amount: amount)
130
125
  end
131
126
 
132
- def handle_payment_preconditions(&block)
127
+ def handle_payment_preconditions(&_block)
133
128
  unless block_given?
134
129
  raise ArgumentError.new("handle_payment_preconditions must be called with a block")
135
130
  end
@@ -139,7 +134,7 @@ module Spree
139
134
 
140
135
  if source
141
136
  if !processing?
142
- if payment_method.supports?(source) || token_based?
137
+ if payment_method.supports?(source)
143
138
  yield
144
139
  else
145
140
  invalidate!
@@ -173,9 +168,9 @@ module Spree
173
168
  self.cvv_response_message = response.cvv_result['message']
174
169
  end
175
170
  end
176
- self.send("#{success_state}!")
171
+ send("#{success_state}!")
177
172
  else
178
- self.send(failure_state)
173
+ send(failure_state)
179
174
  gateway_error(response)
180
175
  end
181
176
  end
@@ -185,22 +180,20 @@ module Spree
185
180
 
186
181
  if response.success?
187
182
  self.response_code = response.authorization
188
- self.void
183
+ void
189
184
  else
190
185
  gateway_error(response)
191
186
  end
192
187
  end
193
188
 
194
189
  def record_response(response)
195
- log_entries.create!(:details => response.to_yaml)
190
+ log_entries.create!(details: response.to_yaml)
196
191
  end
197
192
 
198
193
  def protect_from_connection_error
199
- begin
200
194
  yield
201
- rescue ActiveMerchant::ConnectionError => e
195
+ rescue ActiveMerchant::ConnectionError => e
202
196
  gateway_error(e)
203
- end
204
197
  end
205
198
 
206
199
  def gateway_error(error)
@@ -218,11 +211,7 @@ module Spree
218
211
 
219
212
  # The unique identifier to be passed in to the payment gateway
220
213
  def gateway_order_id
221
- "#{order.number}-#{self.number}"
222
- end
223
-
224
- def token_based?
225
- source.gateway_customer_profile_id.present? || source.gateway_payment_profile_id.present?
214
+ "#{order.number}-#{number}"
226
215
  end
227
216
  end
228
217
  end