spree_core 4.3.0.rc1 → 4.4.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 (537) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/option_values/find_available.rb +9 -1
  3. data/app/finders/spree/products/find.rb +27 -3
  4. data/app/finders/spree/taxons/find.rb +22 -6
  5. data/app/helpers/spree/base_helper.rb +8 -10
  6. data/app/helpers/spree/currency_helper.rb +1 -1
  7. data/app/helpers/spree/products_helper.rb +1 -15
  8. data/app/jobs/spree/base_job.rb +4 -0
  9. data/app/jobs/spree/stock_locations/stock_items/create_job.rb +13 -0
  10. data/app/models/concerns/spree/default_price.rb +1 -1
  11. data/app/models/concerns/spree/display_money.rb +8 -2
  12. data/app/models/concerns/spree/image_methods.rb +24 -0
  13. data/app/models/concerns/spree/memoized_data.rb +1 -1
  14. data/app/models/concerns/spree/metadata.rb +10 -0
  15. data/app/models/concerns/spree/multi_store_resource.rb +1 -1
  16. data/app/models/concerns/spree/named_type.rb +1 -1
  17. data/app/models/concerns/spree/number_identifier.rb +18 -0
  18. data/app/models/concerns/spree/product_scopes.rb +64 -22
  19. data/app/models/concerns/spree/single_store_resource.rb +10 -0
  20. data/app/models/concerns/spree/unique_name.rb +10 -0
  21. data/app/models/concerns/spree/user_methods.rb +18 -8
  22. data/app/models/concerns/spree/user_reporting.rb +35 -10
  23. data/app/models/concerns/spree/user_roles.rb +43 -0
  24. data/app/models/spree/ability.rb +11 -3
  25. data/app/models/spree/address.rb +4 -2
  26. data/app/models/spree/adjustment.rb +1 -0
  27. data/app/models/spree/app_configuration.rb +21 -24
  28. data/app/models/spree/asset.rb +1 -0
  29. data/app/models/spree/base.rb +14 -0
  30. data/app/models/spree/calculator/flat_rate.rb +1 -1
  31. data/app/models/spree/calculator/flexi_rate.rb +1 -1
  32. data/app/models/spree/calculator/price_sack.rb +1 -1
  33. data/app/models/spree/calculator/shipping/digital_delivery.rb +22 -0
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
  38. data/app/models/spree/calculator.rb +1 -1
  39. data/app/models/spree/cms/sections/featured_article.rb +0 -7
  40. data/app/models/spree/cms/sections/hero_image.rb +0 -9
  41. data/app/models/spree/cms/sections/image_gallery.rb +2 -2
  42. data/app/models/spree/cms/sections/side_by_side_images.rb +2 -2
  43. data/app/models/spree/cms_page.rb +3 -3
  44. data/app/models/spree/cms_section.rb +13 -1
  45. data/app/models/spree/country.rb +4 -2
  46. data/app/models/spree/credit_card.rb +10 -0
  47. data/app/models/spree/customer_return.rb +3 -1
  48. data/app/models/spree/digital.rb +15 -0
  49. data/app/models/spree/digital_link.rb +50 -0
  50. data/app/models/spree/gateway/bogus.rb +10 -4
  51. data/app/models/spree/image/configuration/active_storage.rb +2 -19
  52. data/app/models/spree/image.rb +5 -24
  53. data/app/models/spree/legacy_user.rb +1 -0
  54. data/app/models/spree/line_item.rb +11 -3
  55. data/app/models/spree/option_type.rb +4 -4
  56. data/app/models/spree/option_value.rb +2 -0
  57. data/app/models/spree/order/checkout.rb +7 -1
  58. data/app/models/spree/order/digital.rb +33 -0
  59. data/app/models/spree/order.rb +34 -22
  60. data/app/models/spree/order_inventory.rb +1 -1
  61. data/app/models/spree/order_promotion.rb +1 -1
  62. data/app/models/spree/payment/processing.rb +1 -0
  63. data/app/models/spree/payment.rb +25 -4
  64. data/app/models/spree/payment_method.rb +15 -1
  65. data/app/models/spree/preference.rb +2 -1
  66. data/app/models/spree/preferences/configuration.rb +2 -2
  67. data/app/models/spree/preferences/store.rb +1 -1
  68. data/app/models/spree/price.rb +1 -1
  69. data/app/models/spree/product.rb +28 -25
  70. data/app/models/spree/promotion/rules/product.rb +1 -1
  71. data/app/models/spree/promotion.rb +3 -1
  72. data/app/models/spree/promotion_action.rb +1 -1
  73. data/app/models/spree/property.rb +2 -1
  74. data/app/models/spree/prototype.rb +2 -0
  75. data/app/models/spree/refund.rb +2 -0
  76. data/app/models/spree/reimbursement.rb +1 -1
  77. data/app/models/spree/return_authorization.rb +3 -2
  78. data/app/models/spree/return_item.rb +1 -1
  79. data/app/models/spree/role.rb +2 -2
  80. data/app/models/spree/shipment.rb +4 -30
  81. data/app/models/spree/shipping_category.rb +1 -1
  82. data/app/models/spree/shipping_method.rb +2 -0
  83. data/app/models/spree/state.rb +1 -1
  84. data/app/models/spree/stock/quantifier.rb +1 -1
  85. data/app/models/spree/stock/splitter/digital.rb +35 -0
  86. data/app/models/spree/stock_item.rb +2 -2
  87. data/app/models/spree/stock_location.rb +15 -28
  88. data/app/models/spree/stock_movement.rb +3 -0
  89. data/app/models/spree/stock_transfer.rb +3 -6
  90. data/app/models/spree/store.rb +43 -10
  91. data/app/models/spree/store_credit.rb +5 -1
  92. data/app/models/spree/store_credit_category.rb +2 -0
  93. data/app/models/spree/store_credit_event.rb +2 -7
  94. data/app/models/spree/store_credit_type.rb +2 -0
  95. data/app/models/spree/tax_category.rb +3 -1
  96. data/app/models/spree/tax_rate.rb +3 -1
  97. data/app/models/spree/taxon.rb +12 -0
  98. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -12
  99. data/app/models/spree/taxon_image.rb +1 -0
  100. data/app/models/spree/taxonomy.rb +7 -0
  101. data/app/models/spree/variant.rb +29 -13
  102. data/app/models/spree/wished_item.rb +29 -0
  103. data/app/models/spree/wishlist.rb +35 -0
  104. data/app/models/spree/zone.rb +8 -6
  105. data/app/presenters/spree/filters/options_presenter.rb +20 -0
  106. data/app/presenters/spree/filters/property_presenter.rb +20 -0
  107. data/app/services/spree/account/addresses/create.rb +1 -17
  108. data/app/services/spree/account/addresses/update.rb +1 -22
  109. data/app/services/spree/addresses/create.rb +24 -0
  110. data/app/services/spree/addresses/helper.rb +41 -0
  111. data/app/services/spree/addresses/update.rb +27 -0
  112. data/app/services/spree/cart/add_item.rb +4 -2
  113. data/app/services/spree/cart/associate.rb +16 -0
  114. data/app/services/spree/cart/change_currency.rb +27 -0
  115. data/app/services/spree/cart/create.rb +4 -2
  116. data/app/services/spree/cart/update.rb +2 -2
  117. data/app/services/spree/checkout/add_store_credit.rb +4 -1
  118. data/app/services/spree/checkout/select_shipping_method.rb +49 -0
  119. data/app/services/spree/checkout/update.rb +3 -10
  120. data/app/services/spree/line_items/create.rb +20 -0
  121. data/app/services/spree/line_items/destroy.rb +18 -0
  122. data/app/services/spree/line_items/helper.rb +11 -0
  123. data/app/services/spree/line_items/update.rb +17 -0
  124. data/app/services/spree/orders/approve.rb +18 -0
  125. data/app/services/spree/orders/cancel.rb +18 -0
  126. data/app/services/spree/payments/create.rb +66 -0
  127. data/app/services/spree/seeds/all.rb +26 -0
  128. data/app/services/spree/seeds/countries.rb +50 -0
  129. data/app/services/spree/seeds/default_reimbursement_types.rb +12 -0
  130. data/app/services/spree/seeds/roles.rb +11 -0
  131. data/app/services/spree/seeds/shipping_categories.rb +12 -0
  132. data/app/services/spree/seeds/states.rb +72 -0
  133. data/app/services/spree/seeds/stock_locations.rb +18 -0
  134. data/app/services/spree/seeds/store_credit_categories.rb +12 -0
  135. data/app/services/spree/seeds/stores.rb +31 -0
  136. data/app/services/spree/seeds/zones.rb +39 -0
  137. data/app/services/spree/shipments/add_item.rb +32 -0
  138. data/app/services/spree/shipments/change_state.rb +14 -0
  139. data/app/services/spree/shipments/create.rb +48 -0
  140. data/app/services/spree/shipments/helper.rb +23 -0
  141. data/app/services/spree/shipments/remove_item.rb +55 -0
  142. data/app/services/spree/shipments/update.rb +40 -0
  143. data/app/services/spree/stock_locations/stock_items/create.rb +31 -0
  144. data/app/services/spree/wallet/create_payment_source.rb +26 -0
  145. data/app/sorters/spree/base_sorter.rb +23 -11
  146. data/app/sorters/spree/products/sort.rb +23 -7
  147. data/app/validators/spree/url_validator.rb +23 -0
  148. data/brakeman.ignore +20 -0
  149. data/config/initializers/active_storage.rb +0 -6
  150. data/config/locales/en.yml +24 -168
  151. data/db/migrate/20210914000000_spree_four_three.rb +1205 -0
  152. data/db/migrate/20210915064321_add_metadata_to_spree_orders.rb +13 -0
  153. data/db/migrate/20210915064322_add_metadata_to_spree_products.rb +13 -0
  154. data/db/migrate/20210915064323_add_metadata_to_spree_variants.rb +13 -0
  155. data/db/migrate/20210915064324_add_metadata_to_spree_line_items.rb +13 -0
  156. data/db/migrate/20210915064325_add_metadata_to_spree_shipments.rb +13 -0
  157. data/db/migrate/20210915064326_add_metadata_to_spree_payments.rb +13 -0
  158. data/db/migrate/20210915064327_add_metadata_to_spree_taxons_and_taxonomies.rb +18 -0
  159. data/db/migrate/20210915064328_add_metadata_to_spree_stock_transfers.rb +13 -0
  160. data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +30 -0
  161. data/db/migrate/20210920090344_add_deleted_at_to_spree_stores.rb +8 -0
  162. data/db/migrate/20210921070812_rename_column_access_hash_to_token.rb +8 -0
  163. data/db/migrate/20210921070813_create_spree_wishlists.rb +18 -0
  164. data/db/migrate/20210921070814_create_spree_wished_products.rb +16 -0
  165. data/db/migrate/20210921070815_rename_spree_wished_products_to_spree_wished_items.rb +5 -0
  166. data/db/migrate/20210921090344_add_unique_stock_item_stock_location_variant_deleted_at_index.rb +5 -0
  167. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +32 -0
  168. data/db/migrate/20210929091444_create_spree_digital_links.rb +13 -0
  169. data/db/migrate/20210929093238_create_spree_digitals.rb +9 -0
  170. data/db/migrate/20210930143043_rename_secret_to_token_on_spree_digital_links.rb +5 -0
  171. data/db/migrate/20210930155649_add_settings_to_spree_stores.rb +11 -0
  172. data/db/seeds.rb +1 -5
  173. data/lib/generators/spree/dummy/dummy_generator.rb +2 -2
  174. data/lib/generators/spree/dummy/templates/rails/database.yml +20 -18
  175. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  176. data/{app/models/spree → lib/spree/core}/app_dependencies.rb +34 -4
  177. data/lib/spree/core/controller_helpers/auth.rb +4 -4
  178. data/lib/spree/core/controller_helpers/common.rb +15 -1
  179. data/lib/spree/core/controller_helpers/currency.rb +1 -1
  180. data/lib/spree/core/controller_helpers/store.rb +14 -0
  181. data/lib/spree/{dependencies_helper.rb → core/dependencies_helper.rb} +0 -0
  182. data/lib/spree/core/engine.rb +10 -4
  183. data/lib/spree/core/importer/product.rb +1 -1
  184. data/lib/spree/core/number_generator.rb +0 -2
  185. data/lib/spree/core/version.rb +1 -1
  186. data/lib/spree/core.rb +21 -13
  187. data/lib/spree/money.rb +2 -2
  188. data/lib/spree/permitted_attributes.rb +38 -13
  189. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  190. data/lib/spree/testing_support/capybara_config.rb +14 -19
  191. data/lib/spree/testing_support/capybara_ext.rb +1 -6
  192. data/lib/spree/testing_support/common_rake.rb +22 -4
  193. data/lib/spree/testing_support/factories/asset_factory.rb +15 -0
  194. data/lib/spree/testing_support/factories/cms_section_factory.rb +2 -2
  195. data/lib/spree/testing_support/factories/digital_factory.rb +10 -0
  196. data/lib/spree/testing_support/factories/digital_link_factory.rb +6 -0
  197. data/lib/spree/testing_support/factories/log_entry_factory.rb +6 -0
  198. data/lib/spree/testing_support/factories/order_factory.rb +4 -1
  199. data/lib/spree/testing_support/factories/payment_capture_event_factory.rb +6 -0
  200. data/lib/spree/testing_support/factories/payment_factory.rb +3 -3
  201. data/lib/spree/testing_support/factories/product_factory.rb +6 -0
  202. data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
  203. data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +7 -0
  204. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -0
  205. data/lib/spree/testing_support/factories/state_change_factory.rb +8 -0
  206. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -0
  207. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  208. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +9 -0
  209. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  210. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  211. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -0
  212. data/lib/spree/testing_support/factories/user_factory.rb +2 -0
  213. data/lib/spree/testing_support/factories/wished_variant_factory.rb +6 -0
  214. data/lib/spree/testing_support/factories/wishlist_factory.rb +18 -0
  215. data/lib/spree/testing_support/jobs.rb +9 -0
  216. data/lib/spree/testing_support/locale_helpers.rb +1 -1
  217. data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
  218. data/lib/tasks/core.rake +4 -4
  219. data/spree_core.gemspec +3 -2
  220. metadata +109 -325
  221. data/app/services/spree/account/addresses/helper.rb +0 -43
  222. data/app/services/spree/build_localized_redirect_url.rb +0 -101
  223. data/app/views/spree/shared/_purchased_items_table.text.erb +0 -25
  224. data/db/default/spree/countries.rb +0 -24
  225. data/db/default/spree/default_reimbursement_type.rb +0 -1
  226. data/db/default/spree/roles.rb +0 -2
  227. data/db/default/spree/states.rb +0 -49
  228. data/db/default/spree/store_credit_categories.rb +0 -1
  229. data/db/default/spree/stores.rb +0 -21
  230. data/db/default/spree/zones.rb +0 -29
  231. data/db/migrate/20120831092320_spree_one_two.rb +0 -481
  232. data/db/migrate/20120831092359_spree_promo_one_two.rb +0 -45
  233. data/db/migrate/20120905145253_add_tax_rate_label.rb +0 -5
  234. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +0 -5
  235. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +0 -8
  236. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +0 -5
  237. data/db/migrate/20121010142909_add_states_required_to_countries.rb +0 -5
  238. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +0 -6
  239. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +0 -11
  240. data/db/migrate/20121031162139_split_prices_from_variants.rb +0 -31
  241. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +0 -9
  242. data/db/migrate/20121107184631_add_currency_to_line_items.rb +0 -5
  243. data/db/migrate/20121107194006_add_currency_to_orders.rb +0 -5
  244. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +0 -5
  245. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +0 -5
  246. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +0 -5
  247. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +0 -5
  248. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +0 -6
  249. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +0 -9
  250. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +0 -6
  251. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +0 -5
  252. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +0 -9
  253. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +0 -5
  254. data/db/migrate/20130211190146_create_spree_stock_items.rb +0 -14
  255. data/db/migrate/20130211191120_create_spree_stock_locations.rb +0 -11
  256. data/db/migrate/20130213191427_create_default_stock.rb +0 -33
  257. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +0 -5
  258. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +0 -5
  259. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +0 -5
  260. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +0 -6
  261. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +0 -6
  262. data/db/migrate/20130228210442_create_shipping_method_zone.rb +0 -21
  263. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +0 -5
  264. data/db/migrate/20130301162924_create_shipping_method_categories.rb +0 -13
  265. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +0 -5
  266. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +0 -24
  267. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +0 -7
  268. data/db/migrate/20130305143310_create_stock_movements.rb +0 -12
  269. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +0 -22
  270. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +0 -5
  271. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +0 -5
  272. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +0 -5
  273. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +0 -8
  274. data/db/migrate/20130319062004_change_orders_total_precision.rb +0 -8
  275. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +0 -7
  276. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +0 -7
  277. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +0 -7
  278. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +0 -7
  279. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +0 -15
  280. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +0 -9
  281. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +0 -5
  282. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +0 -15
  283. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +0 -9
  284. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +0 -14
  285. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +0 -5
  286. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +0 -13
  287. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  288. data/db/migrate/20130417120035_update_adjustment_states.rb +0 -16
  289. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +0 -15
  290. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +0 -14
  291. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +0 -5
  292. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +0 -5
  293. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +0 -23
  294. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +0 -5
  295. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +0 -5
  296. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +0 -5
  297. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  298. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +0 -5
  299. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +0 -9
  300. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +0 -9
  301. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +0 -6
  302. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +0 -5
  303. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +0 -7
  304. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +0 -5
  305. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +0 -6
  306. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +0 -5
  307. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +0 -6
  308. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +0 -5
  309. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +0 -5
  310. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +0 -5
  311. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +0 -10
  312. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +0 -12
  313. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +0 -8
  314. data/db/migrate/20130807024301_upgrade_adjustments.rb +0 -46
  315. data/db/migrate/20130807024302_rename_adjustment_fields.rb +0 -20
  316. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +0 -5
  317. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +0 -5
  318. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +0 -5
  319. data/db/migrate/20130813140619_expand_order_number_size.rb +0 -9
  320. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +0 -5
  321. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +0 -5
  322. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +0 -5
  323. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +0 -16
  324. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +0 -8
  325. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  326. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  327. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +0 -5
  328. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  329. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +0 -5
  330. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +0 -5
  331. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +0 -7
  332. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -16
  333. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  334. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +0 -6
  335. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  336. data/db/migrate/20131118043959_add_included_to_adjustments.rb +0 -5
  337. data/db/migrate/20131118050234_rename_tax_total_fields.rb +0 -11
  338. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -21
  339. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +0 -5
  340. data/db/migrate/20131127001002_add_position_to_classifications.rb +0 -5
  341. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +0 -8
  342. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +0 -24
  343. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +0 -5
  344. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +0 -8
  345. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +0 -5
  346. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  347. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +0 -6
  348. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +0 -5
  349. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +0 -6
  350. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +0 -5
  351. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +0 -5
  352. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +0 -12
  353. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +0 -5
  354. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  355. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +0 -5
  356. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +0 -5
  357. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +0 -6
  358. data/db/migrate/20140213184916_add_more_indexes.rb +0 -13
  359. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +0 -5
  360. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +0 -8
  361. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +0 -13
  362. data/db/migrate/20140309023735_migrate_old_preferences.rb +0 -27
  363. data/db/migrate/20140309024355_create_spree_stores.rb +0 -25
  364. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -42
  365. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +0 -6
  366. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +0 -8
  367. data/db/migrate/20140331100557_add_additional_store_fields.rb +0 -8
  368. data/db/migrate/20140410141842_add_many_missing_indexes.rb +0 -18
  369. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +0 -66
  370. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  371. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +0 -8
  372. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +0 -5
  373. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +0 -29
  374. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +0 -10
  375. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +0 -6
  376. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +0 -6
  377. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +0 -5
  378. data/db/migrate/20140625214618_create_spree_refunds.rb +0 -12
  379. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +0 -12
  380. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +0 -5
  381. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +0 -10
  382. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -55
  383. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +0 -7
  384. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +0 -5
  385. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +0 -28
  386. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +0 -14
  387. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +0 -5
  388. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +0 -11
  389. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +0 -9
  390. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +0 -6
  391. data/db/migrate/20140717155155_create_default_refund_reason.rb +0 -9
  392. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +0 -7
  393. data/db/migrate/20140718133010_create_spree_customer_returns.rb +0 -9
  394. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +0 -6
  395. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +0 -15
  396. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +0 -5
  397. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +0 -13
  398. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +0 -15
  399. data/db/migrate/20140725131539_create_spree_reimbursements.rb +0 -21
  400. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +0 -5
  401. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +0 -7
  402. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +0 -5
  403. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +0 -20
  404. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
  405. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +0 -5
  406. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +0 -9
  407. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +0 -10
  408. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +0 -7
  409. data/db/migrate/20140911173301_add_kind_to_zone.rb +0 -11
  410. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +0 -5
  411. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +0 -6
  412. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +0 -5
  413. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +0 -6
  414. data/db/migrate/20141009204607_add_store_id_to_orders.rb +0 -8
  415. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +0 -8
  416. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  417. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -8
  418. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
  419. data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
  420. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
  421. data/db/migrate/20141215232040_remove_token_permissions_table.rb +0 -6
  422. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +0 -5
  423. data/db/migrate/20141217215630_update_product_slug_index.rb +0 -6
  424. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +0 -5
  425. data/db/migrate/20150118210639_create_spree_store_credits.rb +0 -24
  426. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +0 -8
  427. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +0 -17
  428. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +0 -10
  429. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +0 -6
  430. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +0 -5
  431. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +0 -5
  432. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -8
  433. data/db/migrate/20150128060325_remove_spree_configurations.rb +0 -16
  434. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +0 -13
  435. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +0 -13
  436. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +0 -67
  437. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +0 -18
  438. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +0 -14
  439. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  440. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +0 -5
  441. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
  442. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +0 -16
  443. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +0 -19
  444. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +0 -12
  445. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
  446. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +0 -12
  447. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +0 -18
  448. data/db/migrate/20150727191614_spree_store_credit_types.rb +0 -11
  449. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +0 -68
  450. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +0 -13
  451. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +0 -16
  452. data/db/migrate/20160219165458_add_indexes.rb +0 -14
  453. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -10
  454. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +0 -7
  455. data/db/migrate/20161014145148_add_created_at_to_variant.rb +0 -8
  456. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +0 -6
  457. data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +0 -5
  458. data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +0 -29
  459. data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +0 -16
  460. data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +0 -16
  461. data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +0 -16
  462. data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +0 -17
  463. data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +0 -16
  464. data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +0 -16
  465. data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +0 -16
  466. data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +0 -37
  467. data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +0 -5
  468. data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +0 -19
  469. data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +0 -19
  470. data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +0 -5
  471. data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +0 -20
  472. data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +0 -5
  473. data/db/migrate/20170331110454_add_indexes_to_refunds.rb +0 -6
  474. data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +0 -6
  475. data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +0 -6
  476. data/db/migrate/20170331120125_add_indexes_to_return_items.rb +0 -11
  477. data/db/migrate/20170331121725_add_index_to_role_users.rb +0 -18
  478. data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +0 -5
  479. data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +0 -20
  480. data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +0 -6
  481. data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +0 -5
  482. data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +0 -5
  483. data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +0 -10
  484. data/db/migrate/20170722102643_add_analytics_kind_to_spree_trackers.rb +0 -5
  485. data/db/migrate/20170727103056_rename_tracker_kind_field.rb +0 -5
  486. data/db/migrate/20171004223836_remove_icon_from_taxons.rb +0 -8
  487. data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +0 -6
  488. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +0 -5
  489. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +0 -12
  490. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +0 -6
  491. data/db/migrate/20190305121659_add_iso_and_iso3_validation_on_presence_and_uniqueness.rb +0 -18
  492. data/db/migrate/20190523092729_add_user_id_and_deleted_at_to_spree_addresses.rb +0 -12
  493. data/db/migrate/20191005121504_add_store_id_to_payment_methods.rb +0 -7
  494. data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +0 -5
  495. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +0 -11
  496. data/db/migrate/20200102141311_add_social_to_spree_stores.rb +0 -10
  497. data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +0 -5
  498. data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +0 -7
  499. data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +0 -7
  500. data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +0 -7
  501. data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +0 -9
  502. data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +0 -8
  503. data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +0 -5
  504. data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +0 -7
  505. data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +0 -7
  506. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +0 -5
  507. data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +0 -5
  508. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +0 -12
  509. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +0 -10
  510. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +0 -5
  511. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +0 -8
  512. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +0 -5
  513. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +0 -5
  514. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +0 -10
  515. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +0 -15
  516. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +0 -5
  517. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +0 -5
  518. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +0 -11
  519. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +0 -22
  520. data/db/migrate/20210407200948_create_spree_menus.rb +0 -16
  521. data/db/migrate/20210408092939_create_spree_menu_items.rb +0 -31
  522. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +0 -8
  523. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +0 -8
  524. data/db/migrate/20210512191732_create_spree_cms_pages.rb +0 -24
  525. data/db/migrate/20210514204251_create_spree_cms_sections.rb +0 -22
  526. data/db/migrate/20210527094055_create_spree_products_stores.rb +0 -29
  527. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +0 -5
  528. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +0 -46
  529. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +0 -29
  530. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +0 -10
  531. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +0 -11
  532. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  533. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  534. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +0 -29
  535. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +0 -11
  536. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +0 -305
  537. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +0 -9
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class StoreCredit < Spree::Base
3
3
  include SingleStoreResource
