spree_core 6.0.0.beta4 → 6.0.0.rc2
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/README.md +5 -5
- data/app/helpers/spree/images_helper.rb +0 -57
- data/app/jobs/spree/base_job.rb +21 -0
- data/app/jobs/spree/carts/reap_expired_job.rb +2 -2
- data/app/jobs/spree/collections/regenerate_time_based_job.rb +6 -3
- data/app/jobs/spree/orders/finalize_stale_drafts_job.rb +8 -5
- data/app/jobs/spree/payments/cancel_unused_sessions_job.rb +61 -0
- data/app/jobs/spree/search_provider/index_job.rb +4 -0
- data/app/jobs/spree/seller_payouts/sweep_seller_job.rb +2 -0
- data/app/jobs/spree/uploads/purge_unattached_job.rb +49 -0
- data/app/mailers/spree/admin_user_mailer.rb +4 -19
- data/app/mailers/spree/base_mailer.rb +97 -13
- data/app/mailers/spree/email_template_mailer.rb +27 -0
- data/app/mailers/spree/export_mailer.rb +3 -4
- data/app/mailers/spree/import_mailer.rb +3 -4
- data/app/mailers/spree/invitation_mailer.rb +24 -7
- data/app/mailers/spree/seller_user_mailer.rb +4 -16
- data/app/mailers/spree/webhook_mailer.rb +2 -2
- data/app/models/concerns/spree/acted_by.rb +1 -1
- data/app/models/concerns/spree/admin_user_methods.rb +15 -1
- data/app/models/concerns/spree/api_typed.rb +91 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +41 -13
- data/app/models/concerns/spree/calculator/currency_amounts.rb +1 -1
- data/app/models/concerns/spree/calculator/tiers.rb +63 -0
- data/app/models/concerns/spree/canonical_decimals.rb +61 -0
- data/app/models/concerns/spree/customer_methods.rb +23 -18
- data/app/models/concerns/spree/derived_number.rb +11 -13
- data/app/models/concerns/spree/email_template_identity.rb +52 -0
- data/app/models/concerns/spree/parameterizable_name.rb +2 -0
- data/app/models/concerns/spree/payment_session_transitions.rb +8 -2
- data/app/models/concerns/spree/post_sale/taxation.rb +54 -0
- data/app/models/concerns/spree/post_sale/taxed_line.rb +51 -0
- data/app/models/concerns/spree/preference_schema/json_schema.rb +139 -0
- data/app/models/concerns/spree/preference_schema.rb +62 -32
- data/app/models/concerns/spree/product_scopes.rb +16 -2
- data/app/models/concerns/spree/provider_listing.rb +41 -0
- data/app/models/concerns/spree/publishable.rb +82 -14
- data/app/models/concerns/spree/purchase/addresses.rb +23 -10
- data/app/models/concerns/spree/purchase/currency.rb +1 -1
- data/app/models/concerns/spree/purchase/deprecated_aliases.rb +87 -0
- data/app/models/concerns/spree/purchase/gift_cards.rb +10 -4
- data/app/models/concerns/spree/purchase/locale.rb +1 -1
- data/app/models/concerns/spree/purchase/payment_processing.rb +8 -4
- data/app/models/concerns/spree/purchase/purchase_order.rb +9 -4
- data/app/models/concerns/spree/purchase/store_credits.rb +36 -1
- data/app/models/concerns/spree/purchase/totals.rb +49 -8
- data/app/models/concerns/spree/ransackable_attributes.rb +46 -0
- data/app/models/concerns/spree/receivable.rb +1 -1
- data/app/models/concerns/spree/searchable.rb +0 -4
- data/app/models/concerns/spree/secret_preferences.rb +59 -0
- data/app/models/concerns/spree/signed_id_attachments.rb +54 -0
- data/app/models/concerns/spree/single_store_resource.rb +1 -1
- data/app/models/concerns/spree/stores/email_branding.rb +32 -0
- data/app/models/concerns/spree/stores/markets.rb +5 -2
- data/app/models/concerns/spree/type_labels.rb +38 -0
- data/app/models/concerns/spree/typed_adjustment_line.rb +5 -6
- data/app/models/concerns/spree/typed_associations.rb +12 -18
- data/app/models/concerns/spree/vat_price_calculation.rb +5 -6
- data/app/models/spree/address.rb +12 -2
- data/app/models/spree/adjusters/largest_remainder.rb +14 -1
- data/app/models/spree/adjusters/promotion.rb +4 -19
- data/app/models/spree/allowed_origin.rb +3 -1
- data/app/models/spree/api_key.rb +5 -6
- data/app/models/spree/authentication/strategies/oidc_strategy.rb +5 -5
- data/app/models/spree/base.rb +99 -22
- data/app/models/spree/calculator/flat_percent_item_total.rb +2 -4
- data/app/models/spree/calculator/flat_rate.rb +3 -5
- data/app/models/spree/calculator/flexi_rate.rb +4 -6
- data/app/models/spree/calculator/percent_on_line_item.rb +2 -2
- data/app/models/spree/calculator/price_sack.rb +5 -7
- data/app/models/spree/calculator/shipping/digital_delivery.rb +3 -5
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +7 -7
- data/app/models/spree/calculator/shipping/flat_rate.rb +5 -7
- data/app/models/spree/calculator/shipping/flexi_rate.rb +4 -6
- data/app/models/spree/calculator/shipping/per_item.rb +3 -5
- data/app/models/spree/calculator/shipping/price_sack.rb +5 -7
- data/app/models/spree/calculator/tiered_flat_rate.rb +7 -24
- data/app/models/spree/calculator/tiered_percent.rb +7 -25
- data/app/models/spree/cart.rb +78 -18
- data/app/models/spree/catalog.rb +1 -0
- data/app/models/spree/catalog_price.rb +0 -7
- data/app/models/spree/catalog_price_tier.rb +0 -8
- data/app/models/spree/category.rb +3 -1
- data/app/models/spree/channel/gating.rb +3 -2
- data/app/models/spree/channel.rb +6 -4
- data/app/models/spree/claim.rb +22 -1
- data/app/models/spree/claim_line_item.rb +41 -6
- data/app/models/spree/collection.rb +2 -1
- data/app/models/spree/collection_rule.rb +5 -21
- data/app/models/spree/commission_line.rb +1 -1
- data/app/models/spree/commission_rate.rb +7 -4
- data/app/models/spree/commission_rate_value.rb +1 -1
- data/app/models/spree/commission_rule.rb +4 -11
- data/app/models/spree/commission_rules/category_rule.rb +2 -5
- data/app/models/spree/commission_rules/item_total_rule.rb +2 -2
- data/app/models/spree/commission_rules/product_rule.rb +1 -1
- data/app/models/spree/commission_rules/seller_rule.rb +2 -5
- data/app/models/spree/company.rb +1 -0
- data/app/models/spree/company_invitation.rb +1 -0
- data/app/models/spree/consent_record.rb +0 -1
- data/app/models/spree/credit_card.rb +1 -1
- data/app/models/spree/current.rb +23 -0
- data/app/models/spree/custom_field.rb +2 -2
- data/app/models/spree/custom_field_definition.rb +20 -35
- data/app/models/spree/custom_fields/boolean.rb +1 -1
- data/app/models/spree/custom_fields/json.rb +1 -1
- data/app/models/spree/customer_group.rb +1 -0
- data/app/models/spree/data_feed/google.rb +0 -2
- data/app/models/spree/data_request.rb +2 -1
- data/app/models/spree/delivery_method.rb +36 -14
- data/app/models/spree/delivery_method_rule.rb +4 -11
- data/app/models/spree/delivery_method_rules/channel_rule.rb +2 -5
- data/app/models/spree/delivery_method_rules/item_total_rule.rb +2 -2
- data/app/models/spree/delivery_profile.rb +1 -0
- data/app/models/spree/delivery_rate.rb +7 -8
- data/app/models/spree/delivery_rate_provider/base.rb +1 -0
- data/app/models/spree/delivery_zone.rb +1 -2
- data/app/models/spree/delivery_zone_member.rb +4 -4
- data/app/models/spree/digital_asset.rb +7 -0
- data/app/models/spree/digital_asset_provider/base.rb +2 -0
- data/app/models/spree/digital_link.rb +2 -5
- data/app/models/spree/discount.rb +1 -1
- data/app/models/spree/email_template.rb +25 -0
- data/app/models/spree/email_template_draft.rb +13 -0
- data/app/models/spree/email_template_revision.rb +17 -0
- data/app/models/spree/email_templates/entry.rb +118 -0
- data/app/models/spree/email_templates/sample_record.rb +16 -0
- data/app/models/spree/emails/branding.rb +80 -0
- data/app/models/spree/exchange.rb +16 -1
- data/app/models/spree/exchange_line_item.rb +121 -5
- data/app/models/spree/export.rb +0 -1
- data/app/models/spree/exports/products.rb +10 -1
- data/app/models/spree/exports/report.rb +3 -3
- data/app/models/spree/fee.rb +4 -2
- data/app/models/spree/file_upload.rb +155 -0
- data/app/models/spree/fulfillment.rb +66 -30
- data/app/models/spree/fulfillment_changer.rb +2 -2
- data/app/models/spree/fulfillment_group.rb +6 -1
- data/app/models/spree/fulfillment_item.rb +0 -4
- data/app/models/spree/fulfillment_provider/base.rb +1 -0
- data/app/models/spree/gateway/bogus.rb +6 -0
- data/app/models/spree/gateway/custom_payment_source_method.rb +5 -0
- data/app/models/spree/gateway.rb +6 -2
- data/app/models/spree/gift_card.rb +18 -8
- data/app/models/spree/gift_card_batch.rb +3 -5
- data/app/models/spree/import.rb +5 -7
- data/app/models/spree/import_mapping.rb +1 -2
- data/app/models/spree/import_row.rb +2 -2
- data/app/models/spree/import_schemas/products.rb +1 -0
- data/app/models/spree/integration.rb +9 -19
- data/app/models/spree/invitation.rb +5 -5
- data/app/models/spree/line_item.rb +15 -4
- data/app/models/spree/locale.rb +11 -8
- data/app/models/spree/market.rb +8 -2
- data/app/models/spree/media.rb +1 -9
- data/app/models/spree/newsletter_subscriber.rb +4 -0
- data/app/models/spree/option_type.rb +2 -1
- data/app/models/spree/option_value.rb +2 -1
- data/app/models/spree/order.rb +60 -142
- data/app/models/spree/order_group.rb +18 -4
- data/app/models/spree/order_inventory.rb +10 -5
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_routing/has_strategy_preference.rb +1 -1
- data/app/models/spree/order_routing/strategy/base.rb +4 -2
- data/app/models/spree/order_routing/strategy/rules.rb +1 -1
- data/app/models/spree/order_routing_rule.rb +6 -22
- data/app/models/spree/package_type.rb +2 -2
- data/app/models/spree/payment/gateway_options.rb +15 -53
- data/app/models/spree/payment/processing.rb +2 -4
- data/app/models/spree/payment.rb +21 -13
- data/app/models/spree/payment_method/check.rb +2 -0
- data/app/models/spree/payment_method/session_instrumentation.rb +1 -0
- data/app/models/spree/payment_method/store_credit.rb +15 -13
- data/app/models/spree/payment_method.rb +78 -6
- data/app/models/spree/payment_session.rb +5 -1
- data/app/models/spree/payment_setup_session.rb +1 -0
- data/app/models/spree/payout_provider/base.rb +3 -1
- data/app/models/spree/pickup_point_provider/base.rb +2 -0
- data/app/models/spree/policy.rb +1 -0
- data/app/models/spree/price.rb +17 -14
- data/app/models/spree/price_adjustment_tier.rb +4 -0
- data/app/models/spree/price_list.rb +14 -9
- data/app/models/spree/price_rules/channel_rule.rb +3 -6
- data/app/models/spree/price_rules/customer_group_rule.rb +3 -6
- data/app/models/spree/price_rules/market_rule.rb +2 -5
- data/app/models/spree/price_rules/user_rule.rb +1 -3
- data/app/models/spree/product/channels.rb +9 -2
- data/app/models/spree/product.rb +54 -30
- data/app/models/spree/product_submission.rb +0 -12
- data/app/models/spree/product_type.rb +1 -1
- data/app/models/spree/promotion/actions/create_line_items.rb +28 -18
- data/app/models/spree/promotion/rules/category.rb +1 -5
- data/app/models/spree/promotion/rules/channel.rb +2 -9
- data/app/models/spree/promotion/rules/country.rb +3 -8
- data/app/models/spree/promotion/rules/currency.rb +1 -5
- data/app/models/spree/promotion/rules/customer_group.rb +2 -9
- data/app/models/spree/promotion/rules/first_order.rb +0 -4
- data/app/models/spree/promotion/rules/item_total.rb +6 -10
- data/app/models/spree/promotion/rules/market.rb +2 -9
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -4
- data/app/models/spree/promotion/rules/option_value.rb +2 -6
- data/app/models/spree/promotion/rules/product.rb +1 -5
- data/app/models/spree/promotion/rules/user.rb +0 -4
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -4
- data/app/models/spree/promotion.rb +36 -6
- data/app/models/spree/promotion_action.rb +7 -14
- data/app/models/spree/promotion_action_line_item.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +59 -27
- data/app/models/spree/promotion_rule.rb +7 -14
- data/app/models/spree/purchase_order.rb +3 -0
- data/app/models/spree/quantity_rule.rb +1 -1
- data/app/models/spree/refund.rb +41 -18
- data/app/models/spree/return.rb +31 -2
- data/app/models/spree/return_line_item.rb +65 -14
- data/app/models/spree/role.rb +7 -7
- data/app/models/spree/saved_report.rb +2 -1
- data/app/models/spree/search_provider/base.rb +4 -0
- data/app/models/spree/seller.rb +10 -2
- data/app/models/spree/seller_payout.rb +8 -0
- data/app/models/spree/seller_requirement.rb +5 -12
- data/app/models/spree/seller_requirement_custom_field.rb +1 -2
- data/app/models/spree/seller_requirement_submission.rb +3 -2
- data/app/models/spree/seller_requirements/accept_terms.rb +2 -3
- data/app/models/spree/seller_transfer.rb +6 -0
- data/app/models/spree/shipping_label.rb +2 -0
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/packer.rb +2 -2
- data/app/models/spree/stock/splitter/weight.rb +1 -1
- data/app/models/spree/stock_level/custom_events.rb +6 -0
- data/app/models/spree/stock_level.rb +3 -1
- data/app/models/spree/stock_location.rb +1 -0
- data/app/models/spree/stock_movement.rb +1 -1
- data/app/models/spree/stock_receipt_item.rb +1 -1
- data/app/models/spree/stock_reservation.rb +2 -2
- data/app/models/spree/stock_transfer.rb +6 -2
- data/app/models/spree/store.rb +70 -19
- data/app/models/spree/store_credit.rb +13 -13
- data/app/models/spree/store_credit_event.rb +5 -5
- data/app/models/spree/supplier.rb +1 -0
- data/app/models/spree/tax_category.rb +1 -0
- data/app/models/spree/tax_exemption_certificate.rb +3 -0
- data/app/models/spree/tax_identifier.rb +3 -1
- data/app/models/spree/tax_line.rb +53 -3
- data/app/models/spree/tax_provider/base.rb +71 -14
- data/app/models/spree/tax_provider/internal.rb +70 -41
- data/app/models/spree/tax_provider/recorded_share.rb +114 -0
- data/app/models/spree/tax_rate.rb +30 -8
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/taxonomy.rb +0 -1
- data/app/models/spree/update_status.rb +25 -0
- data/app/models/spree/variant.rb +10 -12
- data/app/models/spree/variant_media.rb +1 -1
- data/app/models/spree/webhook_delivery.rb +1 -0
- data/app/models/spree/webhook_endpoint.rb +46 -13
- data/app/models/spree/wishlist.rb +1 -6
- data/app/models/spree/wishlist_item/custom_events.rb +6 -0
- data/app/presenters/spree/csv/customer_presenter.rb +1 -1
- data/app/presenters/spree/csv/newsletter_subscriber_presenter.rb +1 -1
- data/app/presenters/spree/csv/order_line_item_presenter.rb +10 -6
- data/app/presenters/spree/csv/price_list_price_presenter.rb +3 -8
- data/app/presenters/spree/csv/product_variant_presenter.rb +59 -20
- data/app/presenters/spree/csv/purchase_order_item_presenter.rb +1 -3
- data/app/serializers/spree/emails/base_serializer.rb +14 -0
- data/app/serializers/spree/emails/export_serializer.rb +13 -0
- data/app/serializers/spree/emails/import_serializer.rb +19 -0
- data/app/serializers/spree/emails/invitation_serializer.rb +28 -0
- data/app/serializers/spree/emails/store_serializer.rb +31 -0
- data/app/serializers/spree/emails/user_serializer.rb +12 -0
- data/app/serializers/spree/emails/webhook_endpoint_serializer.rb +16 -0
- data/app/services/spree/carts/create.rb +8 -2
- data/app/services/spree/carts/destroy.rb +2 -2
- data/app/services/spree/carts/remove_out_of_stock_items.rb +2 -2
- data/app/services/spree/carts/split_by_seller.rb +1 -1
- data/app/services/spree/carts/update.rb +22 -8
- data/app/services/spree/catalogs/set_product_terms.rb +1 -1
- data/app/services/spree/categories/add_products.rb +13 -31
- data/app/services/spree/categories/remove_products.rb +12 -51
- data/app/services/spree/checkout/advance.rb +1 -4
- data/app/services/spree/collections/add_products.rb +10 -23
- data/app/services/spree/collections/remove_products.rb +7 -43
- data/app/services/spree/coupon_codes/bulk_generate.rb +8 -14
- data/app/services/spree/data_requests/create.rb +1 -1
- data/app/services/spree/deliveries/destroy.rb +2 -2
- data/app/services/spree/email_templates/check.rb +58 -0
- data/app/services/spree/email_templates/no_sample_record.rb +7 -0
- data/app/services/spree/email_templates/preview.rb +99 -0
- data/app/services/spree/emails/file_system.rb +23 -0
- data/app/services/spree/emails/filters.rb +84 -0
- data/app/services/spree/emails/liquid_context.rb +48 -0
- data/app/services/spree/emails/rendered_email.rb +14 -0
- data/app/services/spree/emails/renderer.rb +125 -0
- data/app/services/spree/emails/template.rb +51 -0
- data/app/services/spree/emails/template_data.rb +23 -0
- data/app/services/spree/emails/template_resolver.rb +109 -0
- data/app/services/spree/emails/text_converter.rb +72 -0
- data/app/services/spree/emails/translation_inliner.rb +134 -0
- data/app/services/spree/imports/row_processors/price_list_price.rb +10 -10
- data/app/services/spree/imports/row_processors/product_variant.rb +77 -34
- data/app/services/spree/imports/row_processors/purchase_order.rb +13 -13
- data/app/services/spree/locales.rb +43 -10
- data/app/services/spree/newsletter/subscribe.rb +8 -12
- data/app/services/spree/orders/build_fulfillments.rb +3 -2
- data/app/services/spree/orders/create.rb +5 -4
- data/app/services/spree/orders/discounts/create.rb +14 -11
- data/app/services/spree/orders/discounts/destroy.rb +1 -0
- data/app/services/spree/orders/discounts/update.rb +1 -0
- data/app/services/spree/orders/fees/create.rb +1 -0
- data/app/services/spree/orders/fees/destroy.rb +1 -0
- data/app/services/spree/orders/fees/update.rb +1 -0
- data/app/services/spree/orders/remove_line_item.rb +13 -3
- data/app/services/spree/orders/update.rb +10 -6
- data/app/services/spree/orders/update_item.rb +6 -3
- data/app/services/spree/orders/update_statuses.rb +3 -1
- data/app/services/spree/prices/bulk_upsert.rb +32 -25
- data/app/services/spree/product_memberships.rb +61 -0
- data/app/services/spree/returns/eligibility_validator.rb +1 -1
- data/app/services/spree/search_provider/custom_field_schema.rb +2 -2
- data/app/services/spree/seeds/commission_rates.rb +1 -1
- data/app/services/spree/seeds/digital_delivery.rb +1 -1
- data/app/services/spree/seeds/payment_methods.rb +2 -2
- data/app/services/spree/seeds/saved_reports.rb +3 -3
- data/app/services/spree/seeds/stores.rb +1 -1
- data/app/services/spree/sellers/requirements.rb +1 -2
- data/app/services/spree/shipping_labels/confirm_refund.rb +1 -1
- data/app/services/spree/shipping_labels/store_file.rb +3 -3
- data/app/services/spree/stock_levels/correct.rb +3 -3
- data/app/services/spree/stock_reservations/reserve.rb +2 -3
- data/app/services/spree/store_credits/apply.rb +15 -13
- data/app/services/spree/stores/provision_defaults.rb +23 -25
- data/app/services/spree/update_check.rb +160 -0
- data/app/services/spree/uploads/assign_stores.rb +92 -0
- data/app/subscribers/spree/seller_onboarding_subscriber.rb +1 -1
- data/app/validators/spree/attachment_content_type_validator.rb +19 -2
- data/app/validators/spree/locale_codes_validator.rb +22 -0
- data/app/views/layouts/spree/base_mailer.html.erb +2 -43
- data/app/views/layouts/spree/base_mailer.liquid +79 -0
- data/app/views/spree/admin_user_mailer/password_reset_email.liquid +14 -0
- data/app/views/spree/export_mailer/export_done.liquid +12 -0
- data/app/views/spree/import_mailer/import_done.liquid +15 -0
- data/app/views/spree/invitation_mailer/invitation_accepted.liquid +9 -0
- data/app/views/spree/invitation_mailer/invitation_email.liquid +13 -0
- data/app/views/spree/seller_user_mailer/password_reset_email.liquid +14 -0
- data/app/views/spree/shared/_mailer_button.html.erb +4 -5
- data/app/views/spree/shared/_mailer_hero.html.erb +6 -5
- data/app/views/spree/shared/_summary_row.liquid +8 -0
- data/app/views/spree/webhook_mailer/endpoint_disabled.liquid +21 -0
- data/app/workflows/spree/carts/add_item.rb +4 -4
- data/app/workflows/spree/carts/complete.rb +13 -3
- data/app/workflows/spree/carts/merge.rb +1 -1
- data/app/workflows/spree/carts/recalculate_totals.rb +5 -0
- data/app/workflows/spree/carts/upsert_items.rb +18 -9
- data/app/workflows/spree/claims/approve.rb +5 -22
- data/app/workflows/spree/claims/cancel.rb +5 -21
- data/app/workflows/spree/claims/create.rb +15 -0
- data/app/workflows/spree/claims/deny.rb +7 -0
- data/app/workflows/spree/claims/resolve.rb +34 -31
- data/app/workflows/spree/customers/anonymize.rb +3 -4
- data/app/workflows/spree/customers/create.rb +1 -1
- data/app/workflows/spree/data_requests/fulfill.rb +2 -2
- data/app/workflows/spree/deliveries/update_tracking.rb +1 -1
- data/app/workflows/spree/email_templates/discard_draft.rb +20 -0
- data/app/workflows/spree/email_templates/publish.rb +70 -0
- data/app/workflows/spree/email_templates/restore_revision.rb +33 -0
- data/app/workflows/spree/email_templates/revert.rb +29 -0
- data/app/workflows/spree/email_templates/save_draft.rb +85 -0
- data/app/workflows/spree/exchanges/approve.rb +5 -22
- data/app/workflows/spree/exchanges/cancel.rb +5 -21
- data/app/workflows/spree/exchanges/create.rb +6 -0
- data/app/workflows/spree/exchanges/fulfill.rb +75 -51
- data/app/workflows/spree/exchanges/receive.rb +6 -65
- data/app/workflows/spree/fulfillments/cancel.rb +1 -1
- data/app/workflows/spree/fulfillments/create.rb +53 -49
- data/app/workflows/spree/fulfillments/fulfill.rb +23 -27
- data/app/workflows/spree/fulfillments/mark_delivered.rb +1 -1
- data/app/workflows/spree/fulfillments/replacements.rb +59 -0
- data/app/workflows/spree/gift_cards/apply.rb +2 -2
- data/app/workflows/spree/orders/add_item.rb +5 -1
- data/app/workflows/spree/orders/cancel.rb +3 -3
- data/app/workflows/spree/orders/complete.rb +16 -8
- data/app/workflows/spree/payments/capture.rb +20 -5
- data/app/workflows/spree/payments/process.rb +5 -3
- data/app/workflows/spree/post_sale/approval.rb +35 -0
- data/app/workflows/spree/post_sale/cancellation.rb +44 -0
- data/app/workflows/spree/post_sale/receipt.rb +92 -0
- data/app/workflows/spree/price_lists/update.rb +4 -4
- data/app/workflows/spree/products/nested_attributes.rb +1 -1
- data/app/workflows/spree/purchase_orders/cancel.rb +1 -1
- data/app/workflows/spree/purchase_orders/close.rb +3 -31
- data/app/workflows/spree/purchase_orders/create.rb +3 -1
- data/app/workflows/spree/purchase_orders/mark_draft.rb +2 -2
- data/app/workflows/spree/purchase_orders/mark_ordered.rb +2 -2
- data/app/workflows/spree/purchase_orders/receive.rb +1 -1
- data/app/workflows/spree/purchase_orders/update.rb +5 -34
- data/app/workflows/spree/receivables/closing_short.rb +46 -0
- data/app/workflows/spree/receivables/draft_editing.rb +48 -0
- data/app/workflows/spree/refunds/create.rb +5 -2
- data/app/workflows/spree/refunds/order_payments.rb +14 -2
- data/app/workflows/spree/refunds/tax_credit.rb +67 -0
- data/app/workflows/spree/returns/approve.rb +5 -22
- data/app/workflows/spree/returns/cancel.rb +5 -22
- data/app/workflows/spree/returns/create.rb +8 -0
- data/app/workflows/spree/returns/receive.rb +5 -76
- data/app/workflows/spree/returns/refund.rb +31 -8
- data/app/workflows/spree/seller_requirement_submissions/create.rb +1 -2
- data/app/workflows/spree/seller_transfers/reverse.rb +28 -1
- data/app/workflows/spree/shipping_labels/purchase.rb +8 -8
- data/app/workflows/spree/shipping_labels/record.rb +7 -7
- data/app/workflows/spree/shipping_labels/refund.rb +2 -2
- data/app/workflows/spree/stock_receipts/recording.rb +4 -4
- data/app/workflows/spree/stock_transfers/cancel.rb +2 -2
- data/app/workflows/spree/stock_transfers/close.rb +3 -30
- data/app/workflows/spree/stock_transfers/create.rb +3 -1
- data/app/workflows/spree/stock_transfers/mark_draft.rb +1 -1
- data/app/workflows/spree/stock_transfers/mark_in_transit.rb +3 -3
- data/app/workflows/spree/stock_transfers/mark_ready.rb +2 -2
- data/app/workflows/spree/stock_transfers/receive.rb +1 -1
- data/app/workflows/spree/stock_transfers/update.rb +5 -33
- data/config/currency_exponents.json +180 -0
- data/config/i18n-tasks.yml +32 -18
- data/config/initializers/alba.rb +7 -0
- data/config/language_names.csv +264 -0
- data/config/locales/ar.yml +811 -0
- data/config/locales/be.yml +855 -0
- data/config/locales/bg.yml +723 -0
- data/config/locales/ca.yml +689 -0
- data/config/locales/content_locales.rb +9 -0
- data/config/locales/cs.yml +855 -0
- data/config/locales/da.yml +771 -0
- data/config/locales/de-CH.yml +248 -0
- data/config/locales/de.yml +835 -0
- data/config/locales/el.yml +769 -0
- data/config/locales/en.yml +47 -505
- data/config/locales/es-CL.yml +301 -0
- data/config/locales/es-EC.yml +186 -0
- data/config/locales/es-MX.yml +334 -0
- data/config/locales/es.yml +831 -0
- data/config/locales/et.yml +644 -0
- data/config/locales/fa.yml +709 -0
- data/config/locales/fi.yml +771 -0
- data/config/locales/fr.yml +830 -0
- data/config/locales/hu.yml +751 -0
- data/config/locales/id.yml +756 -0
- data/config/locales/it.yml +833 -0
- data/config/locales/ja.yml +726 -0
- data/config/locales/km.yml +759 -0
- data/config/locales/ko.yml +575 -0
- data/config/locales/ku.yml +753 -0
- data/config/locales/lt.yml +821 -0
- data/config/locales/lv.yml +685 -0
- data/config/locales/nb.yml +824 -0
- data/config/locales/ne.yml +823 -0
- data/config/locales/nl.yml +826 -0
- data/config/locales/pl.yml +835 -0
- data/config/locales/pt-BR.yml +547 -0
- data/config/locales/pt.yml +636 -0
- data/config/locales/ro.yml +750 -0
- data/config/locales/ru.yml +834 -0
- data/config/locales/sk.yml +680 -0
- data/config/locales/sl-SI.yml +600 -0
- data/config/locales/sv.yml +827 -0
- data/config/locales/th.yml +745 -0
- data/config/locales/tr.yml +777 -0
- data/config/locales/uk.yml +836 -0
- data/config/locales/vi.yml +768 -0
- data/config/locales/zh-CN.yml +786 -0
- data/config/locales/zh-TW.yml +834 -0
- data/db/migrate/20260925000001_add_replacement_to_spree_fulfillment_items.rb +5 -0
- data/db/migrate/20261001000001_add_post_sale_tax.rb +30 -0
- data/db/migrate/20261001000001_convert_preferences_to_json.rb +166 -0
- data/db/migrate/20261001000001_create_spree_email_templates.rb +52 -0
- data/db/migrate/20261009000001_change_money_columns_to_decimal_19_4.rb +116 -0
- data/db/migrate/20261010000001_add_store_id_to_active_storage_blobs.rb +12 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +0 -9
- data/lib/generators/spree/dummy/templates/rails/test.rb +26 -0
- data/lib/spree/checkout/default_requirements.rb +37 -13
- data/lib/spree/core/configuration.rb +19 -1
- data/lib/spree/core/controller_helpers/store.rb +1 -1
- data/lib/spree/core/dependencies.rb +5 -4
- data/lib/spree/core/emails/escaped_output.rb +60 -0
- data/lib/spree/core/engine.rb +72 -165
- data/lib/spree/core/permissions/default_catalog.rb +5 -0
- data/lib/spree/core/preferences/invalid_preferences.rb +18 -0
- data/lib/spree/core/preferences/json_conversion.rb +186 -0
- data/lib/spree/core/preferences/masking.rb +55 -2
- data/lib/spree/core/preferences/preferable.rb +343 -103
- data/lib/spree/core/preferences/preferable_class_methods.rb +188 -136
- data/lib/spree/core/previews/import_preview.rb +10 -0
- data/lib/spree/core/ransack_configuration.rb +13 -2
- data/lib/spree/core/tax/provider_error.rb +37 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +91 -373
- data/lib/spree/emails/editable_templates.rb +82 -0
- data/lib/spree/events/catalog.rb +189 -0
- data/lib/spree/events.rb +21 -1
- data/lib/spree/hooks.rb +0 -17
- data/lib/spree/i18n.rb +32 -15
- data/lib/spree/iso_data.rb +7 -0
- data/lib/spree/localized_number.rb +6 -0
- data/lib/spree/migrations.rb +4 -1
- data/lib/spree/money.rb +196 -15
- data/lib/spree/reporting/adapters/base.rb +7 -6
- data/lib/spree/reporting/adapters/live.rb +6 -6
- data/lib/spree/reporting/default_vocabulary.rb +22 -10
- data/lib/spree/reporting/hydration.rb +1 -1
- data/lib/spree/reporting/query.rb +8 -0
- data/lib/spree/reporting/registry.rb +13 -0
- data/lib/spree/reporting/schema.rb +10 -10
- data/lib/spree/testing_support/editable_email_templates.rb +61 -0
- data/lib/spree/testing_support/emails.rb +22 -0
- data/lib/spree/testing_support/factories/cart_factory.rb +1 -1
- data/lib/spree/testing_support/factories/email_template_factory.rb +28 -0
- data/lib/spree/testing_support/factories/order_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +9 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- data/lib/spree/testing_support/i18n.rb +3 -94
- data/lib/spree/testing_support/lifecycle_events.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +1 -1
- data/lib/spree/testing_support/preferences.rb +0 -5
- data/lib/spree/testing_support/store.rb +9 -1
- data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +67 -1
- data/lib/spree/uploads.rb +101 -0
- data/lib/tasks/categories_and_collections.rake +3 -3
- data/lib/tasks/core.rake +6 -4
- data/lib/tasks/markets.rake +2 -1
- data/lib/tasks/media.rake +3 -3
- data/lib/tasks/migrate_users_to_customers.rake +23 -18
- data/lib/tasks/money.rake +46 -0
- data/lib/tasks/package_types.rake +1 -1
- data/lib/tasks/preferences_json.rake +101 -0
- data/lib/tasks/seller_sample_data.rake +2 -2
- data/lib/tasks/store_settings.rake +13 -6
- data/lib/tasks/typed_adjustments_migration.rake +1 -1
- data/lib/tasks/uploads.rake +19 -0
- data/spec/fixtures/mailer_views/custom_views_probe_mailer/welcome_email.html.erb +4 -0
- metadata +219 -46
- data/app/jobs/spree/products/touch_categories_job.rb +0 -15
- data/app/jobs/spree/products/touch_taxons_job.rb +0 -13
- data/app/models/acts_as_taggable_on/tag_decorator.rb +0 -10
- data/app/models/concerns/spree/has_image_alt_text.rb +0 -18
- data/app/models/spree/base_analytics_event_handler.rb +0 -54
- data/app/models/spree/invitations/store.rb +0 -6
- data/app/models/spree/preference.rb +0 -14
- data/app/models/spree/promotion_handler/page.rb +0 -25
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +0 -60
- data/app/models/spree/stock/differentiator.rb +0 -45
- data/app/presenters/spree/filters/options_presenter.rb +0 -47
- data/app/services/spree/carts/empty.rb +0 -42
- data/app/services/spree/country_to_timezone.rb +0 -273
- data/app/services/spree/payments/create.rb +0 -92
- data/app/validators/spree/url_validator.rb +0 -23
- data/app/views/active_storage/blobs/_blob.html.erb +0 -14
- data/app/views/spree/admin_user_mailer/password_reset_email.html.erb +0 -8
- data/app/views/spree/export_mailer/export_done.html.erb +0 -7
- data/app/views/spree/import_mailer/import_done.html.erb +0 -12
- data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +0 -4
- data/app/views/spree/invitation_mailer/invitation_email.html.erb +0 -12
- data/app/views/spree/seller_user_mailer/password_reset_email.html.erb +0 -8
- data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -19
- data/app/views/spree/shared/_base_mailer_header.html.erb +0 -8
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -399
- data/app/views/spree/shared/_mailer_logo.html.erb +0 -41
- data/app/views/spree/shared/_purchased_items_styles.html.erb +0 -119
- data/app/views/spree/webhook_mailer/endpoint_disabled.html.erb +0 -51
- data/app/views/spree/webhook_mailer/endpoint_disabled.text.erb +0 -10
- data/app/workflows/spree/fulfillments/purchase_label.rb +0 -40
- data/app/workflows/spree/returns/purchase_label.rb +0 -32
- data/lib/spree/analytics.rb +0 -11
- data/lib/spree/core/preferences/scoped_store.rb +0 -34
- data/lib/spree/core/preferences/store.rb +0 -105
- data/lib/spree/translation_migrations.rb +0 -52
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Products
|
|
3
|
-
class TouchCategoriesJob < ::Spree::BaseJob
|
|
4
|
-
queue_as Spree.queues.categories
|
|
5
|
-
|
|
6
|
-
# @param category_ids [Array<Integer>]
|
|
7
|
-
# @param _legacy_taxonomy_ids [Array<Integer>] ignored; accepted so jobs
|
|
8
|
-
# enqueued before 6.0 stopped touching taxonomies still deserialize.
|
|
9
|
-
# Removed in 6.1.
|
|
10
|
-
def perform(category_ids, _legacy_taxonomy_ids = nil)
|
|
11
|
-
Spree::Category.where(id: category_ids).update_all(updated_at: Time.current)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Products
|
|
3
|
-
# @deprecated Renamed to Spree::Products::TouchCategoriesJob in 6.0. Subclasses it
|
|
4
|
-
# so jobs enqueued under the old class name before the deploy still deserialize
|
|
5
|
-
# and run; removed in 6.1.
|
|
6
|
-
class TouchTaxonsJob < TouchCategoriesJob
|
|
7
|
-
def perform(*args)
|
|
8
|
-
Spree::Deprecation.warn('Spree::Products::TouchTaxonsJob is deprecated and will be removed in Spree 6.1. Use Spree::Products::TouchCategoriesJob instead.')
|
|
9
|
-
super
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module HasImageAltText
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
# @return [String] Alt text resolved from preference, asset filename, or i18n fallback.
|
|
6
|
-
def image_alt
|
|
7
|
-
return preferred_image_alt if respond_to?(:preferred_image_alt) && preferred_image_alt.present?
|
|
8
|
-
|
|
9
|
-
if respond_to?(:asset) && asset&.filename.present?
|
|
10
|
-
filename = asset.filename.to_s
|
|
11
|
-
base = File.basename(filename, File.extname(filename))
|
|
12
|
-
return base.tr('-_.', ' ').squeeze(' ').strip
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
Spree.t(:image, default: 'Image')
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
class BaseAnalyticsEventHandler
|
|
3
|
-
# Initializes the event handler
|
|
4
|
-
# @param client [Object] The client object
|
|
5
|
-
# @param opts [Hash] The options
|
|
6
|
-
# @option opts [User] :user
|
|
7
|
-
# @option opts [String] :session_id
|
|
8
|
-
# @option opts [Spree::Store] :store
|
|
9
|
-
def initialize(opts = {})
|
|
10
|
-
@user = opts[:user]
|
|
11
|
-
@session = opts[:session]
|
|
12
|
-
@request = opts[:request]
|
|
13
|
-
@store = opts[:store]
|
|
14
|
-
@visitor_id = opts[:visitor_id]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
attr_reader :user, :session, :request, :store, :visitor_id
|
|
18
|
-
|
|
19
|
-
# Returns the client
|
|
20
|
-
# @return [Object] The client object
|
|
21
|
-
def client
|
|
22
|
-
raise NotImplementedError, 'Subclasses must implement the client method'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Handles the event
|
|
26
|
-
# @param event_name [String] eg. 'order_completed'
|
|
27
|
-
# @param properties [Hash] eg. { product: Spree::Product, taxon: Spree::Category, query: String }
|
|
28
|
-
# rubocop:disable Lint/UnusedMethodArgument
|
|
29
|
-
def handle_event(event_name, properties = {})
|
|
30
|
-
raise NotImplementedError, 'Subclasses must implement the handle method'
|
|
31
|
-
end
|
|
32
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
|
33
|
-
|
|
34
|
-
# Returns the human name for the event
|
|
35
|
-
# @param event_name [String] eg. 'order_completed'
|
|
36
|
-
# @return [String] eg. 'Order Completed'
|
|
37
|
-
def event_human_name(event_name)
|
|
38
|
-
Analytics.events[event_name.to_sym]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
protected
|
|
42
|
-
|
|
43
|
-
# Returns the identity hash for the event
|
|
44
|
-
# @return [Hash] eg. { user_id: 1, session_id: '123' }
|
|
45
|
-
def identity_hash
|
|
46
|
-
{
|
|
47
|
-
user_id: user&.id,
|
|
48
|
-
# session.id is a custom class (not a string), which has overridden the `to_json` method, we have to convert it to a string first so it does not send garbage to the analytics service
|
|
49
|
-
session_id: session&.id&.to_s,
|
|
50
|
-
visitor_id: visitor_id
|
|
51
|
-
}
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
class Spree::Preference < Spree.base_class
|
|
2
|
-
if Rails::VERSION::STRING >= '7.1.0'
|
|
3
|
-
serialize :value, coder: YAML
|
|
4
|
-
else
|
|
5
|
-
serialize :value
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
validates :key, presence: true,
|
|
9
|
-
uniqueness: { case_sensitive: false, allow_blank: true, scope: spree_base_uniqueness_scope }
|
|
10
|
-
|
|
11
|
-
if defined?(Spree::Security::Preferences)
|
|
12
|
-
include Spree::Security::Preferences
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module PromotionHandler
|
|
3
|
-
class Page
|
|
4
|
-
attr_reader :order, :path, :store
|
|
5
|
-
|
|
6
|
-
def initialize(order, path)
|
|
7
|
-
@order = order
|
|
8
|
-
@store = order.store
|
|
9
|
-
@path = path.gsub(/\A\//, '')
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def activate
|
|
13
|
-
if promotion&.eligible?(order)
|
|
14
|
-
promotion.activate(order: order)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def promotion
|
|
21
|
-
@promotion ||= store.promotions.active.find_by(path: path)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module PromotionHandler
|
|
3
|
-
class PromotionDuplicator
|
|
4
|
-
def initialize(promotion, random_string: nil)
|
|
5
|
-
@promotion = promotion.reload
|
|
6
|
-
@random_string = random_string || generate_random_string(4)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def duplicate
|
|
10
|
-
@new_promotion = @promotion.dup
|
|
11
|
-
@new_promotion.path = "#{@promotion.path}_#{@random_string}"
|
|
12
|
-
@new_promotion.name = "New #{@promotion.name}"
|
|
13
|
-
@new_promotion.code = "#{@promotion.code}_#{@random_string}"
|
|
14
|
-
@new_promotion.store = @promotion.store
|
|
15
|
-
|
|
16
|
-
ActiveRecord::Base.transaction do
|
|
17
|
-
@new_promotion.save
|
|
18
|
-
copy_rules
|
|
19
|
-
copy_actions
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
@new_promotion.reload
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def copy_rules
|
|
28
|
-
@promotion.promotion_rules.each do |rule|
|
|
29
|
-
new_rule = rule.dup
|
|
30
|
-
new_rule.promotion = @new_promotion
|
|
31
|
-
new_rule.save!
|
|
32
|
-
|
|
33
|
-
new_rule.users = rule.users if rule.try(:users)
|
|
34
|
-
new_rule.categories = rule.categories if rule.try(:categories)
|
|
35
|
-
new_rule.products = rule.products if rule.try(:products)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def generate_random_string(number)
|
|
40
|
-
charset = Array('A'..'Z') + Array('a'..'z')
|
|
41
|
-
Array.new(number) { charset.sample }.join
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def copy_actions
|
|
45
|
-
@promotion.promotion_actions.each do |action|
|
|
46
|
-
new_action = action.dup
|
|
47
|
-
new_action.promotion = @new_promotion
|
|
48
|
-
new_action.calculator = action.calculator.dup if action.try(:calculator)
|
|
49
|
-
new_action.save!
|
|
50
|
-
|
|
51
|
-
next unless action.try(:promotion_action_line_items)
|
|
52
|
-
|
|
53
|
-
action.promotion_action_line_items.each do |item|
|
|
54
|
-
new_action.promotion_action_line_items << item.dup
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Stock
|
|
3
|
-
class Differentiator
|
|
4
|
-
attr_reader :missing, :packed, :required, :packages, :order
|
|
5
|
-
|
|
6
|
-
def initialize(order, packages)
|
|
7
|
-
@order = order
|
|
8
|
-
@packages = packages
|
|
9
|
-
build_packed
|
|
10
|
-
build_required
|
|
11
|
-
build_missing
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def missing?
|
|
15
|
-
missing.values.any? { |v| v > 0 }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def build_missing
|
|
21
|
-
@missing = Hash.new(0)
|
|
22
|
-
required.keys.each do |variant|
|
|
23
|
-
missing = required[variant] - packed[variant]
|
|
24
|
-
@missing[variant] = missing if missing > 0
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def build_packed
|
|
29
|
-
@packed = Hash.new(0)
|
|
30
|
-
packages.each do |package|
|
|
31
|
-
package.contents.each do |content_item|
|
|
32
|
-
@packed[content_item.variant] += content_item.quantity
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def build_required
|
|
38
|
-
@required = Hash.new(0)
|
|
39
|
-
order.line_items.each do |line_item|
|
|
40
|
-
@required[line_item.variant] = line_item.quantity
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Filters
|
|
3
|
-
class OptionsPresenter
|
|
4
|
-
FilterableOptionType = Struct.new(:option_type, :option_values, keyword_init: true) do
|
|
5
|
-
delegate_missing_to :option_type
|
|
6
|
-
|
|
7
|
-
def to_h
|
|
8
|
-
{
|
|
9
|
-
id: option_type.id,
|
|
10
|
-
name: option_type.name,
|
|
11
|
-
presentation: option_type.label,
|
|
12
|
-
option_values: option_values.map { |e| option_value_hash(e) }
|
|
13
|
-
}
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def option_value_hash(option_value)
|
|
19
|
-
{
|
|
20
|
-
id: option_value.id,
|
|
21
|
-
name: option_value.name,
|
|
22
|
-
presentation: option_value.label,
|
|
23
|
-
position: option_value.position
|
|
24
|
-
}
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def initialize(option_values_scope:)
|
|
29
|
-
@option_values = option_values_scope.includes(:option_type)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def to_a
|
|
33
|
-
grouped_options.map do |option_type, option_values|
|
|
34
|
-
FilterableOptionType.new(option_type: option_type, option_values: option_values)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
attr_reader :option_values
|
|
41
|
-
|
|
42
|
-
def grouped_options
|
|
43
|
-
option_values.group_by(&:option_type)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Carts
|
|
3
|
-
class Empty
|
|
4
|
-
prepend Spree::ServiceModule::Base
|
|
5
|
-
|
|
6
|
-
def call(cart: nil, order: nil)
|
|
7
|
-
if order
|
|
8
|
-
Spree::Deprecation.warn('Calling Spree::Carts::Empty with order: is deprecated and will be removed in Spree 6.1. Pass cart: instead.')
|
|
9
|
-
cart ||= order
|
|
10
|
-
end
|
|
11
|
-
rewrite_input!(remove: [:order], cart: cart)
|
|
12
|
-
run :check_if_can_be_empty
|
|
13
|
-
run :empty_order
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def check_if_can_be_empty(cart:)
|
|
19
|
-
return failure(Spree.t(:cannot_empty)) if cart.nil? || cart.completed?
|
|
20
|
-
|
|
21
|
-
success(cart: cart)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def empty_order(cart:)
|
|
25
|
-
ActiveRecord::Base.transaction do
|
|
26
|
-
cart.line_items.destroy_all
|
|
27
|
-
cart.update_columns(total_quantity: 0, updated_at: Time.current)
|
|
28
|
-
cart.tax_lines.destroy_all
|
|
29
|
-
cart.discounts.destroy_all
|
|
30
|
-
cart.fees.destroy_all
|
|
31
|
-
cart.fulfillments.destroy_all
|
|
32
|
-
cart.order_promotions.destroy_all
|
|
33
|
-
cart.recalculate_totals!
|
|
34
|
-
|
|
35
|
-
Spree::StockReservations::Release.call(cart: cart)
|
|
36
|
-
|
|
37
|
-
success(cart)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
class CountryToTimezone
|
|
3
|
-
prepend Spree::ServiceModule::Base
|
|
4
|
-
|
|
5
|
-
CAPITAL_CITIES = {
|
|
6
|
-
"AD"=>"Andorra la Vella",
|
|
7
|
-
"AE"=>"Abu Dhabi",
|
|
8
|
-
"AF"=>"Kabul",
|
|
9
|
-
"AG"=>"Saint John's",
|
|
10
|
-
"AI"=>"The Valley",
|
|
11
|
-
"AL"=>"Tirana",
|
|
12
|
-
"AM"=>"Yerevan",
|
|
13
|
-
"AN"=>"Willemstad",
|
|
14
|
-
"AO"=>"Luanda",
|
|
15
|
-
"AQ"=>nil,
|
|
16
|
-
"AR"=>"Buenos Aires",
|
|
17
|
-
"AS"=>"Pago Pago",
|
|
18
|
-
"AT"=>"Vienna",
|
|
19
|
-
"AU"=>"Canberra",
|
|
20
|
-
"AW"=>"Oranjestad",
|
|
21
|
-
"AZ"=>"Baku",
|
|
22
|
-
"BA"=>"Sarajevo",
|
|
23
|
-
"BB"=>"Bridgetown",
|
|
24
|
-
"BD"=>"Dhaka",
|
|
25
|
-
"BE"=>"Brussels",
|
|
26
|
-
"BF"=>"Ouagadougou",
|
|
27
|
-
"BG"=>"Sofia",
|
|
28
|
-
"BH"=>"Manama",
|
|
29
|
-
"BI"=>"Bujumbura",
|
|
30
|
-
"BJ"=>"Porto-Novo",
|
|
31
|
-
"BL"=>"Gustavia",
|
|
32
|
-
"BM"=>"Hamilton",
|
|
33
|
-
"BN"=>"Bandar Seri Begawan",
|
|
34
|
-
"BO"=>"La Paz",
|
|
35
|
-
"BR"=>"Brasilia",
|
|
36
|
-
"BS"=>"Nassau",
|
|
37
|
-
"BT"=>"Thimphu",
|
|
38
|
-
"BV"=>nil,
|
|
39
|
-
"BW"=>"Gaborone",
|
|
40
|
-
"BY"=>"Minsk",
|
|
41
|
-
"BZ"=>"Belmopan",
|
|
42
|
-
"CA"=>"Ottawa",
|
|
43
|
-
"CC"=>"West Island",
|
|
44
|
-
"CD"=>"Kinshasa",
|
|
45
|
-
"CF"=>"Bangui",
|
|
46
|
-
"CG"=>"Brazzaville",
|
|
47
|
-
"CH"=>"Bern",
|
|
48
|
-
"CI"=>"Yamoussoukro",
|
|
49
|
-
"CK"=>"Avarua",
|
|
50
|
-
"CL"=>"Santiago",
|
|
51
|
-
"CM"=>"Yaounde",
|
|
52
|
-
"CN"=>"Beijing",
|
|
53
|
-
"CO"=>"Bogota",
|
|
54
|
-
"CR"=>"San Jose",
|
|
55
|
-
"CU"=>"Havana",
|
|
56
|
-
"CV"=>"Praia",
|
|
57
|
-
"CX"=>"The Settlement",
|
|
58
|
-
"CY"=>"Nicosia",
|
|
59
|
-
"CZ"=>"Prague",
|
|
60
|
-
"DE"=>"Berlin",
|
|
61
|
-
"DJ"=>"Djibouti",
|
|
62
|
-
"DK"=>"Copenhagen",
|
|
63
|
-
"DM"=>"Roseau",
|
|
64
|
-
"DO"=>"Santo Domingo",
|
|
65
|
-
"DZ"=>"Algiers",
|
|
66
|
-
"EC"=>"Quito",
|
|
67
|
-
"EE"=>"Tallinn",
|
|
68
|
-
"EG"=>"Cairo",
|
|
69
|
-
"EH"=>nil,
|
|
70
|
-
"ER"=>"Asmara",
|
|
71
|
-
"ES"=>"Madrid",
|
|
72
|
-
"ET"=>"Addis Ababa",
|
|
73
|
-
"FI"=>"Helsinki",
|
|
74
|
-
"FJ"=>"Suva",
|
|
75
|
-
"FK"=>"Stanley",
|
|
76
|
-
"FM"=>"Palikir",
|
|
77
|
-
"FO"=>"Torshavn",
|
|
78
|
-
"FR"=>"Paris",
|
|
79
|
-
"GA"=>"Libreville",
|
|
80
|
-
"GB"=>"London",
|
|
81
|
-
"GD"=>"Saint George's",
|
|
82
|
-
"GE"=>"T'bilisi",
|
|
83
|
-
"GG"=>"Saint Peter Port",
|
|
84
|
-
"GH"=>"Accra",
|
|
85
|
-
"GI"=>"Gibraltar",
|
|
86
|
-
"GL"=>"Nuuk",
|
|
87
|
-
"GM"=>"Banjul",
|
|
88
|
-
"GN"=>"Conakry",
|
|
89
|
-
"GQ"=>"Malabo",
|
|
90
|
-
"GR"=>"Athens",
|
|
91
|
-
"GT"=>"Guatemala City",
|
|
92
|
-
"GU"=>"Hagatna",
|
|
93
|
-
"GW"=>"Bissau",
|
|
94
|
-
"GY"=>"Georgetown",
|
|
95
|
-
"HK"=>"Hong Kong",
|
|
96
|
-
"HM"=>nil,
|
|
97
|
-
"HN"=>"Tegucigalpa",
|
|
98
|
-
"HR"=>"Zagreb",
|
|
99
|
-
"HT"=>"Port-au-Prince",
|
|
100
|
-
"HU"=>"Budapest",
|
|
101
|
-
"ID"=>"Jakarta",
|
|
102
|
-
"IE"=>"Dublin",
|
|
103
|
-
"IL"=>"Jerusalem",
|
|
104
|
-
"IM"=>"Douglas",
|
|
105
|
-
"IN"=>"New Delhi",
|
|
106
|
-
"IO"=>nil,
|
|
107
|
-
"IQ"=>"Baghdad",
|
|
108
|
-
"IR"=>"Tehran",
|
|
109
|
-
"IS"=>"Reykjavik",
|
|
110
|
-
"IT"=>"Rome",
|
|
111
|
-
"JE"=>"Saint Helier",
|
|
112
|
-
"JM"=>"Kingston",
|
|
113
|
-
"JO"=>"Amman",
|
|
114
|
-
"JP"=>"Tokyo",
|
|
115
|
-
"KE"=>"Nairobi",
|
|
116
|
-
"KG"=>"Bishkek",
|
|
117
|
-
"KH"=>"Phnom Penh",
|
|
118
|
-
"KI"=>"Tarawa",
|
|
119
|
-
"KM"=>"Moroni",
|
|
120
|
-
"KN"=>"Basseterre",
|
|
121
|
-
"KP"=>"Pyongyang",
|
|
122
|
-
"KR"=>"Seoul",
|
|
123
|
-
"KW"=>"Kuwait City",
|
|
124
|
-
"KY"=>"George Town",
|
|
125
|
-
"KZ"=>"Astana",
|
|
126
|
-
"LA"=>"Vientiane",
|
|
127
|
-
"LB"=>"Beirut",
|
|
128
|
-
"LC"=>"Castries",
|
|
129
|
-
"LI"=>"Vaduz",
|
|
130
|
-
"LK"=>"Colombo",
|
|
131
|
-
"LR"=>"Monrovia",
|
|
132
|
-
"LS"=>"Maseru",
|
|
133
|
-
"LT"=>"Vilnius",
|
|
134
|
-
"LU"=>"Luxembourg",
|
|
135
|
-
"LV"=>"Riga",
|
|
136
|
-
"LY"=>"Tripoli",
|
|
137
|
-
"MA"=>"Rabat",
|
|
138
|
-
"MC"=>"Monaco",
|
|
139
|
-
"MD"=>"Chisinau",
|
|
140
|
-
"ME"=>"Podgorica",
|
|
141
|
-
"MF"=>"Marigot",
|
|
142
|
-
"MG"=>"Antananarivo",
|
|
143
|
-
"MH"=>"Majuro",
|
|
144
|
-
"MK"=>"Skopje",
|
|
145
|
-
"ML"=>"Bamako",
|
|
146
|
-
"MM"=>"Rangoon",
|
|
147
|
-
"MN"=>"Ulaanbaatar",
|
|
148
|
-
"MO"=>nil,
|
|
149
|
-
"MP"=>"Saipan",
|
|
150
|
-
"MR"=>"Nouakchott",
|
|
151
|
-
"MS"=>"Plymouth",
|
|
152
|
-
"MT"=>"Valletta",
|
|
153
|
-
"MU"=>"Port Louis",
|
|
154
|
-
"MV"=>"Male",
|
|
155
|
-
"MW"=>"Lilongwe",
|
|
156
|
-
"MX"=>"Mexico City",
|
|
157
|
-
"MY"=>"Kuala Lumpur",
|
|
158
|
-
"MZ"=>"Maputo",
|
|
159
|
-
"NA"=>"Windhoek",
|
|
160
|
-
"NC"=>"Noumea",
|
|
161
|
-
"NE"=>"Niamey",
|
|
162
|
-
"NF"=>"Kingston",
|
|
163
|
-
"NG"=>"Abuja",
|
|
164
|
-
"NI"=>"Managua",
|
|
165
|
-
"NL"=>"Amsterdam",
|
|
166
|
-
"NO"=>"Oslo",
|
|
167
|
-
"NP"=>"Kathmandu",
|
|
168
|
-
"NR"=>nil,
|
|
169
|
-
"NU"=>"Alofi",
|
|
170
|
-
"NZ"=>"Wellington",
|
|
171
|
-
"OM"=>"Muscat",
|
|
172
|
-
"PA"=>"Panama City",
|
|
173
|
-
"PE"=>"Lima",
|
|
174
|
-
"PF"=>"Papeete",
|
|
175
|
-
"PG"=>"Port Moresby",
|
|
176
|
-
"PH"=>"Manila",
|
|
177
|
-
"PK"=>"Islamabad",
|
|
178
|
-
"PL"=>"Warsaw",
|
|
179
|
-
"PM"=>"Saint-Pierre",
|
|
180
|
-
"PN"=>"Adamstown",
|
|
181
|
-
"PR"=>"San Juan",
|
|
182
|
-
"PS"=>nil,
|
|
183
|
-
"PT"=>"Lisbon",
|
|
184
|
-
"PW"=>"Melekeok",
|
|
185
|
-
"PY"=>"Asuncion",
|
|
186
|
-
"QA"=>"Doha",
|
|
187
|
-
"RO"=>"Bucharest",
|
|
188
|
-
"RS"=>"Belgrade",
|
|
189
|
-
"RU"=>"Moscow",
|
|
190
|
-
"RW"=>"Kigali",
|
|
191
|
-
"SA"=>"Riyadh",
|
|
192
|
-
"SB"=>"Honiara",
|
|
193
|
-
"SC"=>"Victoria",
|
|
194
|
-
"SD"=>"Khartoum",
|
|
195
|
-
"SE"=>"Stockholm",
|
|
196
|
-
"SG"=>"Singapore",
|
|
197
|
-
"SH"=>"Jamestown",
|
|
198
|
-
"SI"=>"Ljubljana",
|
|
199
|
-
"SJ"=>"Longyearbyen",
|
|
200
|
-
"SK"=>"Bratislava",
|
|
201
|
-
"SL"=>"Freetown",
|
|
202
|
-
"SM"=>"San Marino",
|
|
203
|
-
"SN"=>"Dakar",
|
|
204
|
-
"SO"=>"Mogadishu",
|
|
205
|
-
"SR"=>"Paramaribo",
|
|
206
|
-
"ST"=>"Sao Tome",
|
|
207
|
-
"SV"=>"San Salvador",
|
|
208
|
-
"SY"=>"Damascus",
|
|
209
|
-
"SZ"=>"Mbabane",
|
|
210
|
-
"TC"=>"Grand Turk",
|
|
211
|
-
"TD"=>"N'Djamena",
|
|
212
|
-
"TF"=>nil,
|
|
213
|
-
"TG"=>"Lome",
|
|
214
|
-
"TH"=>"Bangkok",
|
|
215
|
-
"TJ"=>"Dushanbe",
|
|
216
|
-
"TK"=>nil,
|
|
217
|
-
"TL"=>"Dili",
|
|
218
|
-
"TM"=>"Ashgabat",
|
|
219
|
-
"TN"=>"Tunis",
|
|
220
|
-
"TO"=>"Nuku'alofa",
|
|
221
|
-
"TR"=>"Ankara",
|
|
222
|
-
"TT"=>"Port-of-Spain",
|
|
223
|
-
"TV"=>"Funafuti",
|
|
224
|
-
"TW"=>"Taipei",
|
|
225
|
-
"TZ"=>"Dar es Salaam",
|
|
226
|
-
"UA"=>"Kyiv",
|
|
227
|
-
"UG"=>"Kampala",
|
|
228
|
-
"US"=>"Washington, DC",
|
|
229
|
-
"UY"=>"Montevideo",
|
|
230
|
-
"UZ"=>"Tashkent",
|
|
231
|
-
"VA"=>"Vatican City",
|
|
232
|
-
"VC"=>"Kingstown",
|
|
233
|
-
"VE"=>"Caracas",
|
|
234
|
-
"VG"=>"Road Town",
|
|
235
|
-
"VI"=>"Charlotte Amalie",
|
|
236
|
-
"VN"=>"Hanoi",
|
|
237
|
-
"VU"=>"Port-Vila",
|
|
238
|
-
"WF"=>"Mata-Utu",
|
|
239
|
-
"WS"=>"Apia",
|
|
240
|
-
"YE"=>"Sanaa",
|
|
241
|
-
"YT"=>"Mamoudzou",
|
|
242
|
-
"ZA"=>"Pretoria",
|
|
243
|
-
"ZM"=>"Lusaka",
|
|
244
|
-
"ZW"=>"Harare"}.freeze
|
|
245
|
-
|
|
246
|
-
def call(code:)
|
|
247
|
-
case code
|
|
248
|
-
when 'US', 'CA'
|
|
249
|
-
success('Central Time (US & Canada)')
|
|
250
|
-
else
|
|
251
|
-
success(from_timezone_helper(code))
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
private
|
|
256
|
-
|
|
257
|
-
def from_timezone_helper(code)
|
|
258
|
-
timezones = ActiveSupport::TimeZone.country_zones(code)
|
|
259
|
-
return 'Central Time (US & Canada)' if timezones.empty?
|
|
260
|
-
|
|
261
|
-
timezones.first.name if timezones.size == 1
|
|
262
|
-
|
|
263
|
-
# If there is more than one timezone for the country, then we'll use the capital city
|
|
264
|
-
# to determine the timezone
|
|
265
|
-
# eg GB has London and Edinburgh
|
|
266
|
-
capital_city = CAPITAL_CITIES[code]
|
|
267
|
-
capital_city_time_zone = timezones.find{ |tz| tz.name.match(capital_city) }
|
|
268
|
-
return capital_city_time_zone.name if capital_city_time_zone.present?
|
|
269
|
-
|
|
270
|
-
timezones.first.name
|
|
271
|
-
end
|
|
272
|
-
end
|
|
273
|
-
end
|