spree_core 3.1.14 → 3.2.0.rc1

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 (529) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{spree.js.coffee.erb → spree.js.coffee} +2 -2
  3. data/app/helpers/spree/base_helper.rb +1 -1
  4. data/app/helpers/spree/products_helper.rb +0 -6
  5. data/app/mailers/spree/reimbursement_mailer.rb +6 -6
  6. data/app/models/concerns/spree/acts_as_taggable.rb +11 -0
  7. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  8. data/app/models/concerns/spree/ransackable_attributes.rb +0 -5
  9. data/app/models/spree/address.rb +67 -38
  10. data/app/models/spree/app_configuration.rb +9 -6
  11. data/app/models/spree/base.rb +1 -1
  12. data/app/models/spree/calculator.rb +1 -1
  13. data/app/models/spree/country.rb +5 -4
  14. data/app/models/spree/credit_card.rb +3 -3
  15. data/app/models/spree/gateway/bogus.rb +11 -11
  16. data/app/models/spree/gateway/bogus_simple.rb +4 -4
  17. data/app/models/spree/gateway.rb +1 -1
  18. data/app/models/spree/image.rb +2 -2
  19. data/app/models/spree/inventory_unit.rb +6 -10
  20. data/app/models/spree/line_item.rb +17 -6
  21. data/app/models/spree/order/checkout.rb +2 -2
  22. data/app/models/spree/order.rb +12 -25
  23. data/app/models/spree/order_contents.rb +7 -6
  24. data/app/models/spree/order_inventory.rb +12 -1
  25. data/app/models/spree/order_updater.rb +1 -2
  26. data/app/models/spree/payment/processing.rb +3 -3
  27. data/app/models/spree/payment_method.rb +7 -1
  28. data/app/models/spree/preferences/store.rb +3 -3
  29. data/app/models/spree/product/scopes.rb +16 -20
  30. data/app/models/spree/product.rb +11 -3
  31. data/app/models/spree/promotion/actions/create_line_items.rb +21 -3
  32. data/app/models/spree/promotion/rules/country.rb +23 -0
  33. data/app/models/spree/promotion/rules/option_value.rb +13 -10
  34. data/app/models/spree/promotion/rules/taxon.rb +1 -1
  35. data/app/models/spree/promotion.rb +35 -1
  36. data/app/models/spree/promotion_handler/cart.rb +3 -17
  37. data/app/models/spree/promotion_handler/coupon.rb +22 -22
  38. data/app/models/spree/promotion_handler/page.rb +2 -2
  39. data/app/models/spree/refund.rb +1 -1
  40. data/app/models/spree/refund_reason.rb +1 -1
  41. data/app/models/spree/reimbursement_type.rb +5 -1
  42. data/app/models/spree/return_item.rb +1 -1
  43. data/app/models/spree/shipment.rb +4 -6
  44. data/app/models/spree/shipment_handler.rb +1 -1
  45. data/app/models/spree/stock/adjuster.rb +9 -2
  46. data/app/models/spree/stock/coordinator.rb +11 -4
  47. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  48. data/app/models/spree/stock/package.rb +11 -3
  49. data/app/models/spree/stock/packer.rb +15 -5
  50. data/app/models/spree/stock/prioritizer.rb +25 -15
  51. data/app/models/spree/stock/splitter/shipping_category.rb +6 -1
  52. data/app/models/spree/stock_item.rb +2 -1
  53. data/app/models/spree/stock_movement.rb +11 -6
  54. data/app/models/spree/store.rb +1 -0
  55. data/app/models/spree/store_credit.rb +1 -1
  56. data/app/models/spree/tag.rb +4 -0
  57. data/app/models/spree/tax_rate.rb +6 -0
  58. data/app/models/spree/taxon.rb +3 -3
  59. data/app/models/spree/variant.rb +6 -3
  60. data/app/models/spree/zone.rb +2 -2
  61. data/app/views/spree/shared/_paths.html.erb +8 -0
  62. data/config/initializers/acts_as_taggable_on.rb +9 -0
  63. data/config/initializers/friendly_id.rb +0 -81
  64. data/config/locales/en.yml +11 -0
  65. data/db/default/spree/countries.rb +5 -1
  66. data/db/default/spree/roles.rb +2 -2
  67. data/db/default/spree/states.rb +1 -1
  68. data/db/migrate/20120831092320_spree_one_two.rb +101 -101
  69. data/db/migrate/20120831092359_spree_promo_one_two.rb +14 -14
  70. data/db/migrate/20120905145253_add_tax_rate_label.rb +1 -1
  71. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +2 -2
  72. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +4 -4
  73. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +2 -2
  74. data/db/migrate/20121010142909_add_states_required_to_countries.rb +2 -2
  75. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +3 -3
  76. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +5 -5
  77. data/db/migrate/20121031162139_split_prices_from_variants.rb +10 -10
  78. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +3 -3
  79. data/db/migrate/20121107184631_add_currency_to_line_items.rb +1 -1
  80. data/db/migrate/20121107194006_add_currency_to_orders.rb +1 -1
  81. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +2 -2
  82. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +1 -1
  83. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +2 -2
  84. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +1 -1
  85. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +1 -1
  86. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +1 -1
  87. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +2 -2
  88. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +1 -1
  89. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +1 -1
  90. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +1 -1
  91. data/db/migrate/20130211190146_create_spree_stock_items.rb +2 -2
  92. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  93. data/db/migrate/20130213191427_create_default_stock.rb +1 -2
  94. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +1 -1
  95. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +2 -2
  96. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +1 -1
  97. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +3 -3
  98. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +1 -1
  99. data/db/migrate/20130228210442_create_shipping_method_zone.rb +3 -3
  100. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +1 -1
  101. data/db/migrate/20130301162924_create_shipping_method_categories.rb +3 -3
  102. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +1 -1
  103. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +5 -5
  104. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +1 -1
  105. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  106. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +3 -3
  107. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +2 -2
  108. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +2 -2
  109. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +2 -2
  110. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +1 -1
  111. data/db/migrate/20130319062004_change_orders_total_precision.rb +5 -5
  112. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +2 -2
  113. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -2
  114. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +2 -2
  115. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +1 -1
  116. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +3 -3
  117. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +3 -3
  118. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  119. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +1 -1
  120. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +1 -1
  121. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +1 -1
  122. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +1 -1
  123. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +2 -2
  124. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +1 -1
  125. data/db/migrate/20130417120035_update_adjustment_states.rb +3 -3
  126. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +4 -4
  127. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  128. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +1 -1
  129. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +1 -1
  130. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  131. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +1 -1
  132. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +1 -1
  133. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +1 -1
  134. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +1 -1
  135. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +1 -1
  136. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +1 -1
  137. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +1 -1
  138. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +1 -1
  139. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +2 -2
  140. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +4 -4
  141. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +1 -1
  142. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +1 -1
  143. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +2 -2
  144. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +3 -3
  145. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +1 -1
  146. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +1 -1
  147. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +1 -1
  148. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +1 -1
  149. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +1 -1
  150. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  151. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -4
  152. data/db/migrate/20130807024302_rename_adjustment_fields.rb +1 -1
  153. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +1 -1
  154. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +1 -1
  155. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +2 -2
  156. data/db/migrate/20130813140619_expand_order_number_size.rb +3 -3
  157. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +1 -1
  158. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +2 -2
  159. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +2 -2
  160. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  161. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +2 -2
  162. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +2 -2
  163. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  164. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +1 -1
  165. data/db/migrate/20130909115621_change_states_required_for_countries.rb +1 -1
  166. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +1 -1
  167. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +1 -1
  168. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +1 -1
  169. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +2 -2
  170. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +2 -2
  171. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +1 -1
  172. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +1 -1
  173. data/db/migrate/20131118043959_add_included_to_adjustments.rb +2 -2
  174. data/db/migrate/20131118050234_rename_tax_total_fields.rb +1 -1
  175. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
  176. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +1 -1
  177. data/db/migrate/20131127001002_add_position_to_classifications.rb +1 -1
  178. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +2 -2
  179. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +1 -1
  180. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +2 -2
  181. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -1
  182. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +1 -1
  183. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +1 -1
  184. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +1 -1
  185. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +1 -1
  186. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +1 -1
  187. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +1 -1
  188. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +1 -1
  189. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  190. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +1 -1
  191. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +1 -1
  192. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +1 -1
  193. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +1 -1
  194. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +1 -1
  195. data/db/migrate/20140213184916_add_more_indexes.rb +1 -1
  196. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +2 -2
  197. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +1 -1
  198. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +1 -1
  199. data/db/migrate/20140309023735_migrate_old_preferences.rb +1 -1
  200. data/db/migrate/20140309024355_create_spree_stores.rb +2 -2
  201. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  202. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +1 -1
  203. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +1 -1
  204. data/db/migrate/20140331100557_add_additional_store_fields.rb +1 -1
  205. data/db/migrate/20140410141842_add_many_missing_indexes.rb +1 -1
  206. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +1 -1
  207. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +1 -1
  208. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +5 -5
  209. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +1 -1
  210. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +2 -2
  211. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +1 -1
  212. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +1 -1
  213. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +1 -1
  214. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +1 -1
  215. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  216. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  217. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +1 -1
  218. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +1 -1
  219. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +2 -2
  220. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +1 -1
  221. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +1 -1
  222. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  223. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  224. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +1 -1
  225. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  226. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +1 -1
  227. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +1 -1
  228. data/db/migrate/20140717155155_create_default_refund_reason.rb +1 -1
  229. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +1 -1
  230. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  231. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +1 -1
  232. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +5 -5
  233. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +1 -1
  234. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +1 -1
  235. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +2 -2
  236. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  237. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +1 -1
  238. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +1 -1
  239. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +1 -1
  240. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  241. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +1 -1
  242. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +1 -1
  243. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -1
  244. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +1 -1
  245. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +1 -1
  246. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +1 -1
  247. data/db/migrate/20140911173301_add_kind_to_zone.rb +1 -1
  248. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +1 -1
  249. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +1 -1
  250. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +1 -1
  251. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +1 -1
  252. data/db/migrate/20141009204607_add_store_id_to_orders.rb +1 -1
  253. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +1 -1
  254. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +1 -1
  255. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +2 -7
  256. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +1 -1
  257. data/db/migrate/20141105213646_update_classifications_positions.rb +1 -1
  258. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +1 -1
  259. data/db/migrate/20141215232040_remove_token_permissions_table.rb +1 -1
  260. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +1 -1
  261. data/db/migrate/20141217215630_update_product_slug_index.rb +1 -1
  262. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +1 -1
  263. data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
  264. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
  265. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
  266. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
  267. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +1 -1
  268. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +1 -1
  269. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +1 -1
  270. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +1 -1
  271. data/db/migrate/20150128060325_remove_spree_configurations.rb +1 -1
  272. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +1 -1
  273. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +1 -1
  274. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +1 -1
  275. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +1 -1
  276. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +1 -1
  277. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +1 -1
  278. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +1 -1
  279. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +1 -1
  280. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +1 -1
  281. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +1 -1
  282. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +1 -1
  283. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +1 -1
  284. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +1 -1
  285. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +1 -1
  286. data/db/migrate/20150727191614_spree_store_credit_types.rb +1 -1
  287. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +1 -1
  288. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +1 -1
  289. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +1 -1
  290. data/db/migrate/20160219165458_add_indexes.rb +1 -1
  291. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +10 -0
  292. data/db/migrate/20160511071954_acts_as_taggable_on_spree_migration.rb +40 -0
  293. data/db/migrate/20160511072249_change_collation_for_spree_tag_names.rb +9 -0
  294. data/db/migrate/20160511072335_add_missing_indexes_to_spree_taggings.rb +14 -0
  295. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +7 -0
  296. data/db/migrate/20161014145148_add_created_at_to_variant.rb +8 -0
  297. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +6 -0
  298. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  299. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +3 -3
  300. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  301. data/lib/generators/spree/dummy/dummy_generator.rb +11 -11
  302. data/lib/generators/spree/dummy/templates/rails/application.rb +1 -1
  303. data/lib/generators/spree/dummy/templates/rails/database.yml +9 -6
  304. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -2
  305. data/lib/generators/spree/install/install_generator.rb +37 -13
  306. data/lib/spree/core/controller_helpers/common.rb +3 -3
  307. data/lib/spree/core/controller_helpers/order.rb +2 -5
  308. data/lib/spree/core/controller_helpers/respond_with.rb +1 -1
  309. data/lib/spree/core/delegate_belongs_to.rb +2 -2
  310. data/lib/spree/core/engine.rb +5 -4
  311. data/lib/spree/core/importer/product.rb +2 -2
  312. data/lib/spree/core/product_duplicator.rb +1 -1
  313. data/lib/spree/core/product_filters.rb +1 -1
  314. data/lib/spree/core/search/base.rb +1 -1
  315. data/lib/spree/core/version.rb +1 -1
  316. data/lib/spree/i18n/initializer.rb +1 -1
  317. data/lib/spree/money.rb +1 -15
  318. data/lib/spree/permitted_attributes.rb +1 -1
  319. data/lib/spree/testing_support/caching.rb +3 -3
  320. data/lib/spree/testing_support/common_rake.rb +0 -2
  321. data/lib/spree/testing_support/controller_requests.rb +4 -4
  322. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -1
  323. data/lib/spree/testing_support/factories/order_factory.rb +1 -0
  324. data/lib/spree/testing_support/factories/tag_factory.rb +5 -0
  325. data/lib/spree/testing_support/kernel.rb +18 -0
  326. data/lib/spree/testing_support/order_walkthrough.rb +4 -4
  327. data/lib/tasks/core.rake +2 -2
  328. data/spec/helpers/base_helper_spec.rb +200 -0
  329. data/spec/helpers/products_helper_spec.rb +289 -0
  330. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  331. data/spec/lib/i18n_spec.rb +123 -0
  332. data/spec/lib/search/base_spec.rb +86 -0
  333. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +103 -0
  334. data/spec/lib/spree/core/controller_helpers/order_spec.rb +110 -0
  335. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  336. data/spec/lib/spree/core/controller_helpers/store_spec.rb +72 -0
  337. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  338. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  339. data/spec/lib/spree/core/importer/order_spec.rb +605 -0
  340. data/spec/lib/spree/core/number_generator_spec.rb +175 -0
  341. data/spec/lib/spree/core/token_generator_spec.rb +24 -0
  342. data/spec/lib/spree/core/validators/email_spec.rb +53 -0
  343. data/spec/lib/spree/core_spec.rb +23 -0
  344. data/spec/lib/spree/localized_number_spec.rb +48 -0
  345. data/spec/lib/spree/migrations_spec.rb +36 -0
  346. data/spec/lib/spree/money_spec.rb +122 -0
  347. data/spec/lib/tasks/exchanges_spec.rb +136 -0
  348. data/spec/mailers/order_mailer_spec.rb +122 -0
  349. data/spec/mailers/reimbursement_mailer_spec.rb +47 -0
  350. data/spec/mailers/shipment_mailer_spec.rb +81 -0
  351. data/spec/mailers/test_mailer_spec.rb +38 -0
  352. data/spec/models/option_type_prototype_spec.rb +9 -0
  353. data/spec/models/spree/ability_spec.rb +251 -0
  354. data/spec/models/spree/address_spec.rb +402 -0
  355. data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
  356. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
  357. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
  358. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +26 -0
  359. data/spec/models/spree/adjustment_spec.rb +189 -0
  360. data/spec/models/spree/app_configuration_spec.rb +26 -0
  361. data/spec/models/spree/asset_spec.rb +28 -0
  362. data/spec/models/spree/calculator/default_tax_spec.rb +152 -0
  363. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  364. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  365. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  366. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  367. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  368. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +47 -0
  369. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  370. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  371. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  372. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  373. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +29 -0
  374. data/spec/models/spree/calculator/shipping.rb +8 -0
  375. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +40 -0
  376. data/spec/models/spree/calculator/tiered_percent_spec.rb +51 -0
  377. data/spec/models/spree/calculator_spec.rb +69 -0
  378. data/spec/models/spree/classification_spec.rb +93 -0
  379. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  380. data/spec/models/spree/concerns/user_methods_spec.rb +82 -0
  381. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
  382. data/spec/models/spree/country_spec.rb +55 -0
  383. data/spec/models/spree/credit_card_spec.rb +328 -0
  384. data/spec/models/spree/customer_return_spec.rb +240 -0
  385. data/spec/models/spree/exchange_spec.rb +75 -0
  386. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  387. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  388. data/spec/models/spree/gateway_spec.rb +61 -0
  389. data/spec/models/spree/image_spec.rb +8 -0
  390. data/spec/models/spree/inventory_unit_spec.rb +256 -0
  391. data/spec/models/spree/line_item_spec.rb +346 -0
  392. data/spec/models/spree/option_type_spec.rb +14 -0
  393. data/spec/models/spree/option_value_spec.rb +18 -0
  394. data/spec/models/spree/order/address_spec.rb +50 -0
  395. data/spec/models/spree/order/adjustments_spec.rb +29 -0
  396. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  397. data/spec/models/spree/order/checkout_spec.rb +770 -0
  398. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  399. data/spec/models/spree/order/finalizing_spec.rb +114 -0
  400. data/spec/models/spree/order/helpers_spec.rb +5 -0
  401. data/spec/models/spree/order/payment_spec.rb +214 -0
  402. data/spec/models/spree/order/risk_assessment_spec.rb +84 -0
  403. data/spec/models/spree/order/shipments_spec.rb +43 -0
  404. data/spec/models/spree/order/state_machine_spec.rb +212 -0
  405. data/spec/models/spree/order/store_credit_spec.rb +426 -0
  406. data/spec/models/spree/order/tax_spec.rb +84 -0
  407. data/spec/models/spree/order/totals_spec.rb +24 -0
  408. data/spec/models/spree/order/updating_spec.rb +18 -0
  409. data/spec/models/spree/order/validations_spec.rb +15 -0
  410. data/spec/models/spree/order_contents_spec.rb +297 -0
  411. data/spec/models/spree/order_inventory_spec.rb +239 -0
  412. data/spec/models/spree/order_merger_spec.rb +135 -0
  413. data/spec/models/spree/order_spec.rb +1046 -0
  414. data/spec/models/spree/order_updater_spec.rb +294 -0
  415. data/spec/models/spree/payment/gateway_options_spec.rb +127 -0
  416. data/spec/models/spree/payment/store_credit_spec.rb +60 -0
  417. data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
  418. data/spec/models/spree/payment_method_spec.rb +103 -0
  419. data/spec/models/spree/payment_spec.rb +919 -0
  420. data/spec/models/spree/preference_spec.rb +80 -0
  421. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  422. data/spec/models/spree/preferences/preferable_spec.rb +344 -0
  423. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  424. data/spec/models/spree/preferences/store_spec.rb +46 -0
  425. data/spec/models/spree/price_spec.rb +128 -0
  426. data/spec/models/spree/product/scopes_spec.rb +183 -0
  427. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  428. data/spec/models/spree/product_filter_spec.rb +26 -0
  429. data/spec/models/spree/product_option_type_spec.rb +9 -0
  430. data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
  431. data/spec/models/spree/product_property_spec.rb +22 -0
  432. data/spec/models/spree/product_spec.rb +619 -0
  433. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +50 -0
  434. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +148 -0
  435. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +86 -0
  436. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +36 -0
  437. data/spec/models/spree/promotion/rules/country_spec.rb +36 -0
  438. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  439. data/spec/models/spree/promotion/rules/item_total_spec.rb +282 -0
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +90 -0
  442. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  443. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  444. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  445. data/spec/models/spree/promotion/rules/user_spec.rb +45 -0
  446. data/spec/models/spree/promotion_action_spec.rb +10 -0
  447. data/spec/models/spree/promotion_category_spec.rb +17 -0
  448. data/spec/models/spree/promotion_handler/cart_spec.rb +102 -0
  449. data/spec/models/spree/promotion_handler/coupon_spec.rb +323 -0
  450. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +48 -0
  451. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  452. data/spec/models/spree/promotion_rule_spec.rb +29 -0
  453. data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
  454. data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
  455. data/spec/models/spree/promotion_spec.rb +679 -0
  456. data/spec/models/spree/property_prototype_spec.rb +9 -0
  457. data/spec/models/spree/property_spec.rb +5 -0
  458. data/spec/models/spree/prototype_spec.rb +5 -0
  459. data/spec/models/spree/prototype_taxon_spec.rb +9 -0
  460. data/spec/models/spree/refund_reason_spec.rb +20 -0
  461. data/spec/models/spree/refund_spec.rb +195 -0
  462. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  463. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  464. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  465. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  466. data/spec/models/spree/reimbursement_spec.rb +188 -0
  467. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +63 -0
  468. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  469. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  470. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +55 -0
  471. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
  472. data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
  473. data/spec/models/spree/return_authorization_spec.rb +230 -0
  474. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  475. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  476. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +61 -0
  477. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  478. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  479. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  480. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  481. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  482. data/spec/models/spree/return_item_spec.rb +731 -0
  483. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  484. data/spec/models/spree/role_spec.rb +7 -0
  485. data/spec/models/spree/shipment_spec.rb +742 -0
  486. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  487. data/spec/models/spree/shipping_category_spec.rb +19 -0
  488. data/spec/models/spree/shipping_method_spec.rb +95 -0
  489. data/spec/models/spree/shipping_rate_spec.rb +140 -0
  490. data/spec/models/spree/state_spec.rb +29 -0
  491. data/spec/models/spree/stock/availability_validator_spec.rb +36 -0
  492. data/spec/models/spree/stock/content_item_spec.rb +31 -0
  493. data/spec/models/spree/stock/coordinator_spec.rb +61 -0
  494. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  495. data/spec/models/spree/stock/estimator_spec.rb +202 -0
  496. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  497. data/spec/models/spree/stock/package_spec.rb +182 -0
  498. data/spec/models/spree/stock/packer_spec.rb +70 -0
  499. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  500. data/spec/models/spree/stock/quantifier_spec.rb +126 -0
  501. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  502. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  503. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +47 -0
  504. data/spec/models/spree/stock/splitter/weight_spec.rb +32 -0
  505. data/spec/models/spree/stock_item_spec.rb +432 -0
  506. data/spec/models/spree/stock_location_spec.rb +243 -0
  507. data/spec/models/spree/stock_movement_spec.rb +120 -0
  508. data/spec/models/spree/stock_transfer_spec.rb +50 -0
  509. data/spec/models/spree/store_credit_event_spec.rb +101 -0
  510. data/spec/models/spree/store_credit_spec.rb +786 -0
  511. data/spec/models/spree/store_spec.rb +78 -0
  512. data/spec/models/spree/tax_category_spec.rb +32 -0
  513. data/spec/models/spree/tax_rate_spec.rb +561 -0
  514. data/spec/models/spree/taxon_spec.rb +85 -0
  515. data/spec/models/spree/taxonomy_spec.rb +18 -0
  516. data/spec/models/spree/tracker_spec.rb +21 -0
  517. data/spec/models/spree/user_spec.rb +203 -0
  518. data/spec/models/spree/variant_spec.rb +809 -0
  519. data/spec/models/spree/zone_member_spec.rb +38 -0
  520. data/spec/models/spree/zone_spec.rb +472 -0
  521. data/spec/spec_helper.rb +79 -0
  522. data/spec/support/big_decimal.rb +5 -0
  523. data/spec/support/concerns/adjustment_source.rb +23 -0
  524. data/spec/support/concerns/default_price.rb +37 -0
  525. data/spec/support/rake.rb +13 -0
  526. data/spec/support/test_gateway.rb +2 -0
  527. data/spree_core.gemspec +12 -12
  528. metadata +249 -43
  529. data/config/initializers/premailer_rails.rb +0 -3
