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
@@ -16,7 +16,7 @@ module Spree
16
16
  attr_reader :line_item, :order
17
17
  attr_accessor :error, :success
18
18
 
19
- def initialize(order, line_item=nil)
19
+ def initialize(order, line_item = nil)
20
20
  @order, @line_item = order, line_item
21
21
  end
22
22
 
@@ -29,24 +29,25 @@ module Spree
29
29
  end
30
30
 
31
31
  private
32
- def promotions
33
- connected_order_promotions | sale_promotions
34
- end
35
32
 
36
- def connected_order_promotions
37
- Promotion.active.includes(:promotion_rules).
38
- joins(:order_promotions).
39
- where(spree_orders_promotions: { order_id: order.id }).readonly(false).to_a
40
- end
33
+ def promotions
34
+ connected_order_promotions | sale_promotions
35
+ end
41
36
 
42
- def sale_promotions
43
- Promotion.where(apply_automatically: true).active.includes(:promotion_rules)
44
- end
37
+ def connected_order_promotions
38
+ Promotion.active.includes(:promotion_rules).
39
+ joins(:order_promotions).
40
+ where(spree_orders_promotions: { order_id: order.id }).readonly(false).to_a
41
+ end
45
42
 
46
- def promotion_code(promotion)
47
- order_promotion = Spree::OrderPromotion.where(order: order, promotion: promotion).first
48
- order_promotion.present? ? order_promotion.promotion_code : nil
49
- end
43
+ def sale_promotions
44
+ Promotion.where(apply_automatically: true).active.includes(:promotion_rules)
45
+ end
46
+
47
+ def promotion_code(promotion)
48
+ order_promotion = Spree::OrderPromotion.where(order: order, promotion: promotion).first
49
+ order_promotion.present? ? order_promotion.promotion_code : nil
50
+ end
50
51
  end
51
52
  end
52
53
  end
@@ -12,12 +12,10 @@ module Spree
12
12
  if order.coupon_code.present?
13
13
  if promotion.present? && promotion.actions.exists?
14
14
  handle_present_promotion(promotion)
15
+ elsif promotion_code && promotion_code.promotion.expired?
16
+ set_error_code :coupon_code_expired
15
17
  else
16
- if promotion_code && promotion_code.promotion.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
21
 
@@ -57,7 +55,7 @@ module Spree
57
55
  return promotion_applied if promotion_exists_on_order?(order, promotion)
58
56
  unless promotion.eligible?(order, promotion_code: promotion_code)
59
57
  self.error = promotion.eligibility_errors.full_messages.first unless promotion.eligibility_errors.blank?
60
- return (self.error || ineligible_for_this_order)
58
+ return (error || ineligible_for_this_order)
61
59
  end
62
60
 
63
61
  # If any of the actions for the promotion return `true`,
@@ -88,7 +86,7 @@ module Spree
88
86
 
89
87
  def determine_promotion_application_result
90
88
  detector = lambda { |p|
91
- p.source.promotion.codes.any? { |code| code.value == order.coupon_code.downcase }
89
+ p.source.promotion.codes.where(value: order.coupon_code.downcase).any?
92
90
  }
93
91
 
94
92
  # Check for applied adjustments.
@@ -103,15 +101,13 @@ module Spree
103
101
  order.update_totals
104
102
  order.persist_totals
105
103
  set_success_code :coupon_code_applied
106
- else
104
+ elsif order.promotions.with_coupon_code(order.coupon_code)
107
105
  # if the promotion exists on an order, but wasn't found above,
108
106
  # we've already selected a better promotion
109
- if order.promotions.with_coupon_code(order.coupon_code)
110
- set_error_code :coupon_code_better_exists
111
- else
112
- # if the promotion was created after the order
113
- set_error_code :coupon_code_not_found
114
- end
107
+ set_error_code :coupon_code_better_exists
108
+ else
109
+ # if the promotion was created after the order
110
+ set_error_code :coupon_code_not_found
115
111
  end
