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
|
@@ -5,6 +5,27 @@ module Spree
|
|
|
5
5
|
class MediaController < ResourceController
|
|
6
6
|
scoped_resource :products
|
|
7
7
|
|
|
8
|
+
# The media file, a URL to fetch one from, and the library row to copy
|
|
9
|
+
# are transport, not attributes (+media_attributes+ drops them).
|
|
10
|
+
request_params :media do |body|
|
|
11
|
+
body.external_references
|
|
12
|
+
body.include_attributes Spree::Api::V3::MediaRequestSchema
|
|
13
|
+
body.attribute :attachment, :string,
|
|
14
|
+
description: 'The file itself, sent as multipart form data. JSON clients upload first and send `signed_id`.'
|
|
15
|
+
# How the file arrives, so creating only: an update keeps its file.
|
|
16
|
+
body.attribute :url, :string,
|
|
17
|
+
only: :create,
|
|
18
|
+
description: 'Fetch an image from this URL, in the background. Images only: an external video uses `external_video_url`.'
|
|
19
|
+
body.attribute :signed_id, :string,
|
|
20
|
+
only: :create,
|
|
21
|
+
description: 'A `signed_id` from `files.upload()` for the media file itself.'
|
|
22
|
+
body.attribute :source_media_id, :id,
|
|
23
|
+
only: :create,
|
|
24
|
+
description: 'Place a file that is already in the library. The new row shares the source file rather than copying it, and takes its own alt, position and variant links from here.'
|
|
25
|
+
body.attribute :variant_ids, :array, of: :id,
|
|
26
|
+
description: 'Variants to link this product-level media to. Variants of other products are dropped.'
|
|
27
|
+
end
|
|
28
|
+
|
|
8
29
|
def create
|
|
9
30
|
# An external video has no file, so it takes the plain create path
|
|
10
31
|
# even though a URL is present — `url` means "fetch this image from
|
|
@@ -91,16 +112,8 @@ module Spree
|
|
|
91
112
|
permitted_params.except(:attachment, :url, :signed_id, :source_media_id)
|
|
92
113
|
end
|
|
93
114
|
|
|
94
|
-
# The media file, a URL to fetch one from, and the library row to copy
|
|
95
|
-
# are transport, not attributes — everything a client can set lives on
|
|
96
|
-
# the model.
|
|
97
115
|
def permitted_params
|
|
98
|
-
params.permit(
|
|
99
|
-
*model_additional_permitted_attributes,
|
|
100
|
-
*Spree::Media::WRITABLE_ATTRIBUTES,
|
|
101
|
-
:attachment, :url, :signed_id, :source_media_id,
|
|
102
|
-
variant_ids: []
|
|
103
|
-
)
|
|
116
|
+
params.permit(*permitted_attributes)
|
|
104
117
|
end
|
|
105
118
|
|
|
106
119
|
def external_video_request?
|
|
@@ -19,6 +19,10 @@ module Spree
|
|
|
19
19
|
# `products` — those are one product's own media, reached through a
|
|
20
20
|
# product the caller can already see.
|
|
21
21
|
scoped_resource :media
|
|
22
|
+
|
|
23
|
+
request_params :media_library do |body|
|
|
24
|
+
body.include_attributes MediaController.request_params_schema
|
|
25
|
+
end
|
|
22
26
|
# Restates the base class's member actions with `usage` added — a
|
|
23
27
|
# second `before_action :set_resource` would replace that filter
|
|
24
28
|
# rather than extend it, leaving show/update/destroy without a record.
|
|
@@ -39,8 +43,8 @@ module Spree
|
|
|
39
43
|
unless detach_requested?
|
|
40
44
|
return render_error(
|
|
41
45
|
code: ERROR_CODES[:resource_invalid],
|
|
42
|
-
message:
|
|
43
|
-
'api.errors.media_in_use',
|
|
46
|
+
message: I18n.t(
|
|
47
|
+
'spree.api.errors.media_in_use',
|
|
44
48
|
places: references.filter_map(&:name).uniq.first(5).to_sentence
|
|
45
49
|
),
|
|
46
50
|
status: :unprocessable_content,
|
|
@@ -55,7 +59,7 @@ module Spree
|
|
|
55
59
|
# render_service_error would produce an empty message.
|
|
56
60
|
render_error(
|
|
57
61
|
code: ERROR_CODES[:processing_error],
|
|
58
|
-
message:
|
|
62
|
+
message: I18n.t('spree.api.errors.media_not_deleted'),
|
|
59
63
|
status: :unprocessable_content
|
|
60
64
|
)
|
|
61
65
|
end
|
|
@@ -79,7 +83,7 @@ module Spree
|
|
|
79
83
|
{
|
|
80
84
|
kind: reference.kind,
|
|
81
85
|
name: reference.name,
|
|
82
|
-
owner_type: reference.owner_type,
|
|
86
|
+
owner_type: Spree::Base.polymorphic_api_type(reference.owner_type),
|
|
83
87
|
owner_id: reference.owner_id,
|
|
84
88
|
field: reference.field
|
|
85
89
|
}
|
|
@@ -145,7 +149,7 @@ module Spree
|
|
|
145
149
|
def create_from_url
|
|
146
150
|
render_error(
|
|
147
151
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:resource_invalid],
|
|
148
|
-
message:
|
|
152
|
+
message: I18n.t('spree.api.errors.media_url_import_requires_product'),
|
|
149
153
|
status: :unprocessable_content
|
|
150
154
|
)
|
|
151
155
|
end
|
|
@@ -5,6 +5,29 @@ module Spree
|
|
|
5
5
|
class OptionTypesController < ResourceController
|
|
6
6
|
scoped_resource :products
|
|
7
7
|
|
|
8
|
+
request_params :option_type do |body|
|
|
9
|
+
body.attribute :name, :string, required: true, on: :create, example: 'color'
|
|
10
|
+
body.attribute :label, :string, required: true, on: :create, example: 'Color'
|
|
11
|
+
body.attribute :position, :integer
|
|
12
|
+
body.attribute :filterable, :boolean
|
|
13
|
+
body.attribute :kind, :string, choices: Spree::OptionType::KINDS
|
|
14
|
+
body.attribute :option_values, :array,
|
|
15
|
+
as: 'OptionValueParams',
|
|
16
|
+
description: 'Inline option values. Values left out of the list on update are destroyed, so send the full set every time.' do |option_value|
|
|
17
|
+
option_value.attribute :id, :id, description: 'Present for existing values. Omit to create a new one.'
|
|
18
|
+
option_value.attribute :name, :string, example: 'red'
|
|
19
|
+
option_value.attribute :label, :string, example: 'Red'
|
|
20
|
+
option_value.attribute :position, :integer
|
|
21
|
+
option_value.attribute :color_code, :string,
|
|
22
|
+
nullable: true,
|
|
23
|
+
example: '#FF0000',
|
|
24
|
+
description: "Hex color. Only meaningful when the option type's `kind` is `color_swatch`."
|
|
25
|
+
option_value.attribute :image_signed_id, :string,
|
|
26
|
+
nullable: true,
|
|
27
|
+
description: 'A `signed_id` from `files.upload()`, or null to remove the image.'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
8
31
|
protected
|
|
9
32
|
|
|
10
33
|
def model_class
|
|
@@ -20,13 +43,7 @@ module Spree
|
|
|
20
43
|
end
|
|
21
44
|
|
|
22
45
|
def permitted_params
|
|
23
|
-
params.permit(
|
|
24
|
-
*model_additional_permitted_attributes,
|
|
25
|
-
:name, :label, :position, :filterable, :kind,
|
|
26
|
-
option_values: [
|
|
27
|
-
:id, :name, :label, :position, :color_code, :image
|
|
28
|
-
]
|
|
29
|
-
)
|
|
46
|
+
params.permit(*permitted_attributes)
|
|
30
47
|
end
|
|
31
48
|
end
|
|
32
49
|
end
|
|
@@ -5,6 +5,10 @@ module Spree
|
|
|
5
5
|
class OrderCancellationReasonsController < ResourceController
|
|
6
6
|
scoped_resource :settings
|
|
7
7
|
|
|
8
|
+
request_params :reason do |body|
|
|
9
|
+
body.include_attributes Spree::Api::V3::Admin::ReasonRequestSchema
|
|
10
|
+
end
|
|
11
|
+
|
|
8
12
|
protected
|
|
9
13
|
|
|
10
14
|
def model_class
|
|
@@ -16,7 +20,7 @@ module Spree
|
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
def permitted_params
|
|
19
|
-
params.permit(*
|
|
23
|
+
params.permit(*permitted_attributes)
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
26
|
end
|
|
@@ -13,6 +13,18 @@ module Spree
|
|
|
13
13
|
subclassed_via -> { Spree.order_routing.rules },
|
|
14
14
|
unknown_type_error: 'unknown_order_routing_rule_type'
|
|
15
15
|
|
|
16
|
+
request_params :order_routing_rule do |body|
|
|
17
|
+
body.attribute :type, :string,
|
|
18
|
+
required: true,
|
|
19
|
+
only: :create,
|
|
20
|
+
example: 'preferred_location',
|
|
21
|
+
description: 'Wire shorthand for the rule kind, from the order routing rule types endpoint.'
|
|
22
|
+
body.attribute :active, :boolean
|
|
23
|
+
body.attribute :position, :integer,
|
|
24
|
+
description: "1-based priority in the channel's rule list. Omitted on create, the rule goes last; a new position reorders the rest of the list around it."
|
|
25
|
+
body.attribute :preferences, :hash, description: "Values for the rule kind's preference schema."
|
|
26
|
+
end
|
|
27
|
+
|
|
16
28
|
def types
|
|
17
29
|
authorize! :read, model_class
|
|
18
30
|
|
|
@@ -30,7 +42,7 @@ module Spree
|
|
|
30
42
|
end
|
|
31
43
|
|
|
32
44
|
def permitted_params
|
|
33
|
-
params.permit(*
|
|
45
|
+
params.permit(*permitted_attributes)
|
|
34
46
|
end
|
|
35
47
|
|
|
36
48
|
# `types` is read-only discovery — maps to the read scope + :show ability.
|
|
@@ -49,10 +61,6 @@ module Spree
|
|
|
49
61
|
.find_by_prefix_id!(params[:channel_id])
|
|
50
62
|
end
|
|
51
63
|
|
|
52
|
-
def parent_association
|
|
53
|
-
:order_routing_rules
|
|
54
|
-
end
|
|
55
|
-
|
|
56
64
|
private
|
|
57
65
|
|
|
58
66
|
def build_subclassed_resource(klass, attrs)
|
|
@@ -12,6 +12,44 @@ module Spree
|
|
|
12
12
|
# would name a key no catalog knows.
|
|
13
13
|
scoped_resource :orders
|
|
14
14
|
|
|
15
|
+
request_params :claim do |body|
|
|
16
|
+
body.attribute :items, :array,
|
|
17
|
+
required: true, on: :create,
|
|
18
|
+
only: :create,
|
|
19
|
+
description: 'Affected items, and how each should be made right.' do |item|
|
|
20
|
+
item.attribute :line_item_id, :id, required: true
|
|
21
|
+
item.attribute :quantity, :integer, required: true
|
|
22
|
+
item.attribute :description, :string
|
|
23
|
+
item.attribute :send_replacement, :boolean
|
|
24
|
+
item.attribute :replacement_variant_id, :id, description: 'Defaults to the variant that was bought.'
|
|
25
|
+
item.attribute :refund_amount, :decimal
|
|
26
|
+
end
|
|
27
|
+
body.attribute :reason_id, :id, description: "One of the store's claim reasons."
|
|
28
|
+
body.attribute :memo, :string
|
|
29
|
+
body.attribute :metadata, :hash, only: :update
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
request_params 'ClaimResolveParams', action: :resolve do |body|
|
|
33
|
+
body.attribute :resolution, :string,
|
|
34
|
+
required: true,
|
|
35
|
+
choices: Spree::Claim::RESOLUTIONS,
|
|
36
|
+
description: 'Money back, a replacement shipment, or both.'
|
|
37
|
+
body.attribute :refund_method, :string,
|
|
38
|
+
choices: Spree::RefundMethods::METHODS,
|
|
39
|
+
description: 'Defaults to `store_credit`.'
|
|
40
|
+
body.attribute :amount, :decimal, description: 'Defaults to the claim total.'
|
|
41
|
+
body.attribute :replacement_line_item_ids, :array, of: :id,
|
|
42
|
+
description: 'Which claim lines to send a replacement for. Omit to keep what the claim was opened with.'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
request_params 'ClaimDenyParams', action: :deny do |body|
|
|
46
|
+
body.attribute :reason, :string, description: 'Recorded on the claim for the customer.'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
request_params 'ClaimCancelParams', action: :cancel do |body|
|
|
50
|
+
body.attribute :reason, :string, description: 'A note on why the claim was canceled.'
|
|
51
|
+
end
|
|
52
|
+
|
|
15
53
|
before_action :set_resource, only: [:show, :update, :approve, :resolve, :deny, :cancel]
|
|
16
54
|
|
|
17
55
|
# PATCH /api/v3/admin/orders/:order_id/claims/:id
|
|
@@ -36,7 +74,7 @@ module Spree
|
|
|
36
74
|
end
|
|
37
75
|
|
|
38
76
|
def permitted_params
|
|
39
|
-
params.permit(
|
|
77
|
+
params.permit(*permitted_attributes)
|
|
40
78
|
end
|
|
41
79
|
|
|
42
80
|
private
|
|
@@ -13,6 +13,24 @@ module Spree
|
|
|
13
13
|
class DeliveriesController < BaseController
|
|
14
14
|
include Spree::Api::V3::Orders::DeliveryActions
|
|
15
15
|
|
|
16
|
+
# The permit list itself lives in DeliveryActions, shared with the
|
|
17
|
+
# seller branch; this declaration documents it.
|
|
18
|
+
request_params :delivery do |body|
|
|
19
|
+
body.attribute :tracking_number, :string,
|
|
20
|
+
required: true, on: :create,
|
|
21
|
+
description: 'A carrier tracking number, a freight PRO or container number, or a full tracking link. A corrected number resets the carrier status to `pending`.'
|
|
22
|
+
body.attribute :carrier, :string,
|
|
23
|
+
description: "Free text; detected from the number's format when omitted."
|
|
24
|
+
body.attribute :service, :string
|
|
25
|
+
body.attribute :tracking_url, :string
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
request_params 'DeliveryMarkDeliveredParams', action: :mark_delivered do |body|
|
|
29
|
+
body.attribute :delivered_at, :datetime, description: 'When it arrived. Defaults to now.'
|
|
30
|
+
body.attribute :notify_customer, :boolean,
|
|
31
|
+
description: 'Whether the customer gets a delivery notification once the parcel completes. Defaults to true.'
|
|
32
|
+
end
|
|
33
|
+
|
|
16
34
|
before_action :set_resource, only: [:show, :update, :destroy, :mark_delivered]
|
|
17
35
|
|
|
18
36
|
# PATCH .../deliveries/:id/mark_delivered — staff saying this one
|
|
@@ -27,11 +45,7 @@ module Spree
|
|
|
27
45
|
notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
|
|
28
46
|
)
|
|
29
47
|
|
|
30
|
-
|
|
31
|
-
render json: serialize_resource(result.value)
|
|
32
|
-
else
|
|
33
|
-
render_result_error(result)
|
|
34
|
-
end
|
|
48
|
+
render_result(result)
|
|
35
49
|
end
|
|
36
50
|
end
|
|
37
51
|
|
|
@@ -51,7 +65,7 @@ module Spree
|
|
|
51
65
|
private
|
|
52
66
|
|
|
53
67
|
def mark_delivered_params
|
|
54
|
-
@mark_delivered_params ||= params.permit(
|
|
68
|
+
@mark_delivered_params ||= params.permit(*declared_permitted_attributes)
|
|
55
69
|
end
|
|
56
70
|
|
|
57
71
|
# Only an explicit false suppresses the email.
|
|
@@ -10,6 +10,10 @@ module Spree
|
|
|
10
10
|
# orders are frozen; their discounts change only through manual rows
|
|
11
11
|
# (see DiscountsController).
|
|
12
12
|
class DiscountCodesController < BaseController
|
|
13
|
+
request_params 'DiscountCodeApplyParams' do |body|
|
|
14
|
+
body.attribute :code, :string, required: true
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
skip_before_action :set_resource, raise: false
|
|
14
18
|
|
|
15
19
|
# POST /api/v3/admin/orders/:order_id/discount_codes
|
|
@@ -70,13 +74,13 @@ module Spree
|
|
|
70
74
|
def render_completed_order_error
|
|
71
75
|
render_error(
|
|
72
76
|
code: ERROR_CODES[:discount_not_editable],
|
|
73
|
-
message:
|
|
77
|
+
message: I18n.t('spree.errors.messages.coupon_code_frozen_after_completion'),
|
|
74
78
|
status: :unprocessable_content
|
|
75
79
|
)
|
|
76
80
|
end
|
|
77
81
|
|
|
78
82
|
def permitted_params
|
|
79
|
-
params.permit(
|
|
83
|
+
params.permit(*declared_permitted_attributes)
|
|
80
84
|
end
|
|
81
85
|
end
|
|
82
86
|
end
|
|
@@ -11,23 +11,47 @@ module Spree
|
|
|
11
11
|
class DiscountsController < BaseController
|
|
12
12
|
scoped_resource :orders
|
|
13
13
|
|
|
14
|
+
request_params :discount do |body|
|
|
15
|
+
body.attribute :label, :string, required: true, on: :create, example: 'Customer appeasement'
|
|
16
|
+
body.attribute :value, :decimal,
|
|
17
|
+
required: true, on: :create,
|
|
18
|
+
only: :create,
|
|
19
|
+
example: '10.00',
|
|
20
|
+
description: 'An amount in the order currency for a `flat` discount, or a percentage for a `percent` one.'
|
|
21
|
+
body.attribute :amount, :decimal,
|
|
22
|
+
only: :update,
|
|
23
|
+
description: 'The new amount of the row, in the order currency.'
|
|
24
|
+
body.attribute :value_type, :string,
|
|
25
|
+
only: :create,
|
|
26
|
+
choices: %w[flat percent],
|
|
27
|
+
description: 'Defaults to `flat`.'
|
|
28
|
+
body.attribute :line_item_id, :id,
|
|
29
|
+
only: :create,
|
|
30
|
+
nullable: true,
|
|
31
|
+
description: 'The line item the discount applies to. Omitted, the value is distributed across the line items.'
|
|
32
|
+
end
|
|
33
|
+
|
|
14
34
|
# POST /api/v3/admin/orders/:order_id/discounts
|
|
15
35
|
def create
|
|
16
36
|
with_order_lock do
|
|
17
37
|
line_item = @parent.line_items.find_by_prefix_id!(params[:line_item_id]) if params[:line_item_id].present?
|
|
18
38
|
|
|
39
|
+
value_type = params[:value_type].presence || 'flat'
|
|
40
|
+
# A flat discount is money in the order's currency; a percentage is a rate.
|
|
41
|
+
value = value_type == 'percent' ? decimal_param(:value) : money_param(:value, @parent.currency)
|
|
42
|
+
|
|
19
43
|
result = Spree.order_discount_create_service.call(
|
|
20
44
|
order: @parent,
|
|
21
45
|
label: params[:label],
|
|
22
|
-
value:
|
|
23
|
-
value_type:
|
|
46
|
+
value: value,
|
|
47
|
+
value_type: value_type,
|
|
24
48
|
line_item: line_item
|
|
25
49
|
)
|
|
26
50
|
|
|
27
51
|
if result.success?
|
|
28
52
|
render json: { data: serialize_collection(result.value) }, status: :created
|
|
29
53
|
else
|
|
30
|
-
render_error(code: ERROR_CODES[:validation_error], message: result.error.to_s, status: :
|
|
54
|
+
render_error(code: ERROR_CODES[:validation_error], message: result.error.to_s, status: :unprocessable_content)
|
|
31
55
|
end
|
|
32
56
|
end
|
|
33
57
|
end
|
|
@@ -75,7 +99,7 @@ module Spree
|
|
|
75
99
|
end
|
|
76
100
|
|
|
77
101
|
def permitted_params
|
|
78
|
-
params.permit(
|
|
102
|
+
params.permit(*permitted_attributes)
|
|
79
103
|
end
|
|
80
104
|
|
|
81
105
|
def collection_includes
|
|
@@ -87,8 +111,8 @@ module Spree
|
|
|
87
111
|
def render_promotion_row_error
|
|
88
112
|
render_error(
|
|
89
113
|
code: ERROR_CODES[:discount_not_editable],
|
|
90
|
-
message:
|
|
91
|
-
status: :
|
|
114
|
+
message: I18n.t('spree.errors.messages.promotion_discount_not_editable'),
|
|
115
|
+
status: :unprocessable_content
|
|
92
116
|
)
|
|
93
117
|
end
|
|
94
118
|
end
|
|
@@ -13,6 +13,41 @@ module Spree
|
|
|
13
13
|
# would name a key no catalog knows.
|
|
14
14
|
scoped_resource :orders
|
|
15
15
|
|
|
16
|
+
request_params :exchange do |body|
|
|
17
|
+
body.attribute :items, :array,
|
|
18
|
+
required: true, on: :create,
|
|
19
|
+
only: :create,
|
|
20
|
+
description: 'Items coming back, and what goes out in their place.' do |item|
|
|
21
|
+
item.attribute :fulfillment_item_id, :id, required: true
|
|
22
|
+
item.attribute :new_variant_id, :id, required: true
|
|
23
|
+
item.attribute :quantity, :integer, required: true
|
|
24
|
+
end
|
|
25
|
+
body.attribute :stock_location_id, :id, description: 'Where the goods come back to.'
|
|
26
|
+
body.attribute :reason_id, :id, description: "One of the store's return reasons."
|
|
27
|
+
body.attribute :memo, :string
|
|
28
|
+
body.attribute :metadata, :hash, only: :update
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
request_params 'ExchangeReceiveParams', action: :receive do |body|
|
|
32
|
+
body.attribute :items, :array,
|
|
33
|
+
description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
|
|
34
|
+
item.attribute :exchange_line_item_id, :id, required: true
|
|
35
|
+
item.attribute :quantity, :integer, required: true
|
|
36
|
+
item.attribute :resellable, :boolean,
|
|
37
|
+
description: 'Goods that cannot be resold are received but never restocked. Defaults to true.'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
request_params 'ExchangeFulfillParams', action: :fulfill do |body|
|
|
42
|
+
body.attribute :refund_method, :string,
|
|
43
|
+
choices: Spree::RefundMethods::METHODS,
|
|
44
|
+
description: 'How a credit is returned when the replacements cost less than what came back. Defaults to `store_credit`. A balance the customer owes is left for the merchant to collect.'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
request_params 'ExchangeCancelParams', action: :cancel do |body|
|
|
48
|
+
body.attribute :reason, :string, description: 'A note on why the exchange was canceled.'
|
|
49
|
+
end
|
|
50
|
+
|
|
16
51
|
before_action :set_resource, only: [:show, :update, :approve, :receive, :fulfill, :cancel]
|
|
17
52
|
|
|
18
53
|
# PATCH /api/v3/admin/orders/:order_id/exchanges/:id
|
|
@@ -37,7 +72,7 @@ module Spree
|
|
|
37
72
|
end
|
|
38
73
|
|
|
39
74
|
def permitted_params
|
|
40
|
-
params.permit(
|
|
75
|
+
params.permit(*permitted_attributes)
|
|
41
76
|
end
|
|
42
77
|
|
|
43
78
|
private
|
|
@@ -11,6 +11,27 @@ module Spree
|
|
|
11
11
|
class FeesController < BaseController
|
|
12
12
|
scoped_resource :orders
|
|
13
13
|
|
|
14
|
+
request_params :fee do |body|
|
|
15
|
+
body.attribute :label, :string, required: true, on: :create, example: 'Gift wrap'
|
|
16
|
+
body.attribute :amount, :decimal, required: true, on: :create, example: '4.00'
|
|
17
|
+
body.attribute :kind, :string,
|
|
18
|
+
choices: Spree::Fee::KINDS,
|
|
19
|
+
open: true,
|
|
20
|
+
example: 'gift_wrap',
|
|
21
|
+
description: 'Defaults to `surcharge`.'
|
|
22
|
+
# Resolved through the order by the controller, never assigned.
|
|
23
|
+
body.attribute :line_item_id, :id,
|
|
24
|
+
only: :create,
|
|
25
|
+
nullable: true,
|
|
26
|
+
permit: false,
|
|
27
|
+
description: 'The line item or fulfillment the fee belongs to. Omitted, the fee is order-level.'
|
|
28
|
+
body.attribute :fulfillment_id, :id,
|
|
29
|
+
only: :create,
|
|
30
|
+
nullable: true,
|
|
31
|
+
permit: false,
|
|
32
|
+
description: 'The line item or fulfillment the fee belongs to. Omitted, the fee is order-level.'
|
|
33
|
+
end
|
|
34
|
+
|
|
14
35
|
# POST /api/v3/admin/orders/:order_id/fees
|
|
15
36
|
def create
|
|
16
37
|
with_order_lock do
|
|
@@ -60,7 +81,7 @@ module Spree
|
|
|
60
81
|
end
|
|
61
82
|
|
|
62
83
|
def permitted_params
|
|
63
|
-
params.permit(
|
|
84
|
+
params.permit(*permitted_attributes)
|
|
64
85
|
end
|
|
65
86
|
|
|
66
87
|
def collection_includes
|
|
@@ -14,6 +14,69 @@ module Spree
|
|
|
14
14
|
|
|
15
15
|
scoped_resource :fulfillments
|
|
16
16
|
|
|
17
|
+
request_params :fulfillment do |body|
|
|
18
|
+
body.attribute :stock_location_id, :id,
|
|
19
|
+
required: true, on: :create,
|
|
20
|
+
description: "The location the fulfillment ships from. On update, moving it re-prices the fulfillment against that location's rates."
|
|
21
|
+
body.attribute :source_fulfillment_id, :id,
|
|
22
|
+
only: :create,
|
|
23
|
+
description: "The only fulfillment of this order to move units from, its exchange and claim replacements included: how a canceled replacement is sent again. Omitted, the customer's bought units are taken from every unshipped fulfillment."
|
|
24
|
+
body.attribute :tracking, :string,
|
|
25
|
+
description: 'Carrier tracking number, or a full `https://` tracking link, which is served back as `tracking_url` unchanged.'
|
|
26
|
+
body.attribute :tracking_carrier, :string,
|
|
27
|
+
only: :update,
|
|
28
|
+
description: "Which carrier the tracking number belongs to: a slug from the tracking carriers endpoint. Left blank, it is detected from the number's format where possible."
|
|
29
|
+
body.attribute :selected_delivery_rate_id, :id, only: :update
|
|
30
|
+
body.attribute :delivery_method_id, :id,
|
|
31
|
+
only: :create,
|
|
32
|
+
description: 'Delivery method attached as the selected rate. Defaults to the delivery method of the fully drained source fulfillments.'
|
|
33
|
+
body.attribute :cost, :decimal,
|
|
34
|
+
only: :create,
|
|
35
|
+
example: '7.42',
|
|
36
|
+
description: 'Explicit shipping cost, such as the 3PL price. Defaults to the summed cost of the fully drained source fulfillments, which keeps the order total unchanged. Persists only with `status: shipped`; pending fulfillments are re-priced by the rate engine.'
|
|
37
|
+
body.attribute :status, :string,
|
|
38
|
+
only: :create,
|
|
39
|
+
choices: %w[shipped],
|
|
40
|
+
description: 'Pass `shipped` to register an already-shipped external fulfillment.'
|
|
41
|
+
body.attribute :metadata, :hash, only: :create
|
|
42
|
+
body.attribute :items, :array,
|
|
43
|
+
only: :create,
|
|
44
|
+
description: 'Line item quantities to fulfill. Omit to fulfill every unit not yet shipped.' do |item|
|
|
45
|
+
item.attribute :item_id, :id, required: true
|
|
46
|
+
item.attribute :quantity, :integer, required: true
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
request_params 'FulfillmentFulfillParams', action: :fulfill do |body|
|
|
51
|
+
body.attribute :items, :array,
|
|
52
|
+
description: 'Line item quantities to ship. Omit to ship everything the fulfillment holds; a subset is split onto a new fulfillment, which is the one that ships.' do |item|
|
|
53
|
+
item.attribute :item_id, :id, required: true
|
|
54
|
+
item.attribute :quantity, :integer, required: true
|
|
55
|
+
end
|
|
56
|
+
body.attribute :tracking, :string,
|
|
57
|
+
description: 'Carrier tracking number or a full `https://` tracking link, stored on the fulfillment that ships.'
|
|
58
|
+
body.attribute :tracking_carrier, :string,
|
|
59
|
+
description: 'Which carrier the number belongs to; detected from the number when omitted.'
|
|
60
|
+
body.attribute :notify_customer, :boolean,
|
|
61
|
+
description: 'Whether the customer gets the shipment email. Defaults to true; pass false to suppress it for this dispatch only.'
|
|
62
|
+
body.attribute :force, :boolean,
|
|
63
|
+
description: 'Hand the goods over even though the order is unpaid or holds backordered units.'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
request_params 'FulfillmentMarkDeliveredParams', action: :mark_delivered do |body|
|
|
67
|
+
body.attribute :delivered_at, :datetime,
|
|
68
|
+
description: 'When it arrived. Defaults to now; return windows run from this time.'
|
|
69
|
+
body.attribute :notify_customer, :boolean,
|
|
70
|
+
description: 'Whether the customer gets a delivery notification. Defaults to true.'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
request_params 'FulfillmentSplitParams', action: :split do |body|
|
|
74
|
+
body.attribute :variant_id, :id, required: true, description: 'The variant being moved out.'
|
|
75
|
+
body.attribute :quantity, :integer, required: true
|
|
76
|
+
body.attribute :stock_location_id, :id,
|
|
77
|
+
description: "Origin of the new fulfillment. Defaults to the source fulfillment's location."
|
|
78
|
+
end
|
|
79
|
+
|
|
17
80
|
before_action :set_resource, only: [:show, :update, :fulfill, :mark_delivered, :cancel, :split]
|
|
18
81
|
|
|
19
82
|
# POST /api/v3/admin/orders/:order_id/fulfillments
|
|
@@ -21,17 +84,21 @@ module Spree
|
|
|
21
84
|
# Manually registers a fulfillment on a completed order (external
|
|
22
85
|
# carrier / 3PL sync), bypassing order routing. Moves the requested
|
|
23
86
|
# line item quantities out of their routed fulfillments; when
|
|
24
|
-
# `items` is omitted, everything not yet shipped is moved.
|
|
25
|
-
#
|
|
26
|
-
#
|
|
87
|
+
# `items` is omitted, everything not yet shipped is moved. Exchange
|
|
88
|
+
# and claim replacements are moved only out of a named
|
|
89
|
+
# `source_fulfillment_id`, which is how a canceled replacement is
|
|
90
|
+
# sent again. An explicit `cost` persists only with
|
|
91
|
+
# `status: 'shipped'` — pending fulfillments are re-priced by the
|
|
92
|
+
# rate engine.
|
|
27
93
|
def create
|
|
28
|
-
authorize!(:create, Spree::
|
|
94
|
+
authorize!(:create, Spree::Fulfillment)
|
|
29
95
|
|
|
30
96
|
with_order_lock do
|
|
31
97
|
result = Spree.fulfillment_create_workflow.call(
|
|
32
98
|
order: @order,
|
|
33
99
|
stock_location: stock_location_for_create,
|
|
34
100
|
items: items_for_create,
|
|
101
|
+
source_fulfillment: source_fulfillment_for_create,
|
|
35
102
|
tracking: create_params[:tracking],
|
|
36
103
|
delivery_method: delivery_method_for_create,
|
|
37
104
|
cost: create_params[:cost],
|
|
@@ -39,11 +106,7 @@ module Spree
|
|
|
39
106
|
metadata: create_params[:metadata]&.to_h
|
|
40
107
|
)
|
|
41
108
|
|
|
42
|
-
|
|
43
|
-
render json: serialize_resource(result.value), status: :created
|
|
44
|
-
else
|
|
45
|
-
render_result_error(result)
|
|
46
|
-
end
|
|
109
|
+
render_result(result, status: :created)
|
|
47
110
|
end
|
|
48
111
|
end
|
|
49
112
|
|
|
@@ -59,11 +122,7 @@ module Spree
|
|
|
59
122
|
notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
|
|
60
123
|
)
|
|
61
124
|
|
|
62
|
-
|
|
63
|
-
render json: serialize_resource(result.value)
|
|
64
|
-
else
|
|
65
|
-
render_result_error(result)
|
|
66
|
-
end
|
|
125
|
+
render_result(result)
|
|
67
126
|
end
|
|
68
127
|
end
|
|
69
128
|
|
|
@@ -78,16 +137,12 @@ module Spree
|
|
|
78
137
|
end
|
|
79
138
|
|
|
80
139
|
def permitted_params
|
|
81
|
-
params.permit(
|
|
140
|
+
params.permit(*permitted_attributes)
|
|
82
141
|
end
|
|
83
142
|
|
|
84
143
|
private
|
|
85
144
|
|
|
86
145
|
# Forcing past a stock or payment guard is the operator's call.
|
|
87
|
-
def fulfill_permitted_keys
|
|
88
|
-
super + [:force]
|
|
89
|
-
end
|
|
90
|
-
|
|
91
146
|
def fulfill_workflow_options
|
|
92
147
|
{ force: fulfill_params[:force].to_b }
|
|
93
148
|
end
|
|
@@ -105,11 +160,11 @@ module Spree
|
|
|
105
160
|
end
|
|
106
161
|
|
|
107
162
|
def create_params
|
|
108
|
-
@create_params ||= params.permit(
|
|
163
|
+
@create_params ||= params.permit(*declared_permitted_attributes)
|
|
109
164
|
end
|
|
110
165
|
|
|
111
166
|
def mark_delivered_params
|
|
112
|
-
@mark_delivered_params ||= params.permit(
|
|
167
|
+
@mark_delivered_params ||= params.permit(*declared_permitted_attributes)
|
|
113
168
|
end
|
|
114
169
|
|
|
115
170
|
def find_stock_location!(id)
|
|
@@ -123,7 +178,13 @@ module Spree
|
|
|
123
178
|
def delivery_method_for_create
|
|
124
179
|
return if create_params[:delivery_method_id].blank?
|
|
125
180
|
|
|
126
|
-
Spree::
|
|
181
|
+
Spree::DeliveryMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def source_fulfillment_for_create
|
|
185
|
+
return if create_params[:source_fulfillment_id].blank?
|
|
186
|
+
|
|
187
|
+
@order.fulfillments.find_by_prefix_id!(create_params[:source_fulfillment_id])
|
|
127
188
|
end
|
|
128
189
|
|
|
129
190
|
def items_for_create
|