@@ -11,16 +11,13 @@ module Spree
11
11
  def apply
12
12
  if order.coupon_code.present?
13
13
  if promotion.present? && promotion.actions.exists?
14
- handle_present_promotion(promotion)
14
+ handle_present_promotion
15
+ elsif Promotion.with_coupon_code(order.coupon_code).try(:expired?)
16
+ set_error_code :coupon_code_expired
15
17
  else
16
- if Promotion.with_coupon_code(order.coupon_code).try(:expired?)
17
- set_error_code :coupon_code_expired
18
- else
19
- set_error_code :coupon_code_not_found
20
- end
18
+ set_error_code :coupon_code_not_found
21
19
  end
22
20
  end
23
-
24
21
  self
25
22
  end
26
23
 
@@ -35,7 +32,9 @@ module Spree
35
32
  end
36
33
 
37
34
  def promotion
38
- @promotion ||= Promotion.active.includes(:promotion_rules, :promotion_actions).with_coupon_code(order.coupon_code)
35
+ @promotion ||= Promotion.active.includes(
36
+ :promotion_rules, :promotion_actions
37
+ ).with_coupon_code(order.coupon_code)
39
38
  end
40
39
 
41
40
  def successful?
@@ -44,18 +43,17 @@ module Spree
44
43
 
