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,61 +1,58 @@
1
1
  module Spree
2
2
  class Order < Spree::Base
3
3
  module Payments
4
- extend ActiveSupport::Concern
5
- included do
6
- # processes any pending payments and must return a boolean as it's
7
- # return value is used by the checkout state_machine to determine
8
- # success or failure of the 'complete' event for the order
9
- #
10
- # Returns:
11
- #
12
- # - true if all pending payments processed successfully
13
- #
14
- # - true if a payment failed, ie. raised a GatewayError
15
- # which gets rescued and converted to TRUE when
16
- # :allow_checkout_gateway_error is set to true
17
- #
18
- # - false if a payment failed, ie. raised a GatewayError
19
- # which gets rescued and converted to FALSE when
20
- # :allow_checkout_on_gateway_error is set to false
21
- #
22
- def process_payments!
23
- process_payments_with(:process!)
24
- end
4
+ # processes any pending payments and must return a boolean as it's
5
+ # return value is used by the checkout state_machine to determine
6
+ # success or failure of the 'complete' event for the order
7
+ #
8
+ # Returns:
9
+ #
10
+ # - true if all pending payments processed successfully
11
+ #
12
+ # - true if a payment failed, ie. raised a GatewayError
13
+ # which gets rescued and converted to TRUE when
14
+ # :allow_checkout_gateway_error is set to true
15
+ #
16
+ # - false if a payment failed, ie. raised a GatewayError
17
+ # which gets rescued and converted to FALSE when
18
+ # :allow_checkout_on_gateway_error is set to false
19
+ #
20
+ def process_payments!
21
+ process_payments_with(:process!)
22
+ end
25
23
 
26
- def authorize_payments!
27
- process_payments_with(:authorize!)
28
- end
24
+ def authorize_payments!
25
+ process_payments_with(:authorize!)
26
+ end
29
27
 
30
- def capture_payments!
31
- process_payments_with(:purchase!)
32
- end
28
+ def capture_payments!
29
+ process_payments_with(:purchase!)
30
+ end
33
31
 
34
- def unprocessed_payments
35
- payments.select { |payment| payment.checkout? }
36
- end
32
+ def unprocessed_payments
33
+ payments.select(&:checkout?)
34
+ end
37
35
 
38
- private
36
+ private
39
37
 
40
- def process_payments_with(method)
41
- # Don't run if there is nothing to pay.
42
- return true if payment_total >= total
43
- # Prevent orders from transitioning to complete without a successfully processed payment.
44
- raise Core::GatewayError.new(Spree.t(:no_payment_found)) if unprocessed_payments.empty?
38
+ def process_payments_with(method)
39
+ # Don't run if there is nothing to pay.
40
+ return true if payment_total >= total
41
+ # Prevent orders from transitioning to complete without a successfully processed payment.
42
+ raise Core::GatewayError.new(Spree.t(:no_payment_found)) if unprocessed_payments.empty?
45
43
 
46
- unprocessed_payments.each do |payment|
47
- break if payment_total >= total
44
+ unprocessed_payments.each do |payment|
45
+ break if payment_total >= total
48
46
 
49
- payment.public_send(method)
47
+ payment.public_send(method)
50
48
 
51
- if payment.completed?
52
- self.payment_total += payment.amount
53
- end
49
+ if payment.completed?
50
+ self.payment_total += payment.amount
54
51
  end
55
- rescue Core::GatewayError => e
56
- result = !!Spree::Config[:allow_checkout_on_gateway_error]
57
- errors.add(:base, e.message) and return result
58
52
  end
53
+ rescue Core::GatewayError => e
54
+ result = !!Spree::Config[:allow_checkout_on_gateway_error]
55
+ errors.add(:base, e.message) && (return result)
59
56
  end
60
57
  end
61
58
  end
@@ -3,7 +3,6 @@ require 'spree/order/checkout'
3
3
 
4
4
  module Spree
5
5
  class Order < Spree::Base
6
-
7
6
  ORDER_NUMBER_LENGTH = 9
8
7
  ORDER_NUMBER_LETTERS = false
9
8
  ORDER_NUMBER_PREFIX = 'R'
@@ -28,7 +27,7 @@ module Spree
28
27
  end
29
28
 
30
29
  self.whitelisted_ransackable_associations = %w[shipments user promotions bill_address ship_address line_items]
31
- self.whitelisted_ransackable_attributes = %w[completed_at created_at email number state payment_state shipment_state total]
30
+ self.whitelisted_ransackable_attributes = %w[completed_at created_at email number state payment_state shipment_state total]
32
31
 
