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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b031163e0c77da6776854068fb9769ed6cd44ff048e75a088ee6526c40db986
4
- data.tar.gz: 2cfbcbfb7a1c5221270e7b677222a94047b5965cb32e5144ca6540d927f2b51b
3
+ metadata.gz: 7688ca0eb67dbbcd2236ebafb2c3eed22d8d29dbf40924d82b52eba8bf52db9e
4
+ data.tar.gz: '0689424db68d0822931238faad67fcc9292e0f2cd5487ed6c234acbea8b79720'
5
5
  SHA512:
6
- metadata.gz: 375bd44efe93e706a1bd58abcc9be1fb3f2af0b0a993fe223a1e093033193105012284e0a7f03413fad0099feb105fa4b1526b8d576d76e58e62e37967c67768
7
- data.tar.gz: c82f2406e121b6fff092677e91d0344e35c5b6e19aee5aca1916ee819d7909a42ef854653922413e215c67934cb73df2a1af002fbe3d48f53db99ff854d80f93
6
+ metadata.gz: 4d8dd9a06af740248a017b5f2b608f11cf19f5df647129837de2c3248c529da621402928dce4c5d9338ded7bb4282509eb0723d772a1a93b9006c8845d213fc6
7
+ data.tar.gz: 7d9689023479c36a36407b650d870d0640f38bff6c456b4722579f5bd0cb9b29a937a9b8c476862e1adcc8bc3339dd801ae4e2b6e8ecf0564e35830d8abc3842
@@ -9,12 +9,20 @@ module Spree
9
9
  end
10
10
 
11
11
  def execute
12
- find_available(scope, products_scope)
12
+ find_available(scope, products_scope).select(select_args).order(order_args)
13
13
  end
14
14
 
15
15
  private
16
16
 
17
17
  attr_reader :scope, :products_scope
18
+
19
+ def select_args
20
+ "#{OptionValue.table_name}.*, #{OptionType.table_name}.position AS option_type_position"
21
+ end
22
+
23
+ def order_args
24
+ "option_type_position, #{OptionValue.table_name}.position"
25
+ end
18
26
  end
19
27
  end
20
28
  end
@@ -27,6 +27,9 @@ module Spree
27
27
  @deleted = params.dig(:filter, :show_deleted)
28
28
  @discontinued = params.dig(:filter, :show_discontinued)
29
29
  @properties = params.dig(:filter, :properties)
30
+ @in_stock = params.dig(:filter, :in_stock)
31
+ @backorderable = params.dig(:filter, :backorderable)
32
+ @purchasable = params.dig(:filter, :purchasable)
30
33
  end
31
34
 
32
35
  def execute
@@ -42,6 +45,9 @@ module Spree
42
45
  products = by_properties(products)
43
46
  products = include_deleted(products)
44
47
  products = include_discontinued(products)
48
+ products = show_only_stock(products)
49
+ products = show_only_backorderable(products)
50
+ products = show_only_purchasable(products)
45
51
  products = ordered(products)
46
52
 
47
53
  products.distinct
@@ -49,8 +55,8 @@ module Spree
49
55
 
50
56
  private
51
57
 
52
- attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options,
53
- :option_value_ids, :scope, :sort_by, :deleted, :discontinued, :properties, :store
58
+ attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options, :option_value_ids, :scope,
59
+ :sort_by, :deleted, :discontinued, :properties, :store, :in_stock, :backorderable, :purchasable
54
60
 
55
61
  def ids?
56
62
  ids.present?
@@ -148,7 +154,7 @@ module Spree
148
154
  def by_options(products)
149
155
  return products unless options?
150
156
 
151
- products_ids = options.map { |key, value| products.with_option_value(key, value).ids }
157
+ products_ids = options.map { |key, value| products.with_option_value(key, value)&.ids }.compact.uniq
152
158
  products.where(id: products_ids.reduce(&:intersection))
153
159
  end
154
160
 
@@ -231,6 +237,24 @@ module Spree
231
237
  discontinued ? products : products.active(currency)
232
238
  end
233
239
 
240
+ def show_only_stock(products)
241
+ return products unless in_stock.to_s == 'true'
242
+
243
+ products.in_stock
244
+ end
245
+
246
+ def show_only_backorderable(products)
247
+ return products unless backorderable.to_s == 'true'
248
+
249
+ products.backorderable
250
+ end
251
+
252
+ def show_only_purchasable(products)
253
+ return products unless purchasable.to_s == 'true'
254
+
255
+ products.in_stock_or_backorderable
256
+ end
257
+
234
258
  def map_prices(prices)