45
44
  private
46
45
 
47
- def handle_present_promotion(promotion)
46
+ def handle_present_promotion
48
47
  return promotion_usage_limit_exceeded if promotion.usage_limit_exceeded?(order)
49
- return promotion_applied if promotion_exists_on_order?(order, promotion)
48
+ return promotion_applied if promotion_exists_on_order?
50
49
  unless promotion.eligible?(order)
51
50
  self.error = promotion.eligibility_errors.full_messages.first unless promotion.eligibility_errors.blank?
52
- return (self.error || ineligible_for_this_order)
51
+ return (error || ineligible_for_this_order)
53
52
  end
54
53
 
55
54
  # If any of the actions for the promotion return `true`,
56
55
  # then result here will also be `true`.
57
- result = promotion.activate(:order => order)
58
- if result
56
+ if promotion.activate(order: order)
59
57
  determine_promotion_application_result
60
58
  else
61
59
  set_error_code :coupon_code_unknown_error
@@ -74,7 +72,7 @@ module Spree
74
72
  set_error_code :coupon_code_already_applied
75
73
  end
76
74
 
77
- def promotion_exists_on_order?(order, promotion)
75
+ def promotion_exists_on_order?
78
76
  order.promotions.include? promotion
79
77
  end
80
78
 
@@ -85,21 +83,23 @@ module Spree
85
83
  end