33
32
  attr_reader :coupon_code
34
33
  attr_accessor :temporary_address, :temporary_credit_card
@@ -70,7 +69,7 @@ module Spree
70
69
  has_many :order_promotions, class_name: 'Spree::OrderPromotion'
71
70
  has_many :promotions, through: :order_promotions
72
71
 
73
- has_many :cartons, -> { uniq }, through: :inventory_units
72
+ has_many :cartons, -> { distinct }, through: :inventory_units
74
73
  has_many :shipments, dependent: :destroy, inverse_of: :order do
75
74
  def states
76
75
  pluck(:state).uniq
@@ -84,18 +83,19 @@ module Spree
84
83
  accepts_nested_attributes_for :shipments
85
84
 
86
85
  # Needs to happen before save_permalink is called
86
+ before_validation :associate_store
87
87
  before_validation :set_currency
88
88
  before_validation :generate_order_number, on: :create
89
89
  before_validation :assign_billing_to_shipping_address, if: :use_billing?
90
90
  attr_accessor :use_billing
91
91
 
92
-
93
92
  before_create :create_token
94
93
  before_create :link_by_email
95
94
 
96
95
  validates :email, presence: true, if: :require_email
97
96
  validates :email, email: true, if: :require_email, allow_blank: true
98
97
  validates :number, presence: true, uniqueness: { allow_blank: true }
98
+ validates :store_id, presence: true
99
99
 
100
100
  make_permalink field: :number
101
101
 
@@ -104,7 +104,6 @@ module Spree
104
104
  alias_method :billing_firstname, :bill_address_firstname
105
105
  alias_method :billing_lastname, :bill_address_lastname
106
106
 
107
-
108
107
  class_attribute :update_hooks
109
108
  self.update_hooks = Set.new
110
109
 
@@ -146,18 +145,18 @@ module Spree
146
145
  # Use this method in other gems that wish to register their own custom logic
147
146
  # that should be called after Order#update
148
147
  def self.register_update_hook(hook)
149
- self.update_hooks.add(hook)
148
+ update_hooks.add(hook)
150
149
  end
151
150
 
152
151
  # Use this method in other gems that wish to register their own custom logic
153
152
  # that should be called when determining if two line items are equal.
154
153
  def self.register_line_item_comparison_hook(hook)
155
- self.line_item_comparison_hooks.add(hook)
154
+ line_item_comparison_hooks.add(hook)
156
155
  end
157
156
 
158
157
  # For compatiblity with Calculator::PriceSack
159
158
  def amount
160
- line_items.inject(0.0) { |sum, li| sum + li.amount }
159
+ line_items.map(&:amount).sum
161
160
  end
162
161
 
163
162
  # Sum of all line item amounts pre-tax
@@ -165,6 +164,11 @@ module Spree
165
164
  line_items.to_a.sum(&:pre_tax_amount)
166
165
  end
167
166
 
167
+ # Sum of all line item amounts after promotions, before added tax
168
+ def discounted_item_amount
169
+ line_items.to_a.sum(&:discounted_amount)
170
+ end
171
+
168
172
  def currency
169
173
  self[:currency] || Spree::Config[:currency]
170
174
  end
@@ -174,7 +178,7 @@ module Spree
174
178
  end
175
179
 
176
180
  def to_param
177
- number.to_s.to_url.upcase
181
+ number
178
182
  end
179
183
 
180
184
  def completed?
@@ -211,7 +215,11 @@ module Spree
211
215
 
212
216
  # Returns the address for taxation based on configuration
213
217
  def tax_address
214
- Spree::Config[:tax_using_ship_address] ? ship_address : bill_address
218
+ if Spree::Config[:tax_using_ship_address]
219
+ ship_address
220
+ else
221
+ bill_address
222
+ end || store.default_cart_tax_location
215
223
  end
216
224
 
217
225
  def updater
@@ -228,12 +236,12 @@ module Spree
228
236
  end
229
237
 
230
238
  def allow_cancel?
231
- return false unless completed? and state != 'canceled'
239
+ return false unless completed? && state != 'canceled'
232
240
  shipment_state.nil? || %w{ready backorder pending}.include?(shipment_state)
233
241
  end
234
242
 
235
243
  def all_inventory_units_returned?
236
- inventory_units.all? { |inventory_unit| inventory_unit.returned? }
244
+ inventory_units.all?(&:returned?)
237
245
  end
238
246
 