235
259
  prices.map do |price|
236
260
  price == 'Infinity' ? Float::INFINITY : price.to_f
@@ -3,16 +3,18 @@ module Spree
3
3
  class Find
4
4
  def initialize(scope:, params:)
5
5
  @scope = scope
6
- @ids = String(params.dig(:filter, :ids)).split(',')
7
- @parent = params.dig(:filter, :parent_id)
8
- @taxonomy = params.dig(:filter, :taxonomy_id)
9
- @name = params.dig(:filter, :name)
10
- @roots = params.dig(:filter, :roots)
6
+ @ids = String(params.dig(:filter, :ids)).split(',')
7
+ @parent = params.dig(:filter, :parent_id)
8
+ @parent_permalink = params.dig(:filter, :parent_permalink)
9
+ @taxonomy = params.dig(:filter, :taxonomy_id)
10
+ @name = params.dig(:filter, :name)
11
+ @roots = params.dig(:filter, :roots)
11
12
  end
12
13
 
13
14
  def execute
14
15
  taxons = by_ids(scope)
15
16
  taxons = by_parent(taxons)
17
+ taxons = by_parent_permalink(taxons)
16
18
  taxons = by_taxonomy(taxons)
17
19
  taxons = by_roots(taxons)
18
20
  taxons = by_name(taxons)
@@ -22,7 +24,7 @@ module Spree
22
24
 
23
25
  private
24
26
 
25
- attr_reader :ids, :parent, :taxonomy, :roots, :name, :scope
27
+ attr_reader :ids, :parent, :parent_permalink, :taxonomy, :roots, :name, :scope
26
28
 
27
29
  def ids?
28
30
  ids.present?
@@ -32,6 +34,10 @@ module Spree
32
34
  parent.present?
33
35
  end
34
36
 
37
+ def parent_permalink?
38
+ parent_permalink.present?
39
+ end
40
+
35
41
  def taxonomy?
36
42
  taxonomy.present?
37
43
  end
@@ -60,6 +66,16 @@ module Spree
60
66
  taxons.where(parent_id: parent)
61
67
  end
62
68
 
69
+ def by_parent_permalink(taxons)
70
+ return taxons unless parent_permalink?
71
+
72
+ if Rails::VERSION::STRING >= '6.1'
73
+ taxons.joins(:parent).where(parent: { permalink: parent_permalink })
74
+ else
75
+ taxons.joins("INNER JOIN #{Spree::Taxon.table_name} AS parent_taxon ON parent_taxon.id = #{Spree::Taxon.table_name}.parent_id").where(["parent_taxon.permalink = ?", parent_permalink])
76
+ end
77
+ end
78
+
63
79
  def by_taxonomy(taxons)
64
80
  return taxons unless taxonomy?
65
81
 
@@ -65,7 +65,7 @@ module Spree
65
65
  elsif current_store.logo.attached? && current_store.logo.image?
66
66
  main_app.url_for(current_store.logo)
67
67
  else
68
- Spree::Config[:logo]
68
+ 'logo/spree_50.png'
69
69
  end
70
70
 
71
71
  path = spree.respond_to?(:root_path) ? spree.root_path : main_app.root_path
@@ -246,11 +246,13 @@ module Spree
246
246
  options = options.first || {}
247
247
  options[:alt] ||= product.name
248
248
  image_path = default_image_for_product_or_variant(product)
249
- if image_path.present?
250
- create_product_image_tag image_path, product, options, style
251
- else
252
- image_tag "noimage/#{style}.png", options
253
- end
249
+ img = if image_path.present?
250
+ create_product_image_tag image_path, product, options, style
251
+ else
252
+ inline_svg_tag "noimage/backend-missing-image.svg", class: "noimage", size: "60%*60%"
253
+ end
254
+
255
+ content_tag(:div, img, class: "admin-product-image-container #{style}-img")
254
256
  end
255
257
  end
256
258
 
@@ -267,9 +269,5 @@ module Spree
267
269
 
268
270
  tag('meta', name: 'robots', content: current_store.seo_robots)
269
271
  end