4
+ include Metadata
4
5
 
5
6
  acts_as_paranoid
6
7
 
@@ -16,7 +17,7 @@ module Spree
16
17
 
17
18
  belongs_to :user, class_name: Spree.user_class.to_s, foreign_key: 'user_id'
18
19
  belongs_to :category, class_name: 'Spree::StoreCreditCategory'
19
- belongs_to :created_by, class_name: Spree.user_class.to_s, foreign_key: 'created_by_id'
20
+ belongs_to :created_by, class_name: Spree.admin_user_class.to_s, foreign_key: 'created_by_id'
20
21
  belongs_to :credit_type, class_name: 'Spree::StoreCreditType', foreign_key: 'type_id'
21
22
  belongs_to :store, class_name: 'Spree::Store'
22
23
  has_many :store_credit_events, class_name: 'Spree::StoreCreditEvent'
@@ -41,6 +42,9 @@ module Spree
41
42
  extend Spree::DisplayMoney
42
43
  money_methods :amount, :amount_used
43
44
 
45
+ self.whitelisted_ransackable_attributes = %w[user_id created_by_id amount currency type_id]
46
+ self.whitelisted_ransackable_associations = %w[type user created_by]
47
+
44
48
  def amount_remaining
45
49
  amount - amount_used - amount_authorized