116
112
  end
117
113
  end
@@ -10,15 +10,15 @@ 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
- def promotion
20
- @promotion ||= Promotion.active.find_by(:path => path)
21
- end
19
+ def promotion
20
+ @promotion ||= Promotion.active.find_by(path: path)
21
+ end
22
22
  end
23
23
  end
24
24
  end
@@ -12,17 +12,17 @@ module Spree
12
12
  all.select { |rule| rule.applicable?(promotable) }
13
13
  end
14
14
 
15
- def applicable?(promotable)
15
+ def applicable?(_promotable)
16
16
  raise NotImplementedError, "applicable? should be implemented in a sub-class of Spree::PromotionRule"
17
17
  end
18
18
 
19
- def eligible?(promotable, options = {})
19
+ def eligible?(_promotable, _options = {})
20
20
  raise NotImplementedError, "eligible? should be implemented in a sub-class of Spree::PromotionRule"
21
21
  end
22
22
 
23
23
  # This states if a promotion can be applied to the specified line item
24
24
  # It is true by default, but can be overridden by promotion rules to provide conditions
25
- def actionable?(line_item)
25
+ def actionable?(_line_item)
26
26
  true
27
27
  end
28
28
 
@@ -31,6 +31,7 @@ module Spree
31
31
  end
32
32
 
33
33
  private
34
+
34
35
  def unique_per_promotion
35
36
  if Spree::PromotionRule.exists?(promotion_id: promotion_id, type: self.class.name)
36
37
  errors[:base] << "Promotion already contains this rule type"
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  class Prototype < Spree::Base
3
-
4
3
  has_many :property_prototypes
5
4
  has_many :properties, through: :property_prototypes
6
5
 
@@ -9,7 +9,7 @@ module Spree
9
9
  validates :payment, presence: true
10
10
  validates :reason, presence: true
11
11
  validates :transaction_id, presence: true, on: :update # can't require this on create because the before_create needs to run first
12
- validates :amount, presence: true, numericality: {greater_than: 0}
12
+ validates :amount, presence: true, numericality: { greater_than: 0 }
13
13
 
14
14
  validate :amount_is_less_than_or_equal_to_allowed_amount, on: :create
15
15
 
@@ -52,9 +52,9 @@ module Spree
52
52
  # return an activemerchant response object if successful or else raise an error
53
53
  def process!(credit_cents)
54
54
  response = if payment.payment_method.payment_profiles_supported?
55
- payment.payment_method.credit(credit_cents, payment.source, payment.transaction_id, {originator: self})
55
+ payment.payment_method.credit(credit_cents, payment.source, payment.transaction_id, { originator: self })
56
56
  else
57
- payment.payment_method.credit(credit_cents, payment.transaction_id, {originator: self})
57
+ payment.payment_method.credit(credit_cents, payment.transaction_id, { originator: self })
58
58
  end
59
59
 
60
60
  if !response.success?
@@ -16,7 +16,7 @@ module Spree
16
16
 
17
17
  def initialize(return_items)
18
18
  @return_items = return_items
19
- @reimbursement_type_hash = Hash.new {|h,k| h[k] = Array.new }
19
+ @reimbursement_type_hash = Hash.new { |h, k| h[k] = [] }
20
20
  end
21
21
 
22
22
  def calculate_reimbursement_types
@@ -38,8 +38,6 @@ module Spree
38
38
  elsif return_item.preferred_reimbursement_type.present?
39
39
  if valid_preferred_reimbursement_type?(return_item)
40
40
  return_item.preferred_reimbursement_type.class
41
- else
42
- nil
43
41
  end
44
42
  elsif past_reimbursable_time_period?(return_item)
45
43
  expired_reimbursement_type
@@ -57,7 +57,6 @@ module Spree
57
57
  self.reimbursement_failure_hooks = []
58
58
 
