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.
- checksums.yaml +4 -4
- data/app/finders/spree/option_values/find_available.rb +9 -1
- data/app/finders/spree/products/find.rb +27 -3
- data/app/finders/spree/taxons/find.rb +22 -6
- data/app/helpers/spree/base_helper.rb +8 -10
- data/app/helpers/spree/currency_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +1 -15
- data/app/jobs/spree/base_job.rb +4 -0
- data/app/jobs/spree/stock_locations/stock_items/create_job.rb +13 -0
- data/app/models/concerns/spree/default_price.rb +1 -1
- data/app/models/concerns/spree/display_money.rb +8 -2
- data/app/models/concerns/spree/image_methods.rb +24 -0
- data/app/models/concerns/spree/memoized_data.rb +1 -1
- data/app/models/concerns/spree/metadata.rb +10 -0
- data/app/models/concerns/spree/multi_store_resource.rb +1 -1
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/number_identifier.rb +18 -0
- data/app/models/concerns/spree/product_scopes.rb +64 -22
- data/app/models/concerns/spree/single_store_resource.rb +10 -0
- data/app/models/concerns/spree/unique_name.rb +10 -0
- data/app/models/concerns/spree/user_methods.rb +18 -8
- data/app/models/concerns/spree/user_reporting.rb +35 -10
- data/app/models/concerns/spree/user_roles.rb +43 -0
- data/app/models/spree/ability.rb +11 -3
- data/app/models/spree/address.rb +4 -2
- data/app/models/spree/adjustment.rb +1 -0
- data/app/models/spree/app_configuration.rb +21 -24
- data/app/models/spree/asset.rb +1 -0
- data/app/models/spree/base.rb +14 -0
- data/app/models/spree/calculator/flat_rate.rb +1 -1
- data/app/models/spree/calculator/flexi_rate.rb +1 -1
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/calculator/shipping/digital_delivery.rb +22 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
- data/app/models/spree/calculator/shipping/per_item.rb +1 -1
- data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/cms/sections/featured_article.rb +0 -7
- data/app/models/spree/cms/sections/hero_image.rb +0 -9
- data/app/models/spree/cms/sections/image_gallery.rb +2 -2
- data/app/models/spree/cms/sections/side_by_side_images.rb +2 -2
- data/app/models/spree/cms_page.rb +3 -3
- data/app/models/spree/cms_section.rb +13 -1
- data/app/models/spree/country.rb +4 -2
- data/app/models/spree/credit_card.rb +10 -0
- data/app/models/spree/customer_return.rb +3 -1
- data/app/models/spree/digital.rb +15 -0
- data/app/models/spree/digital_link.rb +50 -0
- data/app/models/spree/gateway/bogus.rb +10 -4
- data/app/models/spree/image/configuration/active_storage.rb +2 -19
- data/app/models/spree/image.rb +5 -24
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +11 -3
- data/app/models/spree/option_type.rb +4 -4
- data/app/models/spree/option_value.rb +2 -0
- data/app/models/spree/order/checkout.rb +7 -1
- data/app/models/spree/order/digital.rb +33 -0
- data/app/models/spree/order.rb +34 -22
- data/app/models/spree/order_inventory.rb +1 -1
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/payment/processing.rb +1 -0
- data/app/models/spree/payment.rb +25 -4
- data/app/models/spree/payment_method.rb +15 -1
- data/app/models/spree/preference.rb +2 -1
- data/app/models/spree/preferences/configuration.rb +2 -2
- data/app/models/spree/preferences/store.rb +1 -1
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product.rb +28 -25
- data/app/models/spree/promotion/rules/product.rb +1 -1
- data/app/models/spree/promotion.rb +3 -1
- data/app/models/spree/promotion_action.rb +1 -1
- data/app/models/spree/property.rb +2 -1
- data/app/models/spree/prototype.rb +2 -0
- data/app/models/spree/refund.rb +2 -0
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/return_authorization.rb +3 -2
- data/app/models/spree/return_item.rb +1 -1
- data/app/models/spree/role.rb +2 -2
- data/app/models/spree/shipment.rb +4 -30
- data/app/models/spree/shipping_category.rb +1 -1
- data/app/models/spree/shipping_method.rb +2 -0
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/quantifier.rb +1 -1
- data/app/models/spree/stock/splitter/digital.rb +35 -0
- data/app/models/spree/stock_item.rb +2 -2
- data/app/models/spree/stock_location.rb +15 -28
- data/app/models/spree/stock_movement.rb +3 -0
- data/app/models/spree/stock_transfer.rb +3 -6
- data/app/models/spree/store.rb +43 -10
- data/app/models/spree/store_credit.rb +5 -1
- data/app/models/spree/store_credit_category.rb +2 -0
- data/app/models/spree/store_credit_event.rb +2 -7
- data/app/models/spree/store_credit_type.rb +2 -0
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +3 -1
- data/app/models/spree/taxon.rb +12 -0
- data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -12
- data/app/models/spree/taxon_image.rb +1 -0
- data/app/models/spree/taxonomy.rb +7 -0
- data/app/models/spree/variant.rb +29 -13
- data/app/models/spree/wished_item.rb +29 -0
- data/app/models/spree/wishlist.rb +35 -0
- data/app/models/spree/zone.rb +8 -6
- data/app/presenters/spree/filters/options_presenter.rb +20 -0
- data/app/presenters/spree/filters/property_presenter.rb +20 -0
- data/app/services/spree/account/addresses/create.rb +1 -17
- data/app/services/spree/account/addresses/update.rb +1 -22
- data/app/services/spree/addresses/create.rb +24 -0
- data/app/services/spree/addresses/helper.rb +41 -0
- data/app/services/spree/addresses/update.rb +27 -0
- data/app/services/spree/cart/add_item.rb +4 -2
- data/app/services/spree/cart/associate.rb +16 -0
- data/app/services/spree/cart/change_currency.rb +27 -0
- data/app/services/spree/cart/create.rb +4 -2
- data/app/services/spree/cart/update.rb +2 -2
- data/app/services/spree/checkout/add_store_credit.rb +4 -1
- data/app/services/spree/checkout/select_shipping_method.rb +49 -0
- data/app/services/spree/checkout/update.rb +3 -10
- data/app/services/spree/line_items/create.rb +20 -0
- data/app/services/spree/line_items/destroy.rb +18 -0
- data/app/services/spree/line_items/helper.rb +11 -0
- data/app/services/spree/line_items/update.rb +17 -0
- data/app/services/spree/orders/approve.rb +18 -0
- data/app/services/spree/orders/cancel.rb +18 -0
- data/app/services/spree/payments/create.rb +66 -0
- data/app/services/spree/seeds/all.rb +26 -0
- data/app/services/spree/seeds/countries.rb +50 -0
- data/app/services/spree/seeds/default_reimbursement_types.rb +12 -0
- data/app/services/spree/seeds/roles.rb +11 -0
- data/app/services/spree/seeds/shipping_categories.rb +12 -0
- data/app/services/spree/seeds/states.rb +72 -0
- data/app/services/spree/seeds/stock_locations.rb +18 -0
- data/app/services/spree/seeds/store_credit_categories.rb +12 -0
- data/app/services/spree/seeds/stores.rb +31 -0
- data/app/services/spree/seeds/zones.rb +39 -0
- data/app/services/spree/shipments/add_item.rb +32 -0
- data/app/services/spree/shipments/change_state.rb +14 -0
- data/app/services/spree/shipments/create.rb +48 -0
- data/app/services/spree/shipments/helper.rb +23 -0
- data/app/services/spree/shipments/remove_item.rb +55 -0
- data/app/services/spree/shipments/update.rb +40 -0
- data/app/services/spree/stock_locations/stock_items/create.rb +31 -0
- data/app/services/spree/wallet/create_payment_source.rb +26 -0
- data/app/sorters/spree/base_sorter.rb +23 -11
- data/app/sorters/spree/products/sort.rb +23 -7
- data/app/validators/spree/url_validator.rb +23 -0
- data/brakeman.ignore +20 -0
- data/config/initializers/active_storage.rb +0 -6
- data/config/locales/en.yml +24 -168
- data/db/migrate/20210914000000_spree_four_three.rb +1205 -0
- data/db/migrate/20210915064321_add_metadata_to_spree_orders.rb +13 -0
- data/db/migrate/20210915064322_add_metadata_to_spree_products.rb +13 -0
- data/db/migrate/20210915064323_add_metadata_to_spree_variants.rb +13 -0
- data/db/migrate/20210915064324_add_metadata_to_spree_line_items.rb +13 -0
- data/db/migrate/20210915064325_add_metadata_to_spree_shipments.rb +13 -0
- data/db/migrate/20210915064326_add_metadata_to_spree_payments.rb +13 -0
- data/db/migrate/20210915064327_add_metadata_to_spree_taxons_and_taxonomies.rb +18 -0
- data/db/migrate/20210915064328_add_metadata_to_spree_stock_transfers.rb +13 -0
- data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +30 -0
- data/db/migrate/20210920090344_add_deleted_at_to_spree_stores.rb +8 -0
- data/db/migrate/20210921070812_rename_column_access_hash_to_token.rb +8 -0
- data/db/migrate/20210921070813_create_spree_wishlists.rb +18 -0
- data/db/migrate/20210921070814_create_spree_wished_products.rb +16 -0
- data/db/migrate/20210921070815_rename_spree_wished_products_to_spree_wished_items.rb +5 -0
- data/db/migrate/20210921090344_add_unique_stock_item_stock_location_variant_deleted_at_index.rb +5 -0
- data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +32 -0
- data/db/migrate/20210929091444_create_spree_digital_links.rb +13 -0
- data/db/migrate/20210929093238_create_spree_digitals.rb +9 -0
- data/db/migrate/20210930143043_rename_secret_to_token_on_spree_digital_links.rb +5 -0
- data/db/migrate/20210930155649_add_settings_to_spree_stores.rb +11 -0
- data/db/seeds.rb +1 -5
- data/lib/generators/spree/dummy/dummy_generator.rb +2 -2
- data/lib/generators/spree/dummy/templates/rails/database.yml +20 -18
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/{app/models/spree → lib/spree/core}/app_dependencies.rb +34 -4
- data/lib/spree/core/controller_helpers/auth.rb +4 -4
- data/lib/spree/core/controller_helpers/common.rb +15 -1
- data/lib/spree/core/controller_helpers/currency.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +14 -0
- data/lib/spree/{dependencies_helper.rb → core/dependencies_helper.rb} +0 -0
- data/lib/spree/core/engine.rb +10 -4
- data/lib/spree/core/importer/product.rb +1 -1
- data/lib/spree/core/number_generator.rb +0 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +21 -13
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permitted_attributes.rb +38 -13
- data/lib/spree/testing_support/authorization_helpers.rb +3 -1
- data/lib/spree/testing_support/capybara_config.rb +14 -19
- data/lib/spree/testing_support/capybara_ext.rb +1 -6
- data/lib/spree/testing_support/common_rake.rb +22 -4
- data/lib/spree/testing_support/factories/asset_factory.rb +15 -0
- data/lib/spree/testing_support/factories/cms_section_factory.rb +2 -2
- data/lib/spree/testing_support/factories/digital_factory.rb +10 -0
- data/lib/spree/testing_support/factories/digital_link_factory.rb +6 -0
- data/lib/spree/testing_support/factories/log_entry_factory.rb +6 -0
- data/lib/spree/testing_support/factories/order_factory.rb +4 -1
- data/lib/spree/testing_support/factories/payment_capture_event_factory.rb +6 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/product_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
- data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +7 -0
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -0
- data/lib/spree/testing_support/factories/state_change_factory.rb +8 -0
- data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +9 -0
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -0
- data/lib/spree/testing_support/factories/user_factory.rb +2 -0
- data/lib/spree/testing_support/factories/wished_variant_factory.rb +6 -0
- data/lib/spree/testing_support/factories/wishlist_factory.rb +18 -0
- data/lib/spree/testing_support/jobs.rb +9 -0
- data/lib/spree/testing_support/locale_helpers.rb +1 -1
- data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
- data/lib/tasks/core.rake +4 -4
- data/spree_core.gemspec +3 -2
- metadata +109 -325
- data/app/services/spree/account/addresses/helper.rb +0 -43
- data/app/services/spree/build_localized_redirect_url.rb +0 -101
- data/app/views/spree/shared/_purchased_items_table.text.erb +0 -25
- data/db/default/spree/countries.rb +0 -24
- data/db/default/spree/default_reimbursement_type.rb +0 -1
- data/db/default/spree/roles.rb +0 -2
- data/db/default/spree/states.rb +0 -49
- data/db/default/spree/store_credit_categories.rb +0 -1
- data/db/default/spree/stores.rb +0 -21
- data/db/default/spree/zones.rb +0 -29
- data/db/migrate/20120831092320_spree_one_two.rb +0 -481
- data/db/migrate/20120831092359_spree_promo_one_two.rb +0 -45
- data/db/migrate/20120905145253_add_tax_rate_label.rb +0 -5
- data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +0 -5
- data/db/migrate/20120929093553_remove_unused_preference_columns.rb +0 -8
- data/db/migrate/20121009142519_add_lock_version_to_variant.rb +0 -5
- data/db/migrate/20121010142909_add_states_required_to_countries.rb +0 -5
- data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +0 -6
- data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +0 -11
- data/db/migrate/20121031162139_split_prices_from_variants.rb +0 -31
- data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +0 -9
- data/db/migrate/20121107184631_add_currency_to_line_items.rb +0 -5
- data/db/migrate/20121107194006_add_currency_to_orders.rb +0 -5
- data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +0 -5
- data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +0 -5
- data/db/migrate/20121124203911_add_position_to_taxonomies.rb +0 -5
- data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +0 -5
- data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +0 -6
- data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +0 -9
- data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +0 -6
- data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +0 -5
- data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +0 -9
- data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +0 -5
- data/db/migrate/20130211190146_create_spree_stock_items.rb +0 -14
- data/db/migrate/20130211191120_create_spree_stock_locations.rb +0 -11
- data/db/migrate/20130213191427_create_default_stock.rb +0 -33
- data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +0 -5
- data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +0 -5
- data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +0 -5
- data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +0 -6
- data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +0 -6
- data/db/migrate/20130228210442_create_shipping_method_zone.rb +0 -21
- data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +0 -5
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +0 -13
- data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +0 -5
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +0 -24
- data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +0 -7
- data/db/migrate/20130305143310_create_stock_movements.rb +0 -12
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +0 -22
- data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +0 -5
- data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +0 -5
- data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +0 -5
- data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +0 -8
- data/db/migrate/20130319062004_change_orders_total_precision.rb +0 -8
- data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +0 -7
- data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +0 -7
- data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +0 -7
- data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +0 -7
- data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +0 -15
- data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +0 -9
- data/db/migrate/20130326175857_add_stock_location_to_rma.rb +0 -5
- data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +0 -15
- data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +0 -9
- data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +0 -14
- data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +0 -5
- data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +0 -13
- data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
- data/db/migrate/20130417120035_update_adjustment_states.rb +0 -16
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +0 -15
- data/db/migrate/20130418125341_create_spree_stock_transfers.rb +0 -14
- data/db/migrate/20130423110707_drop_products_count_on_hand.rb +0 -5
- data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +0 -5
- data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +0 -23
- data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +0 -5
- data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +0 -5
- data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +0 -5
- data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
- data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +0 -5
- data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +0 -9
- data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +0 -9
- data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +0 -6
- data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +0 -5
- data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +0 -7
- data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +0 -5
- data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +0 -6
- data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +0 -5
- data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +0 -6
- data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +0 -5
- data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +0 -5
- data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +0 -5
- data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +0 -10
- data/db/migrate/20130806022521_drop_spree_mail_methods.rb +0 -12
- data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +0 -8
- data/db/migrate/20130807024301_upgrade_adjustments.rb +0 -46
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +0 -20
- data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +0 -5
- data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +0 -5
- data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +0 -5
- data/db/migrate/20130813140619_expand_order_number_size.rb +0 -9
- data/db/migrate/20130813232134_rename_activators_to_promotions.rb +0 -5
- data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +0 -5
- data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +0 -5
- data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +0 -16
- data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +0 -8
- data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
- data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +0 -5
- data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
- data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +0 -5
- data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +0 -5
- data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +0 -7
- data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -16
- data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
- data/db/migrate/20131107132123_add_tax_category_to_variants.rb +0 -6
- data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
- data/db/migrate/20131118043959_add_included_to_adjustments.rb +0 -5
- data/db/migrate/20131118050234_rename_tax_total_fields.rb +0 -11
- data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -21
- data/db/migrate/20131120234456_add_updated_at_to_variants.rb +0 -5
- data/db/migrate/20131127001002_add_position_to_classifications.rb +0 -5
- data/db/migrate/20131211112807_create_spree_orders_promotions.rb +0 -8
- data/db/migrate/20131211192741_unique_shipping_method_categories.rb +0 -24
- data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +0 -5
- data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +0 -8
- data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +0 -5
- data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
- data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +0 -6
- data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +0 -5
- data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +0 -6
- data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +0 -5
- data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +0 -5
- data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +0 -12
- data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +0 -5
- data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
- data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +0 -5
- data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +0 -5
- data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +0 -6
- data/db/migrate/20140213184916_add_more_indexes.rb +0 -13
- data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +0 -5
- data/db/migrate/20140227112348_add_preference_store_to_everything.rb +0 -8
- data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +0 -13
- data/db/migrate/20140309023735_migrate_old_preferences.rb +0 -27
- data/db/migrate/20140309024355_create_spree_stores.rb +0 -25
- data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -42
- data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +0 -6
- data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +0 -8
- data/db/migrate/20140331100557_add_additional_store_fields.rb +0 -8
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +0 -18
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +0 -66
- data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
- data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +0 -8
- data/db/migrate/20140518174634_add_token_to_spree_orders.rb +0 -5
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +0 -29
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +0 -10
- data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +0 -6
- data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +0 -6
- data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +0 -5
- data/db/migrate/20140625214618_create_spree_refunds.rb +0 -12
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +0 -12
- data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +0 -5
- data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +0 -10
- data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -55
- data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +0 -7
- data/db/migrate/20140710190048_drop_return_authorization_amount.rb +0 -5
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +0 -28
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +0 -14
- data/db/migrate/20140713142214_rename_return_authorization_reason.rb +0 -5
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +0 -11
- data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +0 -9
- data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +0 -6
- data/db/migrate/20140717155155_create_default_refund_reason.rb +0 -9
- data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +0 -7
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +0 -9
- data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +0 -6
- data/db/migrate/20140718195325_create_friendly_id_slugs.rb +0 -15
- data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +0 -5
- data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +0 -13
- data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +0 -15
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +0 -21
- data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +0 -5
- data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +0 -7
- data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +0 -5
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +0 -20
- data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
- data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +0 -5
- data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +0 -9
- data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +0 -10
- data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +0 -7
- data/db/migrate/20140911173301_add_kind_to_zone.rb +0 -11
- data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +0 -5
- data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +0 -6
- data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +0 -5
- data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +0 -6
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +0 -8
- data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +0 -8
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
- data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -8
- data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
- data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
- data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
- data/db/migrate/20141215232040_remove_token_permissions_table.rb +0 -6
- data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +0 -5
- data/db/migrate/20141217215630_update_product_slug_index.rb +0 -6
- data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +0 -5
- data/db/migrate/20150118210639_create_spree_store_credits.rb +0 -24
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +0 -8
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +0 -17
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +0 -10
- data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +0 -6
- data/db/migrate/20150122145607_add_resellable_to_return_items.rb +0 -5
- data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +0 -5
- data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -8
- data/db/migrate/20150128060325_remove_spree_configurations.rb +0 -16
- data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +0 -13
- data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +0 -13
- data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +0 -67
- data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +0 -18
- data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +0 -14
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
- data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +0 -5
- data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
- data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +0 -16
- data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +0 -19
- data/db/migrate/20150627090949_migrate_payment_methods_display.rb +0 -12
- data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
- data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +0 -12
- data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +0 -18
- data/db/migrate/20150727191614_spree_store_credit_types.rb +0 -11
- data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +0 -68
- data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +0 -13
- data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +0 -16
- data/db/migrate/20160219165458_add_indexes.rb +0 -14
- data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -10
- data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +0 -7
- data/db/migrate/20161014145148_add_created_at_to_variant.rb +0 -8
- data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +0 -6
- data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +0 -5
- data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +0 -29
- data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +0 -16
- data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +0 -16
- data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +0 -16
- data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +0 -17
- data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +0 -16
- data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +0 -16
- data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +0 -16
- data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +0 -37
- data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +0 -5
- data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +0 -19
- data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +0 -19
- data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +0 -5
- data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +0 -20
- data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +0 -5
- data/db/migrate/20170331110454_add_indexes_to_refunds.rb +0 -6
- data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +0 -6
- data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +0 -6
- data/db/migrate/20170331120125_add_indexes_to_return_items.rb +0 -11
- data/db/migrate/20170331121725_add_index_to_role_users.rb +0 -18
- data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +0 -5
- data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +0 -20
- data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +0 -6
- data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +0 -5
- data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +0 -5
- data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +0 -10
- data/db/migrate/20170722102643_add_analytics_kind_to_spree_trackers.rb +0 -5
- data/db/migrate/20170727103056_rename_tracker_kind_field.rb +0 -5
- data/db/migrate/20171004223836_remove_icon_from_taxons.rb +0 -8
- data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +0 -6
- data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +0 -5
- data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +0 -12
- data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +0 -6
- data/db/migrate/20190305121659_add_iso_and_iso3_validation_on_presence_and_uniqueness.rb +0 -18
- data/db/migrate/20190523092729_add_user_id_and_deleted_at_to_spree_addresses.rb +0 -12
- data/db/migrate/20191005121504_add_store_id_to_payment_methods.rb +0 -7
- data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +0 -5
- data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +0 -11
- data/db/migrate/20200102141311_add_social_to_spree_stores.rb +0 -10
- data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +0 -5
- data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +0 -7
- data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +0 -7
- data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +0 -7
- data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +0 -9
- data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +0 -8
- data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +0 -5
- data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +0 -7
- data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +0 -7
- data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +0 -5
- data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +0 -5
- data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +0 -12
- data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +0 -10
- data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +0 -5
- data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +0 -8
- data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +0 -5
- data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +0 -5
- data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +0 -10
- data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +0 -15
- data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +0 -5
- data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +0 -5
- data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +0 -11
- data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +0 -22
- data/db/migrate/20210407200948_create_spree_menus.rb +0 -16
- data/db/migrate/20210408092939_create_spree_menu_items.rb +0 -31
- data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +0 -8
- data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +0 -8
- data/db/migrate/20210512191732_create_spree_cms_pages.rb +0 -24
- data/db/migrate/20210514204251_create_spree_cms_sections.rb +0 -22
- data/db/migrate/20210527094055_create_spree_products_stores.rb +0 -29
- data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +0 -5
- data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +0 -46
- data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +0 -29
- data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +0 -10
- data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +0 -11
- data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
- data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
- data/db/migrate/20210721125657_create_spree_promotions_stores.rb +0 -29
- data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +0 -11
- data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +0 -305
- data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +0 -9
data/app/models/spree/product.rb
CHANGED
|
@@ -24,6 +24,7 @@ module Spree
|
|
|
24
24
|
include ProductScopes
|
|
25
25
|
include MultiStoreResource
|
|
26
26
|
include MemoizedData
|
|
27
|
+
include Metadata
|
|
27
28
|
|
|
28
29
|
MEMOIZED_METHODS = %w(total_on_hand taxonomy_ids taxon_and_ancestors category
|
|
29
30
|
default_variant_id tax_category default_variant
|
|
@@ -87,6 +88,7 @@ module Spree
|
|
|
87
88
|
|
|
88
89
|
has_many :store_products, class_name: 'Spree::StoreProduct'
|
|
89
90
|
has_many :stores, through: :store_products, class_name: 'Spree::Store'
|
|
91
|
+
has_many :digitals, through: :variants_including_master
|
|
90
92
|
|
|
91
93
|
after_create :add_associations_from_prototype
|
|
92
94
|
after_create :build_variants_from_option_values_hash, if: :option_values_hash
|
|
@@ -115,9 +117,11 @@ module Spree
|
|
|
115
117
|
validates :price, if: :requires_price?
|
|
116
118
|
end
|
|
117
119
|
|
|
118
|
-
validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
|
|
120
|
+
validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true, scope: spree_base_uniqueness_scope }
|
|
119
121
|
validate :discontinue_on_must_be_later_than_available_on, if: -> { available_on && discontinue_on }
|
|
120
122
|
|
|
123
|
+
scope :for_store, ->(store) { joins(:store_products).where(StoreProduct.table_name => { store_id: store.id }) }
|
|
124
|
+
|
|
121
125
|
attr_accessor :option_values_hash
|
|
122
126
|
|
|
123
127
|
accepts_nested_attributes_for :product_properties, allow_destroy: true, reject_if: ->(pp) { pp[:property_name].blank? }
|
|
@@ -126,7 +130,7 @@ module Spree
|
|
|
126
130
|
|
|
127
131
|
self.whitelisted_ransackable_associations = %w[taxons stores variants_including_master master variants]
|
|
128
132
|
self.whitelisted_ransackable_attributes = %w[description name slug discontinue_on]
|
|
129
|
-
self.whitelisted_ransackable_scopes = %w[not_discontinued search_by_name]
|
|
133
|
+
self.whitelisted_ransackable_scopes = %w[not_discontinued search_by_name in_taxon price_between]
|
|
130
134
|
|
|
131
135
|
[
|
|
132
136
|
:sku, :price, :currency, :weight, :height, :width, :depth, :is_master,
|
|
@@ -140,19 +144,19 @@ module Spree
|
|
|
140
144
|
|
|
141
145
|
alias master_images images
|
|
142
146
|
|
|
143
|
-
#
|
|
147
|
+
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
144
148
|
def purchasable?
|
|
145
|
-
|
|
149
|
+
default_variant.purchasable? || variants.any?(&:purchasable?)
|
|
146
150
|
end
|
|
147
151
|
|
|
148
|
-
#
|
|
152
|
+
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
149
153
|
def in_stock?
|
|
150
|
-
|
|
154
|
+
default_variant.in_stock? || variants.any?(&:in_stock?)
|
|
151
155
|
end
|
|
152
156
|
|
|
153
|
-
#
|
|
157
|
+
# Can't use short form block syntax due to https://github.com/Netflix/fast_jsonapi/issues/259
|
|
154
158
|
def backorderable?
|
|
155
|
-
|
|
159
|
+
default_variant.backorderable? || variants.any?(&:backorderable?)
|
|
156
160
|
end
|
|
157
161
|
|
|
158
162
|
def find_or_build_master
|
|
@@ -193,10 +197,7 @@ module Spree
|
|
|
193
197
|
end
|
|
194
198
|
|
|
195
199
|
# Adding properties and option types on creation based on a chosen prototype
|
|
196
|
-
|
|
197
|
-
def prototype_id=(value)
|
|
198
|
-
@prototype_id = value.to_i
|
|
199
|
-
end
|
|
200
|
+
attr_accessor :prototype_id
|
|
200
201
|
|
|
201
202
|
# Ensures option_types and product_option_types exist for keys in option_values_hash
|
|
202
203
|
def ensure_option_types_exist_for_values_hash
|
|
@@ -263,14 +264,6 @@ module Spree
|
|
|
263
264
|
where conditions.inject(:or)
|
|
264
265
|
end
|
|
265
266
|
|
|
266
|
-
def self.search_by_name(query)
|
|
267
|
-
if defined?(SpreeGlobalize)
|
|
268
|
-
joins(:translations).order(:name).where("LOWER(#{Product::Translation.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%").distinct
|
|
269
|
-
else
|
|
270
|
-
where("LOWER(#{Product.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%")
|
|
271
|
-
end
|
|
272
|
-
end
|
|
273
|
-
|
|
274
267
|
# Suitable for displaying only variants that has at least one option value.
|
|
275
268
|
# There may be scenarios where an option type is removed and along with it
|
|
276
269
|
# all option values. At that point all variants associated with only those
|
|
@@ -301,11 +294,13 @@ module Spree
|
|
|
301
294
|
end
|
|
302
295
|
|
|
303
296
|
def total_on_hand
|
|
304
|
-
@total_on_hand ||=
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
297
|
+
@total_on_hand ||= Rails.cache.fetch(['product-total-on-hand', cache_key_with_version]) do
|
|
298
|
+
if any_variants_not_track_inventory?
|
|
299
|
+
Float::INFINITY
|
|
300
|
+
else
|
|
301
|
+
stock_items.sum(:count_on_hand)
|
|
302
|
+
end
|
|
303
|
+
end
|
|
309
304
|
end
|
|
310
305
|
|
|
311
306
|
# Master variant may be deleted (i.e. when the product is deleted)
|
|
@@ -329,6 +324,14 @@ module Spree
|
|
|
329
324
|
end
|
|
330
325
|
end
|
|
331
326
|
|
|
327
|
+
def any_variant_in_stock_or_backorderable?
|
|
328
|
+
if variants.any?
|
|
329
|
+
variants_including_master.in_stock_or_backorderable.exists?
|
|
330
|
+
else
|
|
331
|
+
master.in_stock_or_backorderable?
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
332
335
|
private
|
|
333
336
|
|
|
334
337
|
def add_associations_from_prototype
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# A rule to limit a promotion based on products in the order.
|
|
2
2
|
# Can require all or any of the products to be present.
|
|
3
|
-
# Valid products either come from assigned product group or are
|
|
3
|
+
# Valid products either come from assigned product group or are assigned directly to the rule.
|
|
4
4
|
module Spree
|
|
5
5
|
class Promotion
|
|
6
6
|
module Rules
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Promotion < Spree::Base
|
|
3
3
|
include MultiStoreResource
|
|
4
|
+
include Metadata
|
|
4
5
|
|
|
5
6
|
MATCH_POLICIES = %w(all any)
|
|
6
7
|
UNACTIVATABLE_ORDER_STATES = ['complete', 'awaiting_return', 'returned']
|
|
@@ -18,7 +19,8 @@ module Spree
|
|
|
18
19
|
has_many :order_promotions, class_name: 'Spree::OrderPromotion'
|
|
19
20
|
has_many :orders, through: :order_promotions, class_name: 'Spree::Order'
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
has_many :store_promotions, class_name: 'Spree::StorePromotion'
|
|
23
|
+
has_many :stores, class_name: 'Spree::Store', through: :store_promotions
|
|
22
24
|
|
|
23
25
|
accepts_nested_attributes_for :promotion_actions, :promotion_rules
|
|
24
26
|
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
|
|
9
9
|
scope :of_type, ->(t) { where(type: t) }
|
|
10
10
|
|
|
11
|
-
# This method should be
|
|
11
|
+
# This method should be overridden in subclass
|
|
12
12
|
# Updates the state of the order or performs some other action depending on the subclass
|
|
13
13
|
# options will contain the payload from the event that activated the promotion. This will include
|
|
14
14
|
# the key :user which allows user based actions to be performed in addition to actions on the order
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Property < Spree::Base
|
|
3
3
|
include Spree::FilterParam
|
|
4
|
+
include Metadata
|
|
4
5
|
|
|
5
6
|
auto_strip_attributes :name, :presentation
|
|
6
7
|
|
|
@@ -18,7 +19,7 @@ module Spree
|
|
|
18
19
|
after_touch :touch_all_products
|
|
19
20
|
after_save :ensure_product_properties_have_filter_params
|
|
20
21
|
|
|
21
|
-
self.whitelisted_ransackable_attributes = ['presentation']
|
|
22
|
+
self.whitelisted_ransackable_attributes = ['presentation', 'filterable']
|
|
22
23
|
|
|
23
24
|
def uniq_values(product_properties_scope: nil)
|
|
24
25
|
with_uniq_values_cache_key(product_properties_scope) do
|
data/app/models/spree/refund.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Reimbursement < Spree::Base
|
|
3
3
|
include Spree::Core::NumberGenerator.new(prefix: 'RI', length: 9)
|
|
4
|
+
include NumberIdentifier
|
|
4
5
|
|
|
5
6
|
class IncompleteReimbursementError < StandardError; end
|
|
6
7
|
|
|
@@ -15,7 +16,6 @@ module Spree
|
|
|
15
16
|
has_many :return_items
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
validates :number, uniqueness: true
|
|
19
19
|
validates :order, presence: true
|
|
20
20
|
validate :validate_return_items_belong_to_same_order
|
|
21
21
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ReturnAuthorization < Spree::Base
|
|
3
3
|
include Spree::Core::NumberGenerator.new(prefix: 'RA', length: 9)
|
|
4
|
+
include NumberIdentifier
|
|
4
5
|
|
|
5
6
|
belongs_to :order, class_name: 'Spree::Order', inverse_of: :return_authorizations
|
|
6
7
|
|
|
@@ -17,7 +18,6 @@ module Spree
|
|
|
17
18
|
|
|
18
19
|
accepts_nested_attributes_for :return_items, allow_destroy: true
|
|
19
20
|
|
|
20
|
-
validates :number, uniqueness: true
|
|
21
21
|
validates :order, :reason, :stock_location, presence: true
|
|
22
22
|
validate :must_have_shipped_units, on: :create
|
|
23
23
|
|
|
@@ -44,7 +44,8 @@ module Spree
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def currency
|
|
47
|
-
|
|
47
|
+
# FIXME: we should associate ReturnAuthorization with Store
|
|
48
|
+
order.nil? ? Spree::Store.default.default_currency : order.currency
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def refundable_amount
|
data/app/models/spree/role.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Role < Spree::Base
|
|
3
|
+
include UniqueName
|
|
4
|
+
|
|
3
5
|
has_many :role_users, class_name: 'Spree::RoleUser', dependent: :destroy
|
|
4
6
|
has_many :users, through: :role_users, class_name: Spree.user_class.to_s
|
|
5
|
-
|
|
6
|
-
validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -3,8 +3,9 @@ require 'ostruct'
|
|
|
3
3
|
module Spree
|
|
4
4
|
class Shipment < Spree::Base
|
|
5
5
|
include Spree::Core::NumberGenerator.new(prefix: 'H', length: 11)
|
|
6
|
-
|
|
6
|
+
include NumberIdentifier
|
|
7
7
|
include NumberAsParam
|
|
8
|
+
include Metadata
|
|
8
9
|
|
|
9
10
|
with_options inverse_of: :shipments do
|
|
10
11
|
belongs_to :address, class_name: 'Spree::Address'
|
|
@@ -26,7 +27,6 @@ module Spree
|
|
|
26
27
|
before_validation :set_cost_zero_when_nil
|
|
27
28
|
|
|
28
29
|
validates :stock_location, presence: true
|
|
29
|
-
validates :number, uniqueness: { case_sensitive: true }
|
|
30
30
|
|
|
31
31
|
attr_accessor :special_instructions
|
|
32
32
|
|
|
@@ -216,7 +216,7 @@ module Spree
|
|
|
216
216
|
return shipping_rates if shipped?
|
|
217
217
|
return [] unless can_get_rates?
|
|
218
218
|
|
|
219
|
-
# StockEstimator.new
|
|
219
|
+
# StockEstimator.new assignment below will replace the current shipping_method
|
|
220
220
|
original_shipping_method_id = shipping_method.try(:id)
|
|
221
221
|
|
|
222
222
|
self.shipping_rates = Stock::Estimator.new(order).
|
|
@@ -303,34 +303,8 @@ module Spree
|
|
|
303
303
|
end
|
|
304
304
|
end
|
|
305
305
|
|
|
306
|
-
# Update Shipment and make sure Order states follow the shipment changes
|
|
307
306
|
def update_attributes_and_order(params = {})
|
|
308
|
-
|
|
309
|
-
if params.key? :selected_shipping_rate_id
|
|
310
|
-
# Changing the selected Shipping Rate won't update the cost (for now)
|
|
311
|
-
# so we persist the Shipment#cost before calculating order shipment
|
|
312
|
-
# total and updating payment state (given a change in shipment cost
|
|
313
|
-
# might change the Order#payment_state)
|
|
314
|
-
update_amounts
|
|
315
|
-
|
|
316
|
-
order.updater.update_shipment_total
|
|
317
|
-
order.updater.update_payment_state
|
|
318
|
-
|
|
319
|
-
# Update shipment state only after order total is updated because it
|
|
320
|
-
# (via Order#paid?) affects the shipment state (YAY)
|
|
321
|
-
update_columns(
|
|
322
|
-
state: determine_state(order),
|
|
323
|
-
updated_at: Time.current
|
|
324
|
-
)
|
|
325
|
-
|
|
326
|
-
# And then it's time to update shipment states and finally persist
|
|
327
|
-
# order changes
|
|
328
|
-
order.updater.update_shipment_state
|
|
329
|
-
order.updater.persist_totals
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
true
|
|
333
|
-
end
|
|
307
|
+
Shipments::Update.call(shipment: self, shipment_attributes: params).success?
|
|
334
308
|
end
|
|
335
309
|
|
|
336
310
|
# Updates various aspects of the Shipment while bypassing any callbacks. Note that this method takes an explicit reference to the
|
data/app/models/spree/state.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Spree
|
|
|
14
14
|
validates :country, :name, presence: true
|
|
15
15
|
validates :name, :abbr, uniqueness: { case_sensitive: false, scope: :country_id }, allow_blank: true
|
|
16
16
|
|
|
17
|
-
self.whitelisted_ransackable_attributes = %w(abbr)
|
|
17
|
+
self.whitelisted_ransackable_attributes = %w(abbr country_id name)
|
|
18
18
|
|
|
19
19
|
def self.find_all_by_name_or_abbr(name_or_abbr)
|
|
20
20
|
where('name = ? OR abbr = ?', name_or_abbr, name_or_abbr)
|
|
@@ -31,7 +31,7 @@ module Spree
|
|
|
31
31
|
private
|
|
32
32
|
|
|
33
33
|
def scope_to_location(collection)
|
|
34
|
-
return collection.with_active_stock_location
|
|
34
|
+
return collection.with_active_stock_location if stock_location.blank?
|
|
35
35
|
|
|
36
36
|
collection.where(stock_location: stock_location)
|
|
37
37
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Stock
|
|
3
|
+
module Splitter
|
|
4
|
+
class Digital < Spree::Stock::Splitter::Base
|
|
5
|
+
def split(packages)
|
|
6
|
+
split_packages = []
|
|
7
|
+
packages.each do |package|
|
|
8
|
+
split_packages += split_by_digital(package)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
return_next(split_packages)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def split_by_digital(package)
|
|
17
|
+
digitals = Hash.new { |hash, key| hash[key] = [] }
|
|
18
|
+
package.contents.each do |item|
|
|
19
|
+
digitals[item.variant.digital?] << item
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
hash_to_packages(digitals)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def hash_to_packages(digitals)
|
|
26
|
+
packages = []
|
|
27
|
+
digitals.each do |_id, contents|
|
|
28
|
+
packages << build_package(contents)
|
|
29
|
+
end
|
|
30
|
+
packages
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -26,7 +26,7 @@ module Spree
|
|
|
26
26
|
after_destroy { variant.touch }
|
|
27
27
|
|
|
28
28
|
self.whitelisted_ransackable_attributes = %w[count_on_hand stock_location_id variant_id]
|
|
29
|
-
self.whitelisted_ransackable_associations = [
|
|
29
|
+
self.whitelisted_ransackable_associations = %w[variant stock_location]
|
|
30
30
|
|
|
31
31
|
scope :with_active_stock_location, -> { joins(:stock_location).merge(Spree::StockLocation.active) }
|
|
32
32
|
|
|
@@ -79,7 +79,7 @@ module Spree
|
|
|
79
79
|
|
|
80
80
|
if unit.quantity > number
|
|
81
81
|
# if required quantity is greater than available
|
|
82
|
-
# split off and
|
|
82
|
+
# split off and fulfill that
|
|
83
83
|
split = unit.split_inventory!(number)
|
|
84
84
|
split.fill_backorder
|
|
85
85
|
else
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class StockLocation < Spree::Base
|
|
3
|
+
include UniqueName
|
|
4
|
+
|
|
3
5
|
has_many :shipments
|
|
4
6
|
has_many :stock_items, dependent: :delete_all, inverse_of: :stock_location
|
|
7
|
+
has_many :variants, through: :stock_items
|
|
5
8
|
has_many :stock_movements, through: :stock_items
|
|
6
9
|
|
|
7
10
|
belongs_to :state, class_name: 'Spree::State', optional: true
|
|
8
11
|
belongs_to :country, class_name: 'Spree::Country'
|
|
9
12
|
|
|
10
|
-
validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: false }
|
|
11
|
-
|
|
12
13
|
scope :active, -> { where(active: true) }
|
|
13
14
|
scope :order_default, -> { order(default: :desc, name: :asc) }
|
|
14
15
|
|
|
15
16
|
after_create :create_stock_items, if: :propagate_all_variants?
|
|
16
17
|
after_save :ensure_one_default
|
|
18
|
+
after_update :conditional_touch_records
|
|
17
19
|
|
|
18
20
|
def state_text
|
|
19
21
|
state.try(:abbr) || state.try(:name) || state_name
|
|
@@ -45,15 +47,13 @@ module Spree
|
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
# Attempts to look up StockItem for the variant, and creates one if not found.
|
|
48
|
-
# This method accepts an instance of the variant.
|
|
49
|
-
# Other methods in this model attempt to pass a variant,
|
|
50
|
-
# but controller actions can pass just the variant id as a parameter.
|
|
51
50
|
#
|
|
52
|
-
# @param variant
|
|
51
|
+
# @param variant Variant instance or Variant ID
|
|
53
52
|
#
|
|
54
53
|
# @return [StockItem] Corresponding StockItem for the StockLocation's variant.
|
|
55
54
|
def stock_item_or_create(variant)
|
|
56
|
-
|
|
55
|
+
variant_id = variant.is_a?(Spree::Variant) ? variant.id : variant
|
|
56
|
+
stock_item(variant_id) || stock_items.create(variant_id: variant_id)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def count_on_hand(variant)
|
|
@@ -106,27 +106,7 @@ module Spree
|
|
|
106
106
|
private
|
|
107
107
|
|
|
108
108
|
def create_stock_items
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if self.class.method_defined?(:insert_all) && self.class.method_defined?(:touch_all)
|
|
112
|
-
prepared_stock_items = variants_scope.ids.map do |variant_id|
|
|
113
|
-
Hash[
|
|
114
|
-
'stock_location_id', id,
|
|
115
|
-
'variant_id', variant_id,
|
|
116
|
-
'backorderable', backorderable_default,
|
|
117
|
-
'created_at', Time.current,
|
|
118
|
-
'updated_at', Time.current
|
|
119
|
-
]
|
|
120
|
-
end
|
|
121
|
-
if prepared_stock_items.any?
|
|
122
|
-
stock_items.insert_all(prepared_stock_items)
|
|
123
|
-
variants_scope.touch_all
|
|
124
|
-
end
|
|
125
|
-
else
|
|
126
|
-
variants_scope.find_each do |variant|
|
|
127
|
-
propagate_variant(variant)
|
|
128
|
-
end
|
|
129
|
-
end
|
|
109
|
+
Spree::StockLocations::StockItems::CreateJob.perform_later(self)
|
|
130
110
|
end
|
|
131
111
|
|
|
132
112
|
def ensure_one_default
|
|
@@ -134,5 +114,12 @@ module Spree
|
|
|
134
114
|
StockLocation.where(default: true).where.not(id: id).update_all(default: false)
|
|
135
115
|
end
|
|
136
116
|
end
|
|
117
|
+
|
|
118
|
+
def conditional_touch_records
|
|
119
|
+
return unless active_changed?
|
|
120
|
+
|
|
121
|
+
stock_items.update_all(updated_at: Time.current)
|
|
122
|
+
variants.update_all(updated_at: Time.current)
|
|
123
|
+
end
|
|
137
124
|
end
|
|
138
125
|
end
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class StockTransfer < Spree::Base
|
|
3
3
|
include Spree::Core::NumberGenerator.new(prefix: 'T')
|
|
4
|
+
include NumberIdentifier
|
|
5
|
+
include NumberAsParam
|
|
6
|
+
include Metadata
|
|
4
7
|
|
|
5
8
|
has_many :stock_movements, as: :originator
|
|
6
9
|
|
|
7
10
|
belongs_to :source_location, class_name: 'StockLocation', optional: true
|
|
8
11
|
belongs_to :destination_location, class_name: 'StockLocation'
|
|
9
12
|
|
|
10
|
-
validates :number, uniqueness: true
|
|
11
|
-
|
|
12
13
|
self.whitelisted_ransackable_attributes = %w[reference source_location_id destination_location_id number]
|
|
13
14
|
|
|
14
|
-
def to_param
|
|
15
|
-
number
|
|
16
|
-
end
|
|
17
|
-
|
|
18
15
|
def source_movements
|
|
19
16
|
find_stock_location_with_location_id(source_location_id)
|
|
20
17
|
end
|
data/app/models/spree/store.rb
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Store < Spree::Base
|
|
3
|
+
typed_store :settings, coder: ActiveRecord::TypedStore::IdentityCoder do |s|
|
|
4
|
+
# Spree Digital Asset Configurations
|
|
5
|
+
s.boolean :limit_digital_download_count, default: true, null: false
|
|
6
|
+
s.boolean :limit_digital_download_days, default: true, null: false
|
|
7
|
+
s.integer :digital_asset_authorized_clicks, default: 5, null: false # number of times a customer can download a digital file.
|
|
8
|
+
s.integer :digital_asset_authorized_days, default: 7, null: false # number of days after initial purchase the customer can download a file.
|
|
9
|
+
s.integer :digital_asset_link_expire_time, default: 300, null: false # 5 minutes in seconds
|
|
10
|
+
end
|
|
11
|
+
|
|
3
12
|
MAILER_LOGO_CONTENT_TYPES = ['image/png', 'image/jpg', 'image/jpeg'].freeze
|
|
4
13
|
FAVICON_CONTENT_TYPES = ['image/png', 'image/x-icon', 'image/vnd.microsoft.icon'].freeze
|
|
5
14
|
|
|
15
|
+
acts_as_paranoid
|
|
16
|
+
|
|
6
17
|
has_many :orders, class_name: 'Spree::Order'
|
|
7
18
|
has_many :line_items, through: :orders, class_name: 'Spree::LineItem'
|
|
8
19
|
has_many :shipments, through: :orders, class_name: 'Spree::Shipment'
|
|
@@ -19,7 +30,7 @@ module Spree
|
|
|
19
30
|
has_many :menus, class_name: 'Spree::Menu'
|
|
20
31
|
has_many :menu_items, through: :menus, class_name: 'Spree::MenuItem'
|
|
21
32
|
|
|
22
|
-
has_many :store_products, class_name: 'Spree::StoreProduct'
|
|
33
|
+
has_many :store_products, class_name: 'Spree::StoreProduct'
|
|
23
34
|
has_many :products, through: :store_products, class_name: 'Spree::Product'
|
|
24
35
|
has_many :product_properties, through: :products, class_name: 'Spree::ProductProperty'
|
|
25
36
|
has_many :variants, through: :products, class_name: 'Spree::Variant', source: :variants_including_master
|
|
@@ -36,6 +47,8 @@ module Spree
|
|
|
36
47
|
has_many :store_promotions, class_name: 'Spree::StorePromotion'
|
|
37
48
|
has_many :promotions, through: :store_promotions, class_name: 'Spree::Promotion'
|
|
38
49
|
|
|
50
|
+
has_many :wishlists, class_name: 'Spree::Wishlist'
|
|
51
|
+
|
|
39
52
|
belongs_to :default_country, class_name: 'Spree::Country'
|
|
40
53
|
belongs_to :checkout_zone, class_name: 'Spree::Zone'
|
|
41
54
|
|
|
@@ -43,8 +56,12 @@ module Spree
|
|
|
43
56
|
validates :name, :url, :mail_from_address, :default_currency, :code
|
|
44
57
|
end
|
|
45
58
|
|
|
46
|
-
validates :
|
|
59
|
+
validates :digital_asset_authorized_clicks, numericality: { only_integer: true, greater_than: 0 }
|
|
60
|
+
validates :digital_asset_authorized_days, numericality: { only_integer: true, greater_than: 0 }
|
|
61
|
+
validates :code, uniqueness: { conditions: -> { with_deleted } }
|
|
62
|
+
validates :mail_from_address, email: { allow_blank: false }
|
|
47
63
|
|
|
64
|
+
# FIXME: we should remove this condition in v5
|
|
48
65
|
if !ENV['SPREE_DISABLE_DB_CONNECTION'] &&
|
|
49
66
|
connected? &&
|
|
50
67
|
table_exists? &&
|
|
@@ -66,7 +83,8 @@ module Spree
|
|
|
66
83
|
|
|
67
84
|
before_save :ensure_default_exists_and_is_unique
|
|
68
85
|
before_save :ensure_supported_currencies, :ensure_supported_locales, :ensure_default_country
|
|
69
|
-
before_destroy :
|
|
86
|
+
before_destroy :validate_not_last
|
|
87
|
+
before_destroy :pass_default_flag_to_other_store
|
|
70
88
|
|
|
71
89
|
scope :by_url, ->(url) { where('url like ?', "%#{url}%") }
|
|
72
90
|
|
|
@@ -76,12 +94,14 @@ module Spree
|
|
|
76
94
|
|
|
77
95
|
def self.current(url = nil)
|
|
78
96
|
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
|
79
|
-
`Spree::Store.current` is deprecated and will be removed in Spree 5
|
|
80
|
-
Spree::Stores::FindCurrent.new(url: "
|
|
97
|
+
`Spree::Store.current` is deprecated and will be removed in Spree 5.0
|
|
98
|
+
Please use `Spree::Stores::FindCurrent.new(url: "https://example.com").execute` instead
|
|
81
99
|
DEPRECATION
|
|
82
100
|
Stores::FindCurrent.new(url: url).execute
|
|
83
101
|
end
|
|
84
102
|
|
|
103
|
+
# FIXME: we need to drop `or_initialize` in v5
|
|
104
|
+
# this behaviour is very buggy and unpredictable
|
|
85
105
|
def self.default
|
|
86
106
|
Rails.cache.fetch('default_store') do
|
|
87
107
|
where(default: true).first_or_initialize
|
|
@@ -142,14 +162,16 @@ module Spree
|
|
|
142
162
|
end
|
|
143
163
|
|
|
144
164
|
def countries_available_for_checkout
|
|
145
|
-
@countries_available_for_checkout ||=
|
|
165
|
+
@countries_available_for_checkout ||= checkout_zone.try(:country_list) || Spree::Country.all
|
|
146
166
|
end
|
|
147
167
|
|
|
148
168
|
def states_available_for_checkout(country)
|
|
149
|
-
|
|
169
|
+
checkout_zone.try(:state_list_for, country) || country.states
|
|
150
170
|
end
|
|
151
171
|
|
|
152
172
|
def checkout_zone_or_default
|
|
173
|
+
ActiveSupport::Deprecation.warn('Store#checkout_zone_or_default is deprecated and will be removed in Spree 5')
|
|
174
|
+
|
|
153
175
|
@checkout_zone_or_default ||= checkout_zone || Spree::Zone.default_checkout_zone
|
|
154
176
|
end
|
|
155
177
|
|
|
@@ -159,6 +181,10 @@ module Spree
|
|
|
159
181
|
favicon_image.variant(resize: '32x32')
|
|
160
182
|
end
|
|
161
183
|
|
|
184
|
+
def can_be_deleted?
|
|
185
|
+
self.class.where.not(id: id).any?
|
|
186
|
+
end
|
|
187
|
+
|
|
162
188
|
private
|
|
163
189
|
|
|
164
190
|
def ensure_default_exists_and_is_unique
|
|
@@ -185,13 +211,20 @@ module Spree
|
|
|
185
211
|
self.supported_currencies = default_currency
|
|
186
212
|
end
|
|
187
213
|
|
|
188
|
-
def
|
|
189
|
-
|
|
190
|
-
errors.add(:base, :
|
|
214
|
+
def validate_not_last
|
|
215
|
+
unless can_be_deleted?
|
|
216
|
+
errors.add(:base, :cannot_destroy_only_store)
|
|
191
217
|
throw(:abort)
|
|
192
218
|
end
|
|
193
219
|
end
|
|
194
220
|
|
|
221
|
+
def pass_default_flag_to_other_store
|
|
222
|
+
if default? && can_be_deleted?
|
|
223
|
+
self.class.where.not(id: id).first.update!(default: true)
|
|
224
|
+
self.default = false
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
195
228
|
def clear_cache
|
|
196
229
|
Rails.cache.delete('default_store')
|
|
197
230
|
Rails.cache.delete('stores_available_locales')
|