46
50
  end
@@ -7,6 +7,8 @@ module Spree
7
7
  GIFT_CARD_CATEGORY_NAME = 'Gift Card'.freeze
8
8
  DEFAULT_NON_EXPIRING_TYPES = [GIFT_CARD_CATEGORY_NAME]
9
9
 
10
+ self.whitelisted_ransackable_attributes = %w[name]
11
+
10
12
  def non_expiring?
11
13
  non_expiring_category_types.include? name
12
14
  end
@@ -10,13 +10,8 @@ module Spree
10
10
 
11
11
  delegate :currency, :store, to: :store_credit
12
12
 
13
- def display_amount
14
- Spree::Money.new(amount, currency: currency)
15
- end
16
-
17
- def display_user_total_amount
18
- Spree::Money.new(user_total_amount, currency: currency)
19
- end
13
+ extend DisplayMoney
14
+ money_methods :amount, :user_total_amount
20
15
 
21
16
  def display_action
22
17
  case action
@@ -2,5 +2,7 @@ module Spree
2
2
  class StoreCreditType < Spree::Base
3
3
  DEFAULT_TYPE_NAME = 'Expiring'.freeze
4
4
  has_many :store_credits, class_name: 'Spree::StoreCredit', foreign_key: 'type_id'
5
+
6
+ validates :name, presence: true
5
7
  end