59
59
  state_machine :reimbursement_status, initial: :pending do
60
-
61
60
  event :errored do
62
61
  transition to: :errored, from: [:pending, :errored]
63
62
  end
@@ -65,7 +64,6 @@ module Spree
65
64
  event :reimbursed do
66
65
  transition to: :reimbursed, from: [:pending, :errored]
67
66
  end
68
-
69
67
  end
70
68
 
71
69
  class << self
@@ -73,7 +71,7 @@ module Spree
73
71
  order = customer_return.order
74
72
  order.reimbursements.build({
75
73
  customer_return: customer_return,
76
- return_items: customer_return.return_items.accepted.not_reimbursed,
74
+ return_items: customer_return.return_items.accepted.not_reimbursed
77
75
  })
78
76
  end
79
77
  end
@@ -150,7 +148,7 @@ module Spree
150
148
 
151
149
  def generate_number
152
150
  self.number ||= loop do
153
- random = "RI#{Array.new(9){rand(9)}.join}"
151
+ random = "RI#{Array.new(9){ rand(9) }.join}"
154
152
  break random unless self.class.exists?(number: random)
155
153
  end
156
154
  end
@@ -162,7 +160,7 @@ module Spree
162
160
  end
163
161
 
164
162
  def send_reimbursement_email
165
- Spree::ReimbursementMailer.reimbursement_email(self.id).deliver_later
163
+ Spree::ReimbursementMailer.reimbursement_email(id).deliver_later
166
164
  end
167
165
 
168
166
  # If there are multiple different reimbursement types for a single
@@ -1,7 +1,5 @@
1
1
  module Spree
2
-
3
2
  class ReimbursementPerformer
4
-
5
3
  class << self
6
4
  class_attribute :reimbursement_type_engine
7
5
  self.reimbursement_type_engine = Spree::Reimbursement::ReimbursementTypeEngine
@@ -35,9 +33,6 @@ module Spree
35
33
  # {Spree::ReimbursementType::OriginalPayment => [ReturnItem, ...], Spree::ReimbursementType::Exchange => [ReturnItem, ...]}
36
34
  reimbursement_type_engine.new(reimbursement.return_items).calculate_reimbursement_types
37
35
  end
38
-
39
36
  end
40
-
41
37
  end
42
-
43
38
  end
@@ -1,5 +1,4 @@
1
1
  module Spree
2
-
3
2
  # Tax calculation is broken out at this level to allow easy integration with 3rd party
4
3
  # taxation systems. Those systems are usually geared toward calculating all items at once
5
4
  # rather than one at a time.
@@ -9,9 +8,7 @@ module Spree
9
8
  # where `calculator_object` is an object that responds to "call" and accepts a reimbursement object
10
9
 
11
10
  class ReimbursementTaxCalculator
12
-
13
11
  class << self
14
-
15
12
  def call(reimbursement)
16
13
  reimbursement.return_items.includes(:inventory_unit).each do |return_item|
17
14
  set_tax!(return_item)
@@ -21,18 +18,16 @@ module Spree
21
18
  private
22
19
 
23
20
  def set_tax!(return_item)
24
- percent_of_tax = (return_item.pre_tax_amount <= 0) ? 0 : return_item.pre_tax_amount / Spree::ReturnItem.refund_amount_calculator.new.compute(return_item)
21
+ percent_of_tax = (return_item.amount <= 0) ? 0 : return_item.amount / Spree::ReturnItem.refund_amount_calculator.new.compute(return_item)
25
22
 
26
23
  additional_tax_total = percent_of_tax * return_item.inventory_unit.additional_tax_total
27
24
  included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total
28
25
 
29
26
  return_item.update_attributes!({
30
27
  additional_tax_total: additional_tax_total,
31
- included_tax_total: included_tax_total,
28
+ included_tax_total: included_tax_total
32
29
  })
33
30
  end
34
31
  end
35
-
36
32
  end