86
84
 
87
85
  # Check for applied line items.
88
- created_line_items = promotion.actions.detect { |a| a.type == 'Spree::Promotion::Actions::CreateLineItems' }
86
+ created_line_items = promotion.actions.detect do |a|
87
+ Object.const_get(a.type).ancestors.include?(
88
+ Spree::Promotion::Actions::CreateLineItems
89
+ )
90
+ end
89
91
 
90
92
  if discount || created_line_items
91
93
  order.update_totals
92
94
  order.persist_totals
93
95
  set_success_code :coupon_code_applied
94
- else
96
+ elsif order.promotions.with_coupon_code(order.coupon_code)
95
97
  # if the promotion exists on an order, but wasn't found above,
96
98
  # we've already selected a better promotion
97
- if order.promotions.with_coupon_code(order.coupon_code)
98
- set_error_code :coupon_code_better_exists
99
- else
100
- # if the promotion was created after the order
101
- set_error_code :coupon_code_not_found
102
- end
99
+ set_error_code :coupon_code_better_exists
100
+ else
101
+ # if the promotion was created after the order
102
+ set_error_code :coupon_code_not_found
103
103
  end
104
104
  end
105
105
  end
@@ -10,14 +10,14 @@ module Spree
10
10
 
11
11
  def activate