6
8
  end
@@ -1,12 +1,14 @@
1
1
  module Spree
2
2
  class TaxCategory < Spree::Base
3
3
  acts_as_paranoid
4
- validates :name, presence: true, uniqueness: { case_sensitive: false, scope: :deleted_at }
4
+ validates :name, presence: true, uniqueness: { case_sensitive: false, scope: spree_base_uniqueness_scope.push(:deleted_at) }
5
5
 
6
6
  has_many :tax_rates, dependent: :destroy, inverse_of: :tax_category
7
7
 
8
8
  before_save :set_default_category
9
9
 
10
+ self.whitelisted_ransackable_attributes = %w[name is_default tax_code]
11
+
10
12
  def set_default_category
11
13
  # set existing default tax category to false if this one has been marked as default
12
14
 
@@ -13,7 +13,7 @@ module Spree
13
13
 
14
14
  with_options presence: true do
15
15
  validates :amount, numericality: { allow_nil: true }
16
- validates :tax_category
16
+ validates :tax_category, :name
17
17
  end
18
18
 
19
19
  scope :by_zone, ->(zone) { where(zone_id: zone.id) }
@@ -27,6 +27,8 @@ module Spree
27
27
  ->(category) { where(tax_category_id: category.try(:id)) }
28
28
  scope :included_in_price, -> { where(included_in_price: true) }