239
247
  def contents
@@ -253,7 +261,7 @@ module Spree
253
261
  self.user = user
254
262
  attrs_to_set = { user_id: user.try(:id) }
255
263
  attrs_to_set[:email] = user.try(:email) if override_email
256
- attrs_to_set[:created_by_id] = user.try(:id) if self.created_by.blank?
264
+ attrs_to_set[:created_by_id] = user.try(:id) if created_by.blank?
257
265
 
258
266
  if persisted?
259
267
  # immediately persist the changes we just made, but don't use save since we might have an invalid address associated
@@ -277,7 +285,7 @@ module Spree
277
285
  # Use the random number if no other order exists with it.
278
286
  if self.class.exists?(number: random)
279
287
  # If over half of all possible options are taken add another digit.
280
- options[:length] += 1 if self.class.count > (10 ** options[:length] / 2)
288
+ options[:length] += 1 if self.class.count > (10**options[:length] / 2)
281
289
  else
282
290
  break random
283
291
  end
@@ -300,8 +308,8 @@ module Spree
300
308
  def find_line_item_by_variant(variant, options = {})
301
309
  line_items.detect { |line_item|
302
310
  line_item.variant_id == variant.id &&
303
- line_item_options_match(line_item, options)
304
- }
311
+ line_item_options_match(line_item, options)
312
+ }
305
313
  end
306
314
 
307
315
  # This method enables extensions to participate in the
@@ -316,18 +324,15 @@ module Spree
316
324
  def line_item_options_match(line_item, options)
317
325
  return true unless options
318
326
 
319
- self.line_item_comparison_hooks.all? { |hook|
320
- self.send(hook, line_item, options)
327
+ line_item_comparison_hooks.all? { |hook|
328
+ send(hook, line_item, options)
321
329
  }
322
330
  end
323
331
 
324
332
  # Creates new tax charges if there are any applicable rates. If prices already
325
333
  # include taxes then price adjustments are created instead.
326
334
  def create_tax_charge!
327
- # We want to only look up the applicable tax zone once and pass it to TaxRate calculation to avoid duplicated lookups.
328
- order_tax_zone = self.tax_zone
329
- Spree::TaxRate.adjust(order_tax_zone, line_items)
330
- Spree::TaxRate.adjust(order_tax_zone, shipments) if shipments.any?
335
+ Spree::Tax::OrderAdjuster.new(self).adjust!
331
336
  end
332
337
 
333
338
  def outstanding_balance
@@ -343,7 +348,7 @@ module Spree
343
348
  end
344
349
 
345
350
  def outstanding_balance?
346
- self.outstanding_balance != 0
351
+ outstanding_balance != 0
347
352
  end
348
353
 
349
354
  def refund_total
@@ -357,7 +362,7 @@ module Spree
357
362
  end
358
363
 
359
364
  def can_ship?
360
- self.complete? || self.resumed? || self.awaiting_return? || self.returned?
365
+ complete? || resumed? || awaiting_return? || returned?
361
366
  end
362
367
 
363
368
  def credit_cards
@@ -412,7 +417,9 @@ module Spree
412
417
  @available_payment_methods ||= (
413
418
  PaymentMethod.available(:front_end, store: store) +
414
419
  PaymentMethod.available(:both, store: store)
415
- ).uniq
420
+ ).
421
+ uniq.
422
+ sort_by(&:position)
416
423
  end
417
424
 
418
425
  def insufficient_stock_lines
@@ -453,40 +460,43 @@ module Spree
453
460
  def state_changed(name)
454
461
  state = "#{name}_state"
455
462
  if persisted?
456
- old_state = self.send("#{state}_was")
457
- new_state = self.send(state)
463
+ old_state = send("#{state}_was")
464
+ new_state = send(state)
458
465
  unless old_state == new_state