12
12
  if promotion && promotion.eligible?(order)
13
- promotion.activate(:order => order)
13
+ promotion.activate(order: order)
14
14
  end
15
15
  end
16
16
 
17
17
  private
18
18
 
19
19
  def promotion
20
- @promotion ||= Promotion.active.find_by(:path => path)
20
+ @promotion ||= Promotion.active.find_by(path: path)
21
21
  end
22
22
  end
23
23
  end
@@ -43,7 +43,7 @@ module Spree
43
43
  def perform!
44
44
  return true if transaction_id.present?
45
45
 
46
- credit_cents = Spree::Money.new(amount.to_f, currency: payment.currency).amount_in_cents
46
+ credit_cents = Spree::Money.new(amount.to_f, currency: payment.currency).money.cents
47
47
 
48
48
  @response = process!(credit_cents)
49
49
 
@@ -7,7 +7,7 @@ module Spree
7
7
  has_many :refunds, dependent: :restrict_with_error
8
8
 
9
9
  def self.return_processing_reason
10
- find_by!(name: RETURN_PROCESSING_REASON, mutable: false)
10
+ find_by(name: RETURN_PROCESSING_REASON, mutable: false)
11
11
  end
12
12
  end
13
13
  end
@@ -2,7 +2,11 @@ module Spree
2
2
  class ReimbursementType < Spree::Base
3
3
  include Spree::NamedType
4
4
 
5
- ORIGINAL = 'original'
5
+ KINDS = %w(Spree::ReimbursementType::Credit
6
+ Spree::ReimbursementType::Exchange
7
+ Spree::ReimbursementType::OriginalPayment
8
+ Spree::ReimbursementType::StoreCredit).freeze
9
+ ORIGINAL = 'original'.freeze
6
10
 
7
11
  has_many :return_items
8
12
 
@@ -102,7 +102,7 @@ module Spree
102
102
  transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required]
103
103
  end
104
104
 
105
- after_transition any => any, :do => :persist_acceptance_status_errors
105
+ after_transition any => any, do: :persist_acceptance_status_errors
106
106
  end
107
107
 
108
108
  def self.from_inventory_unit(inventory_unit)
@@ -20,6 +20,8 @@ module Spree
20
20
  has_many :state_changes, as: :stateful
21
21
  end
22
22
  has_many :shipping_methods, through: :shipping_rates
23
+ has_one :selected_shipping_rate, -> { where(selected: true).order(:cost) }, class_name: Spree::ShippingRate
24
+
23
25
 