37
-
38
33
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  class << self
6
6
  def reimburse(reimbursement, return_items, simulate)
7
7
  unpaid_amount = return_items.sum(&:total).round(2, :down)
8
- reimbursement_list, unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate)
8
+ reimbursement_list, _unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate)
9
9
  reimbursement_list
10
10
  end
11
11
  end
@@ -6,7 +6,7 @@ class Spree::ReimbursementType::OriginalPayment < Spree::ReimbursementType
6
6
  unpaid_amount = return_items.sum(&:total).round(2, :down)
7
7
  payments = reimbursement.order.payments.completed
8
8
 
9
- refund_list, unpaid_amount = create_refunds(reimbursement, payments, unpaid_amount, simulate)
9
+ refund_list, _unpaid_amount = create_refunds(reimbursement, payments, unpaid_amount, simulate)
10
10
  refund_list
11
11
  end
12
12
  end
@@ -15,7 +15,7 @@ module Spree
15
15
  unpaid_amount -= amount
16
16
  end
17
17
 
18
- return reimbursement_list, unpaid_amount
18
+ [reimbursement_list, unpaid_amount]
19
19
  end
20
20
 
21
21
  def create_credits(reimbursement, unpaid_amount, simulate, reimbursement_list = [])
@@ -23,7 +23,7 @@ module Spree
23
23
  unpaid_amount -= credits.sum(&:amount)
24
24
  reimbursement_list += credits
25
25
 
26
- return reimbursement_list, unpaid_amount
26
+ [reimbursement_list, unpaid_amount]
27
27
  end
28
28
 
29
29
  private
@@ -32,7 +32,7 @@ module Spree
32
32
  refund = reimbursement.refunds.build({
33
33
  payment: payment,
34
34
  amount: amount,
35
- reason: Spree::RefundReason.return_processing_reason,
35
+ reason: Spree::RefundReason.return_processing_reason
36
36
  })
37
37
 
38
38
  simulate ? refund.readonly! : refund.save!
@@ -12,7 +12,7 @@ class Spree::ReimbursementType::StoreCredit < Spree::ReimbursementType
12
12
 
13
13
  # If there is any amount left to pay out to the customer, then create credit with that amount
14
14
  if unpaid_amount > 0.0
15
- reimbursement_list, unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate, reimbursement_list)
15
+ reimbursement_list, _unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate, reimbursement_list)
16
16
  end
17
17
 
18
18
  reimbursement_list
@@ -9,7 +9,7 @@ module Spree
9
9
  # This method will reimburse the return items based on however it child implements it
10
10
  # By default it takes a reimbursement, the return items it needs to reimburse, and if
11
11
  # it is a simulation or a real reimbursement. This should return an array
12
- def self.reimburse(reimbursement, return_items, simulate)
12
+ def self.reimburse(_reimbursement, _return_items, _simulate)
13
13
  raise "Implement me"
14
14
  end
15
15
  end
@@ -20,7 +20,6 @@ module Spree
20
20
  validate :must_have_shipped_units, on: :create
21
21
  validate :no_previously_exchanged_inventory_units, on: :create
22
22
 
23
-
24
23
  # These are called prior to generating expedited exchanges shipments.
25
24
  # Should respond to a "call" method that takes the list of return items
26
25
  class_attribute :pre_expedited_exchange_hooks
@@ -32,24 +31,27 @@ module Spree
32
31
  event :cancel do
33
32
  transition to: :canceled, from: :authorized, if: lambda { |return_authorization| return_authorization.can_cancel_return_items? }
34
33
  end
35
-
36
34
  end
37
35
 
38
36
  extend DisplayMoney
39
- money_methods :pre_tax_total
37
+ money_methods :pre_tax_total, :amount
40
38
 
41
39
  self.whitelisted_ransackable_attributes = ['memo']
42
40
 
43
41
  def pre_tax_total