270
-
271
- def taxon_wysiwyg_editor_enabled?
272
- Spree::Config[:taxon_wysiwyg_editor_enabled]
273
- end
274
272
  end
275
273
  end
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module CurrencyHelper
3
3
  def currency_options(selected_value = nil)
4
- selected_value ||= Spree::Config[:currency]
4
+ selected_value ||= Spree::Store.default.default_currency
5
5
  currencies = ::Money::Currency.table.map do |_code, details|
6
6
  iso = details[:iso_code]
7
7
  [iso, "#{details[:name]} (#{iso})"]
@@ -44,20 +44,6 @@ module Spree
44
44
  variants_option_types_presenter(variants, product).options
45
45
  end
46
46
 
47
- def product_wysiwyg_editor_enabled?
48
- Spree::Config[:product_wysiwyg_editor_enabled]
49
- end
50
-
51
- # converts line breaks in product description into <p> tags (for html display purposes)
52
- def product_description(product)
53
- description = if Spree::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled?
54
- product.description
55
- else
56
- product.description.to_s.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>')
57
- end
58
- description.blank? ? Spree.t(:product_has_no_description) : description
59
- end
60
-
61
47
  def line_item_description_text(description_text)
62
48
  if description_text.present?
63
49
  truncate(strip_tags(description_text.gsub('&nbsp;', ' ').squish), length: 100)
@@ -82,7 +68,7 @@ module Spree
82
68
  cache_key_elements.compact.join('/')
83
69
  end
84
70
 
85
- def limit_descritpion(string)
71
+ def limit_description(string)
86
72
  return string if string.length <= 450
87
73
 
88
74
  string.slice(0..449) + '...'
@@ -0,0 +1,4 @@
1
+ module Spree
2
+ class BaseJob < ApplicationJob
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module StockLocations
3
+ module StockItems
4
+ class CreateJob < Spree::BaseJob
5
+ queue_as :spree_stock_location_stock_items
6
+
7
+ def perform(stock_location)
8
+ Spree::StockLocations::StockItems::Create.call(stock_location: stock_location)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -4,7 +4,7 @@ module Spree
4
4
 
5
5
  included do
6
6
  has_one :default_price,
7
- -> { with_deleted.where(currency: Spree::Config[:currency]) },
7
+ -> { with_deleted.where(currency: Spree::Store.default.default_currency) },
8
8
  class_name: 'Spree::Price',
9
9
  dependent: :destroy
10
10
 
@@ -17,13 +17,19 @@ module Spree
17
17
  # Decorate a method, but with some additional options
18
18
  # extend Spree::DisplayMoney
19
19
  # money_methods tax_amount: { currency: "CAD", no_cents: true }, :price
20
+ # Use generated method with the same arguments as in wrapped method
21
+ # def tax_amount(order, country)
22
+ # display_tax_amount(order, country)
20
23
  def money_methods(*args)
21
24
  args.each do |money_method|
22
25
  money_method = { money_method => {} } unless money_method.is_a? Hash
23
26
  money_method.each do |method_name, opts|
24
- define_method("display_#{method_name}") do
27
+ define_method("display_#{method_name}") do |**args_list|
25
28
  default_opts = respond_to?(:currency) ? { currency: currency } : {}
26
- Spree::Money.new(send(method_name), default_opts.merge(opts))
29
+
30
+ amount = args_list.blank? ? send(method_name) : send(method_name, **args_list)
31
+
32
+ Spree::Money.new(amount, default_opts.merge(opts).merge(args_list.slice(:currency)))
27
33
  end
28
34
  end
29
35
  end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module ImageMethods
3
+ extend ActiveSupport::Concern
4
+
5
+ def generate_url(size:, gravity: 'center', quality: 80, background: 'show')
6
+ return if size.blank?
7
+ size = size.gsub(/\s+/, '')
8
+
9
+ return unless size.match(/(\d+)x(\d+)/)
10
+
11
+ polymorphic_path(attachment.variant(
12
+ gravity: gravity,
13
+ resize: size,
14
+ extent: size,
15
+ background: background,
16
+ quality: quality.to_i
17
+ ), only_path: true)
18
+ end
19
+
20
+ def original_url
21
+ polymorphic_path(attachment, only_path: true)
22
+ end
23
+ end
24
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- # reset cache on save inside trasaction and transaction commit
6
+ # reset cache on save inside transaction and transaction commit
7
7
  after_save :reset_memoized_data