24
26
  after_save :update_adjustments
25
27
 
@@ -137,7 +139,7 @@ module Spree
137
139
  end
138
140
 
139
141
  def finalize!
140
- InventoryUnit.finalize_units!(inventory_units)
142
+ inventory_units.finalize_units!
141
143
  after_resume
142
144
  end
143
145
 
@@ -150,7 +152,7 @@ module Spree
150
152
  end
151
153
 
152
154
  def inventory_units_for_item(line_item, variant = nil)
153
- inventory_units.where(line_item_id: line_item.id, variant_id: line_item.variant.id || variant.id)
155
+ inventory_units.where(line_item_id: line_item.id, variant_id: line_item.variant_id || variant.id)
154
156
  end
155
157
 
156
158
  def item_cost
@@ -229,10 +231,6 @@ module Spree
229
231
  shipping_rates
230
232
  end
231
233
 
232
- def selected_shipping_rate
233
- shipping_rates.where(selected: true).first
234
- end
235
-
236
234
  def selected_shipping_rate_id
237
235
  selected_shipping_rate.try(:id)
238
236
  end
@@ -20,9 +20,9 @@ module Spree
20
20
  def perform
21
21
  @shipment.inventory_units.each &:ship!
22
22
  @shipment.process_order_payments if Spree::Config[:auto_capture_on_dispatch]
23
+ send_shipped_email
23
24
  @shipment.touch :shipped_at
24
25
  update_order_shipment_state
25
- send_shipped_email
26
26
  end
27
27
 
28
28
  private
@@ -3,11 +3,12 @@
3
3
  module Spree
4
4
  module Stock
5
5
  class Adjuster
6
- attr_accessor :inventory_unit, :status, :fulfilled
6
+ attr_accessor :inventory_unit, :status, :fulfilled, :package
7
7
 
8
- def initialize(inventory_unit, status)
8
+ def initialize(inventory_unit, status, package=nil)
9
9
  @inventory_unit = inventory_unit
10
10
  @status = status
11
+ @package = package
11
12
  @fulfilled = false
12
13
  end
13
14
 
@@ -19,6 +20,12 @@ module Spree
19
20
  end
20
21
  end
21
22
 
23
+ def reassign(status, package)
24
+ @fulfilled = false
25
+ @status = status
26
+ @package = package
27
+ end
28
+
22
29
  def fulfilled?
23
30
  fulfilled
24
31
  end
@@ -1,11 +1,12 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class Coordinator
4
- attr_reader :order, :inventory_units
4
+ attr_reader :order, :inventory_units, :allocated_inventory_units
5
5
 
6
6
  def initialize(order, inventory_units = nil)
7
7
  @order = order
8
8
  @inventory_units = inventory_units || InventoryUnitBuilder.new(order).units
9
+ @allocated_inventory_units = []
9
10
  end
10
11
 
11
12
  def shipments
@@ -22,7 +23,9 @@ module Spree
22
23
 
23
24
  def build_packages(packages = Array.new)
24
25
  stock_locations_with_requested_variants.each do |stock_location|
25
- packages += build_packer(stock_location, inventory_units).packages
26
+ packer = build_packer(stock_location, unallocated_inventory_units)
27
+ packages += packer.packages
28
+ @allocated_inventory_units += packer.allocated_inventory_units
26
29
  end
27
30
 
28
31
  packages
@@ -30,9 +33,13 @@ module Spree
30
33
 
31
34
  private
32
35
 
36
+ def unallocated_inventory_units
37
+ inventory_units - allocated_inventory_units
38
+ end
39
+
33
40
  def stock_locations_with_requested_variants
34
41
  Spree::StockLocation.active.joins(:stock_items).
35
- where(spree_stock_items: { variant_id: requested_variant_ids })
42
+ where(spree_stock_items: { variant_id: requested_variant_ids }).distinct
36
43
  end
37
44
 
38
45
  def requested_variant_ids
@@ -40,7 +47,7 @@ module Spree
40
47
  end
41
48
 
42
49
  def prioritize_packages(packages)
43
- prioritizer = Prioritizer.new(inventory_units, packages)
50
+ prioritizer = Prioritizer.new(packages)
44
51
  prioritizer.prioritized_packages
45
52
  end
46
53
 
@@ -10,7 +10,7 @@ module Spree
10
10
  line_item.quantity.times.map do |i|
11
11
  @order.inventory_units.build(
12
12
  pending: true,
13
- variant: line_item.variant,
13
+ variant_id: line_item.variant_id,
14
14
  line_item: line_item,
15
15
  order: @order
16
16
  )
@@ -11,7 +11,8 @@ module Spree
11
11
  end
12
12
 
13
13
  def add(inventory_unit, state = :on_hand)
14
- contents << ContentItem.new(inventory_unit, state) unless find_item(inventory_unit)
14
+ # Remove find_item check as already taken care by prioritizer
15
+ contents << ContentItem.new(inventory_unit, state)
15
16
  end
16
17
 
17
18
  def add_multiple(inventory_units, state = :on_hand)
@@ -62,11 +63,12 @@ module Spree
62
63
  end
63
64
 
64
65
  def shipping_categories
65
- contents.map { |item| item.variant.shipping_category }.compact.uniq
66
+ Spree::ShippingCategory.joins(products: :variants_including_master).
67
+ where(spree_variants: { id: variant_ids }).distinct
66
68
  end
67
69
 
68
70
  def shipping_methods
69
- shipping_categories.map(&:shipping_methods).reduce(:&).to_a
71
+ shipping_categories.includes(:shipping_methods).map(&:shipping_methods).reduce(:&).to_a
70
72
  end
71
73
 
72
74
  def inspect
@@ -99,6 +101,12 @@ module Spree
99
101
  def dimension
100
102
  contents.sum(&:dimension)
101
103
  end
104
+
105
+ private
106
+
107
+ def variant_ids
108
+ contents.map { |item| item.inventory_unit.variant_id }.compact.uniq
109
+ end
102
110
  end
103
111
  end
104
112
  end
@@ -1,12 +1,13 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class Packer
4
- attr_reader :stock_location, :inventory_units, :splitters
4
+ attr_reader :stock_location, :inventory_units, :splitters, :allocated_inventory_units
5
5
 