29
29
 
30
+ self.whitelisted_ransackable_attributes = %w[amount zone_id tax_category_id included_in_price name]
31
+
30
32
  # Gets the array of TaxRates appropriate for the specified tax zone
31
33
  def self.match(order_tax_zone)
32
34
  return [] unless order_tax_zone
@@ -3,6 +3,8 @@ require 'stringex'
3
3
 
4
4
  module Spree
5
5
  class Taxon < Spree::Base
6
+ include Metadata
7
+
6
8
  extend FriendlyId
7
9
  friendly_id :permalink, slug_column: :permalink, use: :history
8
10
  before_validation :set_permalink, on: :create, if: :name
@@ -37,6 +39,7 @@ module Spree
37
39
 
38
40
  before_validation :copy_taxonomy_from_parent
39
41
  after_save :touch_ancestors_and_taxonomy
42
+ after_save :sync_taxonomy_name
40
43
  after_touch :touch_ancestors_and_taxonomy
41
44
 
42
45
  has_one :icon, as: :viewable, dependent: :destroy, class_name: 'Spree::TaxonImage'
@@ -44,6 +47,7 @@ module Spree
44
47
  scope :for_store, ->(store) { joins(:taxonomy).where(spree_taxonomies: { store_id: store.id }) }
45
48
 
46
49
  self.whitelisted_ransackable_associations = %w[taxonomy]