8
8
  after_commit :reset_memoized_data
9
9
 
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Metadata
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ store :public_metadata, coder: JSON
7
+ store :private_metadata, coder: JSON
8
+ end
9
+ end
10
+ end
@@ -16,7 +16,7 @@ module Spree
16
16
  errors.add(:stores, Spree.t(:must_have_one_store))
17
17
  end
18
18
 
19
- # this can be overriden on model basis
19
+ # this can be overridden on model basis
20
20
  def disable_store_presence_validation?
21
21
  Spree::Config[:disable_store_presence_validation]
22
22
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  scope :active, -> { where(active: true) }
7
7
  default_scope { order(Arel.sql("LOWER(#{table_name}.name)")) }
8
8
 
9
- validates :name, presence: true, uniqueness: { case_sensitive: false }
9
+ include UniqueName
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module NumberIdentifier
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ before_validation :uppercase_number
7
+
8
+ validates :number, presence: true, length: { maximum: 32, allow_blank: true },
9
+ uniqueness: { allow_blank: true, case_sensitive: true, scope: spree_base_uniqueness_scope }
10
+ end
11
+
12
+ protected
13
+
14
+ def uppercase_number
15
+ number&.to_s&.upcase!
16
+ end
17
+ end
18
+ end
@@ -27,16 +27,21 @@ module Spree
27
27
  next if name.to_s.include?('master_price')
28
28
 
29
29
  parts = name.to_s.match(/(.*)_by_(.*)/)
30
- scope(name.to_s, -> { order(Arel.sql("#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? 'ASC' : 'DESC'}")) })
30
+ scope(name.to_s, -> { order(Arel.sql(sanitize_sql("#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? 'ASC' : 'DESC'}"))) })
31
31
  end
32
32
  end
33
33
 
34
34
  def self.property_conditions(property)
35
35
  properties = Property.table_name
36
36
  case property
37
- when String then { "#{properties}.name" => property }
38
37
  when Property then { "#{properties}.id" => property.id }
39
- else { "#{properties}.id" => property.to_i }
38
+ when Integer then { "#{properties}.id" => property }
39
+ else
40
+ if Property.column_for_attribute('id').type == :uuid
41
+ ["#{properties.name} = ? OR #{properties.id} = ?", property, property]
42
+ else
43
+ { "#{properties}.name" => property }
44
+ end
40
45
  end
41
46
  end
42
47
 
@@ -62,6 +67,18 @@ module Spree
62
67
  where("#{price_table_name}.amount >= ?", price)
63
68
  end
64
69
 
70
+ add_search_scope :in_stock do
71
+ joins(:variants_including_master).merge(Spree::Variant.in_stock)
72
+ end
73
+
74
+ add_search_scope :backorderable do
75
+ joins(:variants_including_master).merge(Spree::Variant.backorderable)
76
+ end
77
+
78
+ add_search_scope :in_stock_or_backorderable do
79
+ joins(:variants_including_master).merge(Spree::Variant.in_stock_or_backorderable)
80
+ end
81
+
65
82
  # This scope selects products in taxon AND all its descendants
66
83
  # If you need products only within one taxon use
67
84
  #
@@ -127,26 +144,34 @@ module Spree
127
144
  end
128
145
 
129
146
  add_search_scope :with_option do |option|
130
- option_types = OptionType.table_name
131
- conditions = case option
132
- when String then { "#{option_types}.name" => option }
133
- when OptionType then { "#{option_types}.id" => option.id }
134
- else { "#{option_types}.id" => option.to_i }
135
- end
136
-
137
- joins(:option_types).where(conditions)
147
+ if option.is_a?(OptionType)
148
+ joins(:option_types).where(spree_option_types: { id: option.id })
149
+ elsif option.is_a?(Integer)
150
+ joins(:option_types).where(spree_option_types: { id: option })
151
+ elsif OptionType.column_for_attribute('id').type == :uuid
152
+ joins(:option_types).where(spree_option_types: { name: option }).or(Product.joins(:option_types).where(spree_option_types: { id: option }))
153
+ else
154
+ joins(:option_types).where(spree_option_types: { name: option })
155
+ end
138
156
  end
139
157
 
140
158
  add_search_scope :with_option_value do |option, value|