44
- return_items.sum(:pre_tax_amount)
42
+ return_items.map(&:pre_tax_amount).sum
43
+ end
44
+
45
+ def amount
46
+ return_item.sum(:amount)
45
47
  end
46
48
 
47
49
  def currency
48
- order.nil? ? Spree::Config[:currency] : order.currency
50
+ order.currency
49
51
  end
50
52
 
51
53
  def refundable_amount
52
- order.pre_tax_item_amount + order.promo_total
54
+ order.discounted_item_amount + order.promo_total
53
55
  end
54
56
 
55
57
  def customer_returned_items?
@@ -62,49 +64,48 @@ module Spree
62
64
 
63
65
  private
64
66
 
65
- def must_have_shipped_units
66
- if order.nil? || order.inventory_units.shipped.none?
67
- errors.add(:order, Spree.t(:has_no_shipped_units))
68
- end
69
- end
70
-
71
- def generate_number
72
- self.number ||= loop do
73
- random = "RA#{Array.new(9){rand(9)}.join}"
74
- break random unless self.class.exists?(number: random)
75
- end
67
+ def must_have_shipped_units
68
+ if order.nil? || order.inventory_units.shipped.none?
69
+ errors.add(:order, Spree.t(:has_no_shipped_units))
76
70
  end
71
+ end
77
72
 
78
- def no_previously_exchanged_inventory_units
79
- if return_items.map(&:inventory_unit).any?(&:exchange_requested?)
80
- errors.add(:base, Spree.t(:return_items_cannot_be_created_for_inventory_units_that_are_already_awaiting_exchange))
81
- end
73
+ def generate_number
74
+ self.number ||= loop do
75
+ random = "RA#{Array.new(9){ rand(9) }.join}"
76
+ break random unless self.class.exists?(number: random)
82
77
  end
78
+ end
83
79
 
84
- def cancel_return_items
85
- return_items.each { |item| item.cancel! if item.can_cancel? }
80
+ def no_previously_exchanged_inventory_units
81
+ if return_items.map(&:inventory_unit).any?(&:exchange_requested?)
82
+ errors.add(:base, Spree.t(:return_items_cannot_be_created_for_inventory_units_that_are_already_awaiting_exchange))
86
83
  end
84
+ end
87
85
 
88
- def generate_expedited_exchange_reimbursements
89
- return unless Spree::Config[:expedited_exchanges]
86
+ def cancel_return_items
87
+ return_items.each { |item| item.cancel! if item.can_cancel? }
88
+ end
90
89
 
91
- items_to_exchange = return_items.select(&:exchange_required?)
92
- items_to_exchange.each(&:attempt_accept)
93
- items_to_exchange.select!(&:accepted?)
90
+ def generate_expedited_exchange_reimbursements
91
+ return unless Spree::Config[:expedited_exchanges]
94
92
 
95
- return if items_to_exchange.blank?
93
+ items_to_exchange = return_items.select(&:exchange_required?)
94
+ items_to_exchange.each(&:attempt_accept)
95
+ items_to_exchange.select!(&:accepted?)
96
96
 
97
- pre_expedited_exchange_hooks.each { |h| h.call items_to_exchange }
97
+ return if items_to_exchange.blank?
98
98
 
99
- reimbursement = Reimbursement.new(return_items: items_to_exchange, order: order)
99
+ pre_expedited_exchange_hooks.each { |h| h.call items_to_exchange }
100
100
 
101
- if reimbursement.save
102
- reimbursement.perform!
103
- else
104
- errors.add(:base, reimbursement.errors.full_messages)
105
- raise ActiveRecord::RecordInvalid.new(self)
106
- end
101
+ reimbursement = Reimbursement.new(return_items: items_to_exchange, order: order)
107
102
 
103
+ if reimbursement.save
104
+ reimbursement.perform!
105
+ else
106
+ errors.add(:base, reimbursement.errors.full_messages)
107
+ raise ActiveRecord::RecordInvalid.new(self)
108
108
  end
