spree_core 5.6.1 → 6.0.0.beta2
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/LICENSE +30 -0
- data/README.md +2 -3
- data/app/finders/spree/line_items/find_by_variant.rb +5 -3
- data/app/finders/spree/sellers/panel_url.rb +47 -0
- data/app/finders/spree/stores/dashboard_url.rb +76 -0
- data/app/helpers/spree/images_helper.rb +1 -1
- data/app/jobs/spree/carts/reap_expired_job.rb +43 -0
- data/app/jobs/spree/collections/regenerate_time_based_job.rb +18 -0
- data/app/jobs/spree/data_requests/process_job.rb +42 -0
- data/app/jobs/spree/events/subscriber_job.rb +1 -1
- data/app/jobs/spree/images/migrate_product_media_job.rb +80 -0
- data/app/jobs/spree/images/save_from_url_job.rb +70 -13
- data/app/jobs/spree/imports/create_categories_job.rb +23 -14
- data/app/jobs/spree/imports/create_rows_job.rb +3 -62
- data/app/jobs/spree/imports/process_group_job.rb +1 -1
- data/app/jobs/spree/imports/process_job.rb +164 -0
- data/app/jobs/spree/imports/process_rows_job.rb +4 -71
- data/app/jobs/spree/orders/finalize_stale_drafts_job.rb +29 -0
- data/app/jobs/spree/payments/handle_webhook_job.rb +1 -1
- data/app/jobs/spree/price_lists/sync_currencies_job.rb +42 -0
- data/app/jobs/spree/product_types/apply_to_products_job.rb +74 -0
- data/app/jobs/spree/products/auto_match_collections_job.rb +14 -0
- data/app/jobs/spree/products/auto_match_taxons_job.rb +6 -7
- data/app/jobs/spree/products/refresh_metrics_job.rb +1 -1
- data/app/jobs/spree/products/touch_categories_job.rb +15 -0
- data/app/jobs/spree/products/touch_taxons_job.rb +7 -6
- data/app/jobs/spree/sample_data/load_job.rb +13 -0
- data/app/jobs/spree/seller_payouts/sweep_due_job.rb +57 -0
- data/app/jobs/spree/seller_payouts/sweep_seller_job.rb +70 -0
- data/app/jobs/spree/seller_transfers/execute_pending_due_job.rb +56 -0
- data/app/jobs/spree/seller_transfers/execute_pending_job.rb +52 -0
- data/app/jobs/spree/shipping_labels/store_file_job.rb +17 -0
- data/app/jobs/spree/stock_locations/stock_items/create_job.rb +7 -5
- data/app/jobs/spree/stock_locations/stock_levels/create_job.rb +13 -0
- data/app/jobs/spree/stock_reservations/expire_job.rb +1 -1
- data/app/jobs/spree/tax_identifiers/validate_job.rb +14 -0
- data/app/jobs/spree/variants/remove_line_item_job.rb +29 -1
- data/app/mailers/spree/admin_user_mailer.rb +6 -35
- data/app/mailers/spree/base_mailer.rb +1 -20
- data/app/mailers/spree/invitation_mailer.rb +1 -1
- data/app/mailers/spree/seller_user_mailer.rb +47 -0
- data/app/models/concerns/spree/account_lockout.rb +38 -0
- data/app/models/concerns/spree/acted_by.rb +210 -0
- data/app/models/concerns/spree/actor.rb +51 -0
- data/app/models/concerns/spree/admin_user_methods.rb +53 -42
- data/app/models/concerns/spree/calculated_adjustments.rb +8 -14
- data/app/models/concerns/spree/calculator/currency_amounts.rb +43 -0
- data/app/models/concerns/spree/capture_method.rb +33 -0
- data/app/models/concerns/spree/custom_field_filterable.rb +163 -0
- data/app/models/concerns/spree/customer_methods.rb +421 -0
- data/app/models/concerns/spree/deprecated_customer_alias.rb +22 -0
- data/app/models/concerns/spree/derived_number.rb +66 -0
- data/app/models/concerns/spree/has_address_book.rb +89 -0
- data/app/models/concerns/spree/has_custom_fields.rb +360 -0
- data/app/models/concerns/spree/has_external_references.rb +95 -0
- data/app/models/concerns/spree/has_iso_geography.rb +71 -0
- data/app/models/concerns/spree/has_library_media.rb +94 -0
- data/app/models/concerns/spree/has_list_position.rb +15 -0
- data/app/models/concerns/spree/has_number.rb +139 -0
- data/app/models/concerns/spree/has_status.rb +76 -0
- data/app/models/concerns/spree/has_tracking_carrier.rb +18 -0
- data/app/models/concerns/spree/instruments_gateway_calls.rb +20 -0
- data/app/models/concerns/spree/integration_backed_provider.rb +89 -0
- data/app/models/concerns/spree/integrations_concern.rb +15 -2
- data/app/models/concerns/spree/label_translatable.rb +37 -0
- data/app/models/concerns/spree/marketplace/order_group.rb +35 -0
- data/app/models/concerns/spree/metadata.rb +18 -22
- data/app/models/concerns/spree/named_type.rb +11 -1
- data/app/models/concerns/spree/parameterizable_name.rb +5 -5
- data/app/models/concerns/spree/password_policy.rb +37 -0
- data/app/models/concerns/spree/payment_session_transitions.rb +93 -0
- data/app/models/concerns/spree/payment_source_concern.rb +1 -1
- data/app/models/concerns/spree/personal_data_matching.rb +120 -0
- data/app/models/concerns/spree/preference_schema.rb +120 -19
- data/app/models/concerns/spree/prefixed_id.rb +25 -3
- data/app/models/concerns/spree/presentation_translatable.rb +4 -37
- data/app/models/concerns/spree/product_scopes.rb +51 -191
- data/app/models/concerns/spree/provider_failure_policy.rb +44 -0
- data/app/models/concerns/spree/publishable.rb +7 -7
- data/app/models/concerns/spree/purchase/addresses.rb +258 -0
- data/app/models/concerns/spree/purchase/channel.rb +19 -0
- data/app/models/concerns/spree/purchase/checkout_steps.rb +68 -0
- data/app/models/concerns/spree/purchase/company.rb +96 -0
- data/app/models/concerns/spree/purchase/currency.rb +29 -0
- data/app/models/concerns/spree/purchase/digital_items.rb +60 -0
- data/app/models/concerns/spree/purchase/freight.rb +52 -0
- data/app/models/concerns/spree/purchase/gift_cards.rb +70 -0
- data/app/models/concerns/spree/purchase/lifecycle.rb +53 -0
- data/app/models/concerns/spree/purchase/line_item_currencies.rb +38 -0
- data/app/models/concerns/spree/purchase/line_item_lookup.rb +25 -0
- data/app/models/concerns/spree/purchase/locale.rb +30 -0
- data/app/models/concerns/spree/purchase/market.rb +29 -0
- data/app/models/concerns/spree/purchase/payment_processing.rb +93 -0
- data/app/models/concerns/spree/purchase/purchase_order.rb +94 -0
- data/app/models/concerns/spree/purchase/quantity_rules.rb +136 -0
- data/app/models/concerns/spree/purchase/store_credits.rb +100 -0
- data/app/models/concerns/spree/purchase/taxation.rb +146 -0
- data/app/models/concerns/spree/purchase/totals.rb +116 -0
- data/app/models/concerns/spree/purchase/validations.rb +45 -0
- data/app/models/concerns/spree/receivable.rb +103 -0
- data/app/models/concerns/spree/receivable_item.rb +78 -0
- data/app/models/concerns/spree/refund_methods.rb +19 -0
- data/app/models/concerns/spree/sanitizable_rich_text.rb +109 -0
- data/app/models/concerns/spree/search_indexable.rb +5 -2
- data/app/models/concerns/spree/single_store_resource.rb +3 -1
- data/app/models/concerns/spree/store_data_sources.rb +75 -0
- data/app/models/concerns/spree/store_preferences.rb +49 -0
- data/app/models/concerns/spree/stores/markets.rb +75 -28
- data/app/models/concerns/spree/stores/setup.rb +10 -0
- data/app/models/concerns/spree/translatable_resource.rb +25 -6
- data/app/models/concerns/spree/typed_adjustment_line.rb +55 -0
- data/app/models/concerns/spree/user_address.rb +13 -3
- data/app/models/concerns/spree/user_management.rb +18 -6
- data/app/models/concerns/spree/user_methods.rb +5 -330
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/concerns/spree/user_roles.rb +18 -11
- data/app/models/concerns/spree/validates_store_uniqueness.rb +53 -0
- data/app/models/concerns/spree/vat_price_calculation.rb +58 -6
- data/app/models/concerns/spree/webhook_payload_redaction.rb +1 -1
- data/app/models/spree/ability.rb +147 -43
- data/app/models/spree/address.rb +387 -118
- data/app/models/spree/adjusters/base.rb +26 -0
- data/app/models/spree/adjusters/largest_remainder.rb +24 -0
- data/app/models/spree/adjusters/promotion.rb +253 -0
- data/app/models/spree/admin_user.rb +26 -0
- data/app/models/spree/allowed_origin.rb +1 -1
- data/app/models/spree/api_key.rb +34 -31
- data/app/models/spree/asset.rb +14 -211
- data/app/models/spree/authentication/strategies/base_strategy.rb +54 -3
- data/app/models/spree/authentication/strategies/email_password_strategy.rb +11 -3
- data/app/models/spree/authentication/strategies/oidc_strategy.rb +330 -0
- data/app/models/spree/authentication/strategy_registry.rb +83 -0
- data/app/models/spree/base.rb +83 -12
- data/app/models/spree/base_analytics_event_handler.rb +1 -1
- data/app/models/spree/calculator/shipping/digital_delivery.rb +5 -2
- data/app/models/spree/calculator/shipping/flat_rate.rb +10 -5
- data/app/models/spree/calculator/shipping/flexi_rate.rb +6 -0
- data/app/models/spree/calculator/shipping/per_item.rb +8 -3
- data/app/models/spree/calculator/shipping/price_sack.rb +6 -0
- data/app/models/spree/calculator/tiered_flat_rate.rb +5 -1
- data/app/models/spree/calculator.rb +10 -0
- data/app/models/spree/cart.rb +285 -0
- data/app/models/spree/carts/item_warning.rb +28 -0
- data/app/models/spree/carts/resolved_item.rb +37 -0
- data/app/models/spree/catalog.rb +503 -0
- data/app/models/spree/catalog_assignment.rb +41 -0
- data/app/models/spree/catalog_order_minimum.rb +26 -0
- data/app/models/spree/catalog_price.rb +100 -0
- data/app/models/spree/catalog_price_tier.rb +36 -0
- data/app/models/spree/catalog_product.rb +23 -0
- data/app/models/spree/catalog_quantity_rule.rb +46 -0
- data/app/models/spree/catalogs/product_term.rb +43 -0
- data/app/models/spree/category.rb +430 -12
- data/app/models/spree/channel/gating.rb +1 -2
- data/app/models/spree/channel.rb +38 -4
- data/app/models/spree/channel_stock_location.rb +8 -0
- data/app/models/spree/claim.rb +69 -0
- data/app/models/spree/claim_line_item.rb +46 -0
- data/app/models/spree/claim_reason.rb +24 -0
- data/app/models/spree/classification.rb +7 -49
- data/app/models/spree/collection.rb +269 -0
- data/app/models/spree/collection_rule.rb +58 -0
- data/app/models/spree/collection_rules/available_on.rb +21 -0
- data/app/models/spree/collection_rules/sale.rb +18 -0
- data/app/models/spree/collection_rules/tag.rb +21 -0
- data/app/models/spree/commission_line.rb +85 -0
- data/app/models/spree/commission_rate.rb +370 -0
- data/app/models/spree/commission_rate_value.rb +47 -0
- data/app/models/spree/commission_rule.rb +77 -0
- data/app/models/spree/commission_rule_product.rb +19 -0
- data/app/models/spree/commission_rules/category_rule.rb +33 -0
- data/app/models/spree/commission_rules/item_total_rule.rb +31 -0
- data/app/models/spree/commission_rules/product_rule.rb +55 -0
- data/app/models/spree/commission_rules/seller_rule.rb +33 -0
- data/app/models/spree/commission_tax.rb +51 -0
- data/app/models/spree/commissions/context.rb +71 -0
- data/app/models/spree/company.rb +347 -0
- data/app/models/spree/company_invitation.rb +81 -0
- data/app/models/spree/company_membership.rb +25 -0
- data/app/models/spree/consent_record.rb +125 -0
- data/app/models/spree/country.rb +128 -52
- data/app/models/spree/coupon_code.rb +18 -5
- data/app/models/spree/credit_card.rb +10 -9
- data/app/models/spree/current.rb +152 -18
- data/app/models/spree/custom_field.rb +160 -7
- data/app/models/spree/custom_field_definition/search_capabilities.rb +98 -0
- data/app/models/spree/custom_field_definition.rb +219 -5
- data/app/models/spree/custom_fields/boolean.rb +15 -0
- data/app/models/spree/custom_fields/json.rb +38 -0
- data/app/models/spree/custom_fields/long_text.rb +11 -0
- data/app/models/spree/custom_fields/number.rb +23 -0
- data/app/models/spree/custom_fields/rich_text.rb +23 -0
- data/app/models/spree/custom_fields/short_text.rb +15 -0
- data/app/models/spree/customer.rb +34 -0
- data/app/models/spree/customer_group.rb +12 -12
- data/app/models/spree/customer_group_user.rb +6 -4
- data/app/models/spree/data_feed.rb +1 -1
- data/app/models/spree/data_request.rb +98 -0
- data/app/models/spree/delivery.rb +169 -0
- data/app/models/spree/delivery_method.rb +566 -0
- data/app/models/spree/delivery_method_rule.rb +55 -0
- data/app/models/spree/delivery_method_rule_product.rb +8 -0
- data/app/models/spree/delivery_method_rules/channel_rule.rb +41 -0
- data/app/models/spree/delivery_method_rules/company_rule.rb +24 -0
- data/app/models/spree/delivery_method_rules/excluded_products_rule.rb +48 -0
- data/app/models/spree/delivery_method_rules/item_total_rule.rb +19 -0
- data/app/models/spree/delivery_method_rules/volume_rule.rb +35 -0
- data/app/models/spree/delivery_method_rules/weight_rule.rb +19 -0
- data/app/models/spree/delivery_method_service.rb +24 -0
- data/app/models/spree/delivery_method_stock_location.rb +11 -0
- data/app/models/spree/delivery_origin_group.rb +73 -0
- data/app/models/spree/delivery_origin_group_location.rb +9 -0
- data/app/models/spree/delivery_profile.rb +141 -0
- data/app/models/spree/delivery_profiles/digital.rb +20 -0
- data/app/models/spree/delivery_profiles/shipping.rb +12 -0
- data/app/models/spree/delivery_rate.rb +164 -0
- data/app/models/spree/delivery_rate_provider/base.rb +120 -0
- data/app/models/spree/delivery_rate_provider/estimate.rb +44 -0
- data/app/models/spree/delivery_rate_provider/freight.rb +41 -0
- data/app/models/spree/delivery_rate_provider/internal.rb +28 -0
- data/app/models/spree/delivery_rate_provider/service_catalog.rb +48 -0
- data/app/models/spree/delivery_zone.rb +64 -0
- data/app/models/spree/delivery_zone_member.rb +98 -0
- data/app/models/spree/digital.rb +12 -16
- data/app/models/spree/digital_asset.rb +144 -0
- data/app/models/spree/digital_asset_provider/base.rb +95 -0
- data/app/models/spree/digital_asset_provider/file.rb +20 -0
- data/app/models/spree/digital_delivery.rb +28 -0
- data/app/models/spree/digital_link.rb +31 -11
- data/app/models/spree/discount.rb +51 -0
- data/app/models/spree/event.rb +6 -6
- data/app/models/spree/exchange.rb +50 -44
- data/app/models/spree/exchange_line_item.rb +52 -0
- data/app/models/spree/export.rb +128 -21
- data/app/models/spree/exports/customers.rb +2 -2
- data/app/models/spree/exports/gift_cards.rb +2 -2
- data/app/models/spree/exports/newsletter_subscribers.rb +2 -2
- data/app/models/spree/exports/orders.rb +35 -5
- data/app/models/spree/exports/price_list_prices.rb +107 -0
- data/app/models/spree/exports/products.rb +4 -4
- data/app/models/spree/exports/purchase_orders.rb +39 -0
- data/app/models/spree/exports/report.rb +95 -0
- data/app/models/spree/external_reference.rb +77 -0
- data/app/models/spree/external_video.rb +117 -0
- data/app/models/spree/fee.rb +40 -0
- data/app/models/spree/freight_summary/line.rb +257 -0
- data/app/models/spree/freight_summary.rb +180 -0
- data/app/models/spree/fulfillment/custom_events.rb +96 -0
- data/app/models/spree/fulfillment.rb +973 -0
- data/app/models/spree/fulfillment_changer.rb +170 -0
- data/app/models/spree/fulfillment_item.rb +148 -0
- data/app/models/spree/fulfillment_provider/base.rb +130 -0
- data/app/models/spree/fulfillment_provider/digital.rb +44 -0
- data/app/models/spree/fulfillment_provider/manual.rb +15 -0
- data/app/models/spree/fulfillment_provider/pickup.rb +38 -0
- data/app/models/spree/fulfillment_provider/pickup_point.rb +24 -0
- data/app/models/spree/fulfilment_changer.rb +3 -164
- data/app/models/spree/gateway/bogus.rb +5 -4
- data/app/models/spree/gateway/custom_payment_source_method.rb +5 -5
- data/app/models/spree/gateway.rb +2 -2
- data/app/models/spree/gateway_customer.rb +12 -4
- data/app/models/spree/gift_card.rb +140 -48
- data/app/models/spree/gift_card_batch.rb +2 -2
- data/app/models/spree/import.rb +136 -98
- data/app/models/spree/import_mapping.rb +1 -1
- data/app/models/spree/import_row.rb +35 -31
- data/app/models/spree/import_schemas/price_list_prices.rb +13 -0
- data/app/models/spree/import_schemas/products.rb +8 -1
- data/app/models/spree/import_schemas/purchase_orders.rb +19 -0
- data/app/models/spree/imports/price_list_prices.rb +72 -0
- data/app/models/spree/imports/purchase_orders.rb +28 -0
- data/app/models/spree/integration.rb +128 -5
- data/app/models/spree/inventory_provider/base.rb +30 -0
- data/app/models/spree/inventory_provider/internal.rb +22 -0
- data/app/models/spree/inventory_unit.rb +3 -139
- data/app/models/spree/invitation.rb +53 -47
- data/app/models/spree/label_purchase.rb +29 -0
- data/app/models/spree/line_item.rb +240 -106
- data/app/models/spree/market.rb +106 -15
- data/app/models/spree/market_country.rb +10 -5
- data/app/models/spree/media.rb +497 -0
- data/app/models/spree/media_usage_reference.rb +27 -0
- data/app/models/spree/metafield.rb +14 -102
- data/app/models/spree/metafield_definition.rb +11 -128
- data/app/models/spree/metafields.rb +32 -0
- data/app/models/spree/newsletter_subscriber.rb +10 -9
- data/app/models/spree/number_generators/base.rb +56 -0
- data/app/models/spree/number_generators/random.rb +23 -0
- data/app/models/spree/number_generators/sequential.rb +88 -0
- data/app/models/spree/number_sequence.rb +86 -0
- data/app/models/spree/option_type.rb +18 -32
- data/app/models/spree/option_type_product_type.rb +8 -0
- data/app/models/spree/option_value.rb +19 -13
- data/app/models/spree/option_value_variant.rb +0 -1
- data/app/models/spree/order.rb +681 -576
- data/app/models/spree/order_cancellation_reason.rb +25 -0
- data/app/models/spree/order_group.rb +244 -0
- data/app/models/spree/order_inventory.rb +42 -33
- data/app/models/spree/order_merger.rb +11 -6
- data/app/models/spree/order_promotion.rb +32 -6
- data/app/models/spree/order_routing/has_strategy_preference.rb +1 -2
- data/app/models/spree/order_routing/rules/minimize_splits.rb +6 -6
- data/app/models/spree/order_routing/strategy/rules.rb +12 -8
- data/app/models/spree/order_routing_rule.rb +5 -15
- data/app/models/spree/order_updater.rb +131 -163
- data/app/models/spree/package_type.rb +191 -0
- data/app/models/spree/payment/custom_events.rb +52 -5
- data/app/models/spree/payment/gateway_options.rb +20 -5
- data/app/models/spree/payment/processing.rb +95 -116
- data/app/models/spree/payment.rb +299 -123
- data/app/models/spree/payment_method/check.rb +4 -3
- data/app/models/spree/payment_method/session_instrumentation.rb +34 -0
- data/app/models/spree/payment_method/store_credit.rb +4 -2
- data/app/models/spree/payment_method.rb +106 -9
- data/app/models/spree/payment_session.rb +150 -53
- data/app/models/spree/payment_setup_session.rb +4 -37
- data/app/models/spree/payment_source.rb +5 -4
- data/app/models/spree/payment_split.rb +90 -0
- data/app/models/spree/payout_provider/base.rb +218 -0
- data/app/models/spree/payout_provider/system.rb +36 -0
- data/app/models/spree/permission_sets.rb +17 -0
- data/app/models/spree/pickup_point_option.rb +28 -0
- data/app/models/spree/pickup_point_provider/base.rb +24 -0
- data/app/models/spree/policy.rb +12 -11
- data/app/models/spree/price.rb +91 -5
- data/app/models/spree/price_adjustment_tier.rb +63 -0
- data/app/models/spree/price_history.rb +1 -1
- data/app/models/spree/price_list.rb +266 -142
- data/app/models/spree/price_rule.rb +51 -7
- data/app/models/spree/price_rules/channel_rule.rb +3 -0
- data/app/models/spree/price_rules/customer_group_rule.rb +10 -1
- data/app/models/spree/price_rules/market_rule.rb +6 -0
- data/app/models/spree/price_rules/user_rule.rb +12 -3
- data/app/models/spree/price_rules/volume_rule.rb +6 -0
- data/app/models/spree/price_rules/zone_rule.rb +5 -13
- data/app/models/spree/pricing_provider/base.rb +51 -0
- data/app/models/spree/pricing_provider/internal.rb +277 -0
- data/app/models/spree/pricing_provider.rb +28 -0
- data/app/models/spree/product.rb +528 -544
- data/app/models/spree/product_category.rb +65 -0
- data/app/models/spree/product_collection.rb +20 -0
- data/app/models/spree/product_option_type.rb +0 -1
- data/app/models/spree/product_promotion_rule.rb +0 -1
- data/app/models/spree/product_publication.rb +0 -1
- data/app/models/spree/product_submission.rb +72 -0
- data/app/models/spree/product_type.rb +116 -0
- data/app/models/spree/product_type_category.rb +8 -0
- data/app/models/spree/product_type_custom_field_definition.rb +39 -0
- data/app/models/spree/promotion/actions/create_adjustment.rb +9 -7
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +11 -16
- data/app/models/spree/promotion/actions/create_line_items.rb +19 -8
- data/app/models/spree/promotion/actions/free_shipping.rb +12 -18
- data/app/models/spree/promotion/rules/category.rb +181 -0
- data/app/models/spree/promotion/rules/channel.rb +3 -3
- data/app/models/spree/promotion/rules/country.rb +43 -17
- data/app/models/spree/promotion/rules/currency.rb +2 -2
- data/app/models/spree/promotion/rules/customer_group.rb +13 -5
- data/app/models/spree/promotion/rules/first_order.rb +3 -3
- data/app/models/spree/promotion/rules/item_total.rb +2 -2
- data/app/models/spree/promotion/rules/market.rb +3 -3
- data/app/models/spree/promotion/rules/one_use_per_user.rb +4 -4
- data/app/models/spree/promotion/rules/option_value.rb +34 -11
- data/app/models/spree/promotion/rules/product.rb +3 -5
- data/app/models/spree/promotion/rules/taxon.rb +10 -131
- data/app/models/spree/promotion/rules/user.rb +14 -22
- data/app/models/spree/promotion/rules/user_logged_in.rb +3 -3
- data/app/models/spree/promotion.rb +59 -21
- data/app/models/spree/promotion_action.rb +52 -11
- data/app/models/spree/promotion_action_line_item.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +44 -16
- data/app/models/spree/promotion_handler/free_shipping.rb +1 -1
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -1
- data/app/models/spree/promotion_rule.rb +2 -9
- data/app/models/spree/promotion_rule_category.rb +22 -0
- data/app/models/spree/promotion_rule_taxon.rb +7 -6
- data/app/models/spree/promotion_rule_user.rb +2 -2
- data/app/models/spree/prototype.rb +3 -13
- data/app/models/spree/purchase_order.rb +95 -0
- data/app/models/spree/purchase_order_item.rb +40 -0
- data/app/models/spree/quantity_rule.rb +114 -0
- data/app/models/spree/refresh_token.rb +20 -2
- data/app/models/spree/refund.rb +96 -42
- data/app/models/spree/refund_reason.rb +32 -11
- data/app/models/spree/return.rb +151 -0
- data/app/models/spree/return_authorization_reason.rb +11 -6
- data/app/models/spree/return_line_item.rb +42 -0
- data/app/models/spree/return_reason.rb +26 -0
- data/app/models/spree/rich_text_sanitizer.rb +99 -0
- data/app/models/spree/role.rb +179 -4
- data/app/models/spree/role_user.rb +5 -21
- data/app/models/spree/saved_report.rb +56 -0
- data/app/models/spree/search_provider/base.rb +8 -2
- data/app/models/spree/search_provider/database.rb +73 -22
- data/app/models/spree/search_provider.rb +29 -0
- data/app/models/spree/seller.rb +475 -0
- data/app/models/spree/seller_balance.rb +86 -0
- data/app/models/spree/seller_payout.rb +116 -0
- data/app/models/spree/seller_requirement.rb +274 -0
- data/app/models/spree/seller_requirement_custom_field.rb +38 -0
- data/app/models/spree/seller_requirement_status.rb +144 -0
- data/app/models/spree/seller_requirement_submission.rb +91 -0
- data/app/models/spree/seller_requirements/accept_terms.rb +104 -0
- data/app/models/spree/seller_requirements/attestation.rb +22 -0
- data/app/models/spree/seller_requirements/billing_address.rb +13 -0
- data/app/models/spree/seller_requirements/complete_profile.rb +26 -0
- data/app/models/spree/seller_requirements/delivery_method.rb +20 -0
- data/app/models/spree/seller_requirements/document.rb +62 -0
- data/app/models/spree/seller_requirements/minimum_products.rb +20 -0
- data/app/models/spree/seller_requirements/operator_review.rb +23 -0
- data/app/models/spree/seller_requirements/package_type.rb +40 -0
- data/app/models/spree/seller_requirements/payout_account.rb +55 -0
- data/app/models/spree/seller_requirements/policy.rb +43 -0
- data/app/models/spree/seller_requirements/required_custom_fields.rb +56 -0
- data/app/models/spree/seller_requirements/returns_address.rb +19 -0
- data/app/models/spree/seller_transfer.rb +166 -0
- data/app/models/spree/setup_tasks.rb +3 -6
- data/app/models/spree/shipment.rb +3 -560
- data/app/models/spree/shipping_calculator.rb +7 -0
- data/app/models/spree/shipping_document.rb +32 -0
- data/app/models/spree/shipping_label.rb +146 -0
- data/app/models/spree/shipping_method.rb +3 -146
- data/app/models/spree/shipping_rate.rb +3 -97
- data/app/models/spree/state.rb +57 -23
- data/app/models/spree/stock/availability_validator.rb +1 -1
- data/app/models/spree/stock/content_item.rb +1 -0
- data/app/models/spree/stock/coordinator.rb +69 -9
- data/app/models/spree/stock/estimator.rb +198 -33
- data/app/models/spree/stock/inventory_unit_builder.rb +6 -1
- data/app/models/spree/stock/package.rb +145 -14
- data/app/models/spree/stock/packer.rb +20 -3
- data/app/models/spree/stock/prioritizer.rb +27 -4
- data/app/models/spree/stock/quantifier.rb +63 -38
- data/app/models/spree/stock/splitter/base.rb +3 -1
- data/app/models/spree/stock/splitter/delivery_profile.rb +41 -0
- data/app/models/spree/stock_item.rb +3 -147
- data/app/models/spree/stock_level/custom_events.rb +48 -0
- data/app/models/spree/stock_level.rb +305 -0
- data/app/models/spree/stock_location.rb +165 -87
- data/app/models/spree/stock_movement/custom_events.rb +1 -1
- data/app/models/spree/stock_movement.rb +166 -22
- data/app/models/spree/stock_receipt.rb +61 -0
- data/app/models/spree/stock_receipt_item.rb +35 -0
- data/app/models/spree/stock_reservation.rb +114 -11
- data/app/models/spree/stock_transfer.rb +84 -59
- data/app/models/spree/stock_transfer_item.rb +25 -0
- data/app/models/spree/store.rb +431 -107
- data/app/models/spree/store_credit.rb +88 -21
- data/app/models/spree/store_credit_category.rb +21 -28
- data/app/models/spree/store_credit_event.rb +1 -1
- data/app/models/spree/store_credit_type.rb +10 -2
- data/app/models/spree/store_payment_method.rb +0 -1
- data/app/models/spree/store_product.rb +2 -2
- data/app/models/spree/store_promotion.rb +0 -1
- data/app/models/spree/storefront/access_denied.rb +22 -0
- data/app/models/spree/storefront/access_policy.rb +180 -0
- data/app/models/spree/subscriber.rb +6 -6
- data/app/models/spree/supplier.rb +76 -0
- data/app/models/spree/tax_category.rb +15 -5
- data/app/models/spree/tax_exemption/item_override.rb +22 -0
- data/app/models/spree/tax_exemption.rb +81 -0
- data/app/models/spree/tax_exemption_certificate.rb +95 -0
- data/app/models/spree/tax_identifier.rb +209 -0
- data/app/models/spree/tax_identifiers/validation_result.rb +41 -0
- data/app/models/spree/tax_identifiers/validator/base.rb +53 -0
- data/app/models/spree/tax_identifiers/validator/eu_vat.rb +76 -0
- data/app/models/spree/tax_line.rb +79 -0
- data/app/models/spree/tax_provider/base.rb +150 -0
- data/app/models/spree/tax_provider/internal.rb +227 -0
- data/app/models/spree/tax_rate.rb +63 -100
- data/app/models/spree/taxon.rb +13 -514
- data/app/models/spree/taxon_rule.rb +8 -9
- data/app/models/spree/taxonomy.rb +8 -42
- data/app/models/spree/user_identity.rb +2 -2
- data/app/models/spree/variant.rb +629 -150
- data/app/models/spree/variant_media.rb +6 -7
- data/app/models/spree/webhook_endpoint.rb +2 -1
- data/app/models/spree/wished_item.rb +3 -31
- data/app/models/spree/wishlist.rb +17 -10
- data/app/models/spree/wishlist_item/custom_events.rb +42 -0
- data/app/models/spree/wishlist_item.rb +37 -0
- data/app/models/spree/zone.rb +24 -182
- data/app/models/spree/zone_member.rb +5 -8
- data/app/presenters/spree/csv/custom_fields_helper.rb +25 -0
- data/app/presenters/spree/csv/customer_presenter.rb +7 -6
- data/app/presenters/spree/csv/gift_card_presenter.rb +9 -8
- data/app/presenters/spree/csv/newsletter_subscriber_presenter.rb +7 -6
- data/app/presenters/spree/csv/order_line_item_presenter.rb +53 -21
- data/app/presenters/spree/csv/price_list_price_presenter.rb +41 -0
- data/app/presenters/spree/csv/product_variant_presenter.rb +22 -21
- data/app/presenters/spree/csv/purchase_order_item_presenter.rb +50 -0
- data/app/presenters/spree/data_feeds/google_presenter.rb +24 -10
- data/app/presenters/spree/filters/options_presenter.rb +2 -2
- data/app/services/spree/addresses/create.rb +70 -27
- data/app/services/spree/addresses/helper.rb +17 -54
- data/app/services/spree/addresses/update.rb +53 -31
- data/app/services/spree/carts/associate.rb +46 -0
- data/app/services/spree/carts/check_availability.rb +72 -0
- data/app/services/spree/carts/create.rb +7 -1
- data/app/services/spree/carts/destroy.rb +71 -0
- data/app/services/spree/carts/empty.rb +42 -0
- data/app/services/spree/carts/partition_by_seller.rb +71 -0
- data/app/services/spree/carts/price_items.rb +119 -0
- data/app/services/spree/carts/remove_item.rb +42 -0
- data/app/services/spree/carts/remove_line_item.rb +42 -0
- data/app/services/spree/carts/remove_out_of_stock_items.rb +104 -0
- data/app/services/spree/carts/set_quantity.rb +39 -0
- data/app/services/spree/carts/split_by_seller.rb +475 -0
- data/app/services/spree/carts/update.rb +157 -51
- data/app/services/spree/catalogs/resolve_prices.rb +192 -0
- data/app/services/spree/catalogs/resolve_quantity_rules.rb +115 -0
- data/app/services/spree/catalogs/set_assignments.rb +59 -0
- data/app/services/spree/catalogs/set_order_minimums.rb +44 -0
- data/app/services/spree/catalogs/set_product_terms.rb +83 -0
- data/app/services/spree/categories/add_products.rb +51 -0
- data/app/services/spree/categories/remove_products.rb +72 -0
- data/app/services/spree/checkout/add_store_credit.rb +11 -79
- data/app/services/spree/checkout/advance.rb +38 -38
- data/app/services/spree/checkout/remove_store_credit.rb +7 -12
- data/app/services/spree/collections/add_products.rb +42 -0
- data/app/services/spree/collections/regenerate_products.rb +67 -0
- data/app/services/spree/collections/remove_products.rb +65 -0
- data/app/services/spree/commissions/calculate_line.rb +132 -0
- data/app/services/spree/commissions/commission_order.rb +185 -0
- data/app/services/spree/commissions/resolve_rate.rb +114 -0
- data/app/services/spree/commissions/resolve_tax_rate.rb +78 -0
- data/app/services/spree/companies/add_member.rb +38 -0
- data/app/services/spree/company_invitations/accept.rb +60 -0
- data/app/services/spree/coupon_codes/coupon_codes_handler.rb +14 -2
- data/app/services/spree/customers/data_export.rb +372 -0
- data/app/services/spree/data_requests/create.rb +77 -0
- data/app/services/spree/deliveries/create.rb +56 -0
- data/app/services/spree/deliveries/destroy.rb +39 -0
- data/app/services/spree/deliveries/upsert_primary.rb +43 -0
- data/app/services/spree/fulfillments/recalculate_delivery.rb +62 -0
- data/app/services/spree/fulfillments/stand_down_provider.rb +47 -0
- data/app/services/spree/imports/row_processors/customer.rb +8 -8
- data/app/services/spree/imports/row_processors/price_list_price.rb +164 -0
- data/app/services/spree/imports/row_processors/product_variant.rb +193 -57
- data/app/services/spree/imports/row_processors/purchase_order.rb +157 -0
- data/app/services/spree/media/destroy.rb +88 -0
- data/app/services/spree/media/usage.rb +175 -0
- data/app/services/spree/newsletter/link_user.rb +4 -3
- data/app/services/spree/newsletter/subscribe.rb +3 -3
- data/app/services/spree/newsletter/verify.rb +6 -2
- data/app/services/spree/order_groups/allocate_payments.rb +101 -0
- data/app/services/spree/orders/approve.rb +11 -24
- data/app/services/spree/orders/build_fulfillments.rb +29 -0
- data/app/services/spree/orders/create.rb +38 -17
- data/app/services/spree/orders/create_from_cart.rb +88 -0
- data/app/services/spree/orders/create_user_account.rb +14 -67
- data/app/services/spree/orders/discounts/create.rb +84 -0
- data/app/services/spree/orders/discounts/destroy.rb +25 -0
- data/app/services/spree/orders/discounts/update.rb +29 -0
- data/app/services/spree/orders/fees/create.rb +28 -0
- data/app/services/spree/orders/fees/destroy.rb +22 -0
- data/app/services/spree/orders/fees/update.rb +25 -0
- data/app/services/spree/orders/remove_item.rb +13 -0
- data/app/services/spree/orders/remove_line_item.rb +13 -0
- data/app/services/spree/orders/update.rb +56 -11
- data/app/services/spree/orders/update_item.rb +105 -0
- data/app/services/spree/orders/update_statuses.rb +109 -0
- data/app/services/spree/payments/create.rb +31 -5
- data/app/services/spree/prices/bulk_upsert.rb +156 -30
- data/app/services/spree/product_submissions/close.rb +46 -0
- data/app/services/spree/product_types/apply_to_products.rb +167 -0
- data/app/services/spree/products/auto_match_collections.rb +75 -0
- data/app/services/spree/products/auto_match_taxons.rb +7 -54
- data/app/services/spree/products/duplicator.rb +16 -22
- data/app/services/spree/products/for_context.rb +54 -0
- data/app/services/spree/products/select_buy_box.rb +98 -0
- data/app/services/spree/purchases/amount_due_at_checkout.rb +33 -0
- data/app/services/spree/returns/eligibility_validator.rb +53 -0
- data/app/services/spree/sample_data/helper.rb +3 -3
- data/app/services/spree/sample_data/import_builder.rb +8 -4
- data/app/services/spree/sample_data/import_runner.rb +7 -4
- data/app/services/spree/sample_data/loader.rb +15 -6
- data/app/services/spree/search_provider/custom_field_schema.rb +153 -0
- data/app/services/spree/seeds/admin_user.rb +72 -12
- data/app/services/spree/seeds/all.rb +24 -13
- data/app/services/spree/seeds/commission_rates.rb +53 -0
- data/app/services/spree/seeds/digital_delivery.rb +18 -8
- data/app/services/spree/seeds/product_types.rb +23 -0
- data/app/services/spree/seeds/returns_environment.rb +44 -16
- data/app/services/spree/seeds/roles.rb +6 -1
- data/app/services/spree/seeds/saved_reports.rb +107 -0
- data/app/services/spree/seeds/seller_requirements.rb +19 -0
- data/app/services/spree/seeds/stores.rb +1 -1
- data/app/services/spree/seeds/tax_categories.rb +9 -2
- data/app/services/spree/sellers/requirements.rb +129 -0
- data/app/services/spree/shipments/update.rb +4 -33
- data/app/services/spree/shipping_labels/confirm_refund.rb +47 -0
- data/app/services/spree/shipping_labels/store_file.rb +68 -0
- data/app/services/spree/stock_levels/bulk_upsert.rb +67 -0
- data/app/services/spree/stock_levels/correct.rb +69 -0
- data/app/services/spree/stock_levels/recount.rb +103 -0
- data/app/services/spree/stock_locations/stock_items/create.rb +8 -13
- data/app/services/spree/stock_locations/stock_levels/create.rb +25 -0
- data/app/services/spree/stock_reservations/extend.rb +9 -5
- data/app/services/spree/stock_reservations/release.rb +4 -3
- data/app/services/spree/stock_reservations/reserve.rb +43 -32
- data/app/services/spree/store_credits/apply.rb +93 -0
- data/app/services/spree/store_credits/remove.rb +17 -0
- data/app/services/spree/stores/provision_defaults.rb +269 -0
- data/app/services/spree/tax/resolve_exemptions.rb +44 -0
- data/app/services/spree/tax/unusable_exemption_error.rb +8 -0
- data/app/services/spree/tax_identifiers/validate.rb +77 -0
- data/app/services/spree/taxons/add_products.rb +6 -39
- data/app/services/spree/taxons/regenerate_products.rb +8 -53
- data/app/services/spree/taxons/remove_products.rb +6 -60
- data/app/services/spree/variants/remove_line_items.rb +6 -1
- data/app/subscribers/spree/event_log_subscriber.rb +1 -1
- data/app/subscribers/spree/order_commission_subscriber.rb +23 -0
- data/app/subscribers/spree/order_placed_subscriber.rb +58 -0
- data/app/subscribers/spree/order_status_subscriber.rb +82 -0
- data/app/subscribers/spree/payment_split_subscriber.rb +71 -0
- data/app/subscribers/spree/product_metrics_subscriber.rb +2 -2
- data/app/subscribers/spree/seller_onboarding_subscriber.rb +32 -0
- data/app/subscribers/spree/seller_transfer_reversal_subscriber.rb +26 -0
- data/app/subscribers/spree/seller_transfer_subscriber.rb +26 -0
- data/app/subscribers/spree/seller_user_email_subscriber.rb +27 -0
- data/app/subscribers/spree/tax_identifier_validation_subscriber.rb +26 -0
- data/app/validators/spree/addresses/phone_validator.rb +2 -2
- data/app/validators/spree/attachment_content_type_validator.rb +183 -0
- data/app/validators/spree/password_length_validator.rb +23 -0
- data/app/views/spree/seller_user_mailer/password_reset_email.html.erb +8 -0
- data/app/views/spree/shared/_purchased_items_styles.html.erb +7 -0
- data/app/workflows/spree/carts/add_item.rb +234 -0
- data/app/workflows/spree/carts/complete.rb +516 -0
- data/app/workflows/spree/carts/merge.rb +90 -0
- data/app/workflows/spree/carts/recalculate.rb +54 -0
- data/app/workflows/spree/carts/recalculate_totals.rb +233 -0
- data/app/workflows/spree/carts/upsert_items.rb +368 -0
- data/app/workflows/spree/catalogs/activate.rb +51 -0
- data/app/workflows/spree/catalogs/create.rb +83 -0
- data/app/workflows/spree/catalogs/deactivate.rb +35 -0
- data/app/workflows/spree/catalogs/set_price_list.rb +130 -0
- data/app/workflows/spree/catalogs/update.rb +85 -0
- data/app/workflows/spree/claims/approve.rb +38 -0
- data/app/workflows/spree/claims/cancel.rb +37 -0
- data/app/workflows/spree/claims/create.rb +82 -0
- data/app/workflows/spree/claims/deny.rb +35 -0
- data/app/workflows/spree/claims/resolve.rb +166 -0
- data/app/workflows/spree/customers/anonymize.rb +502 -0
- data/app/workflows/spree/customers/create.rb +247 -0
- data/app/workflows/spree/data_requests/fulfill.rb +165 -0
- data/app/workflows/spree/deliveries/update_tracking.rb +96 -0
- data/app/workflows/spree/exchanges/approve.rb +38 -0
- data/app/workflows/spree/exchanges/cancel.rb +40 -0
- data/app/workflows/spree/exchanges/create.rb +90 -0
- data/app/workflows/spree/exchanges/fulfill.rb +146 -0
- data/app/workflows/spree/exchanges/receive.rb +86 -0
- data/app/workflows/spree/fulfillments/cancel.rb +87 -0
- data/app/workflows/spree/fulfillments/create.rb +346 -0
- data/app/workflows/spree/fulfillments/fulfill.rb +354 -0
- data/app/workflows/spree/fulfillments/mark_delivered.rb +67 -0
- data/app/workflows/spree/fulfillments/purchase_label.rb +40 -0
- data/app/workflows/spree/fulfillments/update.rb +123 -0
- data/app/workflows/spree/gift_cards/apply.rb +235 -0
- data/app/workflows/spree/gift_cards/cancel.rb +43 -0
- data/app/workflows/spree/gift_cards/redeem.rb +59 -0
- data/app/workflows/spree/gift_cards/remove.rb +78 -0
- data/app/workflows/spree/imports/complete.rb +45 -0
- data/app/workflows/spree/imports/complete_mapping.rb +50 -0
- data/app/workflows/spree/imports/retry_failed_rows.rb +46 -0
- data/app/workflows/spree/imports/start_mapping.rb +48 -0
- data/app/workflows/spree/imports/start_processing.rb +36 -0
- data/app/workflows/spree/invitations/accept.rb +50 -0
- data/app/workflows/spree/orders/add_item.rb +12 -0
- data/app/workflows/spree/orders/cancel.rb +261 -0
- data/app/workflows/spree/orders/complete.rb +169 -0
- data/app/workflows/spree/orders/recalculate.rb +11 -0
- data/app/workflows/spree/orders/recalculate_totals.rb +12 -0
- data/app/workflows/spree/orders/upsert_items.rb +28 -0
- data/app/workflows/spree/payment_sessions/complete.rb +44 -0
- data/app/workflows/spree/payments/capture.rb +109 -0
- data/app/workflows/spree/payments/handle_webhook.rb +100 -0
- data/app/workflows/spree/payments/process.rb +73 -0
- data/app/workflows/spree/payments/void.rb +72 -0
- data/app/workflows/spree/price_lists/activate.rb +49 -0
- data/app/workflows/spree/price_lists/create.rb +57 -0
- data/app/workflows/spree/price_lists/deactivate.rb +30 -0
- data/app/workflows/spree/price_lists/update.rb +117 -0
- data/app/workflows/spree/products/activate.rb +33 -0
- data/app/workflows/spree/products/approve.rb +52 -0
- data/app/workflows/spree/products/archive.rb +44 -0
- data/app/workflows/spree/products/create.rb +82 -0
- data/app/workflows/spree/products/destroy.rb +35 -0
- data/app/workflows/spree/products/draft.rb +49 -0
- data/app/workflows/spree/products/nested_attributes.rb +242 -0
- data/app/workflows/spree/products/propose.rb +62 -0
- data/app/workflows/spree/products/reject.rb +54 -0
- data/app/workflows/spree/products/update.rb +83 -0
- data/app/workflows/spree/purchase_orders/cancel.rb +57 -0
- data/app/workflows/spree/purchase_orders/close.rb +57 -0
- data/app/workflows/spree/purchase_orders/create.rb +68 -0
- data/app/workflows/spree/purchase_orders/mark_draft.rb +49 -0
- data/app/workflows/spree/purchase_orders/mark_ordered.rb +50 -0
- data/app/workflows/spree/purchase_orders/receive.rb +65 -0
- data/app/workflows/spree/purchase_orders/update.rb +56 -0
- data/app/workflows/spree/receivables/incoming_counter.rb +50 -0
- data/app/workflows/spree/refunds/create.rb +136 -0
- data/app/workflows/spree/refunds/order_payments.rb +129 -0
- data/app/workflows/spree/returns/approve.rb +47 -0
- data/app/workflows/spree/returns/cancel.rb +52 -0
- data/app/workflows/spree/returns/create.rb +135 -0
- data/app/workflows/spree/returns/purchase_label.rb +32 -0
- data/app/workflows/spree/returns/receive.rb +94 -0
- data/app/workflows/spree/returns/refund.rb +134 -0
- data/app/workflows/spree/seller_payouts/complete.rb +80 -0
- data/app/workflows/spree/seller_payouts/sweep.rb +192 -0
- data/app/workflows/spree/seller_requirement_submissions/accept.rb +40 -0
- data/app/workflows/spree/seller_requirement_submissions/create.rb +104 -0
- data/app/workflows/spree/seller_requirement_submissions/reject.rb +45 -0
- data/app/workflows/spree/seller_requirement_submissions/reviewable.rb +19 -0
- data/app/workflows/spree/seller_requirement_submissions/waive.rb +64 -0
- data/app/workflows/spree/seller_transfers/create.rb +131 -0
- data/app/workflows/spree/seller_transfers/reverse.rb +241 -0
- data/app/workflows/spree/sellers/approve.rb +88 -0
- data/app/workflows/spree/sellers/create.rb +72 -0
- data/app/workflows/spree/sellers/invite.rb +61 -0
- data/app/workflows/spree/sellers/reject.rb +52 -0
- data/app/workflows/spree/sellers/reopen_onboarding.rb +55 -0
- data/app/workflows/spree/sellers/start_onboarding.rb +46 -0
- data/app/workflows/spree/sellers/submit_for_review.rb +76 -0
- data/app/workflows/spree/sellers/suspend.rb +55 -0
- data/app/workflows/spree/shipping_labels/purchase.rb +154 -0
- data/app/workflows/spree/shipping_labels/record.rb +102 -0
- data/app/workflows/spree/shipping_labels/refund.rb +77 -0
- data/app/workflows/spree/stock_receipts/recording.rb +165 -0
- data/app/workflows/spree/stock_transfers/cancel.rb +103 -0
- data/app/workflows/spree/stock_transfers/close.rb +56 -0
- data/app/workflows/spree/stock_transfers/create.rb +63 -0
- data/app/workflows/spree/stock_transfers/mark_draft.rb +41 -0
- data/app/workflows/spree/stock_transfers/mark_in_transit.rb +91 -0
- data/app/workflows/spree/stock_transfers/mark_ready.rb +36 -0
- data/app/workflows/spree/stock_transfers/receive.rb +62 -0
- data/app/workflows/spree/stock_transfers/update.rb +55 -0
- data/app/workflows/spree/tax_exemption_certificates/verify.rb +48 -0
- data/app/workflows/spree/variants/create.rb +66 -0
- data/app/workflows/spree/variants/nested_attributes.rb +90 -0
- data/app/workflows/spree/variants/update.rb +55 -0
- data/config/brakeman.ignore +79 -79
- data/config/i18n-tasks.yml +4 -3
- data/config/initializers/mobility.rb +0 -4
- data/config/initializers/spree_store_setup_tasks.rb +4 -0
- data/config/locales/en.yml +952 -189
- data/config/routes.rb +11 -4
- data/db/migrate/20220201103922_add_first_name_and_last_name_to_spree_users.rb +7 -5
- data/db/migrate/20221215151408_add_selected_locale_to_spree_users.rb +6 -4
- data/db/migrate/20250127151258_add_phone_to_spree_users.rb +3 -1
- data/db/migrate/20250207084000_add_accepts_email_marketing_field_to_spree_users_table.rb +4 -2
- data/db/migrate/20250410061306_create_spree_invitations.rb +1 -1
- data/db/migrate/20250605131334_add_missing_fields_to_users.rb +24 -20
- data/db/migrate/20260315100000_add_product_media_support.rb +4 -1
- data/db/migrate/20260613000001_add_store_id_to_spree_role_users.rb +6 -3
- data/db/migrate/20260630000001_add_default_variant_id_to_spree_products.rb +9 -0
- data/db/migrate/20260708160054_create_spree_collections.rb +69 -0
- data/db/migrate/20260710000001_rename_taxons_to_categories.rb +28 -0
- data/db/migrate/20260727000001_add_unique_country_abbr_index_to_spree_states.rb +27 -4
- data/db/migrate/20260728000000_create_spree_customers_and_admin_users.rb +59 -0
- data/db/migrate/20260728000001_rename_prototypes_to_product_types.rb +59 -0
- data/db/migrate/20260728000002_create_spree_delivery_zones.rb +29 -0
- data/db/migrate/20260728000003_create_spree_carts.rb +58 -0
- data/db/migrate/20260728000003_rename_user_id_to_customer_id.rb +30 -0
- data/db/migrate/20260728000004_rename_shipping_to_fulfillment_and_delivery.rb +83 -0
- data/db/migrate/20260728000005_add_fulfillment_type_columns.rb +33 -0
- data/db/migrate/20260729000001_create_typed_adjustment_tables.rb +87 -0
- data/db/migrate/20260729100001_add_checkout_columns_to_spree_carts.rb +15 -0
- data/db/migrate/20260729100002_relax_owner_null_constraints.rb +7 -0
- data/db/migrate/20260729120001_rename_order_totals_to_standard_names.rb +7 -0
- data/db/migrate/20260729130001_create_spree_delivery_method_rules.rb +19 -0
- data/db/migrate/20260729140001_add_coupon_code_to_spree_orders.rb +6 -0
- data/db/migrate/20260729150001_add_store_to_delivery_methods_and_stock_locations.rb +6 -0
- data/db/migrate/20260802190001_create_spree_returns.rb +49 -0
- data/db/migrate/20260802210001_create_spree_exchanges_and_claims.rb +80 -0
- data/db/migrate/20260805100001_rename_return_authorization_reasons_to_return_reasons.rb +109 -0
- data/db/migrate/20260806000001_add_store_id_to_spree_tax_rates_and_categories.rb +16 -0
- data/db/migrate/20260806000001_create_spree_delivery_method_rule_products.rb +22 -0
- data/db/migrate/20260806000002_add_treatment_columns_to_spree_tax_lines.rb +19 -0
- data/db/migrate/20260806000003_create_spree_tax_identifiers.rb +41 -0
- data/db/migrate/20260806000004_add_tax_provider_to_spree_markets.rb +9 -0
- data/db/migrate/20260806000005_add_country_and_state_to_spree_tax_rates.rb +20 -0
- data/db/migrate/20260806100001_create_spree_product_type_custom_field_definitions.rb +17 -0
- data/db/migrate/20260806120001_add_rate_provider_to_delivery_methods.rb +7 -0
- data/db/migrate/20260806120002_add_carrier_columns_to_delivery_rates.rb +13 -0
- data/db/migrate/20260806130001_add_unique_store_type_index_to_spree_integrations.rb +9 -0
- data/db/migrate/20260807000001_add_permissions_to_spree_roles.rb +14 -0
- data/db/migrate/20260807000001_create_spree_companies.rb +66 -0
- data/db/migrate/20260807000003_create_spree_tax_exemption_certificates.rb +31 -0
- data/db/migrate/20260807120001_remove_claim_type_from_spree_claims.rb +5 -0
- data/db/migrate/20260807130001_add_country_state_codes_to_consumers.rb +28 -0
- data/db/migrate/20260807150001_reindex_spree_categories_by_store.rb +42 -0
- data/db/migrate/20260809000001_rename_metafields_to_custom_fields.rb +126 -0
- data/db/migrate/20260809100001_support_multi_rate_delivery_methods.rb +35 -0
- data/db/migrate/20260809120001_consolidate_metadata_columns.rb +120 -0
- data/db/migrate/20260809150001_promote_shipping_categories_to_delivery_profiles.rb +153 -0
- data/db/migrate/20260809170001_create_spree_channel_stock_locations.rb +17 -0
- data/db/migrate/20260809200001_add_rich_text_columns_for_action_text_removal.rb +11 -0
- data/db/migrate/20260810000001_rename_digitals_to_digital_assets.rb +38 -0
- data/db/migrate/20260811000001_add_delivery_tracking_to_fulfillments.rb +17 -0
- data/db/migrate/20260812000001_add_provider_type_to_spree_digital_assets.rb +7 -0
- data/db/migrate/20260812000002_add_metadata_to_spree_digital_assets.rb +11 -0
- data/db/migrate/20260813000001_create_spree_number_sequences.rb +13 -0
- data/db/migrate/20260813120001_add_setup_token_to_spree_stores.rb +11 -0
- data/db/migrate/20260813130001_add_capture_method_to_payment_methods.rb +17 -0
- data/db/migrate/20260813130001_add_unique_indexes_to_spree_data_feeds.rb +10 -0
- data/db/migrate/20260814000001_add_customs_fields_to_spree_variants.rb +7 -0
- data/db/migrate/20260814000001_rename_stock_items_to_stock_levels.rb +72 -0
- data/db/migrate/20260814000002_add_typed_stock_movements.rb +25 -0
- data/db/migrate/20260815000001_add_audience_to_spree_refresh_tokens.rb +14 -0
- data/db/migrate/20260815000002_add_resource_to_spree_roles.rb +190 -0
- data/db/migrate/20260816000001_create_spree_sellers.rb +59 -0
- data/db/migrate/20260816000002_add_seller_to_spree_products.rb +10 -0
- data/db/migrate/20260816210001_create_spree_commission_rates.rb +229 -0
- data/db/migrate/20260816210002_create_spree_commission_lines.rb +72 -0
- data/db/migrate/20260817000001_add_seller_to_spree_line_items.rb +15 -0
- data/db/migrate/20260817000002_add_seller_and_delivery_profile_to_spree_variants.rb +17 -0
- data/db/migrate/20260818000001_create_spree_external_references.rb +33 -0
- data/db/migrate/20260818000001_create_spree_seller_requirements.rb +60 -0
- data/db/migrate/20260818000001_rename_spree_payments_state_to_status.rb +5 -0
- data/db/migrate/20260818000002_add_price_source_to_spree_line_items.rb +9 -0
- data/db/migrate/20260818090001_rename_assets_to_media.rb +10 -0
- data/db/migrate/20260819000001_create_spree_seller_requirement_custom_fields.rb +15 -0
- data/db/migrate/20260819000001_replace_payment_method_display_on_with_storefront_visible.rb +25 -0
- data/db/migrate/20260819000002_rename_spree_gift_cards_state_to_status.rb +5 -0
- data/db/migrate/20260820000001_add_seller_business_identity_and_stock_locations.rb +17 -0
- data/db/migrate/20260820000001_create_spree_order_groups.rb +33 -0
- data/db/migrate/20260820000002_add_order_group_to_spree_orders_and_payments.rb +14 -0
- data/db/migrate/20260820000003_create_spree_payment_splits.rb +21 -0
- data/db/migrate/20260820000004_add_order_to_spree_refunds.rb +32 -0
- data/db/migrate/20260821000001_add_claimed_amount_to_spree_payment_splits.rb +14 -0
- data/db/migrate/20260822000001_create_spree_seller_transfers.rb +94 -0
- data/db/migrate/20260822000002_create_spree_seller_payouts.rb +48 -0
- data/db/migrate/20260822000003_add_payout_account_to_spree_sellers.rb +11 -0
- data/db/migrate/20260824000001_add_store_to_spree_media.rb +16 -0
- data/db/migrate/20260825000001_create_spree_catalogs.rb +40 -0
- data/db/migrate/20260826000001_add_owner_to_spree_addresses.rb +30 -0
- data/db/migrate/20260826000002_create_spree_product_submissions.rb +28 -0
- data/db/migrate/20260827000001_add_seller_to_spree_exports.rb +5 -0
- data/db/migrate/20260828100001_unify_import_and_export_tenancy.rb +79 -0
- data/db/migrate/20260830000001_add_catalog_to_spree_price_lists.rb +47 -0
- data/db/migrate/20260830000002_add_po_number_to_purchases.rb +16 -0
- data/db/migrate/20260830000002_add_price_adjustment_to_spree_price_lists.rb +14 -0
- data/db/migrate/20260831000001_add_description_to_spree_catalogs.rb +7 -0
- data/db/migrate/20260831000002_add_quantity_rules_to_spree_variants.rb +18 -0
- data/db/migrate/20260831000003_create_spree_catalog_terms.rb +35 -0
- data/db/migrate/20260831100001_create_spree_package_types.rb +38 -0
- data/db/migrate/20260831100002_add_carton_details_to_spree_variants.rb +10 -0
- data/db/migrate/20260831100003_add_unpriced_to_spree_delivery_rates.rb +8 -0
- data/db/migrate/20260901000001_add_seller_to_spree_delivery_methods.rb +11 -0
- data/db/migrate/20260902000001_add_store_and_filter_key_to_custom_field_definitions.rb +143 -0
- data/db/migrate/20260902000002_add_eu_legal_compliance.rb +68 -0
- data/db/migrate/20260902000002_replace_order_cancellation_tables_with_cancel_columns.rb +88 -0
- data/db/migrate/20260902100001_rename_wished_items_to_wishlist_items.rb +8 -0
- data/db/migrate/20260902100002_rename_promo_total_to_discount_total.rb +9 -0
- data/db/migrate/20260902100003_rename_address_name_and_postal_code_columns.rb +24 -0
- data/db/migrate/20260902100004_rename_option_presentation_to_label.rb +13 -0
- data/db/migrate/20260903000001_create_spree_shipping_labels_and_deliveries.rb +73 -0
- data/db/migrate/20260903120000_create_spree_saved_reports.rb +57 -0
- data/db/migrate/20260904000001_add_returns_enabled_to_stock_locations.rb +14 -0
- data/db/migrate/20260906000001_add_commission_total_to_orders.rb +22 -0
- data/db/migrate/20260907000001_add_inventory_operations.rb +113 -0
- data/db/migrate/20260907000001_add_min_quantity_to_spree_prices.rb +28 -0
- data/db/migrate/20260907000002_create_spree_price_adjustment_tiers.rb +19 -0
- data/db/migrate/20260908000001_add_seller_to_spree_package_types.rb +78 -0
- data/db/migrate/20260910000001_add_stock_receipts.rb +44 -0
- data/db/migrate/20260910000002_add_counters_to_spree_stock_levels.rb +6 -0
- data/db/migrate/20260910120000_index_reporting_time_columns.rb +12 -0
- data/db/migrate/20260912120000_index_reporting_lifetime_and_promotion_columns.rb +19 -0
- data/db/migrate/20260914000001_add_settlement_to_spree_seller_transfers.rb +18 -0
- data/db/migrate/20260914230000_add_store_to_spree_option_types.rb +46 -0
- data/db/migrate/20260916000001_order_operation_actors_polymorphic.rb +30 -0
- data/db/sample_data/collections.rb +58 -0
- data/db/sample_data/custom_field_definitions.rb +9 -0
- data/db/sample_data/digital_products.rb +26 -0
- data/db/sample_data/fulfillment.rb +88 -0
- data/db/sample_data/options.rb +25 -1
- data/db/sample_data/orders.rb +53 -30
- data/db/sample_data/payment_methods.rb +2 -2
- data/db/sample_data/price_list_prices.csv +25 -0
- data/db/sample_data/product_type_categories.rb +27 -0
- data/db/sample_data/product_types.rb +83 -0
- data/db/sample_data/products.csv +39 -38
- data/db/sample_data/wholesale.rb +42 -3
- data/lib/generators/spree/api_resource/api_resource_generator.rb +64 -6
- data/lib/generators/spree/api_resource/templates/admin_controller.rb.tt +5 -0
- data/lib/generators/spree/api_resource/templates/admin_controller_spec.rb.tt +3 -0
- data/lib/generators/spree/api_resource/templates/store_controller_spec.rb.tt +4 -1
- data/lib/generators/spree/authentication/dummy/templates/create_spree_admin_users.rb.tt +1 -0
- data/lib/generators/spree/controller_decorator/controller_decorator_generator.rb +4 -4
- data/lib/generators/spree/dummy/dummy_generator.rb +5 -12
- data/lib/generators/spree/dummy/templates/rails/test.rb +5 -0
- data/lib/generators/spree/model/model_generator.rb +46 -7
- data/lib/generators/spree/model/templates/create_table_migration.rb.tt +9 -0
- data/lib/generators/spree/model/templates/model.rb.tt +17 -7
- data/lib/spree/category_permalink_deduplicator.rb +328 -0
- data/lib/spree/checkout/default_requirements.rb +134 -0
- data/lib/spree/checkout/registry.rb +164 -0
- data/lib/spree/checkout/requirement.rb +49 -0
- data/lib/spree/checkout/requirements.rb +61 -0
- data/lib/spree/checkout/step.rb +52 -0
- data/lib/spree/core/configuration.rb +112 -63
- data/lib/spree/core/controller_helpers/store.rb +8 -9
- data/lib/spree/core/dependencies.rb +324 -71
- data/lib/spree/core/dependencies_helper.rb +4 -0
- data/lib/spree/core/engine.rb +360 -75
- data/lib/spree/core/number_generator.rb +37 -33
- data/lib/spree/core/permission_configuration.rb +183 -91
- data/lib/spree/core/permissions/default_catalog.rb +236 -0
- data/lib/spree/core/permissions/entry.rb +15 -0
- data/lib/spree/core/permissions/scope.rb +76 -0
- data/lib/spree/core/preferences/masking.rb +24 -2
- data/lib/spree/core/preferences/preferable.rb +52 -2
- data/lib/spree/core/preferences/preferable_class_methods.rb +41 -2
- data/lib/spree/core/preferences/runtime_configuration.rb +142 -9
- data/lib/spree/core/previews/admin_user_preview.rb +0 -8
- data/lib/spree/core/previews/invitation_preview.rb +1 -1
- data/lib/spree/core/previews/preview_data.rb +2 -2
- data/lib/spree/core/previews/seller_user_preview.rb +14 -0
- data/lib/spree/core/pricing/context.rb +28 -8
- data/lib/spree/core/pricing/price_resolution.rb +150 -0
- data/lib/spree/core/pricing/resolver.rb +17 -107
- data/lib/spree/core/ransack_configuration.rb +3 -3
- data/lib/spree/core/routes.rb +4 -6
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +446 -59
- data/lib/spree/events/adapters/base.rb +42 -15
- data/lib/spree/hooks.rb +146 -0
- data/lib/spree/iso_data.rb +188 -0
- data/lib/spree/measurement.rb +113 -0
- data/lib/spree/money.rb +70 -0
- data/lib/spree/number_generators/registry.rb +80 -0
- data/lib/spree/reporting/adapters/base.rb +71 -0
- data/lib/spree/reporting/adapters/live.rb +677 -0
- data/lib/spree/reporting/counter_result.rb +19 -0
- data/lib/spree/reporting/counters.rb +33 -0
- data/lib/spree/reporting/default_vocabulary.rb +705 -0
- data/lib/spree/reporting/hydration.rb +64 -0
- data/lib/spree/reporting/query.rb +487 -0
- data/lib/spree/reporting/registry.rb +294 -0
- data/lib/spree/reporting/result.rb +10 -0
- data/lib/spree/reporting/schema.rb +124 -0
- data/lib/spree/reporting.rb +49 -0
- data/lib/spree/service_module.rb +6 -0
- data/lib/spree/store_scope_guard.rb +180 -0
- data/lib/spree/testing_support/action_text.rb +33 -0
- data/lib/spree/testing_support/common_rake.rb +4 -66
- data/lib/spree/testing_support/country_pool.rb +50 -0
- data/lib/spree/testing_support/extension_rake.rb +2 -6
- data/lib/spree/testing_support/factories/address_factory.rb +45 -15
- data/lib/spree/testing_support/factories/api_key_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +0 -3
- data/lib/spree/testing_support/factories/cart_factory.rb +60 -0
- data/lib/spree/testing_support/factories/catalog_factory.rb +37 -0
- data/lib/spree/testing_support/factories/category_factory.rb +21 -0
- data/lib/spree/testing_support/factories/claim_factory.rb +33 -0
- data/lib/spree/testing_support/factories/classification_factory.rb +3 -2
- data/lib/spree/testing_support/factories/collection_factory.rb +25 -0
- data/lib/spree/testing_support/factories/collection_rule_factory.rb +47 -0
- data/lib/spree/testing_support/factories/commission_rate_factory.rb +75 -0
- data/lib/spree/testing_support/factories/company_factory.rb +31 -0
- data/lib/spree/testing_support/factories/consent_record_factory.rb +10 -0
- data/lib/spree/testing_support/factories/country_factory.rb +28 -9
- data/lib/spree/testing_support/factories/custom_field_definition_factory.rb +79 -0
- data/lib/spree/testing_support/factories/custom_field_factory.rb +64 -0
- data/lib/spree/testing_support/factories/customer_group_user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/data_request_factory.rb +17 -0
- data/lib/spree/testing_support/factories/delivery_factory.rb +13 -0
- data/lib/spree/testing_support/factories/delivery_method_factory.rb +47 -0
- data/lib/spree/testing_support/factories/delivery_origin_group_factory.rb +5 -0
- data/lib/spree/testing_support/factories/delivery_profile_factory.rb +9 -0
- data/lib/spree/testing_support/factories/delivery_rate_factory.rb +7 -0
- data/lib/spree/testing_support/factories/delivery_zone_factory.rb +34 -0
- data/lib/spree/testing_support/factories/digital_asset_factory.rb +13 -0
- data/lib/spree/testing_support/factories/digital_link_factory.rb +1 -1
- data/lib/spree/testing_support/factories/discount_factory.rb +9 -0
- data/lib/spree/testing_support/factories/exchange_factory.rb +50 -0
- data/lib/spree/testing_support/factories/external_reference_factory.rb +8 -0
- data/lib/spree/testing_support/factories/fee_factory.rb +8 -0
- data/lib/spree/testing_support/factories/fulfillment_factory.rb +32 -0
- data/lib/spree/testing_support/factories/fulfillment_item_factory.rb +17 -0
- data/lib/spree/testing_support/factories/gateway_customer_factory.rb +1 -1
- data/lib/spree/testing_support/factories/gift_card_factory.rb +2 -2
- data/lib/spree/testing_support/factories/import_factory.rb +33 -1
- data/lib/spree/testing_support/factories/line_item_factory.rb +10 -5
- data/lib/spree/testing_support/factories/market_factory.rb +5 -12
- data/lib/spree/testing_support/factories/media_factory.rb +36 -0
- data/lib/spree/testing_support/factories/newsletter_subscriber_factory.rb +1 -1
- data/lib/spree/testing_support/factories/number_sequence_factory.rb +7 -0
- data/lib/spree/testing_support/factories/options_factory.rb +5 -5
- data/lib/spree/testing_support/factories/order_factory.rb +39 -23
- data/lib/spree/testing_support/factories/order_group_factory.rb +29 -0
- data/lib/spree/testing_support/factories/package_type_factory.rb +36 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/payment_method_factory.rb +5 -5
- data/lib/spree/testing_support/factories/payment_session_factory.rb +10 -6
- data/lib/spree/testing_support/factories/payment_setup_session_factory.rb +2 -2
- data/lib/spree/testing_support/factories/payment_split_factory.rb +10 -0
- data/lib/spree/testing_support/factories/price_adjustment_tier_factory.rb +7 -0
- data/lib/spree/testing_support/factories/price_factory.rb +6 -0
- data/lib/spree/testing_support/factories/price_rule_factory.rb +0 -10
- data/lib/spree/testing_support/factories/product_collection_factory.rb +8 -0
- data/lib/spree/testing_support/factories/product_factory.rb +35 -7
- data/lib/spree/testing_support/factories/product_type_custom_field_definition_factory.rb +10 -0
- data/lib/spree/testing_support/factories/product_type_factory.rb +12 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +4 -0
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/purchase_order_factory.rb +49 -0
- data/lib/spree/testing_support/factories/refresh_token_factory.rb +2 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -2
- data/lib/spree/testing_support/factories/return_factory.rb +52 -0
- data/lib/spree/testing_support/factories/return_reason_factory.rb +19 -0
- data/lib/spree/testing_support/factories/role_factory.rb +1 -0
- data/lib/spree/testing_support/factories/saved_report_factory.rb +7 -0
- data/lib/spree/testing_support/factories/seller_factory.rb +34 -0
- data/lib/spree/testing_support/factories/seller_payout_factory.rb +14 -0
- data/lib/spree/testing_support/factories/seller_requirement_factory.rb +61 -0
- data/lib/spree/testing_support/factories/seller_requirement_submission_factory.rb +32 -0
- data/lib/spree/testing_support/factories/seller_transfer_factory.rb +21 -0
- data/lib/spree/testing_support/factories/shipping_label_factory.rb +44 -0
- data/lib/spree/testing_support/factories/state_factory.rb +18 -5
- data/lib/spree/testing_support/factories/stock_level_factory.rb +24 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +12 -6
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +20 -3
- data/lib/spree/testing_support/factories/stock_receipt_factory.rb +37 -0
- data/lib/spree/testing_support/factories/stock_reservation_factory.rb +11 -8
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +53 -6
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -3
- data/lib/spree/testing_support/factories/supplier_factory.rb +17 -0
- data/lib/spree/testing_support/factories/tax_exemption_certificate_factory.rb +18 -0
- data/lib/spree/testing_support/factories/tax_identifier_factory.rb +33 -0
- data/lib/spree/testing_support/factories/tax_line_factory.rb +19 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +5 -2
- data/lib/spree/testing_support/factories/taxon_factory.rb +6 -23
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +8 -0
- data/lib/spree/testing_support/factories/user_factory.rb +8 -13
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- data/lib/spree/testing_support/factories/wishlist_factory.rb +1 -1
- data/lib/spree/testing_support/factories/wishlist_item_factory.rb +10 -0
- data/lib/spree/testing_support/factories/zone_factory.rb +2 -25
- data/lib/spree/testing_support/factories/zone_member_factory.rb +2 -1
- data/lib/spree/testing_support/factories.rb +1 -6
- data/lib/spree/testing_support/imports.rb +16 -0
- data/lib/spree/testing_support/label_provider.rb +49 -0
- data/lib/spree/testing_support/lifecycle_events.rb +6 -1
- data/lib/spree/testing_support/metadata.rb +38 -36
- data/lib/spree/testing_support/order_walkthrough.rb +46 -36
- data/lib/spree/testing_support/preferences.rb +39 -0
- data/lib/spree/testing_support/purchase_order.rb +111 -0
- data/lib/spree/testing_support/store.rb +6 -2
- data/lib/spree/testing_support/tax_identifier_validators.rb +68 -0
- data/lib/spree/translations.rb +139 -5
- data/lib/spree/upgrades/5_4_to_5_5/manifest.yml +1 -1
- data/lib/spree/upgrades/5_5_to_5_6/manifest.yml +17 -9
- data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +683 -0
- data/lib/spree/validators.rb +74 -0
- data/lib/spree/workflow.rb +335 -0
- data/lib/tasks/backfill_actor_types.rake +35 -0
- data/lib/tasks/backfill_custom_field_definition_stores.rake +82 -0
- data/lib/tasks/backfill_import_export_tenancy.rake +93 -0
- data/lib/tasks/backfill_library_media_placements.rake +29 -0
- data/lib/tasks/backfill_media_store_ids.rake +70 -0
- data/lib/tasks/backfill_reason_store_ids.rake +28 -0
- data/lib/tasks/capture_methods_migration.rake +30 -0
- data/lib/tasks/carts_migration.rake +113 -0
- data/lib/tasks/categories_and_collections.rake +188 -0
- data/lib/tasks/cli.rake +22 -3
- data/lib/tasks/consolidate_metadata.rake +73 -0
- data/lib/tasks/core.rake +1 -11
- data/lib/tasks/deliveries_migration.rake +52 -0
- data/lib/tasks/delivery_method_rules_migration.rake +51 -0
- data/lib/tasks/delivery_migration.rake +213 -0
- data/lib/tasks/delivery_profiles_migration.rake +109 -0
- data/lib/tasks/fold_store_credit_categories.rake +40 -0
- data/lib/tasks/fulfillment_statuses_migration.rake +59 -0
- data/lib/tasks/inventory_operations_migration.rake +223 -0
- data/lib/tasks/markets.rake +7 -2
- data/lib/tasks/media.rake +2 -2
- data/lib/tasks/media_class_rename.rake +56 -0
- data/lib/tasks/migrate_country_state_codes.rake +228 -0
- data/lib/tasks/migrate_promotion_option_value_rules.rake +124 -0
- data/lib/tasks/migrate_returns.rake +322 -0
- data/lib/tasks/migrate_rich_text_to_columns.rake +128 -0
- data/lib/tasks/migrate_users_to_customers.rake +161 -0
- data/lib/tasks/order_coupon_code_backfill.rake +32 -0
- data/lib/tasks/order_market_backfill.rake +27 -0
- data/lib/tasks/package_types.rake +62 -0
- data/lib/tasks/price_history.rake +49 -6
- data/lib/tasks/products.rake +21 -2
- data/lib/tasks/remove_master_variant.rake +58 -0
- data/lib/tasks/rich_text.rake +44 -0
- data/lib/tasks/seller_sample_data.rake +142 -0
- data/lib/tasks/setup.rake +18 -0
- data/lib/tasks/single_store_associations.rake +11 -0
- data/lib/tasks/stock.rake +15 -0
- data/lib/tasks/store_binding_migration.rake +33 -0
- data/lib/tasks/store_settings.rake +105 -0
- data/lib/tasks/tax_zones_migration.rake +147 -0
- data/lib/tasks/taxons.rake +9 -10
- data/lib/tasks/typed_adjustments_migration.rake +189 -0
- data/lib/tasks/typed_stock_movements_migration.rake +250 -0
- data/lib/tasks/upgrade.rake +13 -8
- data/spec/fixtures/files/eu_vat_numbers.txt +56 -0
- data/spec/fixtures/files/price_list_prices_import.csv +4 -0
- data/spec/fixtures/files/products_import.csv +1 -1
- data/spec/fixtures/tiny-video.mp4 +0 -0
- metadata +798 -546
- data/app/assets/config/spree_core_manifest.js +0 -4
- data/app/assets/images/google_on_white_hdpi.png +0 -0
- data/app/assets/images/logo.png +0 -0
- data/app/assets/images/payment_icons/ach.svg +0 -1
- data/app/assets/images/payment_icons/achdirectdebit.svg +0 -1
- data/app/assets/images/payment_icons/ada.svg +0 -1
- data/app/assets/images/payment_icons/adyen.svg +0 -1
- data/app/assets/images/payment_icons/affinbank.svg +0 -1
- data/app/assets/images/payment_icons/affirm.svg +0 -1
- data/app/assets/images/payment_icons/afterpay.svg +0 -1
- data/app/assets/images/payment_icons/airtel_money.svg +0 -1
- data/app/assets/images/payment_icons/airteltigo_mobile_money.svg +0 -1
- data/app/assets/images/payment_icons/alandsbanken.svg +0 -1
- data/app/assets/images/payment_icons/alipay.svg +0 -1
- data/app/assets/images/payment_icons/alipay_hk.svg +0 -1
- data/app/assets/images/payment_icons/alliancebank.svg +0 -1
- data/app/assets/images/payment_icons/alma.svg +0 -1
- data/app/assets/images/payment_icons/amazon.svg +0 -1
- data/app/assets/images/payment_icons/ambank.svg +0 -1
- data/app/assets/images/payment_icons/american_express.svg +0 -1
- data/app/assets/images/payment_icons/apecoin.svg +0 -1
- data/app/assets/images/payment_icons/apple_pay.svg +0 -1
- data/app/assets/images/payment_icons/arbitrum.svg +0 -1
- data/app/assets/images/payment_icons/atome.svg +0 -1
- data/app/assets/images/payment_icons/authorizenet.svg +0 -1
- data/app/assets/images/payment_icons/avalanche.svg +0 -1
- data/app/assets/images/payment_icons/bacs.svg +0 -1
- data/app/assets/images/payment_icons/bancontact.svg +0 -1
- data/app/assets/images/payment_icons/bangkokbank.svg +0 -1
- data/app/assets/images/payment_icons/bankislam.svg +0 -1
- data/app/assets/images/payment_icons/bankmuamalat.svg +0 -1
- data/app/assets/images/payment_icons/bankofamerica.svg +0 -1
- data/app/assets/images/payment_icons/bankrakyat.svg +0 -1
- data/app/assets/images/payment_icons/banktransfer.svg +0 -1
- data/app/assets/images/payment_icons/base.svg +0 -1
- data/app/assets/images/payment_icons/becs.svg +0 -1
- data/app/assets/images/payment_icons/benefit.svg +0 -1
- data/app/assets/images/payment_icons/billie.svg +0 -1
- data/app/assets/images/payment_icons/bitcoin.svg +0 -1
- data/app/assets/images/payment_icons/bitcoin_cash.svg +0 -1
- data/app/assets/images/payment_icons/bizum.svg +0 -1
- data/app/assets/images/payment_icons/blik.svg +0 -1
- data/app/assets/images/payment_icons/bnbchain.svg +0 -1
- data/app/assets/images/payment_icons/bogus.svg +0 -1
- data/app/assets/images/payment_icons/bogus_app_coin.svg +0 -1
- data/app/assets/images/payment_icons/boleto.svg +0 -1
- data/app/assets/images/payment_icons/boost.svg +0 -1
- data/app/assets/images/payment_icons/braintree.svg +0 -1
- data/app/assets/images/payment_icons/buckaroopaybybank.svg +0 -1
- data/app/assets/images/payment_icons/busd.svg +0 -1
- data/app/assets/images/payment_icons/cartes_bancaires.svg +0 -1
- data/app/assets/images/payment_icons/cash.svg +0 -1
- data/app/assets/images/payment_icons/cashappafterpay.svg +0 -1
- data/app/assets/images/payment_icons/cashapppay.svg +0 -1
- data/app/assets/images/payment_icons/checkout_finance.svg +0 -1
- data/app/assets/images/payment_icons/chinabank.svg +0 -1
- data/app/assets/images/payment_icons/clearpay.svg +0 -1
- data/app/assets/images/payment_icons/collector_bank.svg +0 -1
- data/app/assets/images/payment_icons/dai.svg +0 -1
- data/app/assets/images/payment_icons/dana.svg +0 -1
- data/app/assets/images/payment_icons/dankort.svg +0 -1
- data/app/assets/images/payment_icons/danske_bank.svg +0 -1
- data/app/assets/images/payment_icons/deutschebank.svg +0 -1
- data/app/assets/images/payment_icons/diners_club.svg +0 -1
- data/app/assets/images/payment_icons/directbanktransferlatinamerica.svg +0 -1
- data/app/assets/images/payment_icons/discover.svg +0 -1
- data/app/assets/images/payment_icons/dogecoin.svg +0 -1
- data/app/assets/images/payment_icons/duitnow.svg +0 -1
- data/app/assets/images/payment_icons/eft_secure.svg +0 -1
- data/app/assets/images/payment_icons/eftpos_au.svg +0 -1
- data/app/assets/images/payment_icons/eftposau.svg +0 -1
- data/app/assets/images/payment_icons/elo.svg +0 -1
- data/app/assets/images/payment_icons/eos.svg +0 -1
- data/app/assets/images/payment_icons/eps.svg +0 -1
- data/app/assets/images/payment_icons/ethereum.svg +0 -1
- data/app/assets/images/payment_icons/eurobonuscheckout.svg +0 -1
- data/app/assets/images/payment_icons/ezcash.svg +0 -1
- data/app/assets/images/payment_icons/fantom.svg +0 -1
- data/app/assets/images/payment_icons/fpx.svg +0 -1
- data/app/assets/images/payment_icons/gcash.svg +0 -1
- data/app/assets/images/payment_icons/generic.svg +0 -1
- data/app/assets/images/payment_icons/genericbank.svg +0 -1
- data/app/assets/images/payment_icons/gift-card.svg +0 -1
- data/app/assets/images/payment_icons/giropay.svg +0 -1
- data/app/assets/images/payment_icons/glbepaypal.svg +0 -1
- data/app/assets/images/payment_icons/gmobanktransfer.svg +0 -1
- data/app/assets/images/payment_icons/gnosis.svg +0 -1
- data/app/assets/images/payment_icons/google_pay.svg +0 -1
- data/app/assets/images/payment_icons/google_wallet.svg +0 -1
- data/app/assets/images/payment_icons/gopay.svg +0 -1
- data/app/assets/images/payment_icons/grabpay.svg +0 -1
- data/app/assets/images/payment_icons/gusd.svg +0 -1
- data/app/assets/images/payment_icons/handelsbanken.svg +0 -1
- data/app/assets/images/payment_icons/hongleongbank.svg +0 -1
- data/app/assets/images/payment_icons/hypercard.svg +0 -1
- data/app/assets/images/payment_icons/hypercash.svg +0 -1
- data/app/assets/images/payment_icons/ideal.svg +0 -1
- data/app/assets/images/payment_icons/in3viaideal.svg +0 -1
- data/app/assets/images/payment_icons/inbank.svg +0 -1
- data/app/assets/images/payment_icons/jcb.svg +0 -1
- data/app/assets/images/payment_icons/kakao_pay.svg +0 -1
- data/app/assets/images/payment_icons/kasikornbank.svg +0 -1
- data/app/assets/images/payment_icons/klarna-pay-later.svg +0 -1
- data/app/assets/images/payment_icons/klarna-pay-now.svg +0 -1
- data/app/assets/images/payment_icons/klarna-slice-it.svg +0 -1
- data/app/assets/images/payment_icons/klarna.svg +0 -1
- data/app/assets/images/payment_icons/knet.svg +0 -1
- data/app/assets/images/payment_icons/krungthaibank.svg +0 -1
- data/app/assets/images/payment_icons/landbank.svg +0 -1
- data/app/assets/images/payment_icons/laybuybyklarna.svg +0 -1
- data/app/assets/images/payment_icons/litecoin.svg +0 -1
- data/app/assets/images/payment_icons/lunchcheck.svg +0 -1
- data/app/assets/images/payment_icons/mach.svg +0 -1
- data/app/assets/images/payment_icons/mada.svg +0 -1
- data/app/assets/images/payment_icons/maestro.svg +0 -1
- data/app/assets/images/payment_icons/master.svg +0 -1
- data/app/assets/images/payment_icons/mayabank.svg +0 -1
- data/app/assets/images/payment_icons/maybank.svg +0 -1
- data/app/assets/images/payment_icons/maybankm2u.svg +0 -1
- data/app/assets/images/payment_icons/maybankqrpay.svg +0 -1
- data/app/assets/images/payment_icons/mbway.svg +0 -1
- data/app/assets/images/payment_icons/mcash.svg +0 -1
- data/app/assets/images/payment_icons/medicinosbankas.svg +0 -1
- data/app/assets/images/payment_icons/mercadopago.svg +0 -1
- data/app/assets/images/payment_icons/metrobank.svg +0 -1
- data/app/assets/images/payment_icons/mobilepay.svg +0 -1
- data/app/assets/images/payment_icons/momopay.svg +0 -1
- data/app/assets/images/payment_icons/monero.svg +0 -1
- data/app/assets/images/payment_icons/mtn_mobile_money.svg +0 -1
- data/app/assets/images/payment_icons/mybank.svg +0 -1
- data/app/assets/images/payment_icons/naver_pay.svg +0 -1
- data/app/assets/images/payment_icons/nelo.svg +0 -1
- data/app/assets/images/payment_icons/netbanking.svg +0 -1
- data/app/assets/images/payment_icons/novalnetdirectdebitach.svg +0 -1
- data/app/assets/images/payment_icons/nubank.svg +0 -1
- data/app/assets/images/payment_icons/ocbcbank.svg +0 -1
- data/app/assets/images/payment_icons/offlinebanktransferlatinamerica.svg +0 -1
- data/app/assets/images/payment_icons/ola_money.svg +0 -1
- data/app/assets/images/payment_icons/oney.svg +0 -1
- data/app/assets/images/payment_icons/onlinebanking.svg +0 -1
- data/app/assets/images/payment_icons/onlinebanktransfer.svg +0 -1
- data/app/assets/images/payment_icons/orangemobilemoney.svg +0 -1
- data/app/assets/images/payment_icons/otpbank.svg +0 -1
- data/app/assets/images/payment_icons/oxxo.svg +0 -1
- data/app/assets/images/payment_icons/paybybank.svg +0 -1
- data/app/assets/images/payment_icons/paybybankmollie.svg +0 -1
- data/app/assets/images/payment_icons/paybybankus.svg +0 -1
- data/app/assets/images/payment_icons/paycash.svg +0 -1
- data/app/assets/images/payment_icons/payco.svg +0 -1
- data/app/assets/images/payment_icons/payeverpaybybank.svg +0 -1
- data/app/assets/images/payment_icons/payme.svg +0 -1
- data/app/assets/images/payment_icons/paynow.svg +0 -1
- data/app/assets/images/payment_icons/paynowmbank.svg +0 -1
- data/app/assets/images/payment_icons/paypal.svg +0 -1
- data/app/assets/images/payment_icons/paypo.svg +0 -1
- data/app/assets/images/payment_icons/payrexxbanktransfer.svg +0 -1
- data/app/assets/images/payment_icons/payrexxpaybybank.svg +0 -1
- data/app/assets/images/payment_icons/paysafecash.svg +0 -1
- data/app/assets/images/payment_icons/pix.svg +0 -1
- data/app/assets/images/payment_icons/polygon.svg +0 -1
- data/app/assets/images/payment_icons/przelewy24.svg +0 -1
- data/app/assets/images/payment_icons/publicbank.svg +0 -1
- data/app/assets/images/payment_icons/publicbank_pbe.svg +0 -1
- data/app/assets/images/payment_icons/qr_promptpay.svg +0 -1
- data/app/assets/images/payment_icons/rabobank.svg +0 -1
- data/app/assets/images/payment_icons/revolut.svg +0 -1
- data/app/assets/images/payment_icons/rhbbank.svg +0 -1
- data/app/assets/images/payment_icons/riverty.svg +0 -1
- data/app/assets/images/payment_icons/safetypaybanktransfer.svg +0 -1
- data/app/assets/images/payment_icons/samsung_pay.svg +0 -1
- data/app/assets/images/payment_icons/satispay.svg +0 -1
- data/app/assets/images/payment_icons/scalapay.svg +0 -1
- data/app/assets/images/payment_icons/scotiabank.svg +0 -1
- data/app/assets/images/payment_icons/seabankid.svg +0 -1
- data/app/assets/images/payment_icons/seabankph.svg +0 -1
- data/app/assets/images/payment_icons/sepa_bank_transfer.svg +0 -1
- data/app/assets/images/payment_icons/sepadebit.svg +0 -22
- data/app/assets/images/payment_icons/sepadirectdebit.svg +0 -1
- data/app/assets/images/payment_icons/seveneleven.svg +0 -1
- data/app/assets/images/payment_icons/shib.svg +0 -1
- data/app/assets/images/payment_icons/shopcash.svg +0 -1
- data/app/assets/images/payment_icons/siauliubankas.svg +0 -1
- data/app/assets/images/payment_icons/skeps.svg +0 -1
- data/app/assets/images/payment_icons/snap_checkout.svg +0 -1
- data/app/assets/images/payment_icons/sofort.svg +0 -1
- data/app/assets/images/payment_icons/softbank.svg +0 -1
- data/app/assets/images/payment_icons/spei.svg +0 -1
- data/app/assets/images/payment_icons/storecredit.svg +0 -1
- data/app/assets/images/payment_icons/stripe.svg +0 -1
- data/app/assets/images/payment_icons/sveacheckout.svg +0 -1
- data/app/assets/images/payment_icons/swedbank.svg +0 -1
- data/app/assets/images/payment_icons/swish.svg +0 -1
- data/app/assets/images/payment_icons/tbibank.svg +0 -1
- data/app/assets/images/payment_icons/thanachartbank.svg +0 -1
- data/app/assets/images/payment_icons/tnmmoney.svg +0 -1
- data/app/assets/images/payment_icons/touchngo.svg +0 -1
- data/app/assets/images/payment_icons/trustly.svg +0 -1
- data/app/assets/images/payment_icons/twint.svg +0 -1
- data/app/assets/images/payment_icons/uaevisa.svg +0 -1
- data/app/assets/images/payment_icons/unionpay.svg +0 -1
- data/app/assets/images/payment_icons/unzerbanktransfer.svg +0 -1
- data/app/assets/images/payment_icons/upi.svg +0 -1
- data/app/assets/images/payment_icons/usbank.svg +0 -1
- data/app/assets/images/payment_icons/usdc.svg +0 -1
- data/app/assets/images/payment_icons/usdt.svg +0 -1
- data/app/assets/images/payment_icons/venmo.svg +0 -1
- data/app/assets/images/payment_icons/vipps.svg +0 -1
- data/app/assets/images/payment_icons/visa.svg +0 -1
- data/app/assets/images/payment_icons/volksbank.svg +0 -1
- data/app/assets/images/payment_icons/waavepaybybank.svg +0 -1
- data/app/assets/images/payment_icons/walley.svg +0 -1
- data/app/assets/images/payment_icons/wbtc.svg +0 -1
- data/app/assets/images/payment_icons/wechatpay.svg +0 -1
- data/app/assets/images/payment_icons/whishcheckout.svg +0 -1
- data/app/assets/images/payment_icons/wingbank.svg +0 -1
- data/app/assets/images/payment_icons/xrp.svg +0 -1
- data/app/assets/images/payment_icons/zip.svg +0 -1
- data/app/controllers/spree/base_controller.rb +0 -11
- data/app/finders/concerns/spree/product_filterable.rb +0 -9
- data/app/finders/spree/addresses/find.rb +0 -27
- data/app/finders/spree/base_finder.rb +0 -14
- data/app/finders/spree/countries/find.rb +0 -31
- data/app/finders/spree/credit_cards/find.rb +0 -12
- data/app/finders/spree/option_values/find_available.rb +0 -28
- data/app/finders/spree/orders/find_complete.rb +0 -114
- data/app/finders/spree/orders/find_current.rb +0 -24
- data/app/finders/spree/orders/finder_helper.rb +0 -17
- data/app/finders/spree/products/find.rb +0 -328
- data/app/finders/spree/taxons/find.rb +0 -99
- data/app/finders/spree/variants/find.rb +0 -30
- data/app/finders/spree/variants/option_types_finder.rb +0 -21
- data/app/helpers/spree/addresses_helper.rb +0 -97
- data/app/helpers/spree/base_helper.rb +0 -132
- data/app/helpers/spree/currency_helper.rb +0 -46
- data/app/helpers/spree/integrations_helper.rb +0 -15
- data/app/helpers/spree/locale_helper.rb +0 -44
- data/app/helpers/spree/localized_names_helper.rb +0 -25
- data/app/helpers/spree/products_helper.rb +0 -147
- data/app/helpers/spree/shipment_helper.rb +0 -12
- data/app/javascript/spree/core/controllers/address_autocomplete_controller.js +0 -230
- data/app/javascript/spree/core/controllers/address_form_controller.js +0 -98
- data/app/javascript/spree/core/controllers/disable_submit_button_controller.js +0 -19
- data/app/javascript/spree/core/controllers/enable_button_controller.js +0 -29
- data/app/javascript/spree/core/helpers/address_autocomplete/google_places_suggestions_provider.js +0 -161
- data/app/javascript/spree/core/helpers/debounce.js +0 -9
- data/app/javascript/spree/core/helpers/scroll_lock.js +0 -25
- data/app/jobs/spree/media/migrate_product_assets_job.rb +0 -83
- data/app/jobs/spree/reports/generate_job.rb +0 -23
- data/app/mailers/spree/report_mailer.rb +0 -20
- data/app/models/concerns/spree/adjustment_source.rb +0 -58
- data/app/models/concerns/spree/default_price.rb +0 -138
- data/app/models/concerns/spree/display_on.rb +0 -50
- data/app/models/concerns/spree/image_methods.rb +0 -40
- data/app/models/concerns/spree/legacy_multi_store_support.rb +0 -48
- data/app/models/concerns/spree/metafield_filterable.rb +0 -162
- data/app/models/concerns/spree/metafields.rb +0 -256
- data/app/models/concerns/spree/number_as_param.rb +0 -13
- data/app/models/concerns/spree/store_scoped_resource.rb +0 -37
- data/app/models/concerns/spree/unique_name.rb +0 -12
- data/app/models/spree/adjustable/adjuster/base.rb +0 -25
- data/app/models/spree/adjustable/adjuster/promotion.rb +0 -41
- data/app/models/spree/adjustable/adjuster/tax.rb +0 -26
- data/app/models/spree/adjustable/adjustments_updater.rb +0 -74
- data/app/models/spree/adjustable/promotion_accumulator.rb +0 -78
- data/app/models/spree/adjustment.rb +0 -130
- data/app/models/spree/asset/support/active_storage.rb +0 -26
- data/app/models/spree/calculator/default_tax.rb +0 -87
- data/app/models/spree/calculator/returns/default_refund_amount.rb +0 -40
- data/app/models/spree/checkout/default_requirements.rb +0 -51
- data/app/models/spree/checkout/registry.rb +0 -112
- data/app/models/spree/checkout/requirement.rb +0 -49
- data/app/models/spree/checkout/requirements.rb +0 -56
- data/app/models/spree/checkout/step.rb +0 -52
- data/app/models/spree/customer_return.rb +0 -94
- data/app/models/spree/image/configuration/active_storage.rb +0 -11
- data/app/models/spree/image.rb +0 -6
- data/app/models/spree/legacy_admin_user.rb +0 -31
- data/app/models/spree/legacy_user.rb +0 -33
- data/app/models/spree/log_entry.rb +0 -30
- data/app/models/spree/metafield_definition/search_capabilities.rb +0 -104
- data/app/models/spree/metafields/boolean.rb +0 -15
- data/app/models/spree/metafields/json.rb +0 -37
- data/app/models/spree/metafields/long_text.rb +0 -11
- data/app/models/spree/metafields/number.rb +0 -23
- data/app/models/spree/metafields/rich_text.rb +0 -18
- data/app/models/spree/metafields/short_text.rb +0 -15
- data/app/models/spree/option_type_prototype.rb +0 -9
- data/app/models/spree/order/address_book.rb +0 -100
- data/app/models/spree/order/checkout.rb +0 -350
- data/app/models/spree/order/currency_updater.rb +0 -37
- data/app/models/spree/order/digital.rb +0 -60
- data/app/models/spree/order/gift_card.rb +0 -71
- data/app/models/spree/order/payments.rb +0 -64
- data/app/models/spree/order/store_credit.rb +0 -110
- data/app/models/spree/order/webhooks.rb +0 -19
- data/app/models/spree/order_approval.rb +0 -19
- data/app/models/spree/order_cancellation.rb +0 -19
- data/app/models/spree/order_contents.rb +0 -31
- data/app/models/spree/order_routing/strategy/legacy.rb +0 -33
- data/app/models/spree/payment/webhooks.rb +0 -15
- data/app/models/spree/permission_sets/base.rb +0 -81
- data/app/models/spree/permission_sets/configuration_management.rb +0 -64
- data/app/models/spree/permission_sets/dashboard_display.rb +0 -17
- data/app/models/spree/permission_sets/default_customer.rb +0 -83
- data/app/models/spree/permission_sets/order_display.rb +0 -27
- data/app/models/spree/permission_sets/order_management.rb +0 -33
- data/app/models/spree/permission_sets/product_display.rb +0 -27
- data/app/models/spree/permission_sets/product_management.rb +0 -28
- data/app/models/spree/permission_sets/promotion_management.rb +0 -22
- data/app/models/spree/permission_sets/role_management.rb +0 -21
- data/app/models/spree/permission_sets/stock_display.rb +0 -19
- data/app/models/spree/permission_sets/stock_management.rb +0 -19
- data/app/models/spree/permission_sets/super_user.rb +0 -28
- data/app/models/spree/permission_sets/user_display.rb +0 -19
- data/app/models/spree/permission_sets/user_management.rb +0 -20
- data/app/models/spree/product/webhooks.rb +0 -17
- data/app/models/spree/prototype_taxon.rb +0 -9
- data/app/models/spree/reimbursement/credit.rb +0 -27
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +0 -44
- data/app/models/spree/reimbursement/reimbursement_type_validator.rb +0 -15
- data/app/models/spree/reimbursement.rb +0 -167
- data/app/models/spree/reimbursement_performer.rb +0 -34
- data/app/models/spree/reimbursement_tax_calculator.rb +0 -37
- data/app/models/spree/reimbursement_type/credit.rb +0 -13
- data/app/models/spree/reimbursement_type/exchange.rb +0 -9
- data/app/models/spree/reimbursement_type/original_payment.rb +0 -13
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +0 -64
- data/app/models/spree/reimbursement_type/store_credit.rb +0 -20
- data/app/models/spree/reimbursement_type.rb +0 -22
- data/app/models/spree/report.rb +0 -140
- data/app/models/spree/report_line_item.rb +0 -27
- data/app/models/spree/report_line_items/products_performance.rb +0 -76
- data/app/models/spree/report_line_items/sales_total.rb +0 -49
- data/app/models/spree/reports/products_performance.rb +0 -44
- data/app/models/spree/reports/sales_total.rb +0 -18
- data/app/models/spree/return_authorization.rb +0 -109
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +0 -24
- data/app/models/spree/return_item/eligibility_validator/default.rb +0 -30
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +0 -16
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -16
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +0 -16
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -16
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +0 -16
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +0 -34
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +0 -9
- data/app/models/spree/return_item.rb +0 -287
- data/app/models/spree/returns_calculator.rb +0 -7
- data/app/models/spree/search_provider/meilisearch.rb +0 -551
- data/app/models/spree/shipment/custom_events.rb +0 -47
- data/app/models/spree/shipment/webhooks.rb +0 -11
- data/app/models/spree/shipment_handler.rb +0 -38
- data/app/models/spree/shipping_category.rb +0 -25
- data/app/models/spree/shipping_method_category.rb +0 -8
- data/app/models/spree/shipping_method_zone.rb +0 -8
- data/app/models/spree/state_change.rb +0 -12
- data/app/models/spree/stock/splitter/digital.rb +0 -35
- data/app/models/spree/stock/splitter/shipping_category.rb +0 -31
- data/app/models/spree/stock_item/webhooks.rb +0 -6
- data/app/models/spree/stock_movement/webhooks.rb +0 -6
- data/app/models/spree/variant/webhooks.rb +0 -6
- data/app/presenters/spree/csv/metafields_helper.rb +0 -17
- data/app/presenters/spree/search_provider/product_presenter.rb +0 -158
- data/app/presenters/spree/variant_presenter.rb +0 -81
- data/app/presenters/spree/variants/option_types_presenter.rb +0 -87
- data/app/services/spree/account/addresses/create.rb +0 -8
- data/app/services/spree/account/addresses/update.rb +0 -8
- data/app/services/spree/account/create.rb +0 -17
- data/app/services/spree/account/update.rb +0 -15
- data/app/services/spree/cart/add_item.rb +0 -63
- data/app/services/spree/cart/associate.rb +0 -29
- data/app/services/spree/cart/change_currency.rb +0 -27
- data/app/services/spree/cart/create.rb +0 -26
- data/app/services/spree/cart/destroy.rb +0 -50
- data/app/services/spree/cart/empty.rb +0 -38
- data/app/services/spree/cart/estimate_shipping_rates.rb +0 -39
- data/app/services/spree/cart/recalculate.rb +0 -35
- data/app/services/spree/cart/remove_item.rb +0 -39
- data/app/services/spree/cart/remove_line_item.rb +0 -28
- data/app/services/spree/cart/remove_out_of_stock_items.rb +0 -65
- data/app/services/spree/cart/set_quantity.rb +0 -32
- data/app/services/spree/cart/update.rb +0 -37
- data/app/services/spree/carts/complete.rb +0 -50
- data/app/services/spree/carts/upsert_items.rb +0 -76
- data/app/services/spree/checkout/complete.rb +0 -23
- data/app/services/spree/checkout/get_shipping_rates.rb +0 -52
- data/app/services/spree/checkout/next.rb +0 -13
- data/app/services/spree/checkout/select_shipping_method.rb +0 -63
- data/app/services/spree/checkout/update.rb +0 -72
- data/app/services/spree/credit_cards/destroy.rb +0 -25
- data/app/services/spree/fulfillments/create.rb +0 -259
- data/app/services/spree/gift_cards/apply.rb +0 -78
- data/app/services/spree/gift_cards/redeem.rb +0 -17
- data/app/services/spree/gift_cards/remove.rb +0 -39
- data/app/services/spree/line_items/create.rb +0 -20
- data/app/services/spree/line_items/destroy.rb +0 -18
- data/app/services/spree/line_items/helper.rb +0 -11
- data/app/services/spree/line_items/update.rb +0 -17
- data/app/services/spree/orders/build_shipments.rb +0 -29
- data/app/services/spree/orders/cancel.rb +0 -54
- data/app/services/spree/orders/complete.rb +0 -53
- data/app/services/spree/orders/update_contact_information.rb +0 -19
- data/app/services/spree/orders/upsert_items.rb +0 -70
- data/app/services/spree/payments/handle_webhook.rb +0 -57
- data/app/services/spree/search_provider/metafield_schema.rb +0 -144
- data/app/services/spree/seeds/countries.rb +0 -35
- data/app/services/spree/seeds/default_reimbursement_types.rb +0 -12
- data/app/services/spree/seeds/shipping_categories.rb +0 -12
- data/app/services/spree/seeds/states.rb +0 -82
- data/app/services/spree/seeds/stock_locations.rb +0 -18
- data/app/services/spree/seeds/store_credit_categories.rb +0 -14
- data/app/services/spree/seeds/zones.rb +0 -52
- data/app/services/spree/shipments/add_item.rb +0 -32
- data/app/services/spree/shipments/change_state.rb +0 -14
- data/app/services/spree/shipments/create.rb +0 -48
- data/app/services/spree/shipments/helper.rb +0 -23
- data/app/services/spree/shipments/remove_item.rb +0 -55
- data/app/services/spree/stores/settings_defaults_by_country.rb +0 -38
- data/app/services/spree/themes/duplicator.rb +0 -40
- data/app/sorters/spree/base_sorter.rb +0 -47
- data/app/sorters/spree/classifications/sort.rb +0 -68
- data/app/sorters/spree/products/sort.rb +0 -73
- data/app/subscribers/spree/report_subscriber.rb +0 -26
- data/app/views/spree/addresses/_form.html.erb +0 -59
- data/app/views/spree/addresses/_suggestions_box.erb +0 -14
- data/app/views/spree/admin_user_mailer/confirmation_email.html.erb +0 -7
- data/app/views/spree/report_mailer/report_done.html.erb +0 -7
- data/app/views/spree/shared/_google_places_api_loader.html.erb +0 -7
- data/app/views/spree/shared/_mailer_line_item.html.erb +0 -12
- data/app/views/spree/shared/_payment.html.erb +0 -52
- data/config/importmap.rb +0 -15
- data/config/initializers/carmen.rb +0 -23
- data/config/initializers/rails61_fixes.rb +0 -1
- data/db/migrate/20250120152208_add_default_locale_to_action_text_rich_texts.rb +0 -7
- data/db/migrate/20250122113708_add_first_and_last_name_to_spree_admin_class.rb +0 -9
- data/db/migrate/20250204162453_create_spree_reports.rb +0 -13
- data/db/migrate/20250217171018_create_action_text_video_embeds.rb +0 -11
- data/db/migrate/20250508060800_add_selected_locale_to_spree_admin_users.rb +0 -8
- data/db/migrate/20260429000001_create_spree_order_cancellations.rb +0 -25
- data/db/migrate/20260429000002_create_spree_order_approvals.rb +0 -22
- data/db/sample_data/markets.rb +0 -64
- data/db/sample_data/metafield_definitions.rb +0 -7
- data/db/sample_data/shipping_methods.rb +0 -61
- data/lib/generators/spree/authentication/custom/custom_generator.rb +0 -49
- data/lib/generators/spree/authentication/custom/templates/authentication_helpers.rb.tt +0 -50
- data/lib/generators/spree/authentication/devise/devise_generator.rb +0 -84
- data/lib/generators/spree/authentication/devise/templates/authentication_helpers.rb.tt +0 -50
- data/lib/generators/spree/dummy/templates/app/assets/config/manifest.js +0 -0
- data/lib/spree/core/components.rb +0 -31
- data/lib/spree/core/controller_helpers/auth.rb +0 -52
- data/lib/spree/core/controller_helpers/currency.rb +0 -59
- data/lib/spree/core/controller_helpers/locale.rb +0 -99
- data/lib/spree/core/controller_helpers/order.rb +0 -172
- data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -48
- data/lib/spree/core/controller_helpers/turbo.rb +0 -19
- data/lib/spree/core/partials.rb +0 -42
- data/lib/spree/core/previews/report_preview.rb +0 -40
- data/lib/spree/permitted_attributes.rb +0 -337
- data/lib/spree/testing_support/authorization_helpers.rb +0 -72
- data/lib/spree/testing_support/caching.rb +0 -47
- data/lib/spree/testing_support/capybara_config.rb +0 -45
- data/lib/spree/testing_support/capybara_ext.rb +0 -83
- data/lib/spree/testing_support/controller_requests.rb +0 -11
- data/lib/spree/testing_support/factories/adjustment_factory.rb +0 -28
- data/lib/spree/testing_support/factories/asset_factory.rb +0 -12
- data/lib/spree/testing_support/factories/customer_return_factory.rb +0 -36
- data/lib/spree/testing_support/factories/digital_factory.rb +0 -10
- data/lib/spree/testing_support/factories/image_factory.rb +0 -11
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +0 -18
- data/lib/spree/testing_support/factories/log_entry_factory.rb +0 -6
- data/lib/spree/testing_support/factories/metafield_definition_factory.rb +0 -82
- data/lib/spree/testing_support/factories/metafield_factory.rb +0 -68
- data/lib/spree/testing_support/factories/prototype_factory.rb +0 -9
- data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +0 -7
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -16
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -7
- data/lib/spree/testing_support/factories/report_factory.rb +0 -33
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -21
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -14
- data/lib/spree/testing_support/factories/shipment_factory.rb +0 -21
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -9
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -31
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -7
- data/lib/spree/testing_support/factories/state_change_factory.rb +0 -8
- data/lib/spree/testing_support/factories/stock_item_factory.rb +0 -22
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -9
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -16
- data/lib/spree/testing_support/factories/wished_variant_factory.rb +0 -6
- data/lib/spree/webhooks.rb +0 -22
- data/lib/tasks/role_users.rake +0 -21
- data/vendor/javascript/@rails--request.js.js +0 -4
- data/vendor/javascript/@stimulus-components--auto-submit.js +0 -4
- data/vendor/javascript/stimulus-reveal-controller.js +0 -4
- data/vendor/javascript/stimulus-textarea-autogrow.js +0 -4
- data/vendor/javascript/tailwindcss-stimulus-components.js +0 -4
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
sku,currency,min_quantity,price,compare_at_price
|
|
2
|
+
DRIP-COFFEE-MAKER-BLACK,USD,1,53.99,
|
|
3
|
+
DRIP-COFFEE-MAKER-BLACK,USD,12,49.99,
|
|
4
|
+
DRIP-COFFEE-MAKER-BLACK,USD,48,44.99,
|
|
5
|
+
DRIP-COFFEE-MAKER-WHITE,USD,1,53.99,
|
|
6
|
+
DRIP-COFFEE-MAKER-WHITE,USD,12,49.99,
|
|
7
|
+
DRIP-COFFEE-MAKER-WHITE,USD,48,44.99,
|
|
8
|
+
DRIP-COFFEE-MAKER-STEEL-GREY,USD,1,53.99,
|
|
9
|
+
DRIP-COFFEE-MAKER-STEEL-GREY,USD,12,49.99,
|
|
10
|
+
DRIP-COFFEE-MAKER-STEEL-GREY,USD,48,44.99,
|
|
11
|
+
2-SLICE-TOASTER-WHITE,USD,1,23.99,
|
|
12
|
+
2-SLICE-TOASTER-WHITE,USD,24,21.99,
|
|
13
|
+
2-SLICE-TOASTER-WHITE,USD,96,19.99,
|
|
14
|
+
2-SLICE-TOASTER-BLACK,USD,1,23.99,
|
|
15
|
+
2-SLICE-TOASTER-BLACK,USD,24,21.99,
|
|
16
|
+
2-SLICE-TOASTER-BLACK,USD,96,19.99,
|
|
17
|
+
2-SLICE-TOASTER-STAINLESS-STEEL,USD,1,23.99,
|
|
18
|
+
2-SLICE-TOASTER-STAINLESS-STEEL,USD,24,21.99,
|
|
19
|
+
2-SLICE-TOASTER-STAINLESS-STEEL,USD,96,19.99,
|
|
20
|
+
ELECTRIC-KETTLE-1-7L-WHITE,USD,1,26.99,
|
|
21
|
+
ELECTRIC-KETTLE-1-7L-WHITE,USD,24,24.99,
|
|
22
|
+
ELECTRIC-KETTLE-1-7L-WHITE,USD,96,22.49,
|
|
23
|
+
ELECTRIC-KETTLE-1-7L-BLACK,USD,1,26.99,
|
|
24
|
+
ELECTRIC-KETTLE-1-7L-BLACK,USD,24,24.99,
|
|
25
|
+
ELECTRIC-KETTLE-1-7L-BLACK,USD,96,22.49,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Links each product type to the category its products live in, so a merchant
|
|
2
|
+
# creating a new product of that type gets the category suggested for free.
|
|
3
|
+
#
|
|
4
|
+
# Runs after the product import because the import is what creates the
|
|
5
|
+
# categories — before it there is nothing to link to. Seeding is additive and
|
|
6
|
+
# only applies to products created from here on, so linking after the fact
|
|
7
|
+
# changes nothing about the imported catalog.
|
|
8
|
+
store = Spree::Store.default
|
|
9
|
+
|
|
10
|
+
categories_by_type = {
|
|
11
|
+
'Kitchen Appliance' => 'Kitchen',
|
|
12
|
+
'Air Treatment' => 'Air & Climate',
|
|
13
|
+
'Garment Care' => 'Garment Care',
|
|
14
|
+
'Vacuum Cleaner' => 'Floor Care',
|
|
15
|
+
'Hair Styling' => 'Personal Care',
|
|
16
|
+
'Grooming' => 'Personal Care'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
categories_by_type.each do |product_type_name, category_name|
|
|
20
|
+
product_type = store.product_types.find_by(name: product_type_name)
|
|
21
|
+
next if product_type.nil?
|
|
22
|
+
|
|
23
|
+
category = store.categories.find_by(name: category_name)
|
|
24
|
+
next if category.nil? || product_type.categories.include?(category)
|
|
25
|
+
|
|
26
|
+
product_type.categories << category
|
|
27
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Six product types covering the demo catalog, each with a different schema so
|
|
2
|
+
# the feature is visible rather than nominal: every type shares the electrical
|
|
3
|
+
# basics (wattage, voltage, warranty) and then adds the fields its category
|
|
4
|
+
# actually needs — capacity for kitchen appliances, runtime for cordless
|
|
5
|
+
# grooming, room coverage and noise for air treatment.
|
|
6
|
+
#
|
|
7
|
+
# Runs before the product import, which resolves the CSV's product_type column
|
|
8
|
+
# by name. Without this file the import would still create the types, but they
|
|
9
|
+
# would carry no option types or custom field schema.
|
|
10
|
+
#
|
|
11
|
+
# Categories are attached afterwards by product_type_categories.rb — the import
|
|
12
|
+
# is what creates them, so there is nothing to link to at this point.
|
|
13
|
+
store = Spree::Store.default
|
|
14
|
+
|
|
15
|
+
color_option_type = Spree::OptionType.find_by(name: 'color')
|
|
16
|
+
|
|
17
|
+
definitions = store.custom_field_definitions.where(
|
|
18
|
+
namespace: 'custom',
|
|
19
|
+
resource_type: 'Spree::Product'
|
|
20
|
+
).index_by(&:key)
|
|
21
|
+
|
|
22
|
+
# `required` is advisory — the dashboard marks the field, nothing rejects a
|
|
23
|
+
# blank value. It still says which fields the type considers essential.
|
|
24
|
+
product_types = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Kitchen Appliance',
|
|
27
|
+
required_fields: %w[wattage voltage warranty],
|
|
28
|
+
optional_fields: %w[capacity]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
# room_coverage is optional, not required: purifiers and humidifiers treat a
|
|
32
|
+
# room, fans just move air — so the type covers both without lying about one.
|
|
33
|
+
name: 'Air Treatment',
|
|
34
|
+
required_fields: %w[wattage voltage warranty],
|
|
35
|
+
optional_fields: %w[room_coverage capacity noise_level connectivity]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Garment Care',
|
|
39
|
+
required_fields: %w[wattage voltage warranty],
|
|
40
|
+
optional_fields: %w[capacity]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Vacuum Cleaner',
|
|
44
|
+
required_fields: %w[wattage voltage warranty],
|
|
45
|
+
optional_fields: %w[runtime connectivity]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Hair Styling',
|
|
49
|
+
required_fields: %w[wattage voltage warranty],
|
|
50
|
+
optional_fields: []
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Grooming',
|
|
54
|
+
required_fields: %w[wattage voltage warranty runtime],
|
|
55
|
+
optional_fields: []
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
product_types.each do |attributes|
|
|
60
|
+
product_type = store.product_types.find_or_initialize_by(name: attributes[:name])
|
|
61
|
+
product_type.save!
|
|
62
|
+
|
|
63
|
+
# Seeded onto products created with this type — every demo product varies by color.
|
|
64
|
+
if color_option_type.present? && product_type.option_types.exclude?(color_option_type)
|
|
65
|
+
product_type.option_types << color_option_type
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# One pass: required fields first, so sort_order falls out of the position
|
|
69
|
+
# in the merged list rather than needing an offset.
|
|
70
|
+
fields = attributes[:required_fields].map { |key| [key, true] } +
|
|
71
|
+
attributes[:optional_fields].map { |key| [key, false] }
|
|
72
|
+
|
|
73
|
+
fields.each_with_index do |(key, required), index|
|
|
74
|
+
definition = definitions[key]
|
|
75
|
+
next if definition.nil?
|
|
76
|
+
|
|
77
|
+
join = product_type.product_type_custom_field_definitions.
|
|
78
|
+
find_or_initialize_by(custom_field_definition_id: definition.id)
|
|
79
|
+
join.required = required
|
|
80
|
+
join.sort_order = index
|
|
81
|
+
join.save!
|
|
82
|
+
end
|
|
83
|
+
end
|
data/db/sample_data/products.csv
CHANGED
|
@@ -1,128 +1,129 @@
|
|
|
1
|
-
slug,sku,name,price,compare_at_price,currency,status,description,meta_title,meta_description,meta_keywords,tags,tax_category,
|
|
2
|
-
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE,Automatic Espresso Machine,0,0,USD,active,"Fully automatic bean-to-cup espresso machine with ceramic grinder, 15-bar pressure system, and intuitive touch display. Delivers barista-quality espresso, cappuccino, and latte at the touch of a button.",Automatic Espresso Machine | Spree Commerce Demo,Shop the Automatic Espresso Machine on the Spree Commerce demo store. Bean-to-cup coffee with 15-bar pressure & ceramic grinder. Spree ecommerce in action.,"automatic espresso machine, bean-to-cup coffee machine, home espresso machine, spree commerce, spree demo store, ecommerce platform demo","coffee, espresso, kitchen, coffee machines, bean-to-cup, automatic",Default,
|
|
1
|
+
slug,sku,name,price,compare_at_price,currency,status,description,meta_title,meta_description,meta_keywords,tags,tax_category,product_type,category1,option1_name,option1_value,option2_name,option2_value,image1_src,width,height,depth,dimensions_unit,weight,weight_unit,available_on,discontinue_on,inventory_count,inventory_backorderable,track_inventory,custom_field.custom.wattage,custom_field.custom.voltage,custom_field.custom.warranty,custom_field.custom.capacity,custom_field.custom.runtime,custom_field.custom.room_coverage,custom_field.custom.noise_level,custom_field.custom.connectivity
|
|
2
|
+
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE,Automatic Espresso Machine,0,0,USD,active,"Fully automatic bean-to-cup espresso machine with ceramic grinder, 15-bar pressure system, and intuitive touch display. Delivers barista-quality espresso, cappuccino, and latte at the touch of a button.",Automatic Espresso Machine | Spree Commerce Demo,Shop the Automatic Espresso Machine on the Spree Commerce demo store. Bean-to-cup coffee with 15-bar pressure & ceramic grinder. Spree ecommerce in action.,"automatic espresso machine, bean-to-cup coffee machine, home espresso machine, spree commerce, spree demo store, ecommerce platform demo","coffee, espresso, kitchen, coffee machines, bean-to-cup, automatic",Default,Kitchen Appliance,Kitchen -> Coffee Machines,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/automatic-espresso-machine.webp,,,,in,,lb,,,,FALSE,,1400W,220-240V,2 Years,,,,,
|
|
3
3
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-MATTE-BLACK,,879.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/automatic-espresso-machine-matte-black.webp,13.8,15.7,11.8,in,19.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
4
4
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-SILVER,,879.99,0,USD,,,,,,,,,,Color,Silver,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/automatic-espresso-machine-silver.webp,13.8,15.7,11.8,in,19.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
5
5
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-WHITE,,879.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/automatic-espresso-machine-white.webp,13.8,15.7,11.8,in,19.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
6
|
-
semi-automatic-espresso-machine,SEMI-AUTOMATIC-ESPRESSO-MACHINE,Semi-Automatic Espresso Machine,0,0,USD,active,"Professional-grade semi-automatic espresso machine with 58mm portafilter, PID temperature control, and steam wand for manual milk frothing.",Semi-Automatic Espresso Machine | Spree Commerce Demo,"Browse the Semi-Automatic Espresso Machine on the Spree Commerce demo store. 58mm portafilter, PID temperature control & steam wand. Powered by Spree.","semi-automatic espresso machine, espresso machine, home barista, PID espresso machine, spree commerce demo, ecommerce example","coffee, espresso, kitchen, coffee machines, semi-automatic, barista",Default,
|
|
6
|
+
semi-automatic-espresso-machine,SEMI-AUTOMATIC-ESPRESSO-MACHINE,Semi-Automatic Espresso Machine,0,0,USD,active,"Professional-grade semi-automatic espresso machine with 58mm portafilter, PID temperature control, and steam wand for manual milk frothing.",Semi-Automatic Espresso Machine | Spree Commerce Demo,"Browse the Semi-Automatic Espresso Machine on the Spree Commerce demo store. 58mm portafilter, PID temperature control & steam wand. Powered by Spree.","semi-automatic espresso machine, espresso machine, home barista, PID espresso machine, spree commerce demo, ecommerce example","coffee, espresso, kitchen, coffee machines, semi-automatic, barista",Default,Kitchen Appliance,Kitchen -> Coffee Machines,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/semi-automatic-espresso-machine.webp,,,,in,,lb,,,,FALSE,,1350W,220-240V,2 Years,,,,,
|
|
7
7
|
semi-automatic-espresso-machine,SEMI-AUTOMATIC-ESPRESSO-MACHINE-STAINLESS-STEEL,,549.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/semi-automatic-espresso-machine-stainless-steel.webp,11.8,15,12.6,in,17.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
8
8
|
semi-automatic-espresso-machine,SEMI-AUTOMATIC-ESPRESSO-MACHINE-MATTE-BLACK,,549.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/semi-automatic-espresso-machine-matte-black.webp,11.8,15,12.6,in,17.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
9
|
-
drip-coffee-maker,DRIP-COFFEE-MAKER,Drip Coffee Maker 1.5L,0,0,USD,active,"Programmable drip coffee maker with thermal carafe, adjustable brew strength, and 24-hour timer. Brews up to 12 cups.",Drip Coffee Maker 1.5L | Spree Commerce Demo,"Explore the Drip Coffee Maker 1.5L on the Spree Commerce demo store. Programmable, thermal carafe, brew strength control & 24-hour timer for up to 12 cups.","drip coffee maker, programmable coffee maker, thermal carafe coffee machine, spree commerce, spree demo store, open source ecommerce","coffee, drip coffee, kitchen, coffee machines, programmable, 12-cup",Default,
|
|
9
|
+
drip-coffee-maker,DRIP-COFFEE-MAKER,Drip Coffee Maker 1.5L,0,0,USD,active,"Programmable drip coffee maker with thermal carafe, adjustable brew strength, and 24-hour timer. Brews up to 12 cups.",Drip Coffee Maker 1.5L | Spree Commerce Demo,"Explore the Drip Coffee Maker 1.5L on the Spree Commerce demo store. Programmable, thermal carafe, brew strength control & 24-hour timer for up to 12 cups.","drip coffee maker, programmable coffee maker, thermal carafe coffee machine, spree commerce, spree demo store, open source ecommerce","coffee, drip coffee, kitchen, coffee machines, programmable, 12-cup",Default,Kitchen Appliance,Kitchen -> Coffee Machines,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/drip-coffee-maker.webp,,,,in,,lb,,,,FALSE,,1000W,220-240V,2 Years,1.5L,,,,
|
|
10
10
|
drip-coffee-maker,DRIP-COFFEE-MAKER-BLACK,,89.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/drip-coffee-maker-black.webp,7.9,14.6,9.1,in,4.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
11
11
|
drip-coffee-maker,DRIP-COFFEE-MAKER-WHITE,,89.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/drip-coffee-maker-white.webp,7.9,14.6,9.1,in,4.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
12
12
|
drip-coffee-maker,DRIP-COFFEE-MAKER-STEEL-GREY,,89.99,0,USD,,,,,,,,,,Color,Steel Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/drip-coffee-maker-steel-grey.webp,7.9,14.6,9.1,in,4.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
13
|
-
digital-air-fryer-4l,DIGITAL-AIR-FRYER-4L,Digital Air Fryer 4.2L,0,0,USD,active,"Compact digital air fryer with 8 preset programs, rapid air circulation technology, and dishwasher-safe basket. Perfect for small households.",Digital Air Fryer 4.2L | Spree Commerce Demo,"Shop the Digital Air Fryer 4.2L on the Spree Commerce demo store. 8 presets, rapid air circulation & dishwasher-safe basket. Perfect for small households.","digital air fryer, 4L air fryer, compact air fryer, spree commerce, spree demo store, ecommerce platform demo","air fryer, kitchen, cooking, healthy cooking, compact, 4L",Default,
|
|
13
|
+
digital-air-fryer-4l,DIGITAL-AIR-FRYER-4L,Digital Air Fryer 4.2L,0,0,USD,active,"Compact digital air fryer with 8 preset programs, rapid air circulation technology, and dishwasher-safe basket. Perfect for small households.",Digital Air Fryer 4.2L | Spree Commerce Demo,"Shop the Digital Air Fryer 4.2L on the Spree Commerce demo store. 8 presets, rapid air circulation & dishwasher-safe basket. Perfect for small households.","digital air fryer, 4L air fryer, compact air fryer, spree commerce, spree demo store, ecommerce platform demo","air fryer, kitchen, cooking, healthy cooking, compact, 4L",Default,Kitchen Appliance,Kitchen -> Air Fryers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-4l.webp,,,,in,,lb,,,,FALSE,,1400W,220-240V,2 Years,4.2L,,,,
|
|
14
14
|
digital-air-fryer-4l,DIGITAL-AIR-FRYER-4L-MATTE-BLACK,,119.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-4l-matte-black.webp,11,11.8,11,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
15
15
|
digital-air-fryer-4l,DIGITAL-AIR-FRYER-4L-WHITE,,119.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-4l-white.webp,11,11.8,11,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
16
|
-
digital-air-fryer-6l,DIGITAL-AIR-FRYER-6L,Digital Air Fryer 6.2L,0,0,USD,active,"Large-capacity digital air fryer with touchscreen controls, 8 presets, and transparent viewing window. Feeds families of 4-6.",Digital Air Fryer 6.2L | Spree Commerce Demo,"Browse the Digital Air Fryer 6.2L on the Spree Commerce demo store. Touchscreen, 8 presets & viewing window. Feeds families of 4–6. Powered by Spree.","digital air fryer, 6L air fryer, family air fryer, touchscreen air fryer, spree commerce, spree demo store","air fryer, kitchen, cooking, healthy cooking, family size, 6L",Default,
|
|
16
|
+
digital-air-fryer-6l,DIGITAL-AIR-FRYER-6L,Digital Air Fryer 6.2L,0,0,USD,active,"Large-capacity digital air fryer with touchscreen controls, 8 presets, and transparent viewing window. Feeds families of 4-6.",Digital Air Fryer 6.2L | Spree Commerce Demo,"Browse the Digital Air Fryer 6.2L on the Spree Commerce demo store. Touchscreen, 8 presets & viewing window. Feeds families of 4–6. Powered by Spree.","digital air fryer, 6L air fryer, family air fryer, touchscreen air fryer, spree commerce, spree demo store","air fryer, kitchen, cooking, healthy cooking, family size, 6L",Default,Kitchen Appliance,Kitchen -> Air Fryers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-6l.webp,,,,in,,lb,,,,FALSE,,1800W,220-240V,2 Years,6.2L,,,,
|
|
17
17
|
digital-air-fryer-6l,DIGITAL-AIR-FRYER-6L-MATTE-BLACK,,179.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-6l-matte-black.webp,13,13,12.6,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
18
18
|
digital-air-fryer-6l,DIGITAL-AIR-FRYER-6L-SILVER,,179.99,0,USD,,,,,,,,,,Color,Silver,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-6l-silver.webp,13,13,12.6,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
19
19
|
digital-air-fryer-6l,DIGITAL-AIR-FRYER-6L-WHITE,,179.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/digital-air-fryer-6l-white.webp,13,13,12.6,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
20
|
-
dual-basket-air-fryer,DUAL-BASKET-AIR-FRYER,Dual Basket Air Fryer 8L,0,0,USD,active,"Dual-zone air fryer with two independent 4L baskets, sync-finish technology, and 12 cooking presets. Cook two dishes simultaneously at different temperatures.",Dual Basket Air Fryer 8L | Spree Commerce Demo,"Shop the Dual Basket Air Fryer 8L on the Spree Commerce demo store. Two 4L baskets, sync-finish tech & 12 cooking presets. Cook two dishes simultaneously.","dual basket air fryer, double air fryer, 8L air fryer, spree commerce, spree demo, ecommerce example","air fryer, kitchen, cooking, dual basket, family size, 8L",Default,
|
|
20
|
+
dual-basket-air-fryer,DUAL-BASKET-AIR-FRYER,Dual Basket Air Fryer 8L,0,0,USD,active,"Dual-zone air fryer with two independent 4L baskets, sync-finish technology, and 12 cooking presets. Cook two dishes simultaneously at different temperatures.",Dual Basket Air Fryer 8L | Spree Commerce Demo,"Shop the Dual Basket Air Fryer 8L on the Spree Commerce demo store. Two 4L baskets, sync-finish tech & 12 cooking presets. Cook two dishes simultaneously.","dual basket air fryer, double air fryer, 8L air fryer, spree commerce, spree demo, ecommerce example","air fryer, kitchen, cooking, dual basket, family size, 8L",Default,Kitchen Appliance,Kitchen -> Air Fryers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/dual-basket-air-fryer.webp,,,,in,,lb,,,,FALSE,,2200W,220-240V,2 Years,8L,,,,
|
|
21
21
|
dual-basket-air-fryer,DUAL-BASKET-AIR-FRYER-MATTE-BLACK,,249.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/dual-basket-air-fryer-matte-black.webp,15.7,12.6,13,in,14.3,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
22
22
|
dual-basket-air-fryer,DUAL-BASKET-AIR-FRYER-STAINLESS-STEEL,,249.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/dual-basket-air-fryer-stainless-steel.webp,15.7,12.6,13,in,14.3,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
23
|
-
high-speed-blender,HIGH-SPEED-BLENDER,High Speed Blender 2.0L,0,0,USD,active,"Professional-grade blender with 1500W motor, variable speed dial, pulse function, and BPA-free Tritan jug. Crushes ice and blends frozen fruit effortlessly.",High Speed Blender 2.0L | Spree Commerce Demo,"Discover the High Speed Blender 2.0L on the Spree Commerce demo store. 1500W motor, variable speed & BPA-free Tritan jug. Crushes ice & frozen fruit effortlessly.","high speed blender, professional blender, 2L blender, spree commerce, spree demo store, open source ecommerce","blender, kitchen, smoothies, high speed, professional",Default,
|
|
23
|
+
high-speed-blender,HIGH-SPEED-BLENDER,High Speed Blender 2.0L,0,0,USD,active,"Professional-grade blender with 1500W motor, variable speed dial, pulse function, and BPA-free Tritan jug. Crushes ice and blends frozen fruit effortlessly.",High Speed Blender 2.0L | Spree Commerce Demo,"Discover the High Speed Blender 2.0L on the Spree Commerce demo store. 1500W motor, variable speed & BPA-free Tritan jug. Crushes ice & frozen fruit effortlessly.","high speed blender, professional blender, 2L blender, spree commerce, spree demo store, open source ecommerce","blender, kitchen, smoothies, high speed, professional",Default,Kitchen Appliance,Kitchen -> Blenders,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/high-speed-blender.webp,,,,in,,lb,,,,FALSE,,1500W,220-240V,3 Years,2.0L,,,,
|
|
24
24
|
high-speed-blender,HIGH-SPEED-BLENDER-STAINLESS-STEEL,,199.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/high-speed-blender-stainless-steel.webp,7.9,19.7,7.9,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
25
25
|
high-speed-blender,HIGH-SPEED-BLENDER-MATTE-BLACK,,199.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/high-speed-blender-matte-black.webp,7.9,19.7,7.9,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
26
26
|
high-speed-blender,HIGH-SPEED-BLENDER-WHITE,,199.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/high-speed-blender-white.webp,7.9,19.7,7.9,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
27
|
-
personal-blender,PERSONAL-BLENDER,Personal Blender 600ml,0,0,USD,active,Compact single-serve blender with portable travel cup. Blend and go in seconds. Dishwasher-safe components.,Personal Blender 600ml | Spree Commerce Demo,Shop the Personal Blender 600ml on the Spree Commerce demo store. Single-serve with portable travel cup. Blend and go. Dishwasher-safe components.,"personal blender, single serve blender, travel blender, portable blender, spree commerce demo, ecommerce platform","blender, kitchen, personal, single serve, portable, travel",Default,
|
|
27
|
+
personal-blender,PERSONAL-BLENDER,Personal Blender 600ml,0,0,USD,active,Compact single-serve blender with portable travel cup. Blend and go in seconds. Dishwasher-safe components.,Personal Blender 600ml | Spree Commerce Demo,Shop the Personal Blender 600ml on the Spree Commerce demo store. Single-serve with portable travel cup. Blend and go. Dishwasher-safe components.,"personal blender, single serve blender, travel blender, portable blender, spree commerce demo, ecommerce platform","blender, kitchen, personal, single serve, portable, travel",Default,Kitchen Appliance,Kitchen -> Blenders,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/personal-blender.webp,,,,in,,lb,,,,FALSE,,350W,220-240V,2 Years,600ml,,,,
|
|
28
28
|
personal-blender,PERSONAL-BLENDER-WHITE,,49.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/personal-blender-white.webp,5.1,15,5.1,in,2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
29
29
|
personal-blender,PERSONAL-BLENDER-MINT,,49.99,0,USD,,,,,,,,,,Color,Mint,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/personal-blender-mint.webp,5.1,15,5.1,in,2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
30
30
|
personal-blender,PERSONAL-BLENDER-GREY,,49.99,0,USD,,,,,,,,,,Color,Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/personal-blender-grey.webp,5.1,15,5.1,in,2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
31
|
-
electric-kettle-1-7l,ELECTRIC-KETTLE-1-7L,Electric Kettle 1.7L,0,0,USD,active,"Rapid-boil electric kettle with concealed element, 360-degree swivel base, water level indicator, and auto shut-off. Boils a full kettle in under 3 minutes.",Electric Kettle 1.7L | Spree Commerce Demo,"Browse the Electric Kettle 1.7L on the Spree Commerce demo store. Rapid-boil, concealed element & 360° swivel base. Auto shut-off. Boils full in under 3 minutes.","electric kettle, 1.7L kettle, rapid boil kettle, spree commerce, spree demo store, ecommerce demo","kettle, kitchen, electric kettle, rapid boil",Default,
|
|
31
|
+
electric-kettle-1-7l,ELECTRIC-KETTLE-1-7L,Electric Kettle 1.7L,0,0,USD,active,"Rapid-boil electric kettle with concealed element, 360-degree swivel base, water level indicator, and auto shut-off. Boils a full kettle in under 3 minutes.",Electric Kettle 1.7L | Spree Commerce Demo,"Browse the Electric Kettle 1.7L on the Spree Commerce demo store. Rapid-boil, concealed element & 360° swivel base. Auto shut-off. Boils full in under 3 minutes.","electric kettle, 1.7L kettle, rapid boil kettle, spree commerce, spree demo store, ecommerce demo","kettle, kitchen, electric kettle, rapid boil",Default,Kitchen Appliance,Kitchen -> Kettles,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/electric-kettle-1-7l.webp,,,,in,,lb,,,,FALSE,,2200W,220-240V,2 Years,1.7L,,,,
|
|
32
32
|
electric-kettle-1-7l,ELECTRIC-KETTLE-1-7L-WHITE,,44.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/electric-kettle-1-7l-white.webp,7.9,9.8,5.5,in,2.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
33
33
|
electric-kettle-1-7l,ELECTRIC-KETTLE-1-7L-BLACK,,44.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/electric-kettle-1-7l-black.webp,7.9,9.8,5.5,in,2.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
34
34
|
electric-kettle-1-7l,ELECTRIC-KETTLE-1-7L-STAINLESS-STEEL,,44.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/electric-kettle-1-7l-stainless-steel.webp,7.9,9.8,5.5,in,2.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
35
|
-
temperature-control-kettle,TEMPERATURE-CONTROL-KETTLE,Temperature Control Kettle 1.7L,0,0,USD,active,"Variable temperature kettle with 5 heat settings (40-100C), keep-warm function, and LED temperature display. Ideal for specialty tea and pour-over coffee.",Temperature Control Kettle 1.7L | Spree Commerce Demo,"Explore the Temperature Control Kettle 1.7L on the Spree Commerce demo store. 5 heat settings, keep-warm & LED display. Ideal for specialty tea & pour-over.","temperature control kettle, variable temperature kettle, tea kettle, pour-over kettle, spree commerce demo, open source ecommerce","kettle, kitchen, temperature control, specialty tea, pour-over coffee",Default,
|
|
35
|
+
temperature-control-kettle,TEMPERATURE-CONTROL-KETTLE,Temperature Control Kettle 1.7L,0,0,USD,active,"Variable temperature kettle with 5 heat settings (40-100C), keep-warm function, and LED temperature display. Ideal for specialty tea and pour-over coffee.",Temperature Control Kettle 1.7L | Spree Commerce Demo,"Explore the Temperature Control Kettle 1.7L on the Spree Commerce demo store. 5 heat settings, keep-warm & LED display. Ideal for specialty tea & pour-over.","temperature control kettle, variable temperature kettle, tea kettle, pour-over kettle, spree commerce demo, open source ecommerce","kettle, kitchen, temperature control, specialty tea, pour-over coffee",Default,Kitchen Appliance,Kitchen -> Kettles,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/temperature-control-kettle.webp,,,,in,,lb,,,,FALSE,,2200W,220-240V,2 Years,1.7L,,,,
|
|
36
36
|
temperature-control-kettle,TEMPERATURE-CONTROL-KETTLE-STAINLESS-STEEL,,79.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/temperature-control-kettle-stainless-steel.webp,8.3,10.2,5.5,in,2.9,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
37
37
|
temperature-control-kettle,TEMPERATURE-CONTROL-KETTLE-MATTE-BLACK,,79.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/temperature-control-kettle-matte-black.webp,8.3,10.2,5.5,in,2.9,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
38
|
-
2-slice-toaster,2-SLICE-TOASTER,2-Slice Toaster,0,0,USD,active,"Compact 2-slice toaster with 7 browning levels, defrost and reheat functions, extra-wide slots, and removable crumb tray.",2-Slice Toaster | Spree Commerce Demo,"Shop the 2-Slice Toaster on the Spree Commerce demo store. 7 browning levels, defrost & reheat, extra-wide slots & crumb tray. Compact kitchen essential.","2-slice toaster, toaster, kitchen toaster, spree commerce, spree demo store, ecommerce platform example","toaster, kitchen, 2-slice, compact",Default,
|
|
38
|
+
2-slice-toaster,2-SLICE-TOASTER,2-Slice Toaster,0,0,USD,active,"Compact 2-slice toaster with 7 browning levels, defrost and reheat functions, extra-wide slots, and removable crumb tray.",2-Slice Toaster | Spree Commerce Demo,"Shop the 2-Slice Toaster on the Spree Commerce demo store. 7 browning levels, defrost & reheat, extra-wide slots & crumb tray. Compact kitchen essential.","2-slice toaster, toaster, kitchen toaster, spree commerce, spree demo store, ecommerce platform example","toaster, kitchen, 2-slice, compact",Default,Kitchen Appliance,Kitchen -> Toasters,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/2-slice-toaster.webp,,,,in,,lb,,,,FALSE,,850W,220-240V,2 Years,,,,,
|
|
39
39
|
2-slice-toaster,2-SLICE-TOASTER-WHITE,,39.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/2-slice-toaster-white.webp,11.4,7.1,5.9,in,2.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
40
40
|
2-slice-toaster,2-SLICE-TOASTER-BLACK,,39.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/2-slice-toaster-black.webp,11.4,7.1,5.9,in,2.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
41
41
|
2-slice-toaster,2-SLICE-TOASTER-STAINLESS-STEEL,,39.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/2-slice-toaster-stainless-steel.webp,11.4,7.1,5.9,in,2.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
42
|
-
4-slice-toaster,4-SLICE-TOASTER,4-Slice Toaster,0,0,USD,active,"Wide 4-slice toaster with independent dual controls, 7 browning levels, bagel mode, and high-lift lever for smaller items.",4-Slice Toaster | Spree Commerce Demo,"Browse the 4-Slice Toaster on the Spree Commerce demo store. Independent dual controls, 7 browning levels, bagel mode & high-lift lever for smaller items.","4-slice toaster, family toaster, wide slot toaster, spree commerce, spree demo store, open source ecommerce","toaster, kitchen, 4-slice, family, bagel mode",Default,
|
|
42
|
+
4-slice-toaster,4-SLICE-TOASTER,4-Slice Toaster,0,0,USD,active,"Wide 4-slice toaster with independent dual controls, 7 browning levels, bagel mode, and high-lift lever for smaller items.",4-Slice Toaster | Spree Commerce Demo,"Browse the 4-Slice Toaster on the Spree Commerce demo store. Independent dual controls, 7 browning levels, bagel mode & high-lift lever for smaller items.","4-slice toaster, family toaster, wide slot toaster, spree commerce, spree demo store, open source ecommerce","toaster, kitchen, 4-slice, family, bagel mode",Default,Kitchen Appliance,Kitchen -> Toasters,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/4-slice-toaster.webp,,,,in,,lb,,,,FALSE,,1600W,220-240V,2 Years,,,,,
|
|
43
43
|
4-slice-toaster,4-SLICE-TOASTER-WHITE,,64.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/4-slice-toaster-white.webp,16.5,7.1,5.9,in,4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
44
44
|
4-slice-toaster,4-SLICE-TOASTER-BLACK,,64.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/4-slice-toaster-black.webp,16.5,7.1,5.9,in,4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
45
45
|
4-slice-toaster,4-SLICE-TOASTER-STAINLESS-STEEL,,64.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/4-slice-toaster-stainless-steel.webp,16.5,7.1,5.9,in,4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
46
|
-
food-processor-3l,FOOD-PROCESSOR-3L,Food Processor 3.0L,0,0,USD,active,"Versatile food processor with 1000W motor, stainless steel S-blade, slicing and shredding discs, dough hook, and citrus press attachment.",Food Processor 3.0L | Spree Commerce Demo,"Discover the Food Processor 3.0L on the Spree Commerce demo store. 1000W motor with S-blade, slicing, shredding, dough hook & citrus press attachment.","food processor, 3L food processor, kitchen food processor, spree commerce, spree demo store, ecommerce example","food processor, kitchen, 3L, versatile, cooking prep",Default,
|
|
46
|
+
food-processor-3l,FOOD-PROCESSOR-3L,Food Processor 3.0L,0,0,USD,active,"Versatile food processor with 1000W motor, stainless steel S-blade, slicing and shredding discs, dough hook, and citrus press attachment.",Food Processor 3.0L | Spree Commerce Demo,"Discover the Food Processor 3.0L on the Spree Commerce demo store. 1000W motor with S-blade, slicing, shredding, dough hook & citrus press attachment.","food processor, 3L food processor, kitchen food processor, spree commerce, spree demo store, ecommerce example","food processor, kitchen, 3L, versatile, cooking prep",Default,Kitchen Appliance,Kitchen -> Food Processors,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/food-processor-3l.webp,,,,in,,lb,,,,FALSE,,1000W,220-240V,3 Years,3.0L,,,,
|
|
47
47
|
food-processor-3l,FOOD-PROCESSOR-3L-STAINLESS-STEEL,,149.99,0,USD,,,,,,,,,,Color,Stainless Steel,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/food-processor-3l-stainless-steel.webp,10.2,16.5,9.4,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
48
48
|
food-processor-3l,FOOD-PROCESSOR-3L-WHITE,,149.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/food-processor-3l-white.webp,10.2,16.5,9.4,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
49
|
-
air-purifier-compact,AIR-PURIFIER-COMPACT,Air Purifier Compact,0,0,USD,active,Compact HEPA air purifier for rooms up to 25m2. Three-layer filtration captures 99.97% of particles as small as 0.3 microns. Ultra-quiet night mode at 30dB.,Air Purifier Compact | Spree Commerce Demo,Shop the Compact Air Purifier on the Spree Commerce demo store. 3-layer HEPA captures 99.97% of particles. Ultra-quiet 30dB night mode for rooms up to 25m².,"compact air purifier, HEPA air purifier, small air purifier, spree commerce, spree demo store, ecommerce platform","air purifier, air quality, HEPA, compact, air & climate",Default,
|
|
49
|
+
air-purifier-compact,AIR-PURIFIER-COMPACT,Air Purifier Compact,0,0,USD,active,Compact HEPA air purifier for rooms up to 25m2. Three-layer filtration captures 99.97% of particles as small as 0.3 microns. Ultra-quiet night mode at 30dB.,Air Purifier Compact | Spree Commerce Demo,Shop the Compact Air Purifier on the Spree Commerce demo store. 3-layer HEPA captures 99.97% of particles. Ultra-quiet 30dB night mode for rooms up to 25m².,"compact air purifier, HEPA air purifier, small air purifier, spree commerce, spree demo store, ecommerce platform","air purifier, air quality, HEPA, compact, air & climate",Default,Air Treatment,Air & Climate -> Air Purifiers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-compact.webp,,,,in,,lb,,,,FALSE,,40W,220-240V,2 Years,,,Up to 25m²,30dB,
|
|
50
50
|
air-purifier-compact,AIR-PURIFIER-COMPACT-WHITE,,149.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-compact-white.webp,7.9,14.2,7.9,in,5.5,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
51
51
|
air-purifier-compact,AIR-PURIFIER-COMPACT-BLACK,,149.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-compact-black.webp,7.9,14.2,7.9,in,5.5,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
52
|
-
air-purifier-tower,AIR-PURIFIER-TOWER,Air Purifier Tower,0,0,USD,active,"High-performance tower air purifier for rooms up to 80m2. True HEPA H13 filter, real-time air quality LED ring, auto mode, and app connectivity.",Air Purifier Tower | Spree Commerce Demo,"Browse the Air Purifier Tower on the Spree Commerce demo store. True HEPA H13, real-time air quality LED ring & app for rooms up to 80m². Powered by Spree.","tower air purifier, HEPA H13 air purifier, smart air purifier, spree commerce, spree demo store, open source ecommerce","air purifier, tower, HEPA H13, smart home, air & climate",Default,
|
|
52
|
+
air-purifier-tower,AIR-PURIFIER-TOWER,Air Purifier Tower,0,0,USD,active,"High-performance tower air purifier for rooms up to 80m2. True HEPA H13 filter, real-time air quality LED ring, auto mode, and app connectivity.",Air Purifier Tower | Spree Commerce Demo,"Browse the Air Purifier Tower on the Spree Commerce demo store. True HEPA H13, real-time air quality LED ring & app for rooms up to 80m². Powered by Spree.","tower air purifier, HEPA H13 air purifier, smart air purifier, spree commerce, spree demo store, open source ecommerce","air purifier, tower, HEPA H13, smart home, air & climate",Default,Air Treatment,Air & Climate -> Air Purifiers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-tower.webp,,,,in,,lb,,,,FALSE,,65W,220-240V,2 Years,,,Up to 80m²,,WiFi + App
|
|
53
53
|
air-purifier-tower,AIR-PURIFIER-TOWER-WHITE,,349.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-tower-white.webp,10.2,39.4,10.2,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
54
54
|
air-purifier-tower,AIR-PURIFIER-TOWER-BLACK,,349.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-tower-black.webp,10.2,39.4,10.2,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
55
55
|
air-purifier-tower,AIR-PURIFIER-TOWER-GREY,,349.99,0,USD,,,,,,,,,,Color,Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-tower-grey.webp,10.2,39.4,10.2,in,11,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
56
|
-
air-purifier-pro,AIR-PURIFIER-PRO,Air Purifier Pro,0,0,USD,active,"Premium air purifier for rooms up to 120m2. HEPA H13 + activated carbon filter, VOC sensor, auto mode, and whisper-quiet operation. Removes allergens, smoke, and odors.",Air Purifier Pro | Spree Commerce Demo,"Explore the Air Purifier Pro on the Spree Commerce demo store. HEPA H13 + carbon filter, VOC sensor & auto mode. Covers rooms up to 120m². Removes allergens.","pro air purifier, large room air purifier, HEPA carbon filter, VOC air purifier, spree commerce demo, ecommerce example","air purifier, premium, HEPA H13, large room, VOC, air & climate",Default,
|
|
56
|
+
air-purifier-pro,AIR-PURIFIER-PRO,Air Purifier Pro,0,0,USD,active,"Premium air purifier for rooms up to 120m2. HEPA H13 + activated carbon filter, VOC sensor, auto mode, and whisper-quiet operation. Removes allergens, smoke, and odors.",Air Purifier Pro | Spree Commerce Demo,"Explore the Air Purifier Pro on the Spree Commerce demo store. HEPA H13 + carbon filter, VOC sensor & auto mode. Covers rooms up to 120m². Removes allergens.","pro air purifier, large room air purifier, HEPA carbon filter, VOC air purifier, spree commerce demo, ecommerce example","air purifier, premium, HEPA H13, large room, VOC, air & climate",Default,Air Treatment,Air & Climate -> Air Purifiers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-pro.webp,,,,in,,lb,,,,FALSE,,80W,220-240V,3 Years,,,Up to 120m²,,
|
|
57
57
|
air-purifier-pro,AIR-PURIFIER-PRO-WHITE,,549.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-pro-white.webp,12.6,22.8,12.6,in,15.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
58
58
|
air-purifier-pro,AIR-PURIFIER-PRO-MATTE-BLACK,,549.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/air-purifier-pro-matte-black.webp,12.6,22.8,12.6,in,15.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
59
|
-
ultrasonic-humidifier-2l,ULTRASONIC-HUMIDIFIER-2L,Ultrasonic Humidifier 2.0L,0,0,USD,active,"Quiet ultrasonic humidifier for rooms up to 30m2. Adjustable mist output, 20-hour runtime, auto shut-off when empty, and optional essential oil tray.",Ultrasonic Humidifier 2.0L | Spree Commerce Demo,"Shop the Ultrasonic Humidifier 2.0L on the Spree Commerce demo store. Quiet 20-hour runtime, adjustable mist & auto shut-off. Covers rooms up to 30m².","ultrasonic humidifier, 2L humidifier, quiet humidifier, cool mist humidifier, spree commerce demo, ecommerce platform","humidifier, ultrasonic, air & climate, bedroom, cool mist",Default,
|
|
59
|
+
ultrasonic-humidifier-2l,ULTRASONIC-HUMIDIFIER-2L,Ultrasonic Humidifier 2.0L,0,0,USD,active,"Quiet ultrasonic humidifier for rooms up to 30m2. Adjustable mist output, 20-hour runtime, auto shut-off when empty, and optional essential oil tray.",Ultrasonic Humidifier 2.0L | Spree Commerce Demo,"Shop the Ultrasonic Humidifier 2.0L on the Spree Commerce demo store. Quiet 20-hour runtime, adjustable mist & auto shut-off. Covers rooms up to 30m².","ultrasonic humidifier, 2L humidifier, quiet humidifier, cool mist humidifier, spree commerce demo, ecommerce platform","humidifier, ultrasonic, air & climate, bedroom, cool mist",Default,Air Treatment,Air & Climate -> Humidifiers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ultrasonic-humidifier-2l.webp,,,,in,,lb,,,,FALSE,,25W,220-240V,2 Years,2.0L,,Up to 30m²,,
|
|
60
60
|
ultrasonic-humidifier-2l,ULTRASONIC-HUMIDIFIER-2L-WHITE,,69.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ultrasonic-humidifier-2l-white.webp,7.1,11,7.1,in,2.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
61
61
|
ultrasonic-humidifier-2l,ULTRASONIC-HUMIDIFIER-2L-BLACK,,69.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ultrasonic-humidifier-2l-black.webp,7.1,11,7.1,in,2.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
62
|
-
smart-humidifier-4l,SMART-HUMIDIFIER-4L,Smart Humidifier 4.0L,0,0,USD,active,"Large-capacity smart humidifier with humidity sensor, auto mode, app control, and 40-hour runtime. Covers rooms up to 50m2.",Smart Humidifier 4.0L | Spree Commerce Demo,"Browse the Smart Humidifier 4.0L on the Spree Commerce demo store. Humidity sensor, auto mode & app control. 40-hour runtime for rooms up to 50m².","smart humidifier, 4L humidifier, app controlled humidifier, wifi humidifier, spree commerce demo, ecommerce example","humidifier, smart, air & climate, app control, large room",Default,
|
|
62
|
+
smart-humidifier-4l,SMART-HUMIDIFIER-4L,Smart Humidifier 4.0L,0,0,USD,active,"Large-capacity smart humidifier with humidity sensor, auto mode, app control, and 40-hour runtime. Covers rooms up to 50m2.",Smart Humidifier 4.0L | Spree Commerce Demo,"Browse the Smart Humidifier 4.0L on the Spree Commerce demo store. Humidity sensor, auto mode & app control. 40-hour runtime for rooms up to 50m².","smart humidifier, 4L humidifier, app controlled humidifier, wifi humidifier, spree commerce demo, ecommerce example","humidifier, smart, air & climate, app control, large room",Default,Air Treatment,Air & Climate -> Humidifiers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/smart-humidifier-4l.webp,,,,in,,lb,,,,FALSE,,30W,220-240V,2 Years,4.0L,,Up to 50m²,,WiFi + App
|
|
63
63
|
smart-humidifier-4l,SMART-HUMIDIFIER-4L-WHITE,,129.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/smart-humidifier-4l-white.webp,8.7,13,8.7,in,4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
64
64
|
smart-humidifier-4l,SMART-HUMIDIFIER-4L-GREY,,129.99,0,USD,,,,,,,,,,Color,Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/smart-humidifier-4l-grey.webp,8.7,13,8.7,in,4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
65
|
-
tower-fan,TOWER-FAN,Tower Fan 100cm,0,0,USD,active,"Slim oscillating tower fan with 3 speed settings, natural breeze mode, 8-hour timer, and remote control. Space-saving design for bedrooms and offices.",Tower Fan 100cm | Spree Commerce Demo,"Discover the Tower Fan 100cm on the Spree Commerce demo store. Oscillating with 3 speeds, natural breeze mode, 8-hour timer & remote control.","tower fan, oscillating tower fan, slim fan, bedroom fan, spree commerce demo, ecommerce platform example","fan, tower fan, air & climate, bedroom, oscillating, remote control",Default,
|
|
65
|
+
tower-fan,TOWER-FAN,Tower Fan 100cm,0,0,USD,active,"Slim oscillating tower fan with 3 speed settings, natural breeze mode, 8-hour timer, and remote control. Space-saving design for bedrooms and offices.",Tower Fan 100cm | Spree Commerce Demo,"Discover the Tower Fan 100cm on the Spree Commerce demo store. Oscillating with 3 speeds, natural breeze mode, 8-hour timer & remote control.","tower fan, oscillating tower fan, slim fan, bedroom fan, spree commerce demo, ecommerce platform example","fan, tower fan, air & climate, bedroom, oscillating, remote control",Default,Air Treatment,Air & Climate -> Fans,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/tower-fan.webp,,,,in,,lb,,,,FALSE,,45W,220-240V,2 Years,,,,,
|
|
66
66
|
tower-fan,TOWER-FAN-WHITE,,89.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/tower-fan-white.webp,12.2,40.2,12.2,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
67
67
|
tower-fan,TOWER-FAN-BLACK,,89.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/tower-fan-black.webp,12.2,40.2,12.2,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
68
|
-
pedestal-fan,PEDESTAL-FAN,Pedestal Fan 40cm,0,0,USD,active,"Adjustable-height pedestal fan with wide 40cm blade diameter, 3 speeds, oscillation, and tilt adjustment. Quiet operation for home or office.",Pedestal Fan 40cm | Spree Commerce Demo,"Shop the Pedestal Fan 40cm on the Spree Commerce demo store. Adjustable height, 40cm blades, 3 speeds & oscillation. Quiet operation for home or office use.","pedestal fan, standing fan, floor fan, 40cm fan, spree commerce demo, open source ecommerce","fan, pedestal fan, air & climate, standing fan, office, home",Default,
|
|
68
|
+
pedestal-fan,PEDESTAL-FAN,Pedestal Fan 40cm,0,0,USD,active,"Adjustable-height pedestal fan with wide 40cm blade diameter, 3 speeds, oscillation, and tilt adjustment. Quiet operation for home or office.",Pedestal Fan 40cm | Spree Commerce Demo,"Shop the Pedestal Fan 40cm on the Spree Commerce demo store. Adjustable height, 40cm blades, 3 speeds & oscillation. Quiet operation for home or office use.","pedestal fan, standing fan, floor fan, 40cm fan, spree commerce demo, open source ecommerce","fan, pedestal fan, air & climate, standing fan, office, home",Default,Air Treatment,Air & Climate -> Fans,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/pedestal-fan.webp,,,,in,,lb,,,,FALSE,,50W,220-240V,2 Years,,,,,
|
|
69
69
|
pedestal-fan,PEDESTAL-FAN-WHITE,,59.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/pedestal-fan-white.webp,18,48,18,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
70
70
|
pedestal-fan,PEDESTAL-FAN-BLACK,,59.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/pedestal-fan-black.webp,18,48,18,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
71
|
-
steam-generator-iron,STEAM-GENERATOR-IRON,Steam Generator Iron,0,0,USD,active,"High-pressure steam generator with ceramic soleplate, 180g/min steam boost, 1.8L tank, and anti-calc system. Powers through creases on all fabrics.",Steam Generator Iron | Spree Commerce Demo,"Browse the Steam Generator Iron on the Spree Commerce demo store. 180g/min steam boost, 1.8L tank & ceramic soleplate. Powers through creases on all fabrics.","steam generator iron, professional steam iron, high pressure iron, spree commerce, spree demo store, ecommerce example","steam iron, garment care, steam generator, ceramic, ironing",Default,
|
|
71
|
+
steam-generator-iron,STEAM-GENERATOR-IRON,Steam Generator Iron,0,0,USD,active,"High-pressure steam generator with ceramic soleplate, 180g/min steam boost, 1.8L tank, and anti-calc system. Powers through creases on all fabrics.",Steam Generator Iron | Spree Commerce Demo,"Browse the Steam Generator Iron on the Spree Commerce demo store. 180g/min steam boost, 1.8L tank & ceramic soleplate. Powers through creases on all fabrics.","steam generator iron, professional steam iron, high pressure iron, spree commerce, spree demo store, ecommerce example","steam iron, garment care, steam generator, ceramic, ironing",Default,Garment Care,Garment Care -> Steam Generators,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-generator-iron.webp,,,,in,,lb,,,,FALSE,,2400W,220-240V,2 Years,1.8L,,,,
|
|
72
72
|
steam-generator-iron,STEAM-GENERATOR-IRON-BLUE-AND-WHITE,,249.99,0,USD,,,,,,,,,,Color,Blue and White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-generator-iron-blue-and-white.webp,11.8,11,8.7,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
73
73
|
steam-generator-iron,STEAM-GENERATOR-IRON-PURPLE-AND-WHITE,,249.99,0,USD,,,,,,,,,,Color,Purple and White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-generator-iron-purple-and-white.webp,11.8,11,8.7,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
74
|
-
handheld-garment-steamer,HANDHELD-GARMENT-STEAMER,Handheld Garment Steamer,0,0,USD,active,"Portable handheld steamer with 200ml tank, 25-second heat-up, and continuous steam for quick touch-ups on hanging garments.",Handheld Garment Steamer | Spree Commerce Demo,"Shop the Handheld Garment Steamer on the Spree Commerce demo store. 200ml tank, 25-second heat-up & continuous steam for quick touch-ups on hanging garments.","handheld garment steamer, portable steamer, clothes steamer, travel steamer, spree commerce demo, ecommerce platform","garment steamer, handheld, garment care, portable, travel",Default,
|
|
74
|
+
handheld-garment-steamer,HANDHELD-GARMENT-STEAMER,Handheld Garment Steamer,0,0,USD,active,"Portable handheld steamer with 200ml tank, 25-second heat-up, and continuous steam for quick touch-ups on hanging garments.",Handheld Garment Steamer | Spree Commerce Demo,"Shop the Handheld Garment Steamer on the Spree Commerce demo store. 200ml tank, 25-second heat-up & continuous steam for quick touch-ups on hanging garments.","handheld garment steamer, portable steamer, clothes steamer, travel steamer, spree commerce demo, ecommerce platform","garment steamer, handheld, garment care, portable, travel",Default,Garment Care,Garment Care -> Handheld Steamers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/handheld-garment-steamer.webp,,,,in,,lb,,,,FALSE,,1200W,220-240V,2 Years,200ml,,,,
|
|
75
75
|
handheld-garment-steamer,HANDHELD-GARMENT-STEAMER-WHITE,,49.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/handheld-garment-steamer-white.webp,3.9,11,3.1,in,1.2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
76
76
|
handheld-garment-steamer,HANDHELD-GARMENT-STEAMER-BLACK,,49.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/handheld-garment-steamer-black.webp,3.9,11,3.1,in,1.2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
77
|
-
professional-garment-steamer,PROFESSIONAL-GARMENT-STEAMER,Professional Garment Steamer,0,0,USD,active,"Standing garment steamer with 1.5L tank, telescopic pole, garment hanger, and 45 minutes of continuous steam. Heated plate for pressing creases.",Professional Garment Steamer | Spree Commerce Demo,"Browse the Professional Garment Steamer on the Spree Commerce demo store. 1.5L tank, telescopic pole & 45 minutes of continuous steam. Heated plate for creases.","professional garment steamer, standing garment steamer, clothes steamer, upright steamer, spree commerce demo, open source ecommerce","garment steamer, professional, garment care, standing, upright",Default,
|
|
77
|
+
professional-garment-steamer,PROFESSIONAL-GARMENT-STEAMER,Professional Garment Steamer,0,0,USD,active,"Standing garment steamer with 1.5L tank, telescopic pole, garment hanger, and 45 minutes of continuous steam. Heated plate for pressing creases.",Professional Garment Steamer | Spree Commerce Demo,"Browse the Professional Garment Steamer on the Spree Commerce demo store. 1.5L tank, telescopic pole & 45 minutes of continuous steam. Heated plate for creases.","professional garment steamer, standing garment steamer, clothes steamer, upright steamer, spree commerce demo, open source ecommerce","garment steamer, professional, garment care, standing, upright",Default,Garment Care,Garment Care -> Handheld Steamers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/professional-garment-steamer.webp,,,,in,,lb,,,,FALSE,,1800W,220-240V,2 Years,1.5L,,,,
|
|
78
78
|
professional-garment-steamer,PROFESSIONAL-GARMENT-STEAMER-WHITE-AND-GREY,,100,129.99,USD,,,,,,,,,,Color,White and Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/professional-garment-steamer-white-and-grey.webp,11.8,61,11.8,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
79
79
|
professional-garment-steamer,PROFESSIONAL-GARMENT-STEAMER-BLACK,,100,129.99,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/professional-garment-steamer-black.webp,11.8,61,11.8,in,7.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
80
|
-
steam-iron,STEAM-IRON,Steam Iron 2400W,0,0,USD,active,"Powerful steam iron with ceramic soleplate, 45g/min continuous steam, 150g steam boost, anti-drip, and self-clean function.",Steam Iron 2400W | Spree Commerce Demo,"Explore the Steam Iron 2400W on the Spree Commerce demo store. Ceramic soleplate, 150g steam boost, anti-drip & self-clean function. Powers through all fabrics.","steam iron, 2400W iron, ceramic soleplate iron, spree commerce, spree demo store, ecommerce platform example","steam iron, garment care, ceramic, 2400W, ironing",Default,
|
|
80
|
+
steam-iron,STEAM-IRON,Steam Iron 2400W,0,0,USD,active,"Powerful steam iron with ceramic soleplate, 45g/min continuous steam, 150g steam boost, anti-drip, and self-clean function.",Steam Iron 2400W | Spree Commerce Demo,"Explore the Steam Iron 2400W on the Spree Commerce demo store. Ceramic soleplate, 150g steam boost, anti-drip & self-clean function. Powers through all fabrics.","steam iron, 2400W iron, ceramic soleplate iron, spree commerce, spree demo store, ecommerce platform example","steam iron, garment care, ceramic, 2400W, ironing",Default,Garment Care,Garment Care -> Irons,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-iron.webp,,,,in,,lb,,,,FALSE,,2400W,220-240V,2 Years,,,,,
|
|
81
81
|
steam-iron,STEAM-IRON-BLUE-AND-WHITE,,59.99,0,USD,,,,,,,,,,Color,Blue and White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-iron-blue-and-white.webp,11,5.9,4.7,in,2.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
82
82
|
steam-iron,STEAM-IRON-GREY-AND-WHITE,,59.99,0,USD,,,,,,,,,,Color,Grey and White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/steam-iron-grey-and-white.webp,11,5.9,4.7,in,2.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
83
|
-
cordless-stick-vacuum-18v,CORDLESS-STICK-VACUUM-18V,Cordless Stick Vacuum 18V,0,0,USD,active,"Lightweight cordless stick vacuum with 35-minute runtime, motorized brush head, LED headlights, and 2-in-1 design that converts to a handheld.",Cordless Stick Vacuum 18V | Spree Commerce Demo,"Shop the Cordless Stick Vacuum 18V on the Spree Commerce demo store. 35-min runtime, motorized brush, LED headlights & 2-in-1 handheld conversion.","cordless stick vacuum, 18v vacuum, lightweight vacuum, 2-in-1 vacuum, spree commerce demo, ecommerce example","vacuum, cordless, floor care, 2-in-1, lightweight",Default,
|
|
83
|
+
cordless-stick-vacuum-18v,CORDLESS-STICK-VACUUM-18V,Cordless Stick Vacuum 18V,0,0,USD,active,"Lightweight cordless stick vacuum with 35-minute runtime, motorized brush head, LED headlights, and 2-in-1 design that converts to a handheld.",Cordless Stick Vacuum 18V | Spree Commerce Demo,"Shop the Cordless Stick Vacuum 18V on the Spree Commerce demo store. 35-min runtime, motorized brush, LED headlights & 2-in-1 handheld conversion.","cordless stick vacuum, 18v vacuum, lightweight vacuum, 2-in-1 vacuum, spree commerce demo, ecommerce example","vacuum, cordless, floor care, 2-in-1, lightweight",Default,Vacuum Cleaner,Floor Care -> Cordless Vacuums,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-18v.webp,,,,in,,lb,,,,FALSE,,350W,18V Lithium,2 Years,,35 minutes,,,
|
|
84
84
|
cordless-stick-vacuum-18v,CORDLESS-STICK-VACUUM-18V-GREY,,249.99,0,USD,,,,,,,,,,Color,Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-18v-grey.webp,9.8,46.1,7.1,in,5.5,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
85
85
|
cordless-stick-vacuum-18v,CORDLESS-STICK-VACUUM-18V-WHITE,,249.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-18v-white.webp,9.8,46.1,7.1,in,5.5,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
86
|
-
cordless-stick-vacuum-25v,CORDLESS-STICK-VACUUM-25V,Cordless Stick Vacuum 25V,0,0,USD,active,"High-performance cordless vacuum with 60-minute runtime, cyclonic filtration, motorized multi-surface head, and wet-mop attachment. 3-in-1 versatility.",Cordless Stick Vacuum 25V | Spree Commerce Demo,"Browse the Cordless Stick Vacuum 25V on the Spree Commerce demo store. 60-min runtime, cyclonic filtration & wet-mop attachment. 3-in-1 versatility.","cordless stick vacuum, 25v vacuum, high-performance cordless vacuum, 3-in-1 vacuum, spree commerce demo, ecommerce platform","vacuum, cordless, floor care, 3-in-1, high performance, wet and dry",Default,
|
|
86
|
+
cordless-stick-vacuum-25v,CORDLESS-STICK-VACUUM-25V,Cordless Stick Vacuum 25V,0,0,USD,active,"High-performance cordless vacuum with 60-minute runtime, cyclonic filtration, motorized multi-surface head, and wet-mop attachment. 3-in-1 versatility.",Cordless Stick Vacuum 25V | Spree Commerce Demo,"Browse the Cordless Stick Vacuum 25V on the Spree Commerce demo store. 60-min runtime, cyclonic filtration & wet-mop attachment. 3-in-1 versatility.","cordless stick vacuum, 25v vacuum, high-performance cordless vacuum, 3-in-1 vacuum, spree commerce demo, ecommerce platform","vacuum, cordless, floor care, 3-in-1, high performance, wet and dry",Default,Vacuum Cleaner,Floor Care -> Cordless Vacuums,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-25v.webp,,,,in,,lb,,,,FALSE,,500W,25.2V Lithium,2 Years,,60 minutes,,,
|
|
87
87
|
cordless-stick-vacuum-25v,CORDLESS-STICK-VACUUM-25V-GRAPHITE,,449.99,0,USD,,,,,,,,,,Color,Graphite,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-25v-graphite.webp,9.8,47.2,7.1,in,6.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
88
88
|
cordless-stick-vacuum-25v,CORDLESS-STICK-VACUUM-25V-WHITE,,449.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-25v-white.webp,9.8,47.2,7.1,in,6.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
89
89
|
cordless-stick-vacuum-25v,CORDLESS-STICK-VACUUM-25V-BLUE,,449.99,0,USD,,,,,,,,,,Color,Blue,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/cordless-stick-vacuum-25v-blue.webp,9.8,47.2,7.1,in,6.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
90
|
-
bagless-upright-vacuum,BAGLESS-UPRIGHT-VACUUM,Bagless Upright Vacuum,0,0,USD,active,"Powerful bagless upright vacuum with cyclonic technology, HEPA filtration, 1.5L dust container, and 8m power cord. Multi-floor nozzle included.",Bagless Upright Vacuum | Spree Commerce Demo,"Discover the Bagless Upright Vacuum on the Spree Commerce demo store. Cyclonic tech, HEPA filtration & 8m cord. 1.5L dust container. Multi-floor nozzle included.","bagless upright vacuum, cyclonic vacuum, HEPA vacuum cleaner, upright vacuum cleaner, spree commerce demo, open source ecommerce","vacuum, upright, floor care, bagless, HEPA, cyclonic",Default,
|
|
90
|
+
bagless-upright-vacuum,BAGLESS-UPRIGHT-VACUUM,Bagless Upright Vacuum,0,0,USD,active,"Powerful bagless upright vacuum with cyclonic technology, HEPA filtration, 1.5L dust container, and 8m power cord. Multi-floor nozzle included.",Bagless Upright Vacuum | Spree Commerce Demo,"Discover the Bagless Upright Vacuum on the Spree Commerce demo store. Cyclonic tech, HEPA filtration & 8m cord. 1.5L dust container. Multi-floor nozzle included.","bagless upright vacuum, cyclonic vacuum, HEPA vacuum cleaner, upright vacuum cleaner, spree commerce demo, open source ecommerce","vacuum, upright, floor care, bagless, HEPA, cyclonic",Default,Vacuum Cleaner,Floor Care -> Upright Vacuums,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/bagless-upright-vacuum.webp,,,,in,,lb,,,,FALSE,,900W,220-240V,2 Years,,,,,
|
|
91
91
|
bagless-upright-vacuum,BAGLESS-UPRIGHT-VACUUM-BLACK-AND-BLUE,,150,199.99,USD,,,,,,,,,,Color,Black and Blue,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/bagless-upright-vacuum-black-and-blue.webp,10.6,42.5,12.6,in,13.2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
92
92
|
bagless-upright-vacuum,BAGLESS-UPRIGHT-VACUUM-BLACK-AND-RED,,150,199.99,USD,,,,,,,,,,Color,Black and Red,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/bagless-upright-vacuum-black-and-red.webp,10.6,42.5,12.6,in,13.2,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
93
|
-
robot-vacuum,ROBOT-VACUUM,Robot Vacuum,0,0,USD,active,"Smart robot vacuum with gyroscope navigation, 2500Pa suction, 120-minute runtime, slim 7cm profile, and app scheduling. Auto-returns to charging dock.",Robot Vacuum | Spree Commerce Demo,"Shop the Robot Vacuum on the Spree Commerce demo store. 2500Pa suction, 120-min runtime, slim 7cm profile & app scheduling. Auto-returns to charging dock.","robot vacuum, robot vacuum cleaner, smart vacuum, automatic vacuum, spree commerce demo, ecommerce platform example","vacuum, robot, floor care, smart home, automatic, app control",Default,
|
|
93
|
+
robot-vacuum,ROBOT-VACUUM,Robot Vacuum,0,0,USD,active,"Smart robot vacuum with gyroscope navigation, 2500Pa suction, 120-minute runtime, slim 7cm profile, and app scheduling. Auto-returns to charging dock.",Robot Vacuum | Spree Commerce Demo,"Shop the Robot Vacuum on the Spree Commerce demo store. 2500Pa suction, 120-min runtime, slim 7cm profile & app scheduling. Auto-returns to charging dock.","robot vacuum, robot vacuum cleaner, smart vacuum, automatic vacuum, spree commerce demo, ecommerce platform example","vacuum, robot, floor care, smart home, automatic, app control",Default,Vacuum Cleaner,Floor Care -> Robot Vacuums,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum.webp,,,,in,,lb,,,,FALSE,,40W,14.4V Lithium,2 Years,,120 minutes,,,App
|
|
94
94
|
robot-vacuum,ROBOT-VACUUM-BLACK,,349.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum-black.webp,13.8,2.8,13.8,in,7.1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
95
95
|
robot-vacuum,ROBOT-VACUUM-WHITE,,349.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum-white.webp,13.8,2.8,13.8,in,7.1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
96
|
-
robot-vacuum-pro,ROBOT-VACUUM,Robot Vacuum Pro,0,0,USD,active,"Advanced robot vacuum with LiDAR navigation, 5000Pa suction, auto-empty station, mopping function, and multi-floor mapping via app.",Robot Vacuum Pro | Spree Commerce Demo,"Browse the Robot Vacuum Pro on the Spree Commerce demo store. LiDAR navigation, 5000Pa suction, auto-empty & mopping function. Multi-floor app mapping.","robot vacuum pro, LiDAR robot vacuum, auto-empty robot vacuum, smart vacuum cleaner, spree commerce demo, ecommerce example","vacuum, robot, floor care, premium, LiDAR, auto-empty, smart home",Default,
|
|
96
|
+
robot-vacuum-pro,ROBOT-VACUUM,Robot Vacuum Pro,0,0,USD,active,"Advanced robot vacuum with LiDAR navigation, 5000Pa suction, auto-empty station, mopping function, and multi-floor mapping via app.",Robot Vacuum Pro | Spree Commerce Demo,"Browse the Robot Vacuum Pro on the Spree Commerce demo store. LiDAR navigation, 5000Pa suction, auto-empty & mopping function. Multi-floor app mapping.","robot vacuum pro, LiDAR robot vacuum, auto-empty robot vacuum, smart vacuum cleaner, spree commerce demo, ecommerce example","vacuum, robot, floor care, premium, LiDAR, auto-empty, smart home",Default,Vacuum Cleaner,Floor Care -> Robot Vacuums,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum-pro.webp,,,,in,,lb,,,,FALSE,,65W,14.4V Lithium,3 Years,,,,,WiFi + App
|
|
97
97
|
robot-vacuum-pro,ROBOT-VACUUM-PRO-BLACK,,599.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum-pro-black.webp,13.8,3.9,13.8,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
98
98
|
robot-vacuum-pro,ROBOT-VACUUM-PRO-WHITE,,599.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/robot-vacuum-pro-white.webp,13.8,3.9,13.8,in,8.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
99
|
-
ionic-hair-dryer,IONIC-HAIR-DRYER,Ionic Hair Dryer 2000W,0,0,USD,active,"Professional ionic hair dryer with 2000W motor, 3 heat settings, 2 speed settings, cool shot button, and concentrator nozzle. Reduces frizz and drying time.",Ionic Hair Dryer 2000W | Spree Commerce Demo,"Shop the Ionic Hair Dryer 2000W on the Spree Commerce demo store. 3 heat settings, cool shot button & concentrator nozzle. Ionic tech reduces frizz & drying time.","ionic hair dryer, 2000W hair dryer, professional hair dryer, frizz-free hair dryer, spree commerce demo, ecommerce platform","hair dryer, ionic, personal care, 2000W, professional",Default,
|
|
99
|
+
ionic-hair-dryer,IONIC-HAIR-DRYER,Ionic Hair Dryer 2000W,0,0,USD,active,"Professional ionic hair dryer with 2000W motor, 3 heat settings, 2 speed settings, cool shot button, and concentrator nozzle. Reduces frizz and drying time.",Ionic Hair Dryer 2000W | Spree Commerce Demo,"Shop the Ionic Hair Dryer 2000W on the Spree Commerce demo store. 3 heat settings, cool shot button & concentrator nozzle. Ionic tech reduces frizz & drying time.","ionic hair dryer, 2000W hair dryer, professional hair dryer, frizz-free hair dryer, spree commerce demo, ecommerce platform","hair dryer, ionic, personal care, 2000W, professional",Default,Hair Styling,Personal Care -> Hair Dryers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ionic-hair-dryer.webp,,,,in,,lb,,,,FALSE,,2000W,220-240V,2 Years,,,,,
|
|
100
100
|
ionic-hair-dryer,IONIC-HAIR-DRYER-WHITE,,69.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ionic-hair-dryer-white.webp,8.7,9.8,3.1,in,1.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
101
101
|
ionic-hair-dryer,IONIC-HAIR-DRYER-BLACK,,69.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ionic-hair-dryer-black.webp,8.7,9.8,3.1,in,1.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
102
102
|
ionic-hair-dryer,IONIC-HAIR-DRYER-ROSE-GOLD,,69.99,0,USD,,,,,,,,,,Color,Rose Gold,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ionic-hair-dryer-rose-gold.webp,8.7,9.8,3.1,in,1.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
103
|
-
travel-hair-dryer,TRAVEL-HAIR-DRYER,Compact Travel Hair Dryer,0,0,USD,active,"Foldable travel hair dryer with dual voltage (110/220V), 1600W, 2 heat settings, and compact carry pouch. Lightweight at 450g.",Compact Travel Hair Dryer | Spree Commerce Demo,"Browse the Compact Travel Hair Dryer on the Spree Commerce demo store. Dual voltage 110/220V, foldable design & carry pouch. Lightweight at 450g for travel.","travel hair dryer, compact hair dryer, dual voltage hair dryer, foldable hair dryer, spree commerce demo, open source ecommerce","hair dryer, travel, personal care, dual voltage, compact, foldable",Default,
|
|
103
|
+
travel-hair-dryer,TRAVEL-HAIR-DRYER,Compact Travel Hair Dryer,0,0,USD,active,"Foldable travel hair dryer with dual voltage (110/220V), 1600W, 2 heat settings, and compact carry pouch. Lightweight at 450g.",Compact Travel Hair Dryer | Spree Commerce Demo,"Browse the Compact Travel Hair Dryer on the Spree Commerce demo store. Dual voltage 110/220V, foldable design & carry pouch. Lightweight at 450g for travel.","travel hair dryer, compact hair dryer, dual voltage hair dryer, foldable hair dryer, spree commerce demo, open source ecommerce","hair dryer, travel, personal care, dual voltage, compact, foldable",Default,Hair Styling,Personal Care -> Hair Dryers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/travel-hair-dryer.webp,,,,in,,lb,,,,FALSE,,1600W,110-240V,2 Years,,,,,
|
|
104
104
|
travel-hair-dryer,TRAVEL-HAIR-DRYER-BLACK,,34.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/travel-hair-dryer-black.webp,6.3,7.9,2.8,in,1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
105
105
|
travel-hair-dryer,TRAVEL-HAIR-DRYER-PINK,,34.99,0,USD,,,,,,,,,,Color,Pink,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/travel-hair-dryer-pink.webp,6.3,7.9,2.8,in,1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
106
|
-
ceramic-hair-straightener,CERAMIC-HAIR-STRAIGHTENER,Ceramic Hair Straightener,0,0,USD,active,"Professional ceramic straightener with floating plates, adjustable temperature (150-230C), ionic conditioning, 30-second heat-up, and auto shut-off.",Ceramic Hair Straightener | Spree Commerce Demo,"Discover the Ceramic Hair Straightener on the Spree Commerce demo store. Floating plates, 150–230°C, ionic conditioning & 30-second heat-up. Auto shut-off.","ceramic hair straightener, hair straightener, flat iron, ionic straightener, spree commerce demo, ecommerce platform example","hair straightener, ceramic, personal care, ionic, professional",Default,
|
|
106
|
+
ceramic-hair-straightener,CERAMIC-HAIR-STRAIGHTENER,Ceramic Hair Straightener,0,0,USD,active,"Professional ceramic straightener with floating plates, adjustable temperature (150-230C), ionic conditioning, 30-second heat-up, and auto shut-off.",Ceramic Hair Straightener | Spree Commerce Demo,"Discover the Ceramic Hair Straightener on the Spree Commerce demo store. Floating plates, 150–230°C, ionic conditioning & 30-second heat-up. Auto shut-off.","ceramic hair straightener, hair straightener, flat iron, ionic straightener, spree commerce demo, ecommerce platform example","hair straightener, ceramic, personal care, ionic, professional",Default,Hair Styling,Personal Care -> Hair Straighteners,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ceramic-hair-straightener.webp,,,,in,,lb,,,,FALSE,,45W,220-240V,2 Years,,,,,
|
|
107
107
|
ceramic-hair-straightener,CERAMIC-HAIR-STRAIGHTENER-BLACK,,79.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ceramic-hair-straightener-black.webp,12.6,3.5,2.4,in,1.1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
108
108
|
ceramic-hair-straightener,CERAMIC-HAIR-STRAIGHTENER-WHITE,,79.99,0,USD,,,,,,,,,,Color,White,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ceramic-hair-straightener-white.webp,12.6,3.5,2.4,in,1.1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
109
109
|
ceramic-hair-straightener,CERAMIC-HAIR-STRAIGHTENER-ROSE-GOLD,,79.99,0,USD,,,,,,,,,,Color,Rose Gold,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/ceramic-hair-straightener-rose-gold.webp,12.6,3.5,2.4,in,1.1,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
110
|
-
beard-trimmer-3000,BEARD-TRIMMER-3000,Beard Trimmer 3000,0,0,USD,active,"Precision beard trimmer with 20 length settings (0.5-10mm), titanium blades, 60-minute cordless runtime, and washable head.",Beard Trimmer 3000 | Spree Commerce Demo,"Shop the Beard Trimmer 3000 on the Spree Commerce demo store. 20 length settings (0.5–10mm), titanium blades & 60-min cordless runtime. Washable head.","beard trimmer, beard trimmer 3000, precision trimmer, cordless beard trimmer, spree commerce demo, ecommerce example","beard trimmer, personal care, trimmers, cordless, titanium",Default,
|
|
110
|
+
beard-trimmer-3000,BEARD-TRIMMER-3000,Beard Trimmer 3000,0,0,USD,active,"Precision beard trimmer with 20 length settings (0.5-10mm), titanium blades, 60-minute cordless runtime, and washable head.",Beard Trimmer 3000 | Spree Commerce Demo,"Shop the Beard Trimmer 3000 on the Spree Commerce demo store. 20 length settings (0.5–10mm), titanium blades & 60-min cordless runtime. Washable head.","beard trimmer, beard trimmer 3000, precision trimmer, cordless beard trimmer, spree commerce demo, ecommerce example","beard trimmer, personal care, trimmers, cordless, titanium",Default,Grooming,Personal Care -> Trimmers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-3000.webp,,,,in,,lb,,,,FALSE,,5W,5V USB-C,2 Years,,60 minutes,,,
|
|
111
111
|
beard-trimmer-3000,BEARD-TRIMMER-3000-BLACK,,49.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-3000-black.webp,2,7.1,1.6,in,0.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
112
112
|
beard-trimmer-3000,BEARD-TRIMMER-3000-DARK-GREY,,49.99,0,USD,,,,,,,,,,Color,Dark Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-3000-dark-grey.webp,2,7.1,1.6,in,0.4,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
113
|
-
beard-trimmer-7000,BEARD-TRIMMER-7000,Beard Trimmer 7000,0,0,USD,active,"Premium beard trimmer with 40 precision length settings, titanium-coated blades, LED display, 90-minute runtime, travel lock, and 6 attachment heads.",Beard Trimmer 7000 | Spree Commerce Demo,"Browse the Beard Trimmer 7000 on the Spree Commerce demo store. 40 precision settings, LED display & 90-min runtime. 6 attachment heads. Titanium-coated blades.","beard trimmer 7000, premium beard trimmer, precision beard trimmer, LED trimmer, spree commerce demo, ecommerce platform","beard trimmer, personal care, trimmers, premium, LED, 6-in-1",Default,
|
|
113
|
+
beard-trimmer-7000,BEARD-TRIMMER-7000,Beard Trimmer 7000,0,0,USD,active,"Premium beard trimmer with 40 precision length settings, titanium-coated blades, LED display, 90-minute runtime, travel lock, and 6 attachment heads.",Beard Trimmer 7000 | Spree Commerce Demo,"Browse the Beard Trimmer 7000 on the Spree Commerce demo store. 40 precision settings, LED display & 90-min runtime. 6 attachment heads. Titanium-coated blades.","beard trimmer 7000, premium beard trimmer, precision beard trimmer, LED trimmer, spree commerce demo, ecommerce platform","beard trimmer, personal care, trimmers, premium, LED, 6-in-1",Default,Grooming,Personal Care -> Trimmers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-7000.webp,,,,in,,lb,,,,FALSE,,5W,5V USB-C,3 Years,,90 minutes,,,
|
|
114
114
|
beard-trimmer-7000,BEARD-TRIMMER-7000-GUNMETAL,,119.99,0,USD,,,,,,,,,,Color,Gunmetal,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-7000-gunmetal.webp,2,7.9,1.6,in,0.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
115
115
|
beard-trimmer-7000,BEARD-TRIMMER-7000-BLACK,,119.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-7000-black.webp,2,7.9,1.6,in,0.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
116
116
|
beard-trimmer-7000,BEARD-TRIMMER-7000-SILVER,,119.99,0,USD,,,,,,,,,,Color,Silver,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/beard-trimmer-7000-silver.webp,2,7.9,1.6,in,0.6,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
117
|
-
multigroom-kit,MULTIGROOM-KIT,Multigroom Kit 10-in-1,0,0,USD,active,"All-in-one grooming kit with 10 attachments for beard, hair, nose, ear, and body. Stainless steel blades, 90-minute runtime, and storage pouch.",Multigroom Kit 10-in-1 | Spree Commerce Demo,"Explore the Multigroom Kit 10-in-1 on the Spree Commerce demo store. 10 attachments for beard, hair, nose, ear & body. 90-min runtime. Storage pouch included.","multigroom kit, 10-in-1 grooming kit, all-in-one trimmer, grooming set, spree commerce demo, open source ecommerce","grooming kit, personal care, trimmers, 10-in-1, stainless steel, full body",Default,
|
|
117
|
+
multigroom-kit,MULTIGROOM-KIT,Multigroom Kit 10-in-1,0,0,USD,active,"All-in-one grooming kit with 10 attachments for beard, hair, nose, ear, and body. Stainless steel blades, 90-minute runtime, and storage pouch.",Multigroom Kit 10-in-1 | Spree Commerce Demo,"Explore the Multigroom Kit 10-in-1 on the Spree Commerce demo store. 10 attachments for beard, hair, nose, ear & body. 90-min runtime. Storage pouch included.","multigroom kit, 10-in-1 grooming kit, all-in-one trimmer, grooming set, spree commerce demo, open source ecommerce","grooming kit, personal care, trimmers, 10-in-1, stainless steel, full body",Default,Grooming,Personal Care -> Trimmers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/multigroom-kit.webp,,,,in,,lb,,,,FALSE,,5W,5V USB-C,2 Years,,90 minutes,,,
|
|
118
118
|
multigroom-kit,MULTIGROOM-KIT-BLACK,,79.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/multigroom-kit-black.webp,3.5,8.3,2.4,in,0.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
119
119
|
multigroom-kit,MULTIGROOM-KIT-GREY,,79.99,0,USD,,,,,,,,,,Color,Grey,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/multigroom-kit-grey.webp,3.5,8.3,2.4,in,0.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
120
|
-
rotary-shaver-5000,ROTARY-SHAVER-5000,Rotary Shaver 5000,0,0,USD,active,"Wet and dry rotary shaver with 3 flex heads, 60-minute cordless runtime, pop-up trimmer, and travel case. Adapts to facial contours for a close, comfortable shave.",Rotary Shaver 5000 | Spree Commerce Demo,"Shop the Rotary Shaver 5000 on the Spree Commerce demo store. Wet & dry, 3 flex heads, 60-min runtime, pop-up trimmer & travel case. Comfortable close shave.","rotary shaver, rotary shaver 5000, wet dry shaver, electric shaver, spree commerce demo, ecommerce platform example","electric shaver, rotary, personal care, wet and dry, travel case",Default,
|
|
120
|
+
rotary-shaver-5000,ROTARY-SHAVER-5000,Rotary Shaver 5000,0,0,USD,active,"Wet and dry rotary shaver with 3 flex heads, 60-minute cordless runtime, pop-up trimmer, and travel case. Adapts to facial contours for a close, comfortable shave.",Rotary Shaver 5000 | Spree Commerce Demo,"Shop the Rotary Shaver 5000 on the Spree Commerce demo store. Wet & dry, 3 flex heads, 60-min runtime, pop-up trimmer & travel case. Comfortable close shave.","rotary shaver, rotary shaver 5000, wet dry shaver, electric shaver, spree commerce demo, ecommerce platform example","electric shaver, rotary, personal care, wet and dry, travel case",Default,Grooming,Personal Care -> Electric Shavers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-5000.webp,,,,in,,lb,,,,FALSE,,5W,5V USB-C,2 Years,,60 minutes,,,
|
|
121
121
|
rotary-shaver-5000,ROTARY-SHAVER-5000-BLACK,,129.99,0,USD,,,,,,,,,,Color,Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-5000-black.webp,2.8,5.5,2.4,in,0.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
122
122
|
rotary-shaver-5000,ROTARY-SHAVER-5000-DARK-BLUE,,129.99,0,USD,,,,,,,,,,Color,Dark Blue,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-5000-dark-blue.webp,2.8,5.5,2.4,in,0.7,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
123
|
-
rotary-shaver-9000,ROTARY-SHAVER-9000,Rotary Shaver 9000,0,0,USD,active,"Premium rotary shaver with nano-precision blades, skin comfort sensor, 90-minute runtime, wireless charging pad, and cleaning station. Ultra-close shave with zero irritation.",Rotary Shaver 9000 | Spree Commerce Demo,"Browse the Rotary Shaver 9000 on the Spree Commerce demo store. Nano-precision blades, 90-min runtime, wireless charging & cleaning station included.","rotary shaver 9000, premium electric shaver, wireless charging shaver, nano-precision shaver, spree commerce demo, ecommerce example","electric shaver, rotary, personal care, premium, wireless charging",Default,
|
|
123
|
+
rotary-shaver-9000,ROTARY-SHAVER-9000,Rotary Shaver 9000,0,0,USD,active,"Premium rotary shaver with nano-precision blades, skin comfort sensor, 90-minute runtime, wireless charging pad, and cleaning station. Ultra-close shave with zero irritation.",Rotary Shaver 9000 | Spree Commerce Demo,"Browse the Rotary Shaver 9000 on the Spree Commerce demo store. Nano-precision blades, 90-min runtime, wireless charging & cleaning station included.","rotary shaver 9000, premium electric shaver, wireless charging shaver, nano-precision shaver, spree commerce demo, ecommerce example","electric shaver, rotary, personal care, premium, wireless charging",Default,Grooming,Personal Care -> Electric Shavers,,,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-9000.webp,,,,in,,lb,,,,FALSE,,5W,5V USB-C,3 Years,,90 minutes,,,
|
|
124
124
|
rotary-shaver-9000,ROTARY-SHAVER-9000-CHROME,,299.99,0,USD,,,,,,,,,,Color,Chrome,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-9000-chrome.webp,2.8,5.9,2.4,in,0.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
125
125
|
rotary-shaver-9000,ROTARY-SHAVER-9000-MATTE-BLACK,,299.99,0,USD,,,,,,,,,,Color,Matte Black,,,https://raw.githubusercontent.com/spree/spree/main/docs/images/demo-images/rotary-shaver-9000-matte-black.webp,2.8,5.9,2.4,in,0.8,lb,,,5000,FALSE,TRUE,,,,,,,,
|
|
126
|
+
the-spree-commerce-handbook,SPREE-HANDBOOK,The Spree Commerce Handbook,19.99,0,USD,active,"A downloadable guide to building modern commerce with Spree. Delivered as a PDF the moment your order is placed — no shipping, no waiting.",The Spree Commerce Handbook | Spree Commerce Demo,"Download The Spree Commerce Handbook on the Spree Commerce demo store. A digital product delivered instantly as a PDF. Spree ecommerce in action.","spree commerce handbook, digital product, ebook download, spree demo store, ecommerce platform demo","ebook, digital, guide, downloadable",Default,Digital,,,,,,,,,,in,,lb,,,,,FALSE,,,,,,,,
|
|
126
127
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-MATTE-BLACK,,819.99,,EUR,,,,,,,,,,,,,,,,,,,,,,,,FALSE,,,,,,,,,
|
|
127
128
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-SILVER,,819.99,,EUR,,,,,,,,,,,,,,,,,,,,,,,,FALSE,,,,,,,,,
|
|
128
129
|
automatic-espresso-machine,AUTOMATIC-ESPRESSO-MACHINE-WHITE,,819.99,,EUR,,,,,,,,,,,,,,,,,,,,,,,,FALSE,,,,,,,,,
|
data/db/sample_data/wholesale.rb
CHANGED
|
@@ -6,9 +6,9 @@ store = Spree::Store.default
|
|
|
6
6
|
|
|
7
7
|
wholesale_group = store.customer_groups.find_or_create_by!(name: Spree::Seeds::CustomerGroups::WHOLESALE_NAME)
|
|
8
8
|
|
|
9
|
-
buyer = Spree.
|
|
9
|
+
buyer = Spree.customer_class.find_by(email: 'wholesale@example.com')
|
|
10
10
|
if buyer.nil?
|
|
11
|
-
buyer = Spree.
|
|
11
|
+
buyer = Spree.customer_class.new(
|
|
12
12
|
email: 'wholesale@example.com',
|
|
13
13
|
password: 'spree123',
|
|
14
14
|
password_confirmation: 'spree123',
|
|
@@ -68,4 +68,43 @@ if blank_prices.any?
|
|
|
68
68
|
price_list.bulk_update_prices(rows) if rows.any?
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
# Quantity breaks on a few lines, loaded through the price-list CSV import —
|
|
72
|
+
# the very file the import sheet offers as its example, so the example is a
|
|
73
|
+
# working ladder. The import merges, so re-running converges like the rest.
|
|
74
|
+
breaks = Spree::SampleData::ImportRunner.call(
|
|
75
|
+
csv_path: Spree::Core::Engine.root.join('db', 'sample_data', 'price_list_prices.csv'),
|
|
76
|
+
import_class: Spree::Imports::PriceListPrices,
|
|
77
|
+
store: store,
|
|
78
|
+
inline: true,
|
|
79
|
+
attributes: { price_list: price_list }
|
|
80
|
+
)
|
|
81
|
+
# A row that failed means the example file and products.csv have drifted
|
|
82
|
+
# apart, which the import reports per row rather than by failing the run.
|
|
83
|
+
raise "Sample price-list import failed: #{breaks.error}" if breaks.failure?
|
|
84
|
+
failed_rows = breaks.value.rows.failed.pluck(:validation_errors)
|
|
85
|
+
raise "Sample price-list rows failed: #{failed_rows.join('; ')}" if failed_rows.any?
|
|
86
|
+
|
|
87
|
+
Spree.price_list_activate_workflow.call(price_list: price_list) unless price_list.active?
|
|
88
|
+
|
|
89
|
+
# A two-level organization tree so the demo walks the whole B2B story: the
|
|
90
|
+
# buyer is a member of the EMEA division and buys for it, while the catalog is
|
|
91
|
+
# assigned once at the root and covers the subtree
|
|
92
|
+
# (docs/plans/6.0-b2b-companies-and-catalogs.md).
|
|
93
|
+
company = store.companies.find_or_create_by!(name: 'Acme Industrial') do |record|
|
|
94
|
+
record.kind = 'company'
|
|
95
|
+
end
|
|
96
|
+
company.set_external_id('erp', 'ACME-1') if company.external_id_for('erp').blank?
|
|
97
|
+
|
|
98
|
+
division = store.companies.find_or_create_by!(name: 'Acme EMEA') do |record|
|
|
99
|
+
record.kind = 'division'
|
|
100
|
+
record.parent = company
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
division.memberships.find_or_create_by!(customer: buyer)
|
|
104
|
+
|
|
105
|
+
# The per-tree catalog: assigned to the root, so the division's buyers see it
|
|
106
|
+
# too. Assortment-only — pricing keeps coming from the wholesale price list,
|
|
107
|
+
# which shows the two axes composing.
|
|
108
|
+
catalog = store.catalogs.find_or_create_by!(name: 'Wholesale Assortment')
|
|
109
|
+
catalog.add_products(store.products.order(:id).limit(20).ids)
|
|
110
|
+
catalog.catalog_assignments.find_or_create_by!(assignable: company)
|