141
- option_values = OptionValue.table_name
142
159
  option_type_id = case option
143
- when String then OptionType.find_by(name: option) || option.to_i
144
160
  when OptionType then option.id
145
- else option.to_i
161
+ when Integer then option
162
+ else
163
+ if OptionType.column_for_attribute('id').type == :uuid
164
+ OptionType.where(id: option).or(OptionType.where(name: option))&.first&.id
165
+ else
166
+ OptionType.where(name: option)&.first&.id
167
+ end
146
168
  end
147
169
 
148
- conditions = "#{option_values}.name = ? AND #{option_values}.option_type_id = ?", value, option_type_id
149
- group('spree_products.id').joins(variants_including_master: :option_values).where(conditions)
170
+ return Product.group("#{Spree::Product.table_name}.id").none if option_type_id.blank?
171
+
172
+ group("#{Spree::Product.table_name}.id").
173
+ joins(variants_including_master: :option_values).
174
+ where(Spree::OptionValue.table_name => { name: value, option_type_id: option_type_id })
150
175
  end
151
176
 
152
177
  # Finds all products which have either:
@@ -233,7 +258,7 @@ module Spree
233
258
  scope = not_discontinued.where("#{Product.quoted_table_name}.available_on <= ?", available_on)
234
259
 
235
260
  unless Spree::Config.show_products_without_price
236
- currency ||= Spree::Config[:currency]
261
+ currency ||= Spree::Store.default.default_currency
237
262
  scope = scope.with_currency(currency)
238
263
  end
239
264
 
@@ -265,6 +290,26 @@ module Spree
265
290
  group('spree_products.id').joins(:taxons).where(Taxon.arel_table[:name].eq(name))
266
291
  end
267
292
 
293
+ # .search_by_name
294
+ if defined?(PgSearch)
295
+ include PgSearch::Model
296
+
297
+ if defined?(SpreeGlobalize)
298
+ pg_search_scope :search_by_name, associated_against: { translations: :name }, using: :tsearch
299
+ else
300
+ pg_search_scope :search_by_name, against: :name, using: :tsearch
301
+ end
302
+ else
303
+ def self.search_by_name(query)
304
+ if defined?(SpreeGlobalize)
305
+ joins(:translations).order(:name).where("LOWER(#{Product::Translation.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%").distinct
306
+ else
307
+ where("LOWER(#{Product.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%")
308
+ end
309
+ end
310
+ end
311
+ search_scopes << :search_by_name
312
+
268
313
  def self.price_table_name
269
314
  Price.quoted_table_name
270
315
  end
@@ -288,14 +333,11 @@ module Spree
288
333
  private_class_method :prepare_words
289
334
 
290
335
  def self.get_taxons(*ids_or_records_or_names)
291
- taxons = Taxon.table_name
292
336
  ids_or_records_or_names.flatten.map do |t|
293
337
  case t
294
- when Integer then Taxon.find_by(id: t)
295
338
  when ApplicationRecord then t
296
- when String
297
- Taxon.find_by(name: t) ||
298
- Taxon.where("#{taxons}.permalink LIKE ? OR #{taxons}.permalink = ?", "%/#{t}/", "#{t}/").first
339
+ else
340
+ Taxon.where(name: t).or(Taxon.where(id: t)).or(Taxon.where("permalink LIKE ? OR permalink = ?", "%/#{t}/", "#{t}/")).first
299
341
  end
300
342
  end.compact.flatten.uniq
301
343
  end
@@ -3,7 +3,17 @@ module Spree
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
+ validate :ensure_store_association_is_not_changed
7
+
6
8
  scope :for_store, ->(store) { where(store_id: store.id) }
7
9
  end
10
+
11
+ protected
12
+
13
+ def ensure_store_association_is_not_changed
14
+ if store_id_changed? && persisted?
15
+ errors.add(:store, Spree.t('errors.messages.store_association_can_not_be_changed'))
16
+ end
17
+ end
8
18
  end
9
19
  end
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module UniqueName
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ validates :name, presence: true,
7
+ uniqueness: { case_sensitive: false, allow_blank: true, scope: spree_base_uniqueness_scope }
8
+ end
9
+ end
10
+ end
@@ -4,6 +4,7 @@ module Spree
4
4
 
5
5
  include Spree::UserPaymentSource
6
6
  include Spree::UserReporting