109
+ end
109
110
  end
110
111
  end
@@ -6,15 +6,15 @@ module Spree
6
6
  ReturnItem::EligibilityValidator::TimeSincePurchase,
7
7
  ReturnItem::EligibilityValidator::RMARequired,
8
8
  ReturnItem::EligibilityValidator::InventoryShipped,
9
- ReturnItem::EligibilityValidator::NoReimbursements,
9
+ ReturnItem::EligibilityValidator::NoReimbursements
10
10
  ]
11
11
 
12
12
  def eligible_for_return?
13
- validators.all? {|v| v.eligible_for_return? }
13
+ validators.all?(&:eligible_for_return?)
14
14
  end
15
15
 
16
16
  def requires_manual_intervention?
17
- validators.any? {|v| v.requires_manual_intervention? }
17
+ validators.any?(&:requires_manual_intervention?)
18
18
  end
19
19
 
20
20
  def errors
@@ -24,7 +24,7 @@ module Spree
24
24
  private
25
25
 
26
26
  def validators
27
- @validators ||= permitted_eligibility_validators.map{|v| v.new(@return_item) }
27
+ @validators ||= permitted_eligibility_validators.map{ |v| v.new(@return_item) }
28
28
  end
29
29
  end
30
30
  end
@@ -14,4 +14,3 @@ module Spree
14
14
  end
15
15
  end
16
16
  end
17
-
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  class ReturnItem < Spree::Base
3
-
4
3
  INTERMEDIATE_RECEPTION_STATUSES = %i(given_to_customer lost_in_transit shipped_wrong_item short_shipped in_transit)
5
4
  COMPLETED_RECEPTION_STATUSES = INTERMEDIATE_RECEPTION_STATUSES + [:received]
6
5
 
@@ -49,8 +48,8 @@ module Spree
49
48
  scope :awaiting_return, -> { where(reception_status: 'awaiting') }
50
49
  scope :expecting_return, -> { where.not(reception_status: COMPLETED_RECEPTION_STATUSES) }
51
50
  scope :not_cancelled, -> { where.not(reception_status: 'cancelled') }
52
- scope :valid, -> { where.not(reception_status: %w(cancelled expired unexchanged))}
53
- scope :not_expired, -> { where.not(reception_status: 'expired')}
51
+ scope :valid, -> { where.not(reception_status: %w(cancelled expired unexchanged)) }
52
+ scope :not_expired, -> { where.not(reception_status: 'expired') }
54
53
  scope :received, -> { where(reception_status: 'received') }
55
54
  INTERMEDIATE_RECEPTION_STATUSES.each do |reception_status|
56
55
  scope reception_status, -> { where(reception_status: reception_status) }
@@ -73,8 +72,8 @@ module Spree
73
72
  delegate :variant, to: :inventory_unit
74
73
  delegate :shipment, to: :inventory_unit
75
74
 
76
- before_create :set_default_pre_tax_amount, unless: :pre_tax_amount_changed?
77
- before_save :set_exchange_pre_tax_amount
75
+ before_create :set_default_amount, unless: :amount_changed?
76
+ before_save :set_exchange_amount
78
77
 
79
78
  state_machine :reception_status, initial: :awaiting do
80
79
  after_transition to: COMPLETED_RECEPTION_STATUSES, do: :attempt_accept
@@ -94,7 +93,7 @@ module Spree
94
93
  end
95
94
 
96
95
  extend DisplayMoney
97
- money_methods :pre_tax_amount, :total
96
+ money_methods :pre_tax_amount, :amount, :total
98
97
 
99
98
  # @return [Boolean] true when this retur item is in a complete reception
100
99
  # state
@@ -134,7 +133,7 @@ module Spree
134
133
  # unit if one exists, or a new one if one does not
135
134
  def self.from_inventory_unit(inventory_unit)
136
135
  valid.find_by(inventory_unit: inventory_unit) ||