50
+ self.whitelisted_ransackable_attributes = %w[name permalink]
47
51
 
48
52
  scope :for_stores, ->(stores) { joins(:taxonomy).where(spree_taxonomies: { store_id: stores.ids }) }
49
53
 
@@ -102,6 +106,14 @@ module Spree
102
106
 
103
107
  private
104
108
 
109
+ def sync_taxonomy_name
110
+ if saved_change_to_name? && root?
111
+ return if taxonomy.name.to_s == name.to_s
112
+
113
+ taxonomy.update(name: name)
114
+ end
115
+ end
116
+
105
117
  def touch_ancestors_and_taxonomy
106
118
  # Touches all ancestors at once to avoid recursive taxonomy touch, and reduce queries.
107
119
  ancestors.update_all(updated_at: Time.current)
@@ -5,10 +5,10 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- validate :check_attachment_content_type
9
-
10
8
  has_one_attached :attachment
11
9
 
10
+ validates :attachment, content_type: /\Aimage\/.*\z/
11
+
12
12
  default_scope { includes(attachment_attachment: :blob) }
13
13
 
14
14
  def self.styles
@@ -21,16 +21,6 @@ module Spree
21
21
  def default_style
22
22
  :mini
23
23
  end
24
-
25
- def accepted_image_types
26
- %w(image/jpeg image/jpg image/png image/gif)
27
- end
28
-
29
- def check_attachment_content_type
30
- if attachment.attached? && !attachment.content_type.in?(accepted_image_types)
31
- errors.add(:attachment, :not_allowed_content_type)
32
- end
33
- end
34
24
  end
35
25
  end
36
26
  end
@@ -2,6 +2,7 @@ module Spree
2
2
  class TaxonImage < Asset
3
3
  include Configuration::ActiveStorage
4
4
  include Rails.application.routes.url_helpers
5
+ include ::Spree::ImageMethods
5
6
 
6
7
  def styles
7
8
  self.class.styles.map do |_, size|
@@ -1,5 +1,7 @@
1
1
  module Spree
2
2
  class Taxonomy < Spree::Base
3
+ include Metadata
4
+
3
5
  acts_as_list
4
6
 
5
7
  validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true, scope: :store_id }
@@ -14,6 +16,8 @@ module Spree
14
16
 
15
17
  default_scope { order("#{table_name}.position, #{table_name}.created_at") }
16
18
 
19
+ self.whitelisted_ransackable_associations = %w[root]
20
+
17
21
  private
18
22
 
19
23
  def set_root
@@ -21,6 +25,9 @@ module Spree
21
25
  end
22
26
 
23
27
  def set_root_taxon_name
28
+ return unless saved_change_to_name?
29
+ return if name.to_s == root.name.to_s
30
+
24
31
  root.update(name: name)
25
32
  end
26
33
  end
@@ -4,6 +4,7 @@ module Spree
4
4
  acts_as_list scope: :product
5
5
 
6
6
  include MemoizedData
7
+ include Metadata
7
8
 
8
9
  MEMOIZED_METHODS = %w(purchasable in_stock backorderable tax_category options_text compare_at_price)
9
10
 
@@ -42,6 +43,10 @@ module Spree
42
43
  dependent: :destroy,
43
44
  inverse_of: :variant
44
45
 
46
+ has_many :wished_items, dependent: :destroy
47
+
48
+ has_many :digitals
49
+
45
50
  before_validation :set_cost_currency
46
51
 
47
52
  validate :check_price
@@ -52,7 +57,7 @@ module Spree
52
57
  validates :cost_price
53
58
  validates :price
54
59
  end
55
- validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false },
60
+ validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false, scope: spree_base_uniqueness_scope },
56
61
  allow_blank: true, unless: :disable_sku_validation?
57
62
 
58
63
  after_create :create_stock_items
@@ -60,7 +65,7 @@ module Spree
60
65
 
61
66
  after_touch :clear_in_stock_cache
62
67
 
63
- scope :in_stock, -> { joins(:stock_items).where('count_on_hand > ? OR track_inventory = ?', 0, false) }
68
+ scope :in_stock, -> { joins(:stock_items).where("#{Spree::StockItem.table_name}.count_on_hand > ? OR #{Spree::Variant.table_name}.track_inventory = ?", 0, false) }
64
69
  scope :backorderable, -> { joins(:stock_items).where(spree_stock_items: { backorderable: true }) }
65
70
  scope :in_stock_or_backorderable, -> { in_stock.or(backorderable) }
66
71
 
@@ -89,7 +94,7 @@ module Spree
89
94
  scope :not_deleted, -> { where("#{Spree::Variant.quoted_table_name}.deleted_at IS NULL") }
90
95
 
91
96
  scope :for_currency_and_available_price_amount, ->(currency = nil) do
92
- currency ||= Spree::Config[:currency]
97
+ currency ||= Spree::Store.default.default_currency
93
98
  joins(:prices).where('spree_prices.currency = ?', currency).where('spree_prices.amount IS NOT NULL').distinct
94
99
  end
95
100
 
@@ -106,8 +111,8 @@ module Spree
106
111
  end
107
112
  end
108
113
 
109
- self.whitelisted_ransackable_associations = %w[option_values product prices default_price]
110
- self.whitelisted_ransackable_attributes = %w[weight sku]
114
+ self.whitelisted_ransackable_associations = %w[option_values product tax_category prices default_price]
115
+ self.whitelisted_ransackable_attributes = %w[weight depth width height sku discontinue_on is_master cost_price cost_currency track_inventory deleted_at]
111
116
  self.whitelisted_ransackable_scopes = %i(product_name_or_sku_cont search_by_product_name_or_sku)
112
117
 
113
118
  def self.product_name_or_sku_cont(query)
@@ -127,6 +132,10 @@ module Spree
127
132
  !discontinued? && product.available?
128
133
  end
129
134
 
135
+ def in_stock_or_backorderable?
136
+ self.class.in_stock_or_backorderable.exists?(id: id)
137
+ end
138
+
130
139
  def tax_category
131
140
  @tax_category ||= if self[:tax_category_id].nil?
132
141
  product.tax_category
@@ -256,7 +265,13 @@ module Spree
256
265
  end
257
266
  end
258
267
 