6
6
  def initialize(stock_location, inventory_units, splitters=[Splitter::Base])
7
7
  @stock_location = stock_location
8
8
  @inventory_units = inventory_units
9
9
  @splitters = splitters
10
+ @allocated_inventory_units = []
10
11
  end
11
12
 
12
13
  def packages
@@ -19,23 +20,32 @@ module Spree
19
20
 
20
21
  def default_package
21
22
  package = Package.new(stock_location)
22
- inventory_units.group_by(&:variant).each do |variant, variant_inventory_units|
23
+
24
+ # Group by variant_id as grouping by variant fires cached query.
25
+ inventory_units.group_by(&:variant_id).each do |variant_id, variant_inventory_units|
26
+ variant = Spree::Variant.find(variant_id)
23
27
  units = variant_inventory_units.clone
24
28
  if variant.should_track_inventory?
25
29
  next unless stock_location.stock_item(variant)
26
30
 
27
31
  on_hand, backordered = stock_location.fill_status(variant, units.size)
28
- package.add_multiple units.slice!(0, on_hand), :on_hand if on_hand > 0
29
- package.add_multiple units.slice!(0, backordered), :backordered if backordered > 0
32
+ on_hand_units, backordered_units = units.slice!(0, on_hand), units.slice!(0, backordered)
33
+
34
+ package.add_multiple on_hand_units, :on_hand if on_hand > 0
35
+ package.add_multiple backordered_units, :backordered if backordered > 0
36
+
37
+ @allocated_inventory_units += (on_hand_units + backordered_units)
30
38
  else
31
39
  package.add_multiple units
40
+ @allocated_inventory_units += units
32
41
  end
33
-
34
42
  end
43
+
35
44
  package
36
45
  end
37
46
 
38
47
  private
48
+
39
49
  def build_splitter
40
50
  splitter = nil
41
51
  splitters.reverse.each do |klass|
@@ -1,12 +1,12 @@
1
1
  module Spree
2
2
  module Stock
3
3
  class Prioritizer
4
- attr_reader :packages, :inventory_units
4
+ attr_reader :packages
5
5
 
6
- def initialize(inventory_units, packages, adjuster_class=Adjuster)
7
- @inventory_units = inventory_units
6
+ def initialize(packages, adjuster_class=Adjuster)
8
7
  @packages = packages
9
8
  @adjuster_class = adjuster_class
9
+ @adjusters = Hash.new
10
10
  end
11
11
 
12
12
  def prioritized_packages
@@ -17,22 +17,32 @@ module Spree
17
17
  end
18
18
 
19
19
  private
20
- def adjust_packages
21
- inventory_units.each do |inventory_unit|
22
- adjuster = @adjuster_class.new(inventory_unit, :on_hand)
23
-
24
- visit_packages(adjuster)
25
20
 
26
- adjuster.status = :backordered
27
- visit_packages(adjuster)
21
+ def adjust_packages
22
+ packages.each do |package|
23
+ package.contents.each do |item|
24
+ adjuster = find_adjuster(item)
25
+
26
+ if adjuster.nil?
27
+ adjuster = build_adjuster(item, package)
28
+ elsif item.state == :on_hand && adjuster.status == :backordered
29
+ # Remove item from backordered package
30
+ adjuster.package.remove(item.inventory_unit)
31
+ # Reassign adjuster's status package
32
+ adjuster.reassign(:on_hand, package)
33
+ end
34
+
35
+ adjuster.adjust(package)
36
+ end
28
37
  end
29
38
  end
30
39
 
31
- def visit_packages(adjuster)
32
- packages.each do |package|
33
- item = package.find_item adjuster.inventory_unit, adjuster.status
34
- adjuster.adjust(package) if item
35
- end
40
+ def build_adjuster(item, package)
41
+ @adjusters[item.inventory_unit] = @adjuster_class.new(item.inventory_unit, item.state, package)
42
+ end
43
+
44
+ def find_adjuster(item)
45
+ @adjusters[item.inventory_unit]
36
46
  end
37
47
 
38
48
  def sort_packages
@@ -14,7 +14,7 @@ module Spree
14
14
  def split_by_category(package)
15
15
  categories = Hash.new { |hash, key| hash[key] = [] }
16
16
  package.contents.each do |item|
17
- categories[item.variant.shipping_category_id] << item
17
+ categories[shipping_category_for(item)] << item
18
18
  end
19
19
  hash_to_packages(categories)
20
20
  end
@@ -26,6 +26,11 @@ module Spree
26
26
  end
27
27
  packages
28
28
  end
29
+
30
+ def shipping_category_for(item)
31
+ @item_shipping_category ||= {}
32
+ @item_shipping_category[item.inventory_unit.variant_id] ||= item.variant.shipping_category_id
33
+ end
29
34
  end
30
35
  end
31
36
  end
@@ -4,7 +4,7 @@ module Spree
4
4
 
5
5
  with_options inverse_of: :stock_items do
6
6
  belongs_to :stock_location, class_name: 'Spree::StockLocation'
7
- belongs_to :variant, class_name: 'Spree::Variant', counter_cache: true
7
+ belongs_to :variant, class_name: 'Spree::Variant'
8
8
  end
9
9
  has_many :stock_movements, inverse_of: :stock_item
10
10
 
@@ -18,6 +18,7 @@ module Spree
18
18
 
19
19
  delegate :weight, :should_track_inventory?, to: :variant
20
20
  delegate :name, to: :variant, prefix: true
21
+ delegate :product, to: :variant
21
22
 
22
23
  after_save :conditional_variant_touch, if: :changed?
23
24
  after_touch { variant.touch }
@@ -1,5 +1,10 @@
1
1
  module Spree
2
2
  class StockMovement < Spree::Base
3
+ QUANTITY_LIMITS = {
4
+ max: 2**31 - 1,
5
+ min: -2**31
6
+ }.freeze
7
+
3
8
  belongs_to :stock_item, class_name: 'Spree::StockItem', inverse_of: :stock_movements
4
9
  belongs_to :originator, polymorphic: true
5
10
 