459
- self.state_changes.create(
466
+ state_changes.create(
460
467
  previous_state: old_state,
461
468
  next_state: new_state,
462
469
  name: name,
463
- user_id: self.user_id
470
+ user_id: user_id
464
471
  )
465
472
  end
466
473
  end
467
474
  end
468
475
 
469
476
  def coupon_code=(code)
470
- @coupon_code = code.strip.downcase rescue nil
477
+ @coupon_code = begin
478
+ code.strip.downcase
479
+ rescue
480
+ nil
481
+ end
471
482
  end
472
483
 
473
484
  def can_add_coupon?
474
485
  Spree::Promotion.order_activatable?(self)
475
486
  end
476
487
 
477
-
478
488
  def shipped?
479
489
  %w(partial shipped).include?(shipment_state)
480
490
  end
481
491
 
482
492
  def ensure_shipping_address
483
493
  unless ship_address && ship_address.valid?
484
- errors.add(:base, Spree.t(:ship_address_required)) and return false
494
+ errors.add(:base, Spree.t(:ship_address_required)) && (return false)
485
495
  end
486
496
  end
487
497
 
488
498
  def create_proposed_shipments
489
- return self.shipments if unreturned_exchange?
499
+ return shipments if unreturned_exchange?
490
500
 
491
501
  if completed?
492
502
  raise CannotRebuildShipments.new(Spree.t(:cannot_rebuild_shipments_order_completed))
@@ -513,21 +523,20 @@ module Spree
513
523
  # e.g. customer goes back from payment step and changes order items
514
524
  def ensure_updated_shipments
515
525
  if !completed? && shipments.all?(&:pending?)
516
- self.shipments.destroy_all
517
- self.update_column(:shipment_total, 0)
526
+ shipments.destroy_all
527
+ update_column(:shipment_total, 0)
518
528
  restart_checkout_flow
519
529
  end
520
-
521
530
  end
522
531
 
523
532
  def restart_checkout_flow
524
- return if self.state == 'cart'
533
+ return if state == 'cart'
525
534
 
526
- self.update_columns(
535
+ update_columns(
527
536
  state: 'cart',
528
- updated_at: Time.current,
537
+ updated_at: Time.current
529
538
  )
530
- self.next! if self.line_items.size > 0
539
+ next! if line_items.size > 0
531
540
  end
532
541
 
533
542
  def refresh_shipment_rates
@@ -545,28 +554,28 @@ module Spree
545
554
  end
546
555
 
547
556
  def is_risky?
548
- self.payments.risky.count > 0
557
+ payments.risky.count > 0
549
558
  end
550
559
 
551
560
  def canceled_by(user)
552
- self.transaction do
561
+ transaction do
553
562
  cancel!
554
- self.update_columns(
563
+ update_columns(
555
564
  canceler_id: user.id,
556
- canceled_at: Time.current,
565
+ canceled_at: Time.current
557
566
  )
558
567
  end
559
568
  end
560
569
 
561
570
  def approved?
562
- !!self.approved_at
571
+ !!approved_at
563
572
  end
564
573
 
565
574
  def can_approve?
566
575
  !approved?
567
576
  end
568
577
 
569
- def reload(options=nil)
578
+ def reload(options = nil)
570
579
  remove_instance_variable(:@tax_zone) if defined?(@tax_zone)
571
580
  super
572
581
  end
@@ -600,8 +609,8 @@ module Spree
600
609
  #
601
610
  # FIXME: find a better way to determine if an order is an unreturned
602
611
  # exchange
603
- shipment = self.shipments.first
604
- shipment.present? ? (shipment.created_at < self.created_at - 1) : false
612
+ shipment = shipments.first
613
+ shipment.present? ? (shipment.created_at < created_at - 1) : false
605
614
  end
606
615
 
607
616
  def tax_total
@@ -645,9 +654,8 @@ module Spree
645
654
  payments.reset
646
655
 
647
656
  if payments.where(state: %w(checkout pending)).sum(:amount) != total
648
- errors.add(:base, Spree.t("store_credit.errors.unable_to_fund")) and return false
657
+ errors.add(:base, Spree.t("store_credit.errors.unable_to_fund")) && (return false)
649
658
  end
650
-
651
659
  end
652
660
 
653
661
  def covered_by_store_credit?
@@ -681,32 +689,19 @@ module Spree
681
689
  Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency: currency })
682
690
  end
683
691
 
684
- def payments_attributes=(attributes)
685
- validate_payments_attributes(attributes)
686
- super(attributes)
687
- end
688
-
689
- def validate_payments_attributes(attributes)
690
- attributes = Array.wrap(attributes)
691
- # Ensure the payment methods specified are allowed for this user
692
- payment_methods = Spree::PaymentMethod.where(id: available_payment_methods)
693
- attributes.each do |payment_attributes|
694
- payment_method_id = payment_attributes[:payment_method_id]
692
+ private
695
693
 
696
- # raise RecordNotFound unless it is an allowed payment method
697
- payment_methods.find(payment_method_id) if payment_method_id
698
- end
694
+ def associate_store
695
+ self.store ||= Spree::Store.default
699
696
  end
700
697
 
701
- private
702
-
703
698
  def link_by_email
704
- self.email = user.email if self.user
699
+ self.email = user.email if user
705
700
  end
706
701
 
707
702
  # Determine if email is required (we don't want validation errors before we hit the checkout)
708
703
  def require_email
709
- true unless new_record? or ['cart', 'address'].include?(state)
704
+ true unless new_record? || ['cart', 'address'].include?(state)
710
705
  end
711
706
 
712
707
  def ensure_inventory_units
@@ -734,7 +729,7 @@ module Spree
734
729
 
735
730
  def ensure_line_items_present
736
731
  unless line_items.present?
737
- errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) and return false
732
+ errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) && (return false)
738
733
  end