259
- delegate :total_on_hand, :can_supply?, :backorderable?, to: :quantifier
268
+ def backorderable?
269
+ @backorderable ||= Rails.cache.fetch(['variant-backorderable', cache_key_with_version]) do
270
+ quantifier.backorderable?
271
+ end
272
+ end
273
+
274
+ delegate :total_on_hand, :can_supply?, to: :quantifier
260
275
 
261
276
  alias is_backorderable? backorderable?
262
277
 
@@ -270,10 +285,6 @@ module Spree
270
285
  track_inventory? && Spree::Config.track_inventory_levels
271
286
  end
272
287
 
273
- def track_inventory
274
- should_track_inventory?
275
- end
276
-
277
288
  def volume
278
289
  (width || 0) * (height || 0) * (depth || 0)
279
290
  end
@@ -291,7 +302,12 @@ module Spree
291
302
  end
292
303
 
293
304
  def backordered?
294
- @backordered ||= total_on_hand <= 0 && stock_items.exists?(backorderable: true)
305
+ @backordered ||= !in_stock? && stock_items.exists?(backorderable: true)
306
+ end
307
+
308
+ # Is this variant to be downloaded by the customer?
309
+ def digital?
310
+ digitals.present?
295
311
  end
296
312
 
297
313
  private
@@ -323,12 +339,12 @@ module Spree
323
339
  self.price = product.master.price
324
340
  end
325
341
  if price.present? && currency.nil?
326
- self.currency = Spree::Config[:currency]
342
+ self.currency = Spree::Store.default.default_currency
327
343
  end
328
344
  end
329
345
 
330
346
  def set_cost_currency
331
- self.cost_currency = Spree::Config[:currency] if cost_currency.blank?
347
+ self.cost_currency = Spree::Store.default.default_currency if cost_currency.blank?
332
348
  end
333
349
 
334
350
  def create_stock_items
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ class WishedItem < Spree::Base
3
+ extend DisplayMoney
4
+ money_methods :total, :price
5
+
6
+ belongs_to :variant, class_name: 'Spree::Variant'
7
+ belongs_to :wishlist, class_name: 'Spree::Wishlist'
8
+
9
+ has_one :product, class_name: 'Spree::Product', through: :variant
10
+
11
+ validates :variant, :wishlist, presence: true
12
+ validates :variant, uniqueness: { scope: [:wishlist] }
13
+ validates :quantity, numericality: { only_integer: true, greater_than: 0 }
14
+
15
+ def price(currency)
16
+ variant.amount_in(currency[:currency])
17
+ end
18
+
19
+ def total(currency)
20
+ variant_price = variant.amount_in(currency[:currency])
21
+
22
+ if variant_price.nil?
23
+ variant_price
24
+ else
25
+ quantity * variant_price
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ class Wishlist < Spree::Base
3
+ include SingleStoreResource
4
+
5
+ has_secure_token
6
+
7
+ belongs_to :user, class_name: Spree.user_class.name, touch: true
8
+ belongs_to :store, class_name: 'Spree::Store'
9
+
10
+ has_many :wished_items, class_name: 'Spree::WishedItem', dependent: :destroy
11
+
12
+ after_commit :ensure_default_exists_and_is_unique
13
+ validates :name, :store, :user, presence: true
14
+
15
+ def include?(variant_id)
16
+ wished_items.exists?(variant_id: variant_id)
17
+ end
18
+
19
+ def to_param
20
+ token
21
+ end
22
+
23
+ def self.get_by_param(param)
24
+ find_by(token: param)
25
+ end
26
+
27
+ private
28
+
29
+ def ensure_default_exists_and_is_unique
30
+ if is_default?
31
+ Wishlist.where(is_default: true, user_id: user_id, store_id: store_id).where.not(id: id).update_all(is_default: false)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,7 @@
1
1
  module Spree
2
2
  class Zone < Spree::Base
3
+ include UniqueName
4
+
3
5
  with_options dependent: :destroy, inverse_of: :zone do
4
6
  has_many :zone_members, class_name: 'Spree::ZoneMember'
5
7
  has_many :tax_rates
@@ -12,8 +14,6 @@ module Spree
12
14
  has_many :shipping_method_zones, class_name: 'Spree::ShippingMethodZone'
13
15
  has_many :shipping_methods, through: :shipping_method_zones, class_name: 'Spree::ShippingMethod'
14
16
 
15
- validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
16
-
17
17
  scope :with_default_tax, -> { where(default_tax: true) }
18
18
 
19
19
  after_save :remove_defunct_members
@@ -71,7 +71,9 @@ module Spree
71
71
  end
72
72
 
73
73
  def self.default_checkout_zone
74
- find_by(name: Spree::Config[:checkout_zone])
74
+ ActiveSupport::Deprecation.warn('Spree::Zone.default_checkout_zone is deprecated and will be removed in Spree 5')
75
+
76
+ first
75
77
  end
76
78
 
77
79
  def kind
@@ -109,10 +111,10 @@ module Spree
109
111
  def country_list
110
112
  @countries ||= case kind
111
113
  when 'country' then
112
- zoneables
114
+ Country.where(id: country_ids)
113
115
  when 'state' then
114
- zoneables.collect(&:country)
115
- end.flatten.compact.uniq
116
+ Country.where(id: zoneables.collect(&:country_id))
117
+ end
116
118
  end
117
119
 
118
120
  def <=>(other)
@@ -3,6 +3,26 @@ module Spree
3
3
  class OptionsPresenter
4
4
  FilterableOptionType = Struct.new(:option_type, :option_values, keyword_init: true) do
5
5
  delegate_missing_to :option_type
6
+
7
+ def to_h
8
+ {
9
+ id: option_type.id,
10
+ name: option_type.name,
11
+ presentation: option_type.presentation,
12
+ option_values: option_values.map { |e| option_value_hash(e) }
13
+ }
14
+ end
15
+
16
+ private
17
+
18
+ def option_value_hash(option_value)
19
+ {
20
+ id: option_value.id,
21
+ name: option_value.name,
22
+ presentation: option_value.presentation,
23
+ position: option_value.position
24
+ }
25
+ end
6
26
  end
7
27
 
8
28
  def initialize(option_values_scope:)
@@ -14,9 +14,29 @@ module Spree
14
14
  property.uniq_values(product_properties_scope: product_properties)
15
15
  end
16
16
 