7
+ include Spree::UserRoles
7
8
  include Spree::RansackableAttributes
8
9
 
9
10
  included do
@@ -15,9 +16,6 @@ module Spree
15
16
 
16
17
  attr_accessor :use_billing
17
18
 
18
- has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, dependent: :destroy
19
- has_many :spree_roles, through: :role_users, class_name: 'Spree::Role', source: :role
20
-
21
19
  has_many :promotion_rule_users, class_name: 'Spree::PromotionRuleUser', foreign_key: :user_id, dependent: :destroy
22
20
  has_many :promotion_rules, through: :promotion_rule_users, class_name: 'Spree::PromotionRule'
23
21
 
@@ -27,6 +25,8 @@ module Spree
27
25
  belongs_to :ship_address, class_name: 'Spree::Address', optional: true
28
26
  belongs_to :bill_address, class_name: 'Spree::Address', optional: true
29
27
 
28
+ has_many :wishlists, class_name: 'Spree::Wishlist', foreign_key: :user_id
29
+
30
30
  self.whitelisted_ransackable_associations = %w[bill_address ship_address addresses]
31
31
  self.whitelisted_ransackable_attributes = %w[id email]
32
32
 
@@ -47,11 +47,6 @@ module Spree
47
47
  end
48
48
  end
49
49
 
50
- # has_spree_role? simply needs to return true or false whether a user has a role or not.
51
- def has_spree_role?(role_in_question)
52
- spree_roles.any? { |role| role.name == role_in_question.to_s }
53
- end
54
-
55
50
  def last_incomplete_spree_order(store, options = {})
56
51
  orders.where(store: store).incomplete.
57
52
  includes(options[:includes]).
@@ -65,6 +60,21 @@ module Spree
65
60
  store_credits.for_store(store).where(currency: currency).reload.to_a.sum(&:amount_remaining)
66
61
  end
67
62
 
63
+ def available_store_credits(store)
64
+ store ||= Store.default
65
+
66
+ store_credits.for_store(store).pluck(:currency).uniq.each_with_object([]) do |currency, arr|
67
+ arr << Spree::Money.new(total_available_store_credit(currency, store), currency: currency)
68
+ end
69
+ end
70
+
71
+ def default_wishlist_for_store(current_store)
72
+ wishlists.find_or_create_by(is_default: true, store_id: current_store.id) do |wishlist|
73
+ wishlist.name = Spree.t(:default_wishlist_name)
74
+ wishlist.save
75
+ end
76
+ end
77
+
68
78
  private
69
79
 
70
80
  def check_completed_orders
@@ -3,20 +3,45 @@ module Spree
3
3
  extend DisplayMoney
4
4
  money_methods :lifetime_value, :average_order_value
5
5
 
6
- def lifetime_value
7
- orders.complete.sum(:total)
6
+ def report_values_for(report_name, store)
7
+ store ||= Store.default
8
+
9
+ completed_orders(store).pluck(:currency).uniq.each_with_object([]) do |currency, arr|
10
+ arr << send("display_#{report_name}", store: store, currency: currency)
11
+ end
8
12
  end
9
13
 
10
- def order_count
11
- orders.complete.size
14
+ def lifetime_value(**args)
15
+ order_calculate(operation: :sum,
16
+ column: :total,
17
+ **args)
12
18
  end
13
19
 
14
- def average_order_value
15
- if order_count > 0
16
- lifetime_value / order_count
17
- else
18
- BigDecimal('0.00')
19
- end
20
+ def average_order_value(**args)
21
+ order_calculate(operation: :average,
22
+ column: :total,
23
+ **args)
24
+ end
25
+
26
+ def order_count(store = nil)
27
+ store ||= Store.default
28
+ order_calculate(store: store,
29
+ currency: store.supported_currencies.split(','),
30
+ operation: :count,
31
+ column: :all)
32
+ end
33
+
34
+ private
35
+
36
+ def order_calculate(operation:, column:, store: nil, currency: nil)
37
+ store ||= Store.default
38
+ currency ||= store.default_currency
39
+
40
+ completed_orders(store).where(currency: currency).calculate(operation, column) || BigDecimal('0.00')
41
+ end
42
+
43
+ def completed_orders(store)
44
+ orders.for_store(store).complete.order(currency: :desc)
20
45
  end
21
46
  end
22
47
  end