739
734
  end
740
735
 
@@ -743,17 +738,17 @@ module Spree
743
738
  # After this point, order redirects back to 'address' state and asks user to pick a proper address
744
739
  # Therefore, shipments are not necessary at this point.
745
740
  shipments.destroy_all
746
- errors.add(:base, Spree.t(:items_cannot_be_shipped)) and return false
741
+ errors.add(:base, Spree.t(:items_cannot_be_shipped)) && (return false)
747
742
  end
748
743
  end
749
744
 
750
745
  def after_cancel
751
- shipments.each { |shipment| shipment.cancel! }
752
- payments.completed.each { |payment| payment.cancel! }
753
- payments.store_credits.pending.each { |payment| payment.void_transaction! }
746
+ shipments.each(&:cancel!)
747
+ payments.completed.each(&:cancel!)
748
+ payments.store_credits.pending.each(&:void_transaction!)
754
749
 
755
750
  send_cancel_email
756
- self.update!
751
+ update!
757
752
  end
758
753
 
759
754
  def send_cancel_email
@@ -761,7 +756,7 @@ module Spree
761
756
  end
762
757
 
763
758
  def after_resume
764
- shipments.each { |shipment| shipment.resume! }
759
+ shipments.each(&:resume!)
765
760
  end
766
761
 
767
762
  def use_billing?
@@ -1,5 +1,6 @@
1
1
  # This class represents all of the actions one can take to modify an Order after it is complete
2
2
  class Spree::OrderCancellations
3
+ extend ActiveModel::Translation
3
4
 
4
5
  # If you need to message a third party service when an item is canceled then
5
6
  # set short_ship_tax_notifier to an object that responds to:
@@ -31,7 +32,6 @@ class Spree::OrderCancellations
31
32
  unit_cancels = []
32
33
 
33
34
  Spree::OrderMutex.with_lock!(@order) do
34
-
35
35
  Spree::InventoryUnit.transaction do
36
36
  inventory_units.each do |iu|
37
37
  unit_cancels << short_ship_unit(iu, whodunnit: whodunnit)
@@ -67,7 +67,7 @@ class Spree::OrderCancellations
67
67
  unit_cancel = Spree::UnitCancel.create!(
68
68
  inventory_unit: inventory_unit,
69
69
  reason: reason,
70
- created_by: whodunnit,
70
+ created_by: whodunnit
71
71
  )
72
72
 
73
73
  inventory_unit.cancel!
@@ -99,7 +99,7 @@ class Spree::OrderCancellations
99
99
  unit_cancel = Spree::UnitCancel.create!(
100
100
  inventory_unit: inventory_unit,
101
101
  reason: Spree::UnitCancel::SHORT_SHIP,
102
- created_by: whodunnit,
102
+ created_by: whodunnit
103
103
  )
104
104
  unit_cancel.adjust!
105
105
  inventory_unit.cancel!
@@ -115,7 +115,7 @@ class Spree::OrderCancellations
115
115
  to_a
116
116
 
117
117
  shipments.each do |shipment|
118
- if shipment.inventory_units.all? {|iu| iu.shipped? || iu.canceled? }
118
+ if shipment.inventory_units.all? { |iu| iu.shipped? || iu.canceled? }
119
119
  shipment.update_attributes!(state: 'shipped', shipped_at: Time.current)
120
120
  end
121
121
  end
@@ -44,8 +44,9 @@ class Spree::OrderCapturing
44
44
  private
45
45
 
46
46
  def sorted_payments(order)
47
- payments = order.payments.pending
48
- payments = payments.sort_by { |p| [@sorted_payment_method_classes.index(p.payment_method.class), p.id] }
47
+ order.payments.pending.sort_by do |p|
48
+ [@sorted_payment_method_classes.index(p.payment_method.class), p.id]
49
+ end
49
50
  end
50
51
  end
51
52