spree_api 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/Rakefile +4 -48
- data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
- data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
- data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
- data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
- data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
- data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
- data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
- data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
- data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
- data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
- data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
- data/app/controllers/spree/api/v3/base_controller.rb +12 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
- data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
- data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
- data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
- data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
- data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
- data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
- data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
- data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
- data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
- data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
- data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
- data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
- data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
- data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
- data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
- data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
- data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
- data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
- data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
- data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
- data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
- data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
- data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
- data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
- data/app/services/spree/api/v3/filter_predicates.rb +29 -0
- data/app/services/spree/api/v3/filter_table.rb +337 -0
- data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
- data/app/services/spree/api/v3/request_schema.rb +430 -0
- data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
- data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
- data/config/initializers/pagy.rb +1 -1
- data/config/initializers/typelizer.rb +7 -9
- data/config/locales/ar.yml +15 -0
- data/config/locales/be.yml +15 -0
- data/config/locales/bg.yml +15 -0
- data/config/locales/ca.yml +15 -0
- data/config/locales/cs.yml +15 -0
- data/config/locales/da.yml +15 -0
- data/config/locales/de-CH.yml +11 -0
- data/config/locales/de.yml +15 -0
- data/config/locales/el.yml +15 -0
- data/config/locales/en.yml +5 -40
- data/config/locales/es-CL.yml +10 -0
- data/config/locales/es-EC.yml +11 -0
- data/config/locales/es-MX.yml +12 -0
- data/config/locales/es.yml +15 -0
- data/config/locales/et.yml +15 -0
- data/config/locales/fa.yml +15 -0
- data/config/locales/fi.yml +15 -0
- data/config/locales/fr.yml +15 -0
- data/config/locales/hu.yml +15 -0
- data/config/locales/id.yml +15 -0
- data/config/locales/it.yml +15 -0
- data/config/locales/ja.yml +15 -0
- data/config/locales/km.yml +15 -0
- data/config/locales/ko.yml +15 -0
- data/config/locales/ku.yml +15 -0
- data/config/locales/lt.yml +15 -0
- data/config/locales/lv.yml +15 -0
- data/config/locales/nb.yml +15 -0
- data/config/locales/ne.yml +15 -0
- data/config/locales/nl.yml +15 -0
- data/config/locales/pl.yml +15 -0
- data/config/locales/pt-BR.yml +13 -0
- data/config/locales/pt.yml +15 -0
- data/config/locales/ro.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/config/locales/sk.yml +15 -0
- data/config/locales/sl-SI.yml +15 -0
- data/config/locales/sv.yml +15 -0
- data/config/locales/th.yml +15 -0
- data/config/locales/tr.yml +15 -0
- data/config/locales/uk.yml +15 -0
- data/config/locales/vi.yml +15 -0
- data/config/locales/zh-CN.yml +15 -0
- data/config/locales/zh-TW.yml +15 -0
- data/config/routes.rb +54 -102
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +54 -274
- data/lib/spree/api/middleware/request_size_limit.rb +24 -3
- data/lib/spree/api/openapi/filter_documentation.rb +136 -0
- data/lib/spree/api/openapi/schema_helper.rb +127 -81
- data/lib/spree/api/preference_families.rb +46 -0
- data/lib/spree/api/preference_types.rb +138 -0
- data/lib/spree/api/typelizer_generation.rb +39 -0
- data/lib/spree/api/webhook_event_types.rb +140 -0
- data/lib/spree/api.rb +0 -2
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +125 -40
- data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
- data/config/i18n-tasks.yml +0 -40
- data/config/initializers/alba.rb +0 -5
|
@@ -10,27 +10,48 @@ module Spree
|
|
|
10
10
|
subclassed_via -> { Spree::PaymentMethod.providers },
|
|
11
11
|
unknown_type_error: 'unknown_payment_method_type'
|
|
12
12
|
|
|
13
|
+
request_params :payment_method do |body|
|
|
14
|
+
body.attribute :type, :string,
|
|
15
|
+
required: true,
|
|
16
|
+
only: :create,
|
|
17
|
+
permit: false,
|
|
18
|
+
example: 'check',
|
|
19
|
+
description: 'Wire shorthand from the payment method types endpoint.'
|
|
20
|
+
body.attribute :name, :string, required: true, on: :create
|
|
21
|
+
body.attribute :description, :string, nullable: true
|
|
22
|
+
body.attribute :active, :boolean
|
|
23
|
+
body.attribute :storefront_visible, :boolean,
|
|
24
|
+
description: 'False keeps the method to the dashboard; true also offers it on the storefront.'
|
|
25
|
+
body.attribute :capture_method, :string,
|
|
26
|
+
nullable: true,
|
|
27
|
+
choices: Spree::CaptureMethod::CAPTURE_METHODS,
|
|
28
|
+
description: 'When customers are charged for this method. Null inherits the store setting.'
|
|
29
|
+
body.attribute :position, :integer
|
|
30
|
+
body.attribute :metadata, :hash
|
|
31
|
+
body.attribute :preferences, :hash,
|
|
32
|
+
description: "Values for the provider's preference schema, from the payment method types endpoint."
|
|
33
|
+
end
|
|
34
|
+
|
|
13
35
|
# Lists available payment provider subclasses for the create form.
|
|
14
|
-
# Returns: { data: [{ type, label, description,
|
|
15
|
-
#
|
|
36
|
+
# Returns: { data: [{ type, label, description, schema }] }.
|
|
37
|
+
# `schema` is the JSON Schema of the provider-specific
|
|
16
38
|
# configuration fields, so admin UIs can render a generic
|
|
17
39
|
# preferences form without hard-coding per-provider knowledge.
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
# provider twice.
|
|
40
|
+
# Every provider, `installed` when the store already has one: the
|
|
41
|
+
# create picker leaves those out so a provider is not installed
|
|
42
|
+
# twice, and the edit form still finds an installed one's schema.
|
|
22
43
|
def types
|
|
23
|
-
authorize! :
|
|
44
|
+
authorize! :show, model_class
|
|
24
45
|
|
|
25
46
|
installed_class_names = current_store.payment_methods.pluck(:type)
|
|
26
47
|
installed_shorthands = installed_class_names.filter_map do |name|
|
|
27
48
|
name.safe_constantize&.api_type
|
|
28
49
|
end
|
|
29
|
-
|
|
30
|
-
installed_shorthands.include?(entry[:type])
|
|
50
|
+
entries = model_class.subclasses_with_preference_schema.map do |entry|
|
|
51
|
+
entry.merge(installed: installed_shorthands.include?(entry[:type]))
|
|
31
52
|
end
|
|
32
53
|
|
|
33
|
-
render json: { data:
|
|
54
|
+
render json: { data: entries }
|
|
34
55
|
end
|
|
35
56
|
|
|
36
57
|
protected
|
|
@@ -43,19 +64,14 @@ module Spree
|
|
|
43
64
|
Spree.api.admin_payment_method_serializer
|
|
44
65
|
end
|
|
45
66
|
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
# an integer. `type` and `preferences` are added by `SubclassedResource`.
|
|
67
|
+
# `type` is read by `SubclassedResource` from the raw params.
|
|
68
|
+
# Deliberately NOT routed through `normalize_params`: `metadata` holds
|
|
69
|
+
# opaque merchant values, and prefixed-ID resolution recurses into
|
|
70
|
+
# nested hashes — a value like `we_1MqJ8b...` matches the prefixed-ID
|
|
71
|
+
# shape and would be decoded to an integer. `preferences` decode their
|
|
72
|
+
# own ids from their schema.
|
|
53
73
|
def permitted_params
|
|
54
|
-
params.permit(
|
|
55
|
-
:name, :description, :active, :storefront_visible, :auto_capture, :capture_method, :position,
|
|
56
|
-
*model_additional_permitted_attributes,
|
|
57
|
-
metadata: {}, preferences: {}
|
|
58
|
-
)
|
|
74
|
+
params.permit(*permitted_attributes)
|
|
59
75
|
end
|
|
60
76
|
|
|
61
77
|
def scope
|
|
@@ -8,6 +8,14 @@ module Spree
|
|
|
8
8
|
class PoliciesController < ResourceController
|
|
9
9
|
scoped_resource :settings
|
|
10
10
|
|
|
11
|
+
request_params :policy do |body|
|
|
12
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Wholesale Policy'
|
|
13
|
+
body.attribute :slug, :string, example: 'wholesale-policy'
|
|
14
|
+
body.attribute :body, :string,
|
|
15
|
+
nullable: true,
|
|
16
|
+
example: '<p>Trade orders ship within five working days.</p>'
|
|
17
|
+
end
|
|
18
|
+
|
|
11
19
|
protected
|
|
12
20
|
|
|
13
21
|
def model_class
|
|
@@ -18,10 +26,6 @@ module Spree
|
|
|
18
26
|
Spree.api.admin_policy_serializer
|
|
19
27
|
end
|
|
20
28
|
|
|
21
|
-
def resource_permitted_attributes
|
|
22
|
-
[:name, :slug, :body]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
29
|
# Accept slug (e.g. returns-policy) or prefixed ID (e.g. pol_abc123),
|
|
26
30
|
# matching the storefront's lookup.
|
|
27
31
|
def find_resource
|
|
@@ -3,8 +3,7 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Admin
|
|
5
5
|
# Admin CRUD for `Spree::PriceList`, plus the lifecycle transitions
|
|
6
|
-
# (`activate` / `deactivate`)
|
|
7
|
-
# (`prices`).
|
|
6
|
+
# (`activate` / `deactivate`).
|
|
8
7
|
#
|
|
9
8
|
# Everything writable on the list itself — name, schedule, match
|
|
10
9
|
# policy, nested rules (`rules: [...]`), and individual price
|
|
@@ -25,11 +24,37 @@ module Spree
|
|
|
25
24
|
# before_actions by method name, so this would otherwise
|
|
26
25
|
# *replace* the parent's narrower filter and break the standard
|
|
27
26
|
# actions. Wrapping it under a different name keeps both.
|
|
28
|
-
before_action :load_member_resource, only: [:activate, :deactivate
|
|
27
|
+
before_action :load_member_resource, only: [:activate, :deactivate]
|
|
28
|
+
|
|
29
|
+
request_params :price_list do |body|
|
|
30
|
+
body.attribute :name, :string, required: true, on: :create, example: 'EU wholesale'
|
|
31
|
+
body.attribute :description, :string, nullable: true
|
|
32
|
+
body.attribute :position, :integer, example: 1
|
|
33
|
+
body.attribute :starts_at, :datetime,
|
|
34
|
+
nullable: true,
|
|
35
|
+
example: '2026-06-01T00:00:00Z',
|
|
36
|
+
description: 'Pair with `ends_at` to schedule the list: activating a list whose start is in the future marks it `scheduled`.'
|
|
37
|
+
body.attribute :ends_at, :datetime, nullable: true, example: '2026-09-01T00:00:00Z'
|
|
38
|
+
body.attribute :match_policy, :string,
|
|
39
|
+
choices: Spree::PriceList::MATCH_POLICIES,
|
|
40
|
+
example: 'all',
|
|
41
|
+
description: '`all`: every rule must match. `any`: one matching rule is enough.'
|
|
42
|
+
body.attribute :price_adjustment_percentage, :decimal,
|
|
43
|
+
nullable: true,
|
|
44
|
+
example: '-15.0',
|
|
45
|
+
description: 'Signed: negative discounts off base prices, positive marks up.'
|
|
46
|
+
body.attribute :adjust_compare_at, :boolean
|
|
47
|
+
body.attribute :rules, :array, of: Spree::Api::V3::Admin::PriceListRuleRequestSchema,
|
|
48
|
+
description: 'The complete rule set: rules are matched by `id` and updated, new ones are built, and rules left out are removed.'
|
|
49
|
+
body.attribute :price_adjustment_tiers, :array, of: Spree::Api::V3::Admin::PriceAdjustmentTierRequestSchema,
|
|
50
|
+
description: "Quantity bands on the list's percentage. The payload is the whole ladder: a band left out is removed."
|
|
51
|
+
body.attribute :prices, :array, of: Spree::Api::V3::Admin::PriceListPriceRequestSchema,
|
|
52
|
+
description: 'Per-variant price overrides. Each row upserts, so the variants it names become part of the list. Curating whole products goes through the nested products endpoint instead.'
|
|
53
|
+
end
|
|
29
54
|
|
|
30
55
|
# GET /api/v3/admin/price_lists/price_rule_types
|
|
31
56
|
#
|
|
32
|
-
# Returns `[{ type, label, description,
|
|
57
|
+
# Returns `[{ type, label, description, schema }]`
|
|
33
58
|
# for every registered subclass in `Spree.pricing.rules`. The
|
|
34
59
|
# SPA uses this to build the "Add rule" picker + render a
|
|
35
60
|
# generic preferences form per subclass. Rules themselves are
|
|
@@ -69,29 +94,6 @@ module Spree
|
|
|
69
94
|
end
|
|
70
95
|
end
|
|
71
96
|
|
|
72
|
-
# GET /api/v3/admin/price_lists/:id/prices
|
|
73
|
-
#
|
|
74
|
-
# The spreadsheet editor's data source. Returns every Price row
|
|
75
|
-
# in this list (filtered by `?currency=`), eager-loading
|
|
76
|
-
# `variant.product` + option values so each cell can render
|
|
77
|
-
# product name, variant options and SKU without N+1.
|
|
78
|
-
def prices
|
|
79
|
-
authorize! :read, @resource
|
|
80
|
-
currency = params[:currency].presence || current_store.default_currency
|
|
81
|
-
prices = @resource.prices
|
|
82
|
-
.includes(variant: [:product, { option_values: :option_type }])
|
|
83
|
-
.where(currency: currency)
|
|
84
|
-
.joins(variant: :product)
|
|
85
|
-
.order(Arel.sql("#{Spree::Product.table_name}.name ASC"))
|
|
86
|
-
.order(Arel.sql("#{Spree::Variant.table_name}.position ASC"))
|
|
87
|
-
.order(min_quantity: :asc)
|
|
88
|
-
|
|
89
|
-
render json: {
|
|
90
|
-
data: prices.map { |p| serialize_price(p) },
|
|
91
|
-
meta: { currency: currency, count: prices.size }
|
|
92
|
-
}
|
|
93
|
-
end
|
|
94
|
-
|
|
95
97
|
protected
|
|
96
98
|
|
|
97
99
|
def model_class
|
|
@@ -121,53 +123,16 @@ module Spree
|
|
|
121
123
|
[:price_adjustment_tiers]
|
|
122
124
|
end
|
|
123
125
|
|
|
124
|
-
def permitted_params
|
|
125
|
-
normalize_params(
|
|
126
|
-
params.permit(
|
|
127
|
-
:name, :description, :position,
|
|
128
|
-
:starts_at, :ends_at, :match_policy,
|
|
129
|
-
:price_adjustment_percentage, :adjust_compare_at,
|
|
130
|
-
rules: [:id, :type, { preferences: {} }],
|
|
131
|
-
price_adjustment_tiers: [:min_quantity, :percentage],
|
|
132
|
-
prices: [:id, :variant_id, :currency, :min_quantity, :amount, :compare_at_amount]
|
|
133
|
-
)
|
|
134
|
-
)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
126
|
private
|
|
138
127
|
|
|
139
128
|
# Loads the record without the action-derived authorization
|
|
140
129
|
# `set_resource` runs (which would check `:activate` /
|
|
141
|
-
# `:deactivate`
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
# actually mention (`:update` / `:read`).
|
|
130
|
+
# `:deactivate` — actions that abilities don't grant). The
|
|
131
|
+
# per-action methods explicitly call `authorize!` with
|
|
132
|
+
# `:update`, which ability rules actually mention.
|
|
145
133
|
def load_member_resource
|
|
146
134
|
@resource = find_resource
|
|
147
135
|
end
|
|
148
|
-
|
|
149
|
-
# Hand-rolled flat shape for the spreadsheet — keeps the payload
|
|
150
|
-
# narrow (no nested variant/product/option_value objects) and
|
|
151
|
-
# avoids paying for the admin Price serializer when we only need
|
|
152
|
-
# ~6 fields per row. The grouping the UI does (rows → product
|
|
153
|
-
# header) is driven entirely off `product_id`/`product_name`.
|
|
154
|
-
def serialize_price(price)
|
|
155
|
-
variant = price.variant
|
|
156
|
-
product = variant.product
|
|
157
|
-
{
|
|
158
|
-
id: price.prefixed_id,
|
|
159
|
-
variant_id: variant.prefixed_id,
|
|
160
|
-
product_id: product.prefixed_id,
|
|
161
|
-
product_name: product.name,
|
|
162
|
-
variant_label: variant.options_text.presence,
|
|
163
|
-
sku: variant.sku,
|
|
164
|
-
currency: price.currency,
|
|
165
|
-
min_quantity: price.min_quantity,
|
|
166
|
-
amount: price.amount&.to_s,
|
|
167
|
-
compare_at_amount: price.compare_at_amount&.to_s
|
|
168
|
-
}
|
|
169
|
-
end
|
|
170
|
-
|
|
171
136
|
end
|
|
172
137
|
end
|
|
173
138
|
end
|
|
@@ -13,6 +13,47 @@ module Spree
|
|
|
13
13
|
before_action :require_ids!, only: [:bulk_destroy]
|
|
14
14
|
before_action :require_prices!, only: [:bulk_upsert]
|
|
15
15
|
|
|
16
|
+
# variant_id and price_list_id resolve through the current store's
|
|
17
|
+
# scopes (+permitted_params+), so a foreign or unknown id 404s.
|
|
18
|
+
request_params :price do |body|
|
|
19
|
+
body.attribute :variant_id, :id, required: true, on: :create, example: 'variant_xY9'
|
|
20
|
+
body.attribute :currency, :currency, required: true, on: :create, example: 'USD'
|
|
21
|
+
body.attribute :min_quantity, :integer,
|
|
22
|
+
description: 'The quantity a line must reach for this price to apply. Omit for the bottom rung of the ladder. Anything above 1 requires a `price_list_id`.'
|
|
23
|
+
body.attribute :amount, :decimal, nullable: true, example: '19.99'
|
|
24
|
+
body.attribute :compare_at_amount, :decimal, nullable: true, example: '19.99'
|
|
25
|
+
body.attribute :price_list_id, :id,
|
|
26
|
+
nullable: true,
|
|
27
|
+
example: 'pl_aBc123',
|
|
28
|
+
description: 'Omit or null for a base price; a price list for a list override.'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
request_params 'PriceBulkUpsertParams', action: :bulk_upsert do |body|
|
|
32
|
+
body.attribute :prices, :array,
|
|
33
|
+
required: true,
|
|
34
|
+
as: 'PriceBulkUpsertRowParams',
|
|
35
|
+
description: 'Send an empty list to change nothing.' do |price|
|
|
36
|
+
price.attribute :id, :id,
|
|
37
|
+
nullable: true,
|
|
38
|
+
example: 'price_aBc123',
|
|
39
|
+
description: 'Present: updates that row. Absent: upserts on `(variant_id, currency, price_list_id, min_quantity)`.'
|
|
40
|
+
price.attribute :variant_id, :id, required: true, example: 'variant_xY9'
|
|
41
|
+
price.attribute :currency, :currency, required: true, example: 'USD'
|
|
42
|
+
price.attribute :price_list_id, :id,
|
|
43
|
+
nullable: true,
|
|
44
|
+
example: 'pl_aBc123',
|
|
45
|
+
description: 'Omit or null for a base price.'
|
|
46
|
+
price.attribute :min_quantity, :integer,
|
|
47
|
+
description: "The rung of the variant's ladder. Omit for the bottom rung; anything above 1 requires a `price_list_id`. A variant carries at most ten rungs on one list per currency."
|
|
48
|
+
price.attribute :amount, :decimal, nullable: true, example: '19.99'
|
|
49
|
+
price.attribute :compare_at_amount, :decimal, nullable: true, example: '19.99'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
request_params 'PriceBulkDestroyParams', action: :bulk_destroy do |body|
|
|
54
|
+
body.attribute :ids, :array, of: :id, required: true, example: %w[price_aBc123]
|
|
55
|
+
end
|
|
56
|
+
|
|
16
57
|
# Bulk-upserts prices on the unique key
|
|
17
58
|
# `(variant_id, currency, price_list_id, min_quantity)` — one row per
|
|
18
59
|
# rung of a variant's ladder (docs/plans/6.0-volume-pricing.md).
|
|
@@ -58,10 +99,6 @@ module Spree
|
|
|
58
99
|
# validations (docs/plans/6.0-volume-pricing.md). Each branch is
|
|
59
100
|
# guarded on the key its own failure carries, so a failure mode the
|
|
60
101
|
# service grows later is not reported under one of these names.
|
|
61
|
-
#
|
|
62
|
-
# `I18n.t` rather than `Spree.t` for these: the models raise them
|
|
63
|
-
# under `activerecord.errors`, and `Spree.t` would scope the lookup
|
|
64
|
-
# to `spree.` and miss the key.
|
|
65
102
|
if (invalid = result.error&.value.try(:[], :invalid_quantities))
|
|
66
103
|
return render_error(
|
|
67
104
|
code: 'invalid_min_quantity',
|
|
@@ -71,6 +108,15 @@ module Spree
|
|
|
71
108
|
)
|
|
72
109
|
end
|
|
73
110
|
|
|
111
|
+
if (malformed = result.error&.value.try(:[], :malformed_amounts))
|
|
112
|
+
return render_error(
|
|
113
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:invalid_money_format],
|
|
114
|
+
message: I18n.t('activerecord.errors.models.spree/price_list.attributes.base.malformed_price').upcase_first,
|
|
115
|
+
status: :unprocessable_content,
|
|
116
|
+
details: { rows: malformed }
|
|
117
|
+
)
|
|
118
|
+
end
|
|
119
|
+
|
|
74
120
|
if (negative = result.error&.value.try(:[], :invalid_amounts))
|
|
75
121
|
return render_error(
|
|
76
122
|
code: 'invalid_amount',
|
|
@@ -164,11 +210,8 @@ module Spree
|
|
|
164
210
|
false
|
|
165
211
|
end
|
|
166
212
|
|
|
167
|
-
# Resolves variant_id / price_list_id through the current store's
|
|
168
|
-
# scopes so a foreign or unknown id 404s instead of binding the
|
|
169
|
-
# price to another store's record.
|
|
170
213
|
def permitted_params
|
|
171
|
-
permitted = params.permit(*
|
|
214
|
+
permitted = params.permit(*permitted_attributes)
|
|
172
215
|
permitted[:variant_id] = store_variants.find_by_prefix_id!(permitted[:variant_id]).id if permitted[:variant_id].present?
|
|
173
216
|
permitted[:price_list_id] = store_price_lists.find_by_prefix_id!(permitted[:price_list_id]).id if permitted[:price_list_id].present?
|
|
174
217
|
permitted
|
|
@@ -11,6 +11,30 @@ module Spree
|
|
|
11
11
|
class ProductTypesController < ResourceController
|
|
12
12
|
scoped_resource :product_types
|
|
13
13
|
|
|
14
|
+
# The associations are a template for products created with this type:
|
|
15
|
+
# replace-sets that never change the products already carrying it.
|
|
16
|
+
request_params :product_type do |body|
|
|
17
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Hoodie'
|
|
18
|
+
body.attribute :delivery_profile_id, :id,
|
|
19
|
+
nullable: true,
|
|
20
|
+
example: 'fp_86Rf07xd4z',
|
|
21
|
+
description: 'Delivery profile stamped onto products created with this type. Null leaves new products on the store default profile.'
|
|
22
|
+
body.attribute :option_type_ids, :array, of: :id,
|
|
23
|
+
description: 'Option types seeded onto products that get this type. Use apply to products to backfill existing ones.'
|
|
24
|
+
body.attribute :category_ids, :array, of: :id,
|
|
25
|
+
description: 'Categories seeded onto products that get this type. Categories from other stores are ignored.'
|
|
26
|
+
body.attribute :custom_field_definitions, :array,
|
|
27
|
+
as: 'ProductTypeCustomFieldDefinitionParams',
|
|
28
|
+
description: 'The custom field definitions the product form shows. Definitions not listed are removed from the type.' do |custom_field_definition|
|
|
29
|
+
custom_field_definition.attribute :id, :id,
|
|
30
|
+
required: true,
|
|
31
|
+
example: 'cfdef_abc123',
|
|
32
|
+
description: 'The custom field definition.'
|
|
33
|
+
custom_field_definition.attribute :required, :boolean
|
|
34
|
+
custom_field_definition.attribute :sort_order, :integer
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
14
38
|
# Backfills this type's option types and categories onto the products
|
|
15
39
|
# that already carry it. Additive and idempotent — nothing is removed.
|
|
16
40
|
def apply_to_products
|
|
@@ -50,14 +74,7 @@ module Spree
|
|
|
50
74
|
end
|
|
51
75
|
|
|
52
76
|
def permitted_params
|
|
53
|
-
attrs = params.permit(
|
|
54
|
-
*model_additional_permitted_attributes,
|
|
55
|
-
:name,
|
|
56
|
-
:delivery_profile_id,
|
|
57
|
-
option_type_ids: [],
|
|
58
|
-
category_ids: [],
|
|
59
|
-
custom_field_definitions: [:id, :required, :sort_order]
|
|
60
|
-
)
|
|
77
|
+
attrs = params.permit(*permitted_attributes)
|
|
61
78
|
attrs = scope_delivery_profile(attrs)
|
|
62
79
|
scope_category_ids(attrs)
|
|
63
80
|
end
|
|
@@ -6,6 +6,32 @@ module Spree
|
|
|
6
6
|
class DigitalAssetsController < ResourceController
|
|
7
7
|
scoped_resource :products
|
|
8
8
|
|
|
9
|
+
request_params :digital_asset do |body|
|
|
10
|
+
# Names a blob rather than a column, so it is attached
|
|
11
|
+
# separately (+attach_uploaded_file+).
|
|
12
|
+
body.attribute :signed_id, :string,
|
|
13
|
+
permit: false,
|
|
14
|
+
description: "A `signed_id` from `files.upload()` with `visibility: 'private'`. Required for an uploaded file, omitted for a provider-backed asset. On update it replaces the file for everyone who already bought it."
|
|
15
|
+
# Resolved through the parent rather than assigned, so an asset
|
|
16
|
+
# can't be pointed at a variant of another product or store.
|
|
17
|
+
body.attribute :variant_id, :id,
|
|
18
|
+
permit: false,
|
|
19
|
+
description: "Defaults to the product's default variant when omitted."
|
|
20
|
+
# The model validates it names a registered provider.
|
|
21
|
+
body.attribute :provider_type, :string,
|
|
22
|
+
description: 'A provider shorthand from the providers endpoint. Omit for an uploaded file.'
|
|
23
|
+
# Its keys are declared by the provider, so it lands verbatim
|
|
24
|
+
# under one key in the asset's metadata.
|
|
25
|
+
body.attribute :provider_settings, :hash,
|
|
26
|
+
description: "Values for the provider's settings schema, keyed by field name."
|
|
27
|
+
body.attribute :authorized_clicks, :integer,
|
|
28
|
+
nullable: true,
|
|
29
|
+
description: "Null means the store's download settings apply."
|
|
30
|
+
body.attribute :authorized_days, :integer,
|
|
31
|
+
nullable: true,
|
|
32
|
+
description: "Null means the store's download settings apply."
|
|
33
|
+
end
|
|
34
|
+
|
|
9
35
|
# PATCH /api/v3/admin/products/:product_id/digital_assets/:id
|
|
10
36
|
#
|
|
11
37
|
# Replacing the file keeps every already-issued link working, since
|
|
@@ -45,7 +71,7 @@ module Spree
|
|
|
45
71
|
|
|
46
72
|
data = Spree.digital_asset_providers.map do |provider_class|
|
|
47
73
|
{
|
|
48
|
-
type: provider_class.
|
|
74
|
+
type: provider_class.api_type,
|
|
49
75
|
name: provider_class.provider_name,
|
|
50
76
|
requires_attachment: provider_class.requires_attachment?,
|
|
51
77
|
settings_schema: provider_class.settings_schema
|
|
@@ -70,10 +96,6 @@ module Spree
|
|
|
70
96
|
authorize!(:show, @parent)
|
|
71
97
|
end
|
|
72
98
|
|
|
73
|
-
def parent_association
|
|
74
|
-
:digital_assets
|
|
75
|
-
end
|
|
76
|
-
|
|
77
99
|
# The parent association reaches assets through `variants`, which
|
|
78
100
|
# carries an ORDER BY on the variants table. Combined with the
|
|
79
101
|
# collection's DISTINCT, PostgreSQL rejects the query outright
|
|
@@ -88,17 +110,8 @@ module Spree
|
|
|
88
110
|
[:variant, { attachment_attachment: :blob }]
|
|
89
111
|
end
|
|
90
112
|
|
|
91
|
-
# variant_id is resolved through the parent rather than assigned:
|
|
92
|
-
# mass-assigning it would let a caller point an asset at a variant
|
|
93
|
-
# of any product, in any store. signed_id likewise names a blob
|
|
94
|
-
# rather than a column, so it is attached separately.
|
|
95
|
-
# provider_type is mass-assignable: the model validates it names a
|
|
96
|
-
# registered provider, so an unknown value is a 422, not a hazard.
|
|
97
|
-
# provider_settings is an open hash — its keys are declared by the
|
|
98
|
-
# provider, not fixed here — so it is permitted as arbitrary scalars
|
|
99
|
-
# and lands verbatim under one key in the asset's metadata.
|
|
100
113
|
def permitted_params
|
|
101
|
-
params.permit(
|
|
114
|
+
params.permit(*declared_permitted_attributes)
|
|
102
115
|
end
|
|
103
116
|
|
|
104
117
|
private
|
|
@@ -138,7 +151,7 @@ module Spree
|
|
|
138
151
|
end
|
|
139
152
|
|
|
140
153
|
def render_private_storage_error
|
|
141
|
-
render_validation_error(
|
|
154
|
+
render_validation_error(I18n.t('spree.digital_assets_attachment_must_be_private'))
|
|
142
155
|
end
|
|
143
156
|
end
|
|
144
157
|
end
|
|
@@ -6,6 +6,14 @@ module Spree
|
|
|
6
6
|
class VariantsController < ResourceController
|
|
7
7
|
scoped_resource :products
|
|
8
8
|
|
|
9
|
+
request_params :variant do |body|
|
|
10
|
+
body.external_references
|
|
11
|
+
body.include_attributes Spree::Api::V3::VariantRequestSchema
|
|
12
|
+
body.attribute :options, :array, of: Spree::Api::V3::VariantOptionRequestSchema,
|
|
13
|
+
required: true, on: :create,
|
|
14
|
+
description: 'One pair per option type the variant takes part in (size, color). Option types and values are created when missing. On update, omit to leave the option values untouched.'
|
|
15
|
+
end
|
|
16
|
+
|
|
9
17
|
protected
|
|
10
18
|
|
|
11
19
|
def model_class
|
|
@@ -21,10 +29,6 @@ module Spree
|
|
|
21
29
|
authorize!(:show, @parent)
|
|
22
30
|
end
|
|
23
31
|
|
|
24
|
-
def parent_association
|
|
25
|
-
:variants
|
|
26
|
-
end
|
|
27
|
-
|
|
28
32
|
def scope_includes
|
|
29
33
|
[:prices, stock_levels: :stock_location]
|
|
30
34
|
end
|
|
@@ -46,20 +50,7 @@ module Spree
|
|
|
46
50
|
end
|
|
47
51
|
|
|
48
52
|
def permitted_params
|
|
49
|
-
params.permit(
|
|
50
|
-
*model_additional_permitted_attributes,
|
|
51
|
-
:sku, :barcode,
|
|
52
|
-
:cost_price, :cost_currency,
|
|
53
|
-
:weight, :height, :width, :depth, :weight_unit, :dimensions_unit,
|
|
54
|
-
:hs_code, :country_of_origin, :customs_description,
|
|
55
|
-
:minimum_order_quantity, :order_multiple, :purchase_unit, :units_per_carton,
|
|
56
|
-
:carton_package_type_id, :carton_weight, :cartons_per_pallet,
|
|
57
|
-
:seller_id, :delivery_profile_id,
|
|
58
|
-
:track_inventory, :preorderable, :preorder_ships_at, :backorder_limit, :tax_category_id, :position,
|
|
59
|
-
options: [:name, :value],
|
|
60
|
-
prices: [:amount, :compare_at_amount, :currency],
|
|
61
|
-
stock_levels: [:stock_location_id, :count_on_hand, :backorderable]
|
|
62
|
-
)
|
|
53
|
+
params.permit(*permitted_attributes)
|
|
63
54
|
end
|
|
64
55
|
end
|
|
65
56
|
end
|