17
+ def to_h
18
+ {
19
+ id: property.id,
20
+ name: property.name,
21
+ presentation: property.presentation,
22
+ values: values_hash
23
+ }
24
+ end
25
+
17
26
  private
18
27
 
19
28
  attr_reader :property
29
+
30
+ def values_hash
31
+ value_hashes = uniq_values.map do |filter_param, value|
32
+ {
33
+ value: value,
34
+ filter_param: filter_param
35
+ }
36
+ end
37
+
38
+ value_hashes.sort_by { |e| e[:value] }
39
+ end
20
40
  end
21
41
  end
22
42
  end
@@ -1,23 +1,7 @@
1
1
  module Spree
2
2
  module Account
3
3
  module Addresses
4
- class Create
5
- prepend Spree::ServiceModule::Base
6
- include Spree::Account::Addresses::Helper
7
-
8
- attr_accessor :country
9
-
10
- def call(user:, address_params:)
11
- fill_country_and_state_ids(address_params)
12
-
13
- address = user.addresses.new(address_params)
14
- if address.save
15
- assign_to_user_as_default(user: user, address_id: address.id)
16
- success(address)
17
- else
18
- failure(address)
19
- end
20
- end
4
+ class Create < Spree::Addresses::Create
21
5
  end
22
6
  end
23
7
  end
@@ -1,28 +1,7 @@
1
1
  module Spree
2
2
  module Account
3
3
  module Addresses
4
- class Update
5
- prepend Spree::ServiceModule::Base
6
- include Spree::Account::Addresses::Helper
7
-
8
- attr_accessor :country
9
-
10
- def call(address:, address_params:)
11
- address_params[:country_id] ||= address.country_id
12
- fill_country_and_state_ids(address_params)
13
-
14
- if address&.editable?
15
- address.update(address_params) ? success(address) : failure(address)
16
- else
17
- new_address(address_params).valid? ? address.destroy && success(new_address) : failure(new_address)
18
- end
19
- end
20
-
21
- private
22
-
23
- def new_address(address_params = {})
24
- @new_address ||= ::Spree::Address.find_or_create_by(address_params.except(:id, :updated_at, :created_at))
25
- end
4
+ class Update < Spree::Addresses::Update
26
5
  end
27
6
  end
28
7
  end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Addresses
3
+ class Create
4
+ prepend Spree::ServiceModule::Base
5
+ include Spree::Addresses::Helper
6
+
7
+ attr_accessor :country
8
+
9
+ def call(address_params: {}, user: nil)
10
+ fill_country_and_state_ids(address_params)
11
+
12
+ address = Spree::Address.new(address_params)
13
+ address.user = user if user.present?
14
+
15
+ if address.save
16
+ assign_to_user_as_default(user: user, address_id: address.id) if user.present?
17
+ success(address)
18
+ else
19
+ failure(address)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module Addresses
3
+ module Helper
4
+ private
5
+
6
+ attr_accessor :country
7
+
8
+ def fill_country_and_state_ids(params)
9
+ replace_country_iso_with_id(params)
10
+ fill_state_id(params)
11
+ end
12
+
13
+ def replace_country_iso_with_id(params)
14
+ iso = params[:country_iso]
15
+ return params unless iso.present?
16
+
17
+ country = Spree::Country.by_iso(iso)
18
+ params[:country_id] = country&.id
19
+ params.delete(:country_iso)
20
+ params
21
+ end
22
+
23
+ def fill_state_id(params)
24
+ state_name = params[:state_name]
25
+ return params unless state_name.present?
26
+
27
+ country ||= Spree::Country.find(params[:country_id]) if params[:country_id].present?
28
+ return params unless country
29
+
30
+ params[:state_id] = country.states.find_by(name: state_name)&.id
31
+ params
32
+ end
33
+
34
+ def assign_to_user_as_default(user:, address_id:)
35
+ if user.addresses.pluck(:id) == [address_id] # check if it's user first address
36
+ user.update(bill_address_id: address_id, ship_address_id: address_id)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Addresses
3
+ class Update
4
+ prepend Spree::ServiceModule::Base
5
+ include Spree::Addresses::Helper
6
+
7
+ attr_accessor :country
8
+
9
+ def call(address:, address_params:)
10
+ address_params[:country_id] ||= address.country_id
11
+ fill_country_and_state_ids(address_params)
12
+
13
+ if address&.editable?
14
+ address.update(address_params) ? success(address) : failure(address)
15
+ else
16
+ new_address(address_params).valid? ? address.destroy && success(new_address) : failure(new_address)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def new_address(address_params = {})
23
+ @new_address ||= ::Spree::Address.find_or_create_by(address_params.except(:id, :updated_at, :created_at))
24
+ end
25
+ end
26
+ end
27
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  class AddItem
4
4
  prepend Spree::ServiceModule::Base
5
5
 
6
- def call(order:, variant:, quantity: nil, options: {})
6
+ def call(order:, variant:, quantity: nil, public_metadata: {}, private_metadata: {}, options: {})
7
7
  ApplicationRecord.transaction do
8
8
  run :add_to_line_item
9
9
  run Spree::Dependencies.cart_recalculate_service.constantize
@@ -12,7 +12,7 @@ module Spree
12
12
 
13
13
  private
14
14
 
15
- def add_to_line_item(order:, variant:, quantity: nil, options: {})
15
+ def add_to_line_item(order:, variant:, quantity: nil, public_metadata: {}, private_metadata: {}, options: {})
16
16
  options ||= {}
17
17
  quantity ||= 1
18
18
 
@@ -32,6 +32,8 @@ module Spree
32
32
  end
33
33
 
34
34
  line_item.target_shipment = options[:shipment] if options.key? :shipment
35
+ line_item.public_metadata = public_metadata.to_h if public_metadata
36
+ line_item.private_metadata = private_metadata.to_h if private_metadata
35
37
 
36
38
  return failure(line_item) unless line_item.save
37
39
 
@@ -0,0 +1,16 @@
1
+ module Spree
2
+ module Cart
3
+ class Associate
4
+ prepend Spree::ServiceModule::Base
5
+
6
+ def call(guest_order:, user:)
7
+ if guest_order.user.nil?
8
+ guest_order.associate_user!(user)
9
+ success(guest_order)
10
+ else
11
+ failure(guest_order, 'Already assigned to a user')
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end