@@ -8,11 +13,11 @@ module Spree
8
13
  with_options presence: true do
9
14
  validates :stock_item
10
15
  validates :quantity, numericality: {
11
- greater_than_or_equal_to: -2**31,
12
- less_than_or_equal_to: 2**31 - 1,
13
- only_integer: true,
14
- allow_nil: true
15
- }
16
+ greater_than_or_equal_to: QUANTITY_LIMITS[:min],
17
+ less_than_or_equal_to: QUANTITY_LIMITS[:max],
18
+ only_integer: true,
19
+ allow_nil: true
20
+ }
16
21
  end
17
22
 
18
23
  scope :recent, -> { order(created_at: :desc) }
@@ -20,7 +25,7 @@ module Spree
20
25
  self.whitelisted_ransackable_attributes = ['quantity']
21
26
 
22
27
  def readonly?
23
- !new_record?
28
+ persisted?
24
29
  end
25
30
 
26
31
  private
@@ -38,6 +38,7 @@ module Spree
38
38
  def validate_not_default
39
39
  if default
40
40
  errors.add(:base, :cannot_destroy_default_store)
41
+ throw(:abort)
41
42
  end
42
43
  end
43
44
 
@@ -238,7 +238,7 @@ module Spree
238
238
  def validate_no_amount_used
239
239
  if amount_used > 0
240
240
  errors.add(:amount_used, :greater_than_zero_restrict_delete)
241
- false
241
+ throw(:abort)
242
242
  end
243
243
  end
244
244
 
@@ -0,0 +1,4 @@
1
+ module Spree
2
+ class Tag < ActsAsTaggableOn::Tag
3
+ end
4
+ end
@@ -72,6 +72,12 @@ module Spree
72
72
  rate.adjust(order, item)
73
73
  end
74
74
  end
75
+
76
+ # updates pre_tax for items without any tax rates
77
+ remaining_items = items - relevant_items
78
+ remaining_items.each do |item|
79
+ store_pre_tax_amount(item, [])
80
+ end
75
81
  end
76
82
 
77
83
  def self.included_tax_amount_for(options)
@@ -4,7 +4,7 @@ require 'stringex'
4
4
  module Spree
5
5
  class Taxon < Spree::Base
6
6
  extend FriendlyId
7
- friendly_id :permalink, slug_column: :permalink, use: :slugged
7
+ friendly_id :permalink, slug_column: :permalink, use: :history
8
8
  before_create :set_permalink
9
9
 
10
10
  acts_as_nested_set dependent: :destroy
@@ -13,10 +13,10 @@ module Spree
13
13
  has_many :classifications, -> { order(:position) }, dependent: :delete_all, inverse_of: :taxon
14
14
  has_many :products, through: :classifications
15
15
 
16
- has_many :prototype_taxons, class_name: 'Spree::PrototypeTaxon'
16
+ has_many :prototype_taxons, class_name: 'Spree::PrototypeTaxon', dependent: :destroy
17
17
  has_many :prototypes, through: :prototype_taxons, class_name: 'Spree::Prototype'
18
18
 
19
- has_many :promotion_rule_taxons, class_name: 'Spree::PromotionRuleTaxon'
19
+ has_many :promotion_rule_taxons, class_name: 'Spree::PromotionRuleTaxon', dependent: :destroy
20
20
  has_many :promotion_rules, through: :promotion_rule_taxons, class_name: 'Spree::PromotionRule'
21
21
 
22
22
  validates :name, presence: true
@@ -58,15 +58,18 @@ module Spree
58
58
  scope :in_stock, -> { joins(:stock_items).where('count_on_hand > ? OR track_inventory = ?', 0, false) }
59
59
 
60
60
  scope :not_discontinued, -> do
61
- variant_table_name = Variant.quoted_table_name
62
- where("#{variant_table_name}.discontinue_on IS NULL OR #{variant_table_name}.discontinue_on >= ?", Time.current)
61
+ where(
62
+ arel_table[:discontinue_on].eq(nil).or(
63
+ arel_table[:discontinue_on].gteq(Time.current)
64
+ )
65
+ )
63
66
  end
64
67
 
65
68
  scope :not_deleted, -> { where("#{Variant.quoted_table_name}.deleted_at IS NULL") }
66
69
 
67
70
  scope :for_currency_and_available_price_amount, -> (currency) do
68
71
  currency ||= Spree::Config[:currency]
69
- joins(:prices).where("spree_prices.currency = ?", currency).where("spree_prices.amount IS NOT NULL").uniq
72
+ joins(:prices).where("spree_prices.currency = ?", currency).where("spree_prices.amount IS NOT NULL").distinct
70
73
  end
71
74
 
72
75
  scope :active, -> (currency = nil) do
@@ -33,7 +33,7 @@ module Spree
33
33
  # Match zones of the same kind with similar countries
34
34
  joins(countries: :zones).
35
35
  where("zone_members_spree_countries_join.zone_id = ?", zone.id).
36
- uniq
36
+ distinct
37
37
  else
38
38
  # Match zones of the same kind with similar states in AND match zones
39
39
  # that have the states countries in
@@ -44,7 +44,7 @@ module Spree
44
44
  spree_zone_members.zoneable_id IN (?))",
45
45
  zone.state_ids,
46
46
  zone.states.pluck(:country_id)
47
- ).uniq
47
+ ).distinct
48
48
  end
49
49
  end
50
50
 
@@ -0,0 +1,8 @@
1
+ <script>
2
+ SpreePaths = <%==
3
+ {
4
+ mounted_at: Rails.application.routes.url_helpers.spree_path(trailing_slash: true),
5
+ admin: Spree.admin_path.gsub(/\A(\/)?(.*[^\/])(\/)?\z/, '\\2/')
6
+ }.to_json
7
+ %>
8
+ </script>
@@ -0,0 +1,9 @@
1
+ require "acts-as-taggable-on"
2
+
3
+ ActsAsTaggableOn::Tag.class_eval do
4
+ self.table_name_prefix = "spree_"
5
+ end
6
+
7
+ ActsAsTaggableOn::Tagging.class_eval do
8
+ self.table_name_prefix = "spree_"
9
+ end