137
- new(inventory_unit: inventory_unit).tap(&:set_default_pre_tax_amount)
136
+ new(inventory_unit: inventory_unit).tap(&:set_default_amount)
138
137
  end
139
138
 
140
139
  # @return [Boolean] true when an exchange has been requested on this return
@@ -155,10 +154,14 @@ module Spree
155
154
  exchange_requested? && !exchange_processed?
156
155
  end
157
156
 
158
- # @return [BigDecimal] the cost of the item before tax, plus the included
159
- # and additional taxes
157
+ # @return [BigDecimal] the cost of the item after tax
160
158
  def total
161
- pre_tax_amount + included_tax_total + additional_tax_total
159
+ amount + additional_tax_total
160
+ end
161
+
162
+ # @return [BigDecimal] the cost of the item before tax
163
+ def pre_tax_amount
164
+ amount - included_tax_total
162
165
  end
163
166
 
164
167
  # @note This uses the exchange_variant_engine configured on the class.
@@ -186,12 +189,12 @@ module Spree
186
189
  exchange_inventory_unit.try(:shipment)
187
190
  end
188
191
 
189
- # Calculates and sets the default pre-tax amount to be refunded.
192
+ # Calculates and sets the default amount to be refunded.
190
193
  #
191
194
  # @note This uses the configured refund_amount_calculator configured on the
192
195
  # class.
193
- def set_default_pre_tax_amount
194
- self.pre_tax_amount = refund_amount_calculator.new.compute(self)
196
+ def set_default_amount
197
+ self.amount = refund_amount_calculator.new.compute(self)
195
198
  end
196
199
 
197
200
  def potential_reception_transitions
@@ -216,7 +219,7 @@ module Spree
216
219
  private
217
220
 
218
221
  def persist_acceptance_status_errors
219
- self.update_attributes(acceptance_status_errors: validator.errors)
222
+ update_attributes(acceptance_status_errors: validator.errors)
220
223
  end
221
224
 
222
225
  def currency
@@ -241,7 +244,7 @@ module Spree
241
244
  original_ri = sibling_intended_for_exchange('awaiting')
242
245
  if original_ri
243
246
  original_ri.unexchange!
244
- set_default_pre_tax_amount
247
+ set_default_amount
245
248
  save!
246
249
  end
247
250
  end
@@ -277,20 +280,20 @@ module Spree
277
280
  end
278
281
  end
279
282
 
280
- def set_exchange_pre_tax_amount
281
- self.pre_tax_amount = 0.0.to_d if exchange_requested?
283
+ def set_exchange_amount
284
+ self.amount = 0.0.to_d if exchange_requested?
282
285
  end
283
286
 
284
287
  def validate_no_other_completed_return_items
285
288
  other_return_item = Spree::ReturnItem.where({
286
289
  inventory_unit_id: inventory_unit_id,
287
- reception_status: COMPLETED_RECEPTION_STATUSES,
288
- }).where.not(id: self.id).first
290
+ reception_status: COMPLETED_RECEPTION_STATUSES
291
+ }).where.not(id: id).first
289
292
 
290
293
  if other_return_item && (new_record? || COMPLETED_RECEPTION_STATUSES.include?(reception_status.to_sym))
291
294
  errors.add(:inventory_unit, :other_completed_return_item_exists, {
292
295
  inventory_unit_id: inventory_unit_id,
293
- return_item_id: other_return_item.id,
296
+ return_item_id: other_return_item.id
294
297
  })
295
298
  end
296
299
  end
@@ -299,9 +302,7 @@ module Spree
299
302
  Spree::ReturnItem.where(inventory_unit_id: inventory_unit_id)
300
303
  .where.not(id: id)
301
304
  .valid
302
- .each do |return_item|
303
- return_item.cancel!
304
- end
305
+ .each(&:cancel!)
305
306
  end
306
307
 
307
308
